{"version":3,"sources":["webpack://QuickQuote/webpack/bootstrap","webpack://QuickQuote/./src/store.js","webpack://QuickQuote/./src/config.js","webpack://QuickQuote/./src/misc/helpers.js","webpack://QuickQuote/./src/actions/actionFunctions.js","webpack://QuickQuote/./src/bvcomponents/appLayout.js","webpack://QuickQuote/./src/bvcomponents/look/core/constants.js","webpack://QuickQuote/./src/analytics.js","webpack://QuickQuote/./src/bvcomponents/sqft/constants.js","webpack://QuickQuote/./src/bvcomponents/visComponents/constants.js","webpack://QuickQuote/./src/bvcomponents/visComponents/designNavigationItem.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/sqftConfig.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace.js","webpack://QuickQuote/./src/actions/lookFunctions.js","webpack://QuickQuote/./src/actions/actionTypes.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftHelper.js","webpack://QuickQuote/./src/bvcomponents/look/core/intermediatePart.js","webpack://QuickQuote/./src/misc/utils.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookFunctions2.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/constants.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/sqftEventManager.js","webpack://QuickQuote/./src/routes.js","webpack://QuickQuote/./src/actions/sqftMenuFunctions.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/intermediatePart.js","webpack://QuickQuote/./src/bvcomponents/ui/loaderView.js","webpack://QuickQuote/./src/interfaces/featureInterface.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/intermediatePart.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/intermediatePart.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/constants.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/intermediatePart.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookFunctions.js","webpack://QuickQuote/./src/actions/sqftFunctions.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/assets.js","webpack://QuickQuote/./src/api/server-api.js","webpack://QuickQuote/./src/colorThemes.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/constants.js","webpack://QuickQuote/./src/misc/actionTypes.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/shapeHelper.js","webpack://QuickQuote/./src/bvcomponents/common/icons.js","webpack://QuickQuote/./src/actions/wizardFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookNavigationFunctions.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/showerTubCombo.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/sqftShapeManager.js","webpack://QuickQuote/./src/actions/navigationFunctions.js","webpack://QuickQuote/./src/misc/fabricatorHardcode.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/workspaceControllers.js","webpack://QuickQuote/./src/misc/helperHooks.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/intermediatePart.js","webpack://QuickQuote/./src/bvcomponents/ui/materialSpinner.js","webpack://QuickQuote/./src/interfaces/wizardItemInterface.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/vanity.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/constants.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/shower.js","webpack://QuickQuote/./src/bvcomponents/visComponents/featureName.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/cartItemInterface.js","webpack://QuickQuote/./src/api/look-api.js","webpack://QuickQuote/./src/actions/selectionFunctions.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/vanity.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/shower.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/sqftStore.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/colorThemes.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/sqftShape.js","webpack://QuickQuote/./src/actions/tutorialFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/helpers/renderFigures.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/shower.js","webpack://QuickQuote/./src/actions/groheFunctions.js","webpack://QuickQuote/./src/misc/misc.js","webpack://QuickQuote/./src/api/api-popups.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftQuotesHelper.js","webpack://QuickQuote/./src/bvcomponents/ui/loadingSpinner.js","webpack://QuickQuote/./src/actions/shoppingCartFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftHelperUi.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/parts/cabinet.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentContext.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/slab/slabWorkspace.js","webpack://QuickQuote/./src/bvcomponents/look/core/part.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/assets.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/showerTubCombo.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discounstInterface.js","webpack://QuickQuote/./src/bvcomponents/assets.js","webpack://QuickQuote/./src/misc/priceFunctions.js","webpack://QuickQuote/./src/actions/roomsFunctions.js","webpack://QuickQuote/./src/misc/filtersFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/lookCanvasContext.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/part.js","webpack://QuickQuote/./src/bvcomponents/common/lockedView.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/mobile/mobileMenuSelect.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/vanity.js","webpack://QuickQuote/./src/actions/serverFunctions.js","webpack://QuickQuote/./src/misc/quotesFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/lib/pnpoly.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerNew/showerCommon.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/part.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/intermediatePart.js","webpack://QuickQuote/./src/misc/categorySwitchingFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/featureHelper.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/navUtils.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftNavigationHelper.js","webpack://QuickQuote/./src/bvcomponents/popups/withOverlayHoc.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/accessoryCommon.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFunctions.js","webpack://QuickQuote/./src/api/jsonApi.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discountFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withUpdateLookCartItem.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/useChangeWizardStepRoute.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/line.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/point.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/SQFTResourceController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/sqftSlabManager.js","webpack://QuickQuote/./src/bvcomponents/sqft/assetsSQFT.js","webpack://QuickQuote/./src/actions/sqftSlabFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/showerTubCombo.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/part.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/parts/appliance.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/resourseCanas.js","webpack://QuickQuote/./src/actions/sqftResourceFunctions.js","webpack://QuickQuote/./src/bvcomponents/ui/userLoginButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/helpers/lineHelper.js","webpack://QuickQuote/./src/bvcomponents/visComponents/layer.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/walls/wallCommon.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/accessoryCommon.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/newFilters/filterSwitchers.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/part.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/newFilters/filterSelection.js","webpack://QuickQuote/./src/bvcomponents/visComponents/featureThumbnail.js","webpack://QuickQuote/./src/misc/displayLogic.js","webpack://QuickQuote/./src/bvcomponents/ui/successNotification.js","webpack://QuickQuote/./src/misc/getCanvasImageFromLayout.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/navigation/countertopSwitchers.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/newFilters/filters.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/constants.js","webpack://QuickQuote/./src/actions/userFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/coordinatesHelper.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktop/bodyPanelRadio.js","webpack://QuickQuote/./src/bvcomponents/common/goToMaterialPage.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/part.js","webpack://QuickQuote/./src/actions/contractsActions.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsFunctions.js","webpack://QuickQuote/./src/misc/storageFunctions.js","webpack://QuickQuote/./src/misc/visualizerSwitchingFunctions.js","webpack://QuickQuote/./src/misc/misc2.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/workspaceEvents.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/featureWizard/featureWizardSteps.js","webpack://QuickQuote/./src/actions/assignPopupFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withZoomToFeature.js","webpack://QuickQuote/./src/actions/priceWorksheetActions.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/pointV2.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqft3dArHelper.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/navigation/cabinetSwitchers.js","webpack://QuickQuote/./src/bvcomponents/visComponents/partCommon.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/navigationRequests.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withClickCount.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookAllWallsRadioButton.js","webpack://QuickQuote/./src/bvcomponents/popups/messageBox.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/part.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/sqftShapeIntersectionsManager.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktopNavigationCommon.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/newFilters/navigationFiltersSteps.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/mobileNavigationCommon.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/mobile/mobileNavigationButtons.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/mobile/mobileNavigationAllWallsCheckbox.js","webpack://QuickQuote/./src/bvcomponents/common/mainButtons.js","webpack://QuickQuote/./src/bvcomponents/visComponents/visualizer.js","webpack://QuickQuote/./src/bvcomponents/tutorials/visualizerTutorial.js","webpack://QuickQuote/./src/bvcomponents/ui/copyright.js","webpack://QuickQuote/./src/actions/printFunctions.js","webpack://QuickQuote/./src/actions/paymentFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/text/numberText.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/movableImage.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/helpers/renderParts.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/sqftImageManager.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/canvasHelper.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerTubCombo/tubCommon.js","webpack://QuickQuote/./src/visit/wizardLogic/wizardActions.js","webpack://QuickQuote/./src/visit/appointmentLogic/appointmentActions.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/zIndex.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/parts/centerIsland.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/navItemPositionModal.js","webpack://QuickQuote/./src/analyticsEcommerceParams.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartHeaderCommon.js","webpack://QuickQuote/./src/actions/sqftManualCalculationFunctions.js","webpack://QuickQuote/./src/misc/changeRoutePath.js","webpack://QuickQuote/./src/bvcomponents/common/demoPoints/demoPoints.js","webpack://QuickQuote/./src/bvcomponents/visComponents/imageCanvasCommonNew.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartStickyFooter.js","webpack://QuickQuote/./src/lib/react-redux-loading-bar/index.js","webpack://QuickQuote/./src/misc/backendFunctions.js","webpack://QuickQuote/./src/actions/initialFlowFunctions.js","webpack://QuickQuote/./src/api/user-api.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/mitered.js","webpack://QuickQuote/./src/actions/sqftMiteredFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/constantsFeature.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/walls.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/navigation.js","webpack://QuickQuote/./src/visit/globalLogic/globalActions.js","webpack://QuickQuote/./src/visit/wizardLogic/wizardLogic.js","webpack://QuickQuote/./src/bvcomponents/visComponents/imageCanvasCommon.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/zIndex.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/zIndex.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/showerAccessories.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/constants.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureImage.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftCalculations.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/cabinet/cabinetShapes.js","webpack://QuickQuote/./src/reducers/sqftMenuReducer.js","webpack://QuickQuote/./src/reducers/sqftSlabReducer.js","webpack://QuickQuote/./src/visit/api/api.js","webpack://QuickQuote/./src/visit/constants.js","webpack://QuickQuote/./src/visit/userLogic/userActions.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/parts/countertopGroup.js","webpack://QuickQuote/./src/bvcomponents/look/iframeIntegration.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookListFeature/lookFeaturePrice.js","webpack://QuickQuote/./src/bvcomponents/visComponents/featureDescription.js","webpack://QuickQuote/./src/lib/react-redux-loading-bar/loading_bar_ducks.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/freeDrawHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/workspaceDataMapper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/layouts/polygon.js","webpack://QuickQuote/./src/bvcomponents/visComponents/layoutCommonNew.js","webpack://QuickQuote/./src/bvcomponents/visComponents/layoutCommon.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/cabinet/cabinetWorkspace.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/assets.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/parts/countertopGroup.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerTubCombo/tubCommon.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/wall/externallWall.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/zIndex.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerTubCombo/tubCommon.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/zIndex.js","webpack://QuickQuote/./src/reducers/fabricatorReducer.js","webpack://QuickQuote/./src/reducers/initialFlowReducer.js","webpack://QuickQuote/./src/bvcomponents/visComponents/allFeaturesChecker.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopCategory/shopNavItemsContext.js","webpack://QuickQuote/./src/bvcomponents/ui/icons/uiIcon.js","webpack://QuickQuote/./src/reducers/sqftManualCalculationReducer.js","webpack://QuickQuote/./src/bvcomponents/common/OnScreenKeyboard/keyboard.js","webpack://QuickQuote/./src/bvcomponents/look/user/lookUserPhoneInput.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discountCommon.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentFunctions.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/similarProducts/similarProductsFunctions.js","webpack://QuickQuote/./src/bvcomponents/visComponents/canvasEnhancements/index.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/uiHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/textBox/draw/drawImage.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/slabParts/seamToolHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/helpers/renderCabinets.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/overlays/mitered.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/slab/sqftSlabDraw.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/slab/slabAdditionalShape.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/sqftResoursesManager.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/layouts/rectangle.js","webpack://QuickQuote/./src/bvcomponents/sqft/api/sqftJsonApi.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeAbsolute.js","webpack://QuickQuote/./src/bvcomponents/sqft/lib/moveDiagonalLine.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/overlays/resizeLine.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/labels/labelsHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/helpers/freeDrawHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/lineHooks/lineCorner.js","webpack://QuickQuote/./src/bvcomponents/ui/select.js","webpack://QuickQuote/./src/bvcomponents/look/core/layout.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/showerAccessories.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/bathTub/enclosureCommon.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/vanityCommon.js","webpack://QuickQuote/./src/misc/constants.js","webpack://QuickQuote/./src/api/search-api.js","webpack://QuickQuote/./src/misc/loadVisualizer.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSidebarModals/lookSideBarShareButtons.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/parts/cabinet.js","webpack://QuickQuote/./src/visit/lixilLogic/lixilActions.js","webpack://QuickQuote/./src/visit/appointmentLogic/appointmentReducer.js","webpack://QuickQuote/./src/visit/wizardLogic/wizardLogicOld.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/layout.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/mobile/selectionMobileViewSwitchers.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeatureRemoveButton.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/backsplashSelect.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/cabinet/cabinetModuleSystem.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/parts/appliance.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/parts/centerIsland.js","webpack://QuickQuote/./src/bvcomponents/common/scheduleButton.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/layout.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDelivery/deliveryFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/user/lookUserInput.js","webpack://QuickQuote/./src/actions/unlockCalculationsFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookIntro/lookIntroPopper.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsContext.js","webpack://QuickQuote/./src/reducers/instReducer.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheConfig.js","webpack://QuickQuote/./src/api/api.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/wizardFunctionsCommon.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspaceHistory.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftCabinetsDataMapper.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/parseSqftData.js","webpack://QuickQuote/./src/bvcomponents/visComponents/qtCategoryName.js","webpack://QuickQuote/./src/actions/filtersFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/freeDraw.js","webpack://QuickQuote/./src/visit/api/lixil-api.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/navigationItemsList.js","webpack://QuickQuote/./src/bvcomponents/visComponents/commonFeatureItemsMethods.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktop/bodySwipable.js","webpack://QuickQuote/./src/bvcomponents/visComponents/layoutNavigationItem.js","webpack://QuickQuote/./src/bvcomponents/common/shareButton.js","webpack://QuickQuote/./src/bvcomponents/visComponents/pingPilotButton.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withPingPilotCheck.js","webpack://QuickQuote/./src/actions/shopFunctions.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuoteConstants.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/SqftUiFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/interfaces/sqftInterfaces.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withSavePostMessage.js","webpack://QuickQuote/./src/bvcomponents/look/lookMessaging.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withInputValidations.js","webpack://QuickQuote/./src/bvcomponents/desktopHeader.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureOptions.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureOptions.js","webpack://QuickQuote/./src/lib/react-redux-loading-bar/loading_bar.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentInfo.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentBodyCartItem.js","webpack://QuickQuote/./src/interfaces/filterInterface.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/mixin/movable.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/cursor.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/radius.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeAutoShuffle.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/overlays/label.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/wall.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/helpers/renderFreeDraw.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/helpers/wallHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeCabinet.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/models/LineHandlesModel.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/models/HingesModel.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/canvasPopup/resetSeam.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/helpers/commonParts/blink.js","webpack://QuickQuote/./src/bvcomponents/visComponents/featuresFunctions.js","webpack://QuickQuote/./src/misc/metaDataFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/core/zIndex.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/nonVisualizerSubPart.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/toilet.js","webpack://QuickQuote/./src/bvcomponents/look/bathroomFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/textBox.js","webpack://QuickQuote/./src/reducers/wizardReducer.js","webpack://QuickQuote/./src/misc/presetsFunctions.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/countertop/countertop.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/countertopCommon.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/edgeCommon.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentDisclaimer.js","webpack://QuickQuote/./src/translatesProvider.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shadow.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/wall.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/nonVisualizerSubPart.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/showerAccessories.js","webpack://QuickQuote/./src/bvcomponents/common/checkBox.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktop/bodyPanel.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/parts/walls.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/countertopCommon.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/edgeCommon.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/newFilters/navigationFilters.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/featureWizard/featureWizard.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/navigation/contextMenu.js","webpack://QuickQuote/./src/bvcomponents/common/homeMenu.js","webpack://QuickQuote/./src/bvcomponents/common/saveButton.js","webpack://QuickQuote/./src/bvcomponents/tutorials/tutorial.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/layout.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/nonVisualizerSubPart.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/navigation/contextMenuSimple.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/navigation/cabinetContextMenu.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/layout.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/nonVisualizerSubPart.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/navigation/contextMenuSimple.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/nonVisualizerSubPart.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/walls.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/navigation/contextMenu.js","webpack://QuickQuote/./src/bvcomponents/look/navigation/contextMenuQKB.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/layout.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/nonVisualizerSubPart.js","webpack://QuickQuote/./src/bvcomponents/fireplace/navigation/contextMenuSimple.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/nonVisualizerSubPart.js","webpack://QuickQuote/./src/reducers/cartReducer.js","webpack://QuickQuote/./src/bvcomponents/ui/quantity.js","webpack://QuickQuote/./src/misc/userFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftMobileHelper.js","webpack://QuickQuote/./src/bvcomponents/ui/textInput.js","webpack://QuickQuote/./src/bvcomponents/look/ui/lookDropdown.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureSku.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withAddToCartPostMessage.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookListFeature/lookListFeature.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCart.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsFieldsFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookCategory/lookVirtualizedList.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureQuantity.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureMoreInfoButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartBackButton.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/bathroomVisualizer.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocument.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardDoneCheckMark.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftDataMapper.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftConfigHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspaceZoom.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/dataHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/underlayment.js","webpack://QuickQuote/./src/bvcomponents/look/filtersHardcode.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/newFilters/filtersBody.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/kitchenVisualizer.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/kvSceneVisualizer.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/bvSceneVisualizer.js","webpack://QuickQuote/./src/bvcomponents/look/lookVisualizer.js","webpack://QuickQuote/./src/bvcomponents/fireplace/fireplaceVisualizer.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/laundryRoomLayout.js","webpack://QuickQuote/./src/bvcomponents/projectScope/projectScopeFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/withAddToQuote.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/superAdmin/adminActions.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/ar/ARButtonGoogleWebXR.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/NavigationHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/commonParts/SQFTFeaturesHeader.js","webpack://QuickQuote/./src/actions/iframeIntegrationFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookListMainFeature.js","webpack://QuickQuote/./src/bvcomponents/ui/homeButton.js","webpack://QuickQuote/./src/bvcomponents/ui/mobileMenu.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoPrice.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsCommon/materialsCommonFunctions.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionGridList/selectionGridItem.js","webpack://QuickQuote/./src/interfaces/shiftFilterTitleInterface.js","webpack://QuickQuote/./src/bvcomponents/visComponents/hardcodedCanvasImage.js","webpack://QuickQuote/./src/bvcomponents/ui/noInternetOverlay.js","webpack://QuickQuote/./src/bvcomponents/common/svgIcons/bathroomFeatureGroupIcons.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookListFeature/lookFeaturePairPrice.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureSQFTButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureSoldOut.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureLockedBadge.js","webpack://QuickQuote/./src/actions/groheQuotingToolFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookCategory/lookMainCategory.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureRevertButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardContentButtons.js","webpack://QuickQuote/./src/reducers/index.js","webpack://QuickQuote/./src/reducers/stepsReducer.js","webpack://QuickQuote/./src/reducers/selectionReducer.js","webpack://QuickQuote/./src/reducers/serverReducer.js","webpack://QuickQuote/./src/misc/imagePolygon.js","webpack://QuickQuote/./src/lib/react-redux-loading-bar/loading_bar_middleware.js","webpack://QuickQuote/./src/lib/react-redux-loading-bar/immutable.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentStyles.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/styles/printDocumentStylesHelpers.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/styles/printDocumentStylesDiscounts.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentHeader.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentInfoFabricator.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/constants.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentBody.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentBodyBundledCartItems.js","webpack://QuickQuote/./src/misc/graniteTransformationUkSubDomains.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/similarProducts/printSimilarProducts.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/similarProducts/printSimilarProductsListItem.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionDescriptionCoverTranslates.js","webpack://QuickQuote/./src/api/axiosInstance.js","webpack://QuickQuote/./src/bvcomponents/visComponents/canvasEnhancements/vertex.glsl","webpack://QuickQuote/./src/bvcomponents/visComponents/canvasEnhancements/fragment.glsl","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/sqftCursorManager.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/overlays/pointRadius.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/SpacersController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/spacer.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/textBox/model/modelCorePoint.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/imageParts/renderMovableImage.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/imageParts/renderMeasurementsInsideShape.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/imageParts/renderSVG.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/mitered/miteredSegment.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/slab/slabAdditionalShapes.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/slab/slabHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/endCapCanvas.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftMeasureUnitsHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/image/StaticImage.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/sqftShapeOffset.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/subscriptionEventManager.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/cabinet/cabinetShapesSpecialLayouts.js","webpack://QuickQuote/./src/bvcomponents/sqft/api/sqftApi.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/helpers/movableImageHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/imageParts/lineImage.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/simpleLine.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeRotatable.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/parts/ChangeValuePopup.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/HandlesController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/WallsController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/ShapeColorsController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/models/ShapeColor.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/line/WaterfallController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/overlays/waterfallOverlay.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/models/waterfallSegment.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/line/WaterfallSegmentController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/RemovedFeaturesController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/SnappedShapeGroupsController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/SelectedShapesController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/line/CrownMoldingController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/Images3dController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/HingesController.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftFitSize.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/overlays/lineLength.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/overlays/bumpout.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/textBox/draw/color.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/lineHooks/lineAttachmentsComposite.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/rotation.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeSlab.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/slabParts/seamTool.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/slabParts/seamToolRender.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeMeasurementArrows.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeEditable.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeSpacer.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeIntersections.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeMemory.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeRender.js","webpack://QuickQuote/./src/bvcomponents/common/exception.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/vanityHandle.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/vanityCabinet.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/other.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/background.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/backgrounds/BackgroundBG.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerTubCombo/bathtubLiner.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerTubCombo/replacementTub.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerTubCombo/walkInTub.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerTubCombo/jettedTub.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerTubCombo/wallConfiguration.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerTubCombo/walkInTubFixture.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerTubCombo/replacementTubFixture.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerFixture.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerScreen.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/walls/leftWall.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/walls/rightWall.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/walls/centerWall.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/walls/backWall.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/walls/ceiling.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/walls/frontWall.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/walls/splitWall.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/walls/leftWallSplitter.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/walls/ceilingPanels.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerGlass.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerBody.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerWall.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerWallAccent.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerDoor.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/largeCornerSeat.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/soapDish.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/cornerCaddie.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/largeCornerCaddie.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/grabBar.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/cornerShelf.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/showerPod.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/seats.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/showerRod.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/toiletBrush.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/paperHolder.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/robeHook.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/towelBar.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/towelRing.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/glassHolder.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/towelRack.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/wainscoting.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/towel.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/towelTowelRing.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/towelTowelBar.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/towelTowelHook.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerPanCombo.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerDoorHandle.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/ponyWallCap.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/ponyWallGlass.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerFloor.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/threshold.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerDrain.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerHead.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerArm.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerHeadBundle.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/tubSpout.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/handShowerKit.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerCurb.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerNew/bodySpray.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerNew/diverterTrim.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerNew/handShowerHolder.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerNew/handShowerOnly.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerNew/showerHose.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerNew/showerSystem.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerNew/showerTrimKit.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerNew/valveTrim.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerNew/wallUnion.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/windowParent.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/window/windowKits.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/window/windowBody.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/floor.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/globals.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/globals/attachment.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/globals/decor.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/globals/showerWallMirror.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/bathtub.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/bathTub/bathTubBody.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/bathTub/bathTubFixture.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/bathTub/enclosureTop.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/bathTub/enclosureBottom.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/bathTub/skirtingBoard.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/accessories.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/accessories/table.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/accessories/chair.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/accessories/carpet.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/accessories/lamp.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/accessories/basket.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/accessories/frame.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/accessories/plant.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/vanityCountertop.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/vanityBacksplash.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/mirror.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/sink.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/faucet.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/pTrap.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/vanityWashstand.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/vanityMiddle.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/drawerPull.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/wsTowelBar.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/vanityLegs.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/vanityConsole.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/doorHandle.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/drawerHandle.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/textBox/box.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/textBox/iText.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/textBox/model/modelText.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/keyboardHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/duplicate.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/ruler.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/resultImages.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/cabinet/cabinetShapesLayout.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/textBoxManager.js","webpack://QuickQuote/./src/bvcomponents/sqft/dto/FeatureObjectDTO.js","webpack://QuickQuote/./src/api/features-api.js","webpack://QuickQuote/./src/misc/markUpFunctions.js","webpack://QuickQuote/./src/misc/excelFunctions.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/cabinet/handle.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/appliances/dishwasher.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/appliances/fridge.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/appliances/hood.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/appliances/microwave.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/appliances/range.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/appliances/oven.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/appliances/stove.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/appliances/fridgeEnclosure.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/appliances/fridgeEnclosureHandle.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/appliances/stovetop.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/cabinet/topCabinet.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/cabinet/tallCabinet.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/cabinet/crownMolding.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/cabinet/bottomCabinet.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/countertop/sink.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/countertop/faucet.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/countertop/edgeProfile.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/countertop/cutouts.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/countertop/radius.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/cabinet/bottomHandle.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/cabinet/topHandle.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/cabinet/doorHandle.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/cabinet/drawerHandle.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentBodyWizardItem.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentTotal.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentSignature.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentDiscountsList.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentDiscount.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentDiscountFinance.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentAsCentralText.js","webpack://QuickQuote/./src/visit/api/wizard-api.js","webpack://QuickQuote/./src/visit/globalLogic/saveJobData.js","webpack://QuickQuote/./src/visit/api/job-api.js","webpack://QuickQuote/./src/visit/globalLogic/saveAppointmentData.js","webpack://QuickQuote/./src/visit/api/user.js","webpack://QuickQuote/./src/visit/helperFunctions.js","webpack://QuickQuote/./src/visit/components/helpers/popupFunctions.js","webpack://QuickQuote/./src/misc/imageHovering.js","webpack://QuickQuote/./src/lib/pinch-zoom.js","webpack://QuickQuote/./src/lib/pinchScroll.js","webpack://QuickQuote/./src/bvcomponents/visComponents/canvasCheckForLayerParts.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/bathtub.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/bathTub/bathTubBody.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerTubCombo/bathtubLiner.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerTubCombo/replacementTub.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerTubCombo/walkInTub.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerTubCombo/jettedTub.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerTubCombo/wallConfiguration.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/bathTub/bathTubBase.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/bathTub/bathTubFixture.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/bathTub/bathTubRim.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/bathTub/bathTubSpa.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/bathTub/bathTubTowelRack.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/floorNew.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/vanity/completeVanity.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/vanity/vanityHandle.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/vanity/vanityPedestal.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/vanity/vanityCountertop.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/vanity/lightingFixture.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/vanity/vanityBacksplash.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/vanity/mirror.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/vanity/sink.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/vanity/faucet.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/window.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/ceiling.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/toilet.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerFixture.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerGlass.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerBody.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerInteriorWall.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerInteriorWallAccent.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerDoor.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerPanCombo.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerDoorHandle.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/ponyWallCap.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/ponyWallGlass.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerFloor.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/threshold.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerDrain.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerHead.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/globalShadow.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/wall/ponyWall.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/wall/wallA.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/wall/wallB.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/wall/wallC.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/wall/wallExR.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/wall/wallExL.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/wall/vanityAccent.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/other.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerAccessories/largeCornerSeat.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerAccessories/soapDish.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerAccessories/smallCornerShelf.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerAccessories/cornerCaddie.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerAccessories/largeCornerCaddie.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerAccessories/grabBar.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/navigation/desktopNavigation.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktop/sidebar.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/newFilters/filtersSearch.js","webpack://QuickQuote/./src/bvcomponents/common/OnScreenKeyboard/keyboardKey.js","webpack://QuickQuote/./src/bvcomponents/common/OnScreenKeyboard/keyboardKeyType.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktop/body.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktop/bodyPanelCheckbox.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktop/bodyPanelWizardSteps.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktop/bodyPanelNavigationFiltersSteps.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookAllWallsRadioButtonSmall.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktop/bodyItems.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/navigationItem.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/walls/ceiling.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/walls/leftWall.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/walls/rightWall.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/walls/popoutWall.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/walls/backsplash.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/cabinet/bottomCabinet.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/cabinet/topCabinet.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/cabinet/crownMolding.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/appliances/fridge.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/appliances/fridgeShadow.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/appliances/hood.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/appliances/dishwasher.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/appliances/microwave.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/appliances/range.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/cabinet/topHandle.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/cabinet/bottomHandle.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/cabinet/topCabinetShadow.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/cabinet/bottomCabinetShadow.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/countertop/countertop.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/countertop/faucet.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/countertop/sink.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/countertop/stovetop.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/countertop/cutouts.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/countertop/edgeProfile.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/countertop/radius.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/cabinet.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/countertop.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/chairs.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/faucet.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/sink.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/handle.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/centerIslandshadow.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/stovetop.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/range.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/edge.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/chairsShadow.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/featureWizard/featureWizardBody.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/featureWizard/featureWizardBodyItem.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/featureWizard/featureWizardSelection.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/featureWizard/featureWizardSelectionItem.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/roomSceneNavigation.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/roomSceneNavigationItem.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktopNavigationLayoutsContent.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/navigation/mobileNavigation.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/mobile/mobileNavigationBodyNew.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/mobileParentNavigationItems.js","webpack://QuickQuote/./src/bvcomponents/common/quoteButton.js","webpack://QuickQuote/./src/bvcomponents/common/designButton.js","webpack://QuickQuote/./src/bvcomponents/common/minimizeButton.js","webpack://QuickQuote/./src/misc/downloadCSV.js","webpack://QuickQuote/./src/bvcomponents/common/demoPoints/demoPoint.js","webpack://QuickQuote/./src/bvcomponents/ui/icons/exclamationMarkIcon.js","webpack://QuickQuote/./src/api/parseResponse.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/parts/floorNew.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/parts/globals.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/globals/baseboard.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/globals/ceilingLights.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/globals/globalShadow.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/globals/decor1.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/globals/decor2.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/globals/decor3.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/parts/other.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/navigation/desktopNavigation.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/navigation/mobileNavigation.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/parts/globals.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/globals/attachment.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/globals/decor.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/centerIsland/cabinet.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/centerIsland/faucet.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/centerIsland/sink.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/centerIsland/edge.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/centerIsland/countertop.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/centerIsland/islandHood.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/centerIsland/stovetop.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/centerIsland/pendants.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/centerIsland/rightIsland.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/parts/other.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/parts/background.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/backgrounds/BackgroundBG.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/parts/floor.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/parts/walls.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/walls/backsplash.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/walls/leftWall.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/walls/rightWall.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/walls/centerWall.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/walls/frontWall.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/walls/ponyWall.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/walls/splitWall.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/navigation/desktopNavigation.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/navigation/mobileNavigation.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/other.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/background.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/backgrounds/BackgroundBG.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/largeCornerSeat.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerTubCombo/bathtubLiner.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerTubCombo/replacementTub.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerTubCombo/walkInTub.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerTubCombo/jettedTub.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerTubCombo/wallConfiguration.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerFixture.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerGlass.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerBody.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/vanity/completeVanity.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/vanity/vanityHandle.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/vanity/vanityCabinet.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/vanity/vanityCountertop.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/vanity/vanityBacksplash.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/vanity/mirror.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/vanity/sink.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/vanity/faucet.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerWall.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerWallAccent.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerDoor.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerPanCombo.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerDoorHandle.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/ponyWallCap.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/ponyWallGlass.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerFloor.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/threshold.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerDrain.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerHead.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/soapDish.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/cornerCaddie.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/largeCornerCaddie.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/grabBar.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/cornerShelf.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/showerPod.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/seats.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/showerRod.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/windowBody.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/windowKits.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/largeShelf.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/towelBar.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/shampooShelf.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/toilet.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/floor.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/walls/leftWall.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/walls/rightWall.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/walls/centerWall.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/walls/ceilingPanels.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/globals.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/globals/lightFixture.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/globals/decorWindow.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/globals/decorSeat.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/globals/lampFixture.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/globals/attachment.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/bathtub.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/bathTub/bathTubBody.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/bathTub/bathTubFixture.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/navigation/desktopNavigation.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/navItemPositionModalButton.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/navItemPositionModalSlatWall.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/navigation/mobileNavigation.js","webpack://QuickQuote/./src/bvcomponents/look/navigation/mobileNavigation.js","webpack://QuickQuote/./src/bvcomponents/look/navigation/contextMenuQKBButtons.js","webpack://QuickQuote/./src/bvcomponents/look/navigation/desktopNavigation.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/parts/other.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/parts/background.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/backgrounds/BackgroundBG.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/parts/floor.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/parts/walls.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/walls/leftWall.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/walls/rightWall.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/walls/centerWall.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/walls/frontWall.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/walls/ceiling.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/parts/fireplaceParent.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/fireplace/fireplace.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/globals/furniture.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/parts/globals.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/globals/attachment.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/globals/decor.js","webpack://QuickQuote/./src/bvcomponents/fireplace/navigation/desktopNavigation.js","webpack://QuickQuote/./src/bvcomponents/fireplace/navigation/mobileNavigation.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/zIndex.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/parts/other.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/parts/background.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/backgrounds/BackgroundBG.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/parts/floor.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/parts/walls.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/walls/leftWall.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/walls/rightWall.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/walls/centerWall.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/walls/frontWall.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/parts/globals.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/globals/decor.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/globals/basket.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/parts/cabinet.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/cabinetLeg.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/countertop.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/hook.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/cabinetGroup.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/slatwall.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/overheadRack.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/bottomCabinet.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/topCabinet.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/tallCabinet.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/tallHandle.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/tallCabinetLeg.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/topHandle.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/bottomHandle.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/bottomCabinetLeg.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/parts/accessories.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/globals/attachment.js","webpack://QuickQuote/./src/reducers/bathroomVisualizerReducer.js","webpack://QuickQuote/./src/reducers/loaderReducer.js","webpack://QuickQuote/./src/reducers/userReducer.js","webpack://QuickQuote/./src/reducers/messageBoxReducer.js","webpack://QuickQuote/./src/reducers/filterReducer.js","webpack://QuickQuote/./src/reducers/navigationReducer.js","webpack://QuickQuote/./src/reducers/sqftReducer.js","webpack://QuickQuote/./src/reducers/docuSignReducer.js","webpack://QuickQuote/./src/reducers/qtReducer.js","webpack://QuickQuote/./src/reducers/tutorialReducer.js","webpack://QuickQuote/./src/reducers/contractSigningReducer.js","webpack://QuickQuote/./src/reducers/priceWorksheetReducer.js","webpack://QuickQuote/./src/reducers/unlockCalculationsReducer.js","webpack://QuickQuote/./src/reducers/quotesReducer.js","webpack://QuickQuote/./src/reducers/advancedQuotingReducer.js","webpack://QuickQuote/./src/reducers/assignQuoteReducer.js","webpack://QuickQuote/./src/reducers/printReducer.js","webpack://QuickQuote/./src/reducers/sqftResourcesReducer.js","webpack://QuickQuote/./src/reducers/sqftMiteredReducer.js","webpack://QuickQuote/./src/reducers/lookReducer.js","webpack://QuickQuote/./src/reducers/groheReducer.js","webpack://QuickQuote/./src/reducers/iframeIntegrationReducer.js","webpack://QuickQuote/./src/reducers/groheQuotingToolReducer.js","webpack://QuickQuote/./src/reducers/paymentReducer.js","webpack://QuickQuote/./src/reducers/historyReducer.js","webpack://QuickQuote/./src/reducers/shopReducer.js","webpack://QuickQuote/./src/reducers/sqftTutorialReducer.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/superAdmin/adminReducer.js","webpack://QuickQuote/./src/bvcomponents/popups/userPopup/userFieldsErrors.js","webpack://QuickQuote/./src/bvcomponents/popups/userPopup/privacyPolicyTerms.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/useCloseSQFTCalc.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuoteInterfaces.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignPopupContext.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/subPartDoneCheckMark.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopup3dButtons.js","webpack://QuickQuote/./src/bvcomponents/look/ui/lookInput.js","webpack://QuickQuote/./src/bvcomponents/look/ui/inputFunctions.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/superAdmin/adminFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavLayouts.js","webpack://QuickQuote/./src/bvcomponents/ui/multiLoader.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/useFetchFeatures.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookViewTypeSwitcher.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/commonParts/SqftOptionsRelatedItemList.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookCategory/lookVirtualizedListLoadingItem.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookListFeature/lookFeaturePriceLocked.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookFilters/lookFilters.js","webpack://QuickQuote/./src/bvcomponents/look/lookPolicyLinks.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withLoginPostMessage.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSideBar.js","webpack://QuickQuote/./src/bvcomponents/look/ui/twoFaCodeInput.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardSectionListFeature.js","webpack://QuickQuote/./src/bvcomponents/ui/shoppingCartButton.js","webpack://QuickQuote/./src/bvcomponents/common/languageSwitcher.js","webpack://QuickQuote/./src/actions/advancedQuotingFunctions.js","webpack://QuickQuote/./src/bvcomponents/installation/instView.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoPriceLocked.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoDescription.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionGridList/selectionGridWizardGroupItem.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/notInVisualizerView.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/advancedQuotingFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureNotInVisualizer.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheMobile/groheMobileFeature/groheMobileFeatureTop.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureNotInStock.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheCategories/groheCategoriesMenu.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeatures/groheVirtualizedList.js","webpack://QuickQuote/./src/bvcomponents/look/ui/navigationLoader.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureInfo.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardContentFinalPrice.js","webpack://QuickQuote/./src/misc/loadScript.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartColumns.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizard.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardContentTitle.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardContentDescription.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainWizardSections.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookCompatability/lookCompatabilitySection.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainHeaderCloseButton.js","webpack://QuickQuote/./src/misc/browsers.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/navigation/contextMenuQKB.js","webpack://QuickQuote/./src/bvcomponents/common/dashboardButtons/backToDashboard.js","webpack://QuickQuote/./src/bvcomponents/popups/userPopup/constants.js","webpack://QuickQuote/./src/bvcomponents/common/twoFactorAuthView.js","webpack://QuickQuote/./src/bvcomponents/popups/confirmPopup.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/withCloseSQFtCalc.js","webpack://QuickQuote/./src/bvcomponents/ui/mobileRotateButtonHorizontalNew.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuotePopupSearch.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuoteVirtualizedList.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupWrapper.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardFooterStepThumbnail.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/getCreditCardType.js","webpack://QuickQuote/./src/api/admin-api.js","webpack://QuickQuote/./src/bvcomponents/sqft/squareFootageToolView.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/SqftFooterAddToQuoteButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/SqftFooterCancelButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/withSqftFooterCancel.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/SqftPopupWindow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/layouts/square.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/layouts/wideAngle.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/layouts/horseshoe.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menuSwitchers/ManualCalculateSwitcher.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/workspaceComponents/ExportButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/ThreeDWorkspace.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/glbViewer/SeparateModelGLBViewer.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/ar/ARButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/ValidationPopupWindow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/overlays/sqftContextMenu.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menuSwitchers/SlabToolSwitcher.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/backsplashCanvas.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/commonParts/SqftOptionsLoading.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featurePriceInput.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolMitered/navMiteredSection.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFilters/groheFiltersSearchInputAsync.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookFilters/lookFiltersList.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFilters/groheFiltersValues.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookFilters/lookFiltersReset.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/useWindowDimensions.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/ar/ARViewUSDZButton.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withCanvasImage.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookListContent.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookListContentHeaderRightSide.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withCartAnimationsChecker.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookListFooter.js","webpack://QuickQuote/./src/actions/asyncActionFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookListFeature/lookListFeatureCheckmark.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/unlockCalculations/unlockCalculationSteps.js","webpack://QuickQuote/./src/bvcomponents/ui/loadingDots.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookListFeature/lookListActiveFeatureMobileButton.js","webpack://QuickQuote/./src/bvcomponents/ui/installButton.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartListSwitcher.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/advancedQuotingSwitcher.js","webpack://QuickQuote/./src/bvcomponents/popups/orderCompletePopup/cloneQuoteButton.js","webpack://QuickQuote/./src/bvcomponents/projectScope/projectScopeMobileHeader.js","webpack://QuickQuote/./src/bvcomponents/projectScope/projectScopeSections.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfo.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoBrand.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionMainList.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionRowList/rowItem.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/featureCartItemsCount.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/superAdmin/SuperAdminFeatureToolSettingsButton.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/wizardList/wizardFilterItem.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionGridList/selectionGridFiltersTitle.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionGridList/gridFunctions.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/gallery.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionDescriptionCover.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/notCompatibleView.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionMainHeader.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFooterSubParts.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsCommon/materialsFooterBackButton.js","webpack://QuickQuote/./src/bvcomponents/tutorials/materialsAgentTutorial.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardFooterSteps.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/withMaterialsWizardFooterCommon.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartItemsList.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartItemsListItem.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/noteEditor.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartItemsBundledProducts.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/advancedQuotingListItem.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/advancedQuotingListItemRemoveButton.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discountSubTotal.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/advancedQuotingSubpartItems.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/similarProducts/similarProducts.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/recentlyViewedItems.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/depositDisclaimer.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartFooter.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartTotalColumns.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartCanvas.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartInstallationQuestion.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/quotes.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/priceWorksheetView.js","webpack://QuickQuote/./src/bvcomponents/ui/dropdowns/discountDropdown.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/unlockCalculationsTutorialFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/hooks/useUpdateSureTax.js","webpack://QuickQuote/./src/bvcomponents/look/lookCanvas.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureButtons.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureContentInCart.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withUpdateCartItems.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureTopButtons.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookLockedButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureWizardButton.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/analyticsEventHooks.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheMobile/groheMobileFeature/groheMobile3dButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainWizardList.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainFeatureGroupsExpandIcon.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withChangeFeature.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookCategory/lookMainCategoryLoading.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeatures/groheFeaturesHeader.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFilters/groheFiltersIcon.js","webpack://QuickQuote/./src/bvcomponents/visComponents/featureSubDescription.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheMobile/groheMobileFooterFiltersButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheMobile/groheMobileFooterViewButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureColorMatchCheckbox.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withFeatureColorMatch.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartRoutes.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartLogin/groheCartLoginRegister.js","webpack://QuickQuote/./src/bvcomponents/look/ui/lookAddressInput.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartContent.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withCartCheckoutClick.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPayment/groheBillingAndShippingInputs.js","webpack://QuickQuote/./src/bvcomponents/look/lookRouting.js","webpack://QuickQuote/./src/bvcomponents/look/lookLixilCategories.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardContentCanvas.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheWizard/groheWizardSelectedSteps.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainWizardSelectedStep.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopPage.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopPagesFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/withShopFeatureVisualizeClick.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeatureOptionsCommon.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookCartButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookNotInVisualizerPopper.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookIntro/lookIntroFooterAnchor.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeature.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookCategory/lookCategoryHeader.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardHeader.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainWizardSelectedSteps.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardLmContent.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardCompletedAlertModal.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookRoomIdeasButton.js","webpack://QuickQuote/./src/main.js","webpack://QuickQuote/./src/polyfills.js","webpack://QuickQuote/./src/lib/babel-core/5.6.15-browser-polyfill.min.js","webpack://QuickQuote/./src/app.js","webpack://QuickQuote/./src/bvcomponents/index.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/commonVisualizer.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/navigation/desktopNavigation.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/navigation/contextMenuQKBButtons.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/navigation/mobileNavigation.js","webpack://QuickQuote/./src/bvcomponents/common/dashboardButtons/backToDashboardButton.js","webpack://QuickQuote/./src/bvcomponents/popups.js","webpack://QuickQuote/./src/bvcomponents/popups/applyPopup.js","webpack://QuickQuote/./src/bvcomponents/popups/userPopup/userPopup.js","webpack://QuickQuote/./src/bvcomponents/popups/userPopup/userFields.js","webpack://QuickQuote/./src/bvcomponents/common/calendar/confirmationScheduleView.js","webpack://QuickQuote/./src/bvcomponents/common/calendar/monthView.js","webpack://QuickQuote/./src/bvcomponents/common/calendar/monthHeaderView.js","webpack://QuickQuote/./src/bvcomponents/common/calendar/dayView.js","webpack://QuickQuote/./src/bvcomponents/common/calendar/timeTableView.js","webpack://QuickQuote/./src/bvcomponents/ui/mobileRotateButtonIcon.js","webpack://QuickQuote/./src/bvcomponents/visComponents/docuSignLayer.js","webpack://QuickQuote/./src/bvcomponents/popups/depositPopup.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuotePopup.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuotePopupContent.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuoteCustomersList.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuoteEmployeesList.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuotePopupContentHoc.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuotePopupNewCustomer.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuotePopupNewCustomerInput.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuotePopupNewCustomerSelect.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuotePopupSaveButtons.js","webpack://QuickQuote/./src/bvcomponents/common/agreeEmailCheckbox.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuoteContractSelection.js","webpack://QuickQuote/./src/bvcomponents/popups/orderCompletePopup/orderCompletePopup.js","webpack://QuickQuote/./src/bvcomponents/common/cookieMessage.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopup.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupApplyButton.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupBody.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupParentList.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupFeature.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupFeatureDropdown.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupFeaturePrice.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupFeatureDeleteButton.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupFeatureEyeball.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupParentListTitle.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupTitleFeatureDropdown.js","webpack://QuickQuote/./src/bvcomponents/popups/wizardConflictPopup/wizardConflictPopup.js","webpack://QuickQuote/./src/bvcomponents/popups/wizardConflictPopup/wizardConflictPopupCartItem.js","webpack://QuickQuote/./src/bvcomponents/popups/wizardConflictPopup/wizardConflictPopupButtons.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/superAdmin/SuperAdminLoginPopup.js","webpack://QuickQuote/./src/bvcomponents/common/creditCardIcons.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/superAdmin/SuperAdminToolSettingsPopup.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discountAllFinanceOptionsPopup.js","webpack://QuickQuote/./src/bvcomponents/popups/checkoutPopup.js","webpack://QuickQuote/./src/bvcomponents/sqft/fakeOfflineSqft.js","webpack://QuickQuote/./src/bvcomponents/sqft/polyfills/object.dataset.js","webpack://QuickQuote/./src/bvcomponents/sqft/polyfills/string.includes.js","webpack://QuickQuote/./src/bvcomponents/sqft/polyfills/string.startsWith.js","webpack://QuickQuote/./src/bvcomponents/sqft/polyfills/jquery.preBind.js","webpack://QuickQuote/./src/bvcomponents/sqft/polyfills/arrayMethods.js","webpack://QuickQuote/./src/bvcomponents/sqft/polyfills/objectMethods.js","webpack://QuickQuote/./src/bvcomponents/sqft/polyfills/numberMethods.js","webpack://QuickQuote/./src/bvcomponents/sqft/lib/wrapText.js","webpack://QuickQuote/./src/bvcomponents/sqft/lib/fraction.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/sqftFooter.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/sqftFooterActiveShapeColorset.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/sqftFooterSlabInfo.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/SqftIcons.js","webpack://QuickQuote/./src/bvcomponents/popups/changeLayoutPopup.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/layouts/rectangleIsland.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/layouts/wideAngleReverted.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/manualCalculate/SqftManualCalculateWindow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/manualCalculate/SqftCountertopRow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/manualCalculate/SqftEdgeRow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/manualCalculate/SqftEdgeRowDropdown.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/manualCalculate/SqftBacksplashRow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/SqftNavSettingsWindow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/SqftTutorial.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/SqftSystemMessage.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/AR3DPopup.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/ar3d/ThreeDContent.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupChangeColorButton.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupSaveImageButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/ShapesGoogleModelViewer.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/ShapesThreeJsViewer.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/workspaceComponents/LightIntensitySlider.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/workspaceComponents/LightingSwitch.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/glbViewer/scene/HDRMapLoader.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/glbViewer/scene/SceneModelsLoader.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/glbViewer/scene/CabinetLoader.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/glbViewer/scene/cabinetLoader/HandlesLoader.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/glbViewer/scene/cabinetLoader/CrownMoldingLoader.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/cabinetsData/CrownMoldingPositions.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/glbViewer/SingleModelGLBViewer.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/workspaceComponents/ScreenshotButton.js","webpack://QuickQuote/./src/bvcomponents/ui/multiLoaderSteps.js","webpack://QuickQuote/./src/bvcomponents/common/svgIcons/multiLoaderIcons.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/ar3d/ArContent.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/ar/ARWorkspace.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/ar/arButton/GLBLoader.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/ar/arButtonGoogleWebXR/WebXRGoogleModelViewer.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/SqftSystemDeleteMessage.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/slab/SqftLoadSlabWindow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/slab/SqftStepSelectSlab.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/slab/SqftStepCropSlab.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/slab/SqftStepSelectImageType.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/slab/SqftLoadSlabHeader.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/slab/SqftLoadSlabPricingCheckbox.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/slab/SqftLoadSlabFooter.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/slab/SqftLoadSlabFooterSelectImageTypeButtons.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/labels/sqftLabelsContextMenuCategorySwitching.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/overlays/contextmenu/contextmenuList.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/overlays/contextmenu/contextmenuButtons.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/labels/sqftLabelsContextMenu.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/SqftContextMenuV2.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/ChangeValuePopupWindow.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/useLongPress.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/NavigationSidebar.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/SqftNavAside.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/SqftNavAside2.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/SqftNavAsideCabinet.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/SqftToolMenuCabinet.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/SqftToolMenuCountertop.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/WaterfallController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavShapes.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/layouts/dot.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/SqftNavSummary.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/summary/SqftSummaryRadii.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/summary/SqftSummaryAngles.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/summary/SqftSummaryBumpouts.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/summary/SqftSummaryFeatureColors.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/summary/SqftSummaryEdges.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/summary/SqftSummaryBacksplashes.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/summary/SqftSummaryWall.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavEdges.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavEdgesFeature.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/edgesCanvas.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavEdgesMiteredButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/commonTools/SqftNavAppliances.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/commonTools/SqftNavAppliancesItem.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavBumpouts.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/bumpout.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavBacksplashes.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavBacksplashesFeature.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolBacksplash/SqftNavBacksplashesCustomButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavCorners.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolRadius/SqftNavRadius.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolCorner/SqftNav45Corner.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/SqftNavigationUpper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/commonParts/SqftFeaturesChecker.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/commonParts/SqftOptionsRelatedItemRow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/SqftNavigationHandles.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/toolHandles/SqftOptionsHandles.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/toolHandles/SqftOptionsHandlesContent.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/SqftNavigationBottom.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/SqftNavigationCrownMolding.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/toolCrown/SqftOptionsCrown.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/crownmoldingCanvas.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/commonTools/SqftNavFeatures.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/commonTools/SqftNavFeaturesRow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/SqftNavAsideSlabMode.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/slab/SqftSlabWindow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/slab/toolMenu/SqftNavSeam.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavMitered.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolMitered/navMiteredSegment.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavUnderlayment.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavWaterfall.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolWaterfall/NavWaterfallSection.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolWaterfall/NavWaterfallSegment.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolWaterfall/NavWaterfallSegmentSwitcher.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/SqftNavigationTall.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/filterMenu/SqftNavFiltersMenu.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/commonTools/featuresGrid/SqftNavFeaturesGrid.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/commonTools/featuresGrid/FeaturesGrid.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/commonTools/featuresGrid/FeaturesRow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolBacksplash/SqftNavCustomBacksplashes.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolBacksplash/SqftNavCustomBacksplashSection.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolBacksplash/SqftNavCustomBacksplashSegment.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/NavigationSidebarSecondRow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menuSecondRowButtons/WallsUpModeButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menuSecondRowButtons/WallsLockModeButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menuSecondRowButtons/ShowMeasurementsInTheSlabModeButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/onLoad/useUpdateSqftConfig.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/onLoad/useAddDeviceClass.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/onLoad/useToggleRoomsSwitcher.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/onLoad/useOpenSQFTMenu.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/onLoad/useCheckWizardActiveItem.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/onLoad/useResetState.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/header/SqftHeader.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/header/quotesSwitcher/quotesSwitcher.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/header/quotesSwitcher/quotesSwitcherLists.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/header/quotesSwitcher/quotesSwitcherListQuotes.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/header/quotesSwitcher/quotesSwitcherListCategories.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/header/quotesSwitcher/quotesSwitcherListRoomGroups.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/header/ModeDropdown.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ui/Dropdown.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/useChangeCabinetsColor.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/onLoad/useUpdateCabinetFeatures.js","webpack://QuickQuote/./src/bvcomponents/sqft/squareFootageToolViewWorkspace.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/SqftCanvasContainer.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/SqftCanvas.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/SqftUseCanvas.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/scale.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/tutorial.js","webpack://QuickQuote/./src/bvcomponents/sqft/translatesProvider.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/onLoad/useImportSQFTData.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/onLoad/useUpdateSlabFeatures.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/ar/ARWorkspaceSeparateModels.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/glbViewer/scene/SceneExporter.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqft3dArSceneHelper.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookWhitePage.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookList.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookListLeft.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookListContentHeader.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookListMain.js","webpack://QuickQuote/./src/bvcomponents/look/list/listFeatureActions/lookListMainFeatureActions.js","webpack://QuickQuote/./src/bvcomponents/look/list/listFeatureActions/lookListMainFeatureActionsMoreButton.js","webpack://QuickQuote/./src/bvcomponents/look/list/listFeatureActions/lookListMainFeatureActionsPopper.js","webpack://QuickQuote/./src/bvcomponents/look/list/listFeatureActions/lookListMainFeatureActionsPopperButtons.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookFeatureQuantity.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookFeatureQuantityText.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookListBundleFeatures.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartItemActions.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookListMainFeatureCheckbox.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookListMainFeatureShipping.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withOpenMiniCartPostMessage.js","webpack://QuickQuote/./src/bvcomponents/look/layouts/lookLayout.js","webpack://QuickQuote/./src/bvcomponents/look/layouts/lookLayoutHeader.js","webpack://QuickQuote/./src/bvcomponents/look/layouts/lookLayoutMain.js","webpack://QuickQuote/./src/bvcomponents/look/layouts/lookLayoutItem.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSideBarLayoutButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSideBarSaveButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSideBarEditButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSideBarEditButtonPopper.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withDemoShow.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSideBarMoreButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSidebarModals/lookSideBarModal.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSidebarModals/lookSideBarShareModal.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSideBarFiltersButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSideBarPingPilotButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSideBarRevertButton.js","webpack://QuickQuote/./src/bvcomponents/look/user/lookUser.js","webpack://QuickQuote/./src/bvcomponents/look/user/lookUserHeader.js","webpack://QuickQuote/./src/bvcomponents/look/user/lookUserLeftSide.js","webpack://QuickQuote/./src/bvcomponents/look/user/lookUserContent.js","webpack://QuickQuote/./src/bvcomponents/look/user/lookLoginButton.js","webpack://QuickQuote/./src/bvcomponents/look/user/lookUserInputs.js","webpack://QuickQuote/./src/bvcomponents/look/user/lookRegisterCheckboxes.js","webpack://QuickQuote/./src/bvcomponents/look/user/lookRegisterButton.js","webpack://QuickQuote/./src/bvcomponents/look/rooms/lookRooms.js","webpack://QuickQuote/./src/bvcomponents/look/rooms/lookRoomsMain.js","webpack://QuickQuote/./src/bvcomponents/look/rooms/lookRoomPreset.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookPopups.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookMessageBoxPopup.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookQuestionPopup.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookStylePopup.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookStylePopupFeature.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookStylePopupButtons.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookOverlayQuestions.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookOverlayQuestionsButtons.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withExitPostMessage.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookLoadingPopup.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookLoadingBar.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookNotCompatiblePopup.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/leadCapturePopup.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/leadCapturePopupContent.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/leadCapturePopupContentInputs.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/leadCapturePopupFooter.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/leadCapturePopupFooterSubmit.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/leadCapturePopupTwoFa.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/leadCapturePopupTwoFaVerify.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/leadCapturePopupOptInCheckbox.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/leadCapturePopupBox.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/leadCapturePopupBoxImage.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/unlockCalculations/unlockCalculationStep.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lockedOverlay/lookAllWallsTutorial.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lockedOverlay/lookAllWallsTutorialHighlightFeature.js","webpack://QuickQuote/./src/bvcomponents/look/animations/lookMobileInfoButtonAnimatedIcon.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookListFeature/lookFeatureItemLocked.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookListFeature/lookListFeatureName.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardSectionListFeatureQuantity.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printPopup.js","webpack://QuickQuote/./src/qkbRoutes.js","webpack://QuickQuote/./src/bvcomponents/quoteDesign/quoteDesignPage.js","webpack://QuickQuote/./src/bvcomponents/ui/websiteButton.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/hideItemsSwitcher.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/fabricatorCostSwitcher.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/superAdmin/SuperAdminLoginButton.js","webpack://QuickQuote/./src/bvcomponents/initialFlow/initialFlow.js","webpack://QuickQuote/./src/bvcomponents/initialFlow/initialFlowFooterQuestion.js","webpack://QuickQuote/./src/bvcomponents/initialFlow/initialFlowType.js","webpack://QuickQuote/./src/bvcomponents/initialFlow/initialFlowRoom.js","webpack://QuickQuote/./src/bvcomponents/initialFlow/initialFlowLayout.js","webpack://QuickQuote/./src/bvcomponents/introVideo.js","webpack://QuickQuote/./src/bvcomponents/projectScope/projectScope.js","webpack://QuickQuote/./src/bvcomponents/projectScope/projectScopeMobile.js","webpack://QuickQuote/./src/bvcomponents/projectScope/projectScopeSearchInput.js","webpack://QuickQuote/./src/bvcomponents/projectScope/projectScopeDesktop.js","webpack://QuickQuote/./src/bvcomponents/projectScope/projectScopeDesktopSearchInput.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionWindowPage.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionWindow.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionWindowBvRequests.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionMain.js","webpack://QuickQuote/./src/bvcomponents/installation/instList.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoAssociated.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoAssociatedProducts.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoAssociatedProduct.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoDesc.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoMaterial.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoImage.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoImagesMobile.js","webpack://QuickQuote/./src/bvcomponents/ui/addProductNoteButton.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/addProductNoteEditor.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionRowList/selectionMainVirtualizedList.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionRowList/rowItemButtons.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionRowList/rowItemQuantity.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionRowList/rowItemPrice.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionRowList/rowItemRelatedProductsButton.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionRowList/rowItemRelatedProducts.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardSqftButton.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/wizardList/wizardList.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/wizardList/wizardDesktopGrid.js","webpack://QuickQuote/./src/interfaces/wizardObjectInterface.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/wizardList/wizardMobileGrid.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionGridList/selectionMainVirtualizedGrid.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionGridList/selectionMainVirtualizedFiltersGrid.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionGridList/selectionGridFiltersTitleDropdown.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionGridList/selectionMainVirtualizedGridMobile.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionGridList/selectionMainVirtualizedFiltersGridMobile.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/expandVisualizerMethods.js","webpack://QuickQuote/./src/actions/visualizerFunctions.js","webpack://QuickQuote/./src/bvcomponents/ui/icons/noInternetIcon.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionViewSwitchers.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/filtersButton.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFooter.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionMainSelect.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionMainSelectCategory.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFooterSubPart.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFooterSubSteps.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizard.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardBody.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardMain.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsCommon/materialsMainCanvas.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsCommon/materialsMainCanvasLayoutButton.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardMainList.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardHistoryListener.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardFooterStep.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsCommon/useExpandCollapseLogic.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardFooterButtons.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardFooterDropDown.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardFooterSelectButton.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartView.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartMobile.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartMobileHeader.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/changeRoomButton.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/priceInput.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/cartItemQuantity.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/cartItemCalcButton.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/cartItemTotal.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/cartItemSearch.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/cartItemSearchButton.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartDiscountsList.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartDiscountsListItem.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartItemsListInstallationItem.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/advancedQuotingList.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/similarProducts/similarProductsList.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/similarProducts/similarProductsListItem.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/advancedQuotingWizard/advancedQuotingWizard.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/advancedQuotingWizard/advancedQuotingWizardGroups.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/advancedQuotingWizard/advancedQuotingWizardGroupsSearch.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartItemsListWizardCustomItem.js","webpack://QuickQuote/./src/bvcomponents/ui/priceWorksheetButton.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartTaxInput.js","webpack://QuickQuote/./src/bvcomponents/ui/visualizerButton.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartFooterSubParts.js","webpack://QuickQuote/./src/bvcomponents/ui/buttonGroup.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/shoppingCartWizardFooterSteps.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/quote.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/priceWorksheetList.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discount.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discountAdd.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discountDeposit.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discountFinance.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discountNestedParent.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discountNestedChild.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartDesktop.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/unlockCalculations.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/unlockCalculationsSteps.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/unlockCalculationsTutorial.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/unlockCalculationsTutorialLowes.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartSureTaxUpdater.js","webpack://QuickQuote/./src/misc/updateSureTax.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsPopup.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsPopupSuccess.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsPopupDocument.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsPopupFooter.js","webpack://QuickQuote/./src/bvcomponents/common/pager.js","webpack://QuickQuote/./src/api/contract-api.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractInterface.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsPopupFields.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsPopupSignatureField.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsPopupCheckboxField.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsPopupNextIndicator.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsPopupFieldValue.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/signaturePadPopup.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/receiptSign.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lockedOverlay/lookLockTutorial.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lockedOverlay/lookLockTutorialModal.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheComponents.js","webpack://QuickQuote/./src/bvcomponents/look/lookZoomer.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookContextMenu.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookContextMenuContent.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookContextMenuVanityContent.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheSidebar.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeature.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureContent.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureOptionsType.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureOptionsShelfSide.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureOptionsSide.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureOptionsShowerPan.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureOptionsCabinetSide.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureOptionsBodySpray.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureOptionsSlatWall.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheRequiredFeatures.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeaturesTotalPrice.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheRequiredFeaturesSlider.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheMobile/groheMobileFeature/groheMobileFeature.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheMobile/groheMobileFeature/groheMobileFeatureAddedToTheCart.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheCategories/groheCategories.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheCategories/groheCategory.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFilters/groheFilters.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheSimilarProducts.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureShort.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeatures/groheFeatures.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheQuotingTool/groheQuotingTool.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheQuotingTool/groheQuotingToolIntro.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheQuotingTool/groheQuotingToolContent.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheQuotingTool/groheQuotingToolSteps.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheQuotingTool/groheQuotingToolResult.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeatureInfo.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureInfoContent.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureInfo3d.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureInfo3dViewer.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureInfoButtons.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureInfoAug.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheMobile/groheMobileFooter.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheMobile/groheMobileFooterButtons.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheWizard/groheWizardCompletedButtons.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheRoomLayouts/groheRoomLayouts.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheRoomLayouts/groheRoomLayoutsContent.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheRoomLayouts/groheLayoutItem.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheRoomIdeas/groheRoomIdeasContent.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheRoomIdeas/groheRoomPreset.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheCategories/groheSubCategories.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheTopButtons/groheTopButtons.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheTopButtons/groheExitButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheTopButtons/groheMenuButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheTopButtons/groheShareParentButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheTopButtons/groheShareButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheTopButtons/groheSaveButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheTopButtons/grohePingPilotButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheTopButtons/groheShopButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheSameColorFeatures/groheSameColorFeatures.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheSameColorFeatures/groheSameColorFeaturesContent.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheSidebarHeader.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartLogin/groheCartLogin.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartLogin/groheCartLoginHeader.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartStepper.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartLogin/groheCartLoginRegisterInputs.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartLogin/groheCartLoginRegisterCheckbox.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPages/groheCartSuccess.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDesignRecommended/groheCartDesignRecommended.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDesignRecommended/groheCartDesignRecommendedList.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDesignRecommended/groheCartDesignRecommendedFeature.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPages/groheCartTerms.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartConfirm/groheCartConfirm.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartConfirm/groheCartConfirmHeader.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDeliveryColumn.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartCardColumns.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDisclaimer.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withPaymentSubmit.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartTwoFA/groheCartTwoFA.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartTwoFA/groheCartTwoFAVerify.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCart.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartHeader.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartFooter.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPayment/groheCartBilling.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPayment/groheCartShippingDropdown.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPayment/groheCartPaymentDropdown.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPayment/groheCartBillingDropdown.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPayment/groheCartShipping.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPayment/groheCartPayment.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPayment/groheCartPaymentInputs.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPayment/groheCartBillingInfo.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDelivery/groheCartDelivery.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDelivery/groheCartDeliveryContent.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDelivery/groheCartDeliverySection.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDelivery/shippingTimes.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDelivery/groheCartDeliveryInterface.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheWizard/groheWizard.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheWizard/groheWizardContent.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheWizard/groheWizardContentFeature.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheWizard/groheWizardContentSingleFeature.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardSection.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardSectionGroup.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardSectionList.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lockedOverlay/lookLockTutorialCaller.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardSectionFilters.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardSectionFilterItem.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeaturePage.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeature.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeatureImage.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeatureImageGalleryItem.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeatureVisualizeButton.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeaturePrice.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeatureShipping.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeatureOptions.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeatureAddToCartComponents.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeatureSuccessMessage.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeatureDownloads.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeatureBackNextButtons.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeatureWizardButton.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopCategory/shopCategoryPage.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopCategory/shopCategoryList.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopCategory/shopCategoryVirtualizedGrid.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopCategory/shopCategoryListFeature.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopCategory/shopCategoryListFeatureOptions.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopCategory/shopCategoryAside.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopCategory/shopCategoryBackNextButtons.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopPingPilotButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheCompatabilitySection.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookCompatability/lookCompatabilitySectionButtons.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookCompatability/lookCompatabilitySectionContent.js","webpack://QuickQuote/./src/bvcomponents/look/lookComponents.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMain.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFooter.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFooterCounts.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainSections.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureMatchingStyleAlert.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureMatchingStyleAlertModal.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureColorMatch.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureUnlockButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainFeatureGroups.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainHeader.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainDeleteNotification.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardContent.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainSectionsMobile.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureMobileHeader.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainSectionsMobileWizard.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMobile.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMobileFooterButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookIntro/lookIntro.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookIntro/lookIntroBox.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookIntro/lookIntroBoxSteps.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookIntro/lookIntroBoxIcon.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookIntro/lookIntroCanvasHighlighting.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lockedOverlay/lookLockedOverlay.js","webpack://QuickQuote/./src/bvcomponents/look/animations/lookLockedOverlayAnimatedIcon.js","webpack://QuickQuote/./src/bvcomponents/look/lookFixedButtons.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookExitButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/squareFootageToolPage.js","webpack://QuickQuote/./src/bvcomponents/sqft/squareFootageToolCabinetsIntro.js","webpack://QuickQuote/./src/bvcomponents/sqft/SQFTPageAR.js","webpack://QuickQuote/./src/bvcomponents/sqft/SQFTPageARforTheSeparateModels.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","1","exports","module","l","e","Promise","resolve","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","oe","err","console","error","jsonpArray","window","oldJsonpFunction","slice","store","compose","applyMiddleware","__REDUX_DEVTOOLS_EXTENSION__","f","createStoreWithMiddleware","_zoomLevel","_isDemo","_isShowroomMode","_isTimeoutDisabled","_isTabletMode","_kioskConfigs","_userInfo","_kioskStandAlone","document","kvConfig","kioskMode","parent","app","db","_parent","exitEditQuote","log","UseFullSizeImages","location","href","indexOf","IS_OFFLINE_MODE","offlineMode","includes","USE_SERVER_CACHING","AVAILABLE_VISUALIZERS","Bathroom","Kitchen","Fireplace","LaundryRoom","BATHROOM_VISUALIZER_TYPES","AVAILABLE_VISUALIZER_TYPES","kvScene","bvScene","bvLook","NAVIGATION_TYPES","qkb","look","product","IS_LIXIL_SERVERS","host","domain","IS_LIXIL_PRODUCTION","devMode","userId","visualizerType","toolVersion","navigationType","IS_PRODUCT_JOURNEY","IS_LOOK_JOURNEY","IS_LIXIL_UI","IS_QKB_UI","IS_SUPER_ADMIN","isSuperAdmin","USE_FAB_FILTERS_ONLY","body","classList","add","getCommonVisualizerType","stringToCheck","toLowerCase","AVAILABLE_LANGUAGES","POST_MESSAGES","setIframeLanguage","userRegisterTrue","userRegisterFalse","userLoginTrue","userLoginFalse","IS_BATHROOM_OLD_BV_SCENE","REACT_APP_GOOGLE_API_KEY","_isQTEmbedded","_isTutorial","_visMgmt","_isDevMode","_showAllVisualizerGroups","showAllVisualizerGroups","_isMobile","test","navigator","userAgent","substr","_subdomain","IS_AS_BATHROOM","every","subDom","split","tables","config","getConfigs","configs","forEach","Config","AmazonS3","bucketName","root","encodeURI","userDataPath","replace","getScriptPath","scripts","getElementsByTagName","src","getAttribute","substring","lastIndexOf","appRootNode","layerSize","maxZoom","zoomIn","zoomOut","zoomLevel","viewSize","w","width","parseInt","height","demoUserDomains","isDemo","this","some","subdomain","kioskStandAlone","isKiosk","isShowroomMode","isTimeoutDisabled","isTabletMode","getSubdomain","isMobile","getParent","isQTEmbedded","isTutorial","isDevMode","isVisualizerManagement","userInfo","setUserInfo","getQuotePriceWithDiscounts","getQuotePriceWithTaxes","totalPriceObject","taxes","priceTaxes","reduce","acc","tax","materialTax","materialTaxes","totalPrice","totalDeliveryCost","materialPrice","installationPrice","installationTaxes","toFixedPrice","getDeliveryCost","deliveryList","getState","cartState","deliveryCostArray","delivery","cartItems","price","total","cost","calculateStoneCost","parseQuery","queryString","search","query","pairs","pair","decodeURIComponent","metaDataToCamelCase","featureThumbnailUrl","feature","size","menuType","PartMenuType","Complex","partThumbnail","dbFeature","customThumbnail","thumbnailUrl","s3FeatureImagePath","getPartThemeThumbnail","activeTheme","splitted","TAX_DISCOUNT_PCT","browserIsSafari","vendor","isIOSDevice","platform","isChrome","match","isIphoneX","iPhone","MSStream","aspect","screen","toFixed","isAndroid","isIframe","self","top","__pricingProfiles","isIE","MSInputMethodContext","documentMode","isFirefox","__pricingProfilesHit","pricingProfiles","QuotePricing","fabricatorState","pricingPreset","FEATURE_INSTALLATION","FEATURE_REGULAR","FEATURE_STONE","getFeatureType","isInstallation","stonePricingId","detectComplexLaborCartItem","cartItem","cartFeature","partId","autoAddToCart","complexLogic","hardcodedFloformV5Features","getTotalPrice","forQuote","calculateDiscount","cartItemsToCount","withNotInStock","state","filter","addedBy","CART_ITEM_ADDED_BY","user","isRemoved","isInStock","getBundledFeatures","instList","instState","fabricatorTaxes","settings","sureTax","Array","isArray","map","fabTax","id","materialRate","laborRate","nameIntl","laborTax","getInstallationsTotalCost","Number","isInteger","currentQuote","multipliedCostUsed","sort","a","b","getDifferentCurrencyCartItems","sharedFeatureName","featurePrice","parseFloat","displayFakePrice","calculateFeatureCost","quantity","fromQtCategory","stonePricing","serverState","stoneSupplier","stoneCost","SQFT_FEATURES","slabs","sqftSlabState","isSlabPricingEnabled","multipliedCost","multiplySlabCostForFeature","productPriceAfterDiscount","notTaxable","useShipping","getCartItemShippingCost","getCafeCountertopsDeliveryCost","Math","round","isEnabled","ignoreDiscounts","splitStaticPrice","priceWorksheetEnabled","discountSections","getFilteredSections","priceWorksheetState","discountSection","sortByOrder","getDiscountsForSection","customAddedDiscounts","discount","shouldCalculateDiscount","ignoreDiscount","type","DISCOUNT_TYPES","amount","cartItemToSkip","allCartItems","allSameFeaturesQuantity","checkCartItems","cItem","allStoneCost","laborExist","find","getFeatureCost","withTotalSlabCost","useSlabSqftPricing","forQuoteIndex","withCommas","ex","numberWithCommas","getSingleSlabArea","toFixedFeatureCost","storeState","slabArea","slabImageHeight","slabImageWidth","measureUnit","ceil10","sqInchesToSqFoot","mm2ToM2","quoteIndex","activeQuoteIndex","quotesState","featureCost","checkIfInCatProperty","getFeaturePriceProperty","featureTotalPrice","material","backsplashMaterial","quoteMaterial","quoteBacksplashMaterial","materials","index","isStoneFeature","fromVisualizerType","sqftState","ret","comparisonType","baseQuantity","maxQuantity","validateFeaturePrice","comparisonFor","fQuantity","plus","getHardCodedFloFormShopCartCost","$m","$b","getSqft","stoneSupplierStone","pricingProfileId","pricingPreset_id","quotePricing","__quotePricing","profile","_","first","pp","Id","ppdList","useFabricatorCostPrices","pricingProfileCostData","showSalePrices","pricingProfileDiscountData","pricingProfileData","ppd","slabSqftValue","end","materialSqft","msqft","$mc","$f","$c","$fa","ci","customDisplayName","displayName","groupName","wizardGroupId","fromWizardGroupId","wizardState","wizardActiveItem","keys","wizardSelectedValues","stepIndex","selectedValue","selectedFeature","$room","$i","$other","$useCostPrices","$useDiscountPrices","$sharedFeatureName","Function","logic","isNaN","markUpLogic","updatePriceWithMarkUp","__stoneSupplierStones","fabricatorSettings","minPrice","stoneSupplierStones","hasPricingProfileAssigned","fabPrice","calculatePrice","pricePlus","perQuantity","ceil","perUnit","margin","calcPriceWithMargin","stoneSupplierStoneInner","bFoundOther","validStoneSupplierStonePrice","trunc","metaData","toUpperCase","camelCased","charAt","capitalizeFirstLetters","str","word","join","getCurrencySign","currencyName","useDifferentCurrencies","getCurrencyPosition","getPriceWithCurrency","withSpace","alwaysRound","currencyPosition","currencySign","getFeatureCurrency","separateCurrency","isExact","formatter","Intl","NumberFormat","style","currency","minimumFractionDigits","maximumFractionDigits","format","getFeatureIsLocked","ignoreLocked","leadCaptureProperty","isVisualizerRoute","userState","filterState","isBackend","jobId","canSaveQuote","visualizerManagement","isPhoneNumberValidated","leadCaptureShoppingCart","hash","ROUTES","cart","list","featureIsLocked","unlocked","filterValues","filterValueIDs","filterKey","filterGroup","filterGroups","group","filterValue","values","lockedInWizard","array","order","getDefaultRoomName","objectWithoutProperties","obj","target","getArrayOfIdsFromBvState","bvState","checkDifferentVisualizers","arrayOfIds","bvStateValue","bvStateValueArrayItem","dbFeatureId","fabFeatId","getShareUrl","url","URL","searchParams","URLSearchParams","param","delete","set","baseHref","origin","pathname","toString","messages","quoteRoomType","getStringFeatureName","locale","fabricatorData","useCollectionName","isLowes","isCaesarStone","fromFeatureName","getFeatureName","isEncore","getCollectionName","_customDisplayName","getSlabUnit","getRoomName","quotes","getCurentQuoteRoomItem","quoteIndexToFind","quoteRoomNameToCompare","currentQuoteIndex","roomCartItem","getLowerCasedCustomDisplayName","room","upperCaseAlp","currentRoomName","roomItem","baseRoomName","quote","letterIndex","getBaseRoomName","getEventPosition","eventX","clientX","touches","changedTouches","eventY","clientY","x","y","getUrlParam","queryParam","getFeatureUnit","intl","formatMessage","unit","lowercasedUnit","getCartItemUnit","displayFakeFeatureGroupName","displayFakeQuantity","totalCount","getSlabsFeatureGroup","layout","getCurrentLayout","countertopFeatureGroup","getCountertopFeatureGroup","slabsFeatureGroup","addNonVisualizerSubPart","part","featuresList","translateId","wasCreatedFromGroupName","dbName","partName","getFeatureGroupName","getQtCategoriesWithSlabFeatureGroup","qtCategories","showSlabMode","selectedQuoteRoomCartItem","getCurrentQuoteRoomCartItem","selectedQuoteRoomFeature","activeCategory","qtCategory","featureIsMatchingQtCatName","categoryToSearch","subParts","subPart","findIndex","featureGroup","lowerCasedName","isDeStefano","customGroupDisplayName","canShowSqftButtonForFeature","fixDbFeatureProperties","fabFilterValueIDs","trim","forFeature","checkArray","canShowForCommonIds","enableSqFt","canShowSqftCabinetButtonForFeature","isCabinetsFabricator","canShowSqftButton","useCategorySwitching","getCartItemObject","fromFeature","newQuantity","qtActiveCategory","cartItemObject","selectionGroup","getRelatedFeaturesFromLayout","relatedFeatures","currentFeature","searchInputValue","selectedFilters","parentParts","parts","relatedFeaturesFound","noFeaturesFound","relatedFeature","featureIsFound","splitFeatureName","parentPart","relatedItems","relItem","edgeCondition","layoutType","description","filterFeaturesByValues","getFilteredRelatedFeatures","relatedFeaturesToCheck","relFeature","featureAlreadyExistIndex","getSplittedFeatureName","navigationSubItems","navItem","createRelatedGroups","relatedGroups","addedCartItem","cartQuantity","relatedFeatureGroupName","getAllFilterGroupValuesFromGroup","fValues","fValue","items","childValue","goToFabricatorUrl","websiteUrl","types","uuid","setWindowWidth","windowWidth","SET_WINDOW_WIDTH","payload","setJavascriptErrors","javascriptError","SET_JAVASCRIPT_ERRORS","setWindowHeight","windowHeight","SET_WINDOW_HEIGHT","setStonePricing","SET_STONE_PRICING","setCookieAccepted","cookieAccepted","SET_COOKIE_ACCEPTED","addVisualizersLoaded","newLoadedVisualizer","ADD_VISUALIZERS_LOADED","showSuccessNotification","successNotification","SHOW_SUCCESS_NOTIFICATION","addProjectDocument","file","sqftDiagram","documents","newDocument","uid","v4","text","created","Date","uploaded","existingCalcDiagramIndex","doc","ADD_PROJECT_DOCUMENT","setProjectDocumentsIds","oldDocuments","oldDoc","responseDoc","documentId","SET_PROJECT_DOCUMENTS_IDS","setJobId","SET_JOB_ID","setStep","activeStep","SET_STEP","setLayoutDataParts","layoutParts","SET_LAYOUT_DATA_PARTS","setStepSwitching","isSwitching","SET_STEP_SWITCHING","toggleSelectionWindow","selectionOpened","showFilters","dispatch","TOGGLE_SELECTION_WINDOW","setDefaultSelectionGroup","SET_DEFAULT_SELECTION_GROUP","setSelectionWindowView","selectionWindowView","SET_SELECTION_WINDOW_VIEW","toggleSelectionFeatureInfo","selectionFeatureInfo","TOGGLE_SELECTION_INFO","updateFeatureInfoCount","UPDATE_FEATURE_INFO_COUNT","setVanityType","vanityTypeSelected","SET_VANITY_TYPE","setShowerType","showerTypeSelected","SET_SHOWER_TYPE","changeSelectionInfoQuantity","selectionInfoQuantity","CHANGE_SELECTION_INFO_QUANTITY","togglePulseFeatureInfoQuantity","pulseFeatureInfoQuantity","TOGGLE_PULSE_FEATURE_INFO_QUANTITY","changeMaterialsInfoFeatureModules","materialsInfoFeatureModules","CHANGE_MATERIALS_INFO_FEATURE_MODULES","changeActivePartRelatedItemIndex","newActivePartRelatedItemIndex","activePartRelatedItemIndex","selectionState","CHANGE_SELECTION_ACTIVE_PART_RELATED_INDEX","isSameStep","setActiveFeature","activeFeature","SET_ACTIVE_FEATURE","toggleShowDescriptionCover","showDescriptionCover","TOGGLE_SHOW_DESCRIPTION_COVER","toggleBathroomVisualizerOpen","bvOpened","bathroomVisualizerState","bvVisited","loaderEnable","TOGGLE_BATHROOM_VISUALIZER_OPEN","setBathroomVisualizerVisited","SET_BATHROOM_VISUALIZER_VISITED","setBathroomVisualizerFeatures","bvFeatures","SET_BV_FEATURES","setBathroomVisualizerPresets","bvPresets","SET_BV_PRESETS","setActivePreset","activePreset","SET_ACTIVE_PRESET","setCanvasId","SET_BV_CANVAS_ID","toggleShowRestorePopup","showRestorePopup","TOGGLE_SHOW_RESTORE_POPUP","setCanvasDimensions","canvasDimensions","SET_CANVAS_DIMENSIONS","setCanvasScale","canvasScale","SET_CANVAS_SCALE","setLoadedPresets","loadedPresets","SET_LOADED_PRESETS","toggleLoader","loaderOpened","loaderText","loaderTitle","loaderFullScreen","TOGGLE_LOADER","setMultiLoader","multiLoader","SET_MULTI_LOADER","toggleUserPopup","userPopupState","TOGGLE_USER_POPUP","showCheckoutPopup","changeUserInfo","CHANGE_USER_INFO","changeUserInfoErrors","userInfoErrors","CHANGE_USER_INFO_ERRORS","toggleAdditionalFields","showAdditionalFields","TOGGLE_ADDITIONAL_FIELDS","setUserPhoneNumberValidated","validated","SET_USER_PHONE_NUMBER_VALIDATED","unlockPricing","userIsLoggedIn","userPopupOpened","addToCart","wizardIsActive","wizardActiveStep","allWizardsValues","fromWizardId","fromWizardGroup","fromWizardStep","wizardSteps","wizardGroup","isSquareFootageEnabled","getAvailableSteps","newCartItems","noteText","notesList","foundStep","getWizardStepFromCartItemFeature","getCorrectedWizardGroupForFeature","stepGroups","newCartItem","oldCartItem","bundleFeatures","bundleFeature","bundledFeatureQuantities","assign","bundleParentId","ADD_TO_CART","addDisplayLogicCartItem","ADD_DISPLAY_LOGIC_CART_ITEM","isAddedFromDisplayLogic","changeCartItemQuantity","removeFakeQuantity","CHANGE_CART_QUANTITY","removeFromCart","REMOVE_FROM_CART","changeCartFeature","skipOtherRules","CHANGE_CART_FEATURE","removeInstallationServiceFromCart","installationService","REMOVE_INSTALLATION_SERVICE_FROM_CART","clearCart","CLEAR_CART","toggleApplyPopup","applyPopupOpened","activeApplyPopupItems","TOGGLE_APPLY_POPUP","clickQuestionNo","questionNoClicked","CLICK_QUESTION_NO","setCameFromPage","cameFromPage","CAME_FROM_PAGE","addToRecentlyViewed","ADD_TO_RECENTLY_VIEWED","show","SHOW_CHECKOUT_POPUP","restoreCart","RESTORE_CART","toggleInstOpened","instOpened","TOGGLE_INST_OPENED","setInstList","SET_INST_LIST","setDefaultInstallations","defaultInstallations","SET_DEFAULT_INST_LIST","changeStateToQuote","SET_STATE_TO_QUOTE","setFabricatorData","SET_FABRICATOR_DATA","setFabricatorTaxes","SET_FABRICATOR_TAXES","updateFabricatorSettings","UPDATE_FABRICATOR_SETTINGS","toggleHideItemsSwitcher","TOGGLE_HIDE_ITEMS_PRICES","toggleUseFabricatorCostPrices","TOGGLE_USE_FABRICATOR_COST_PRICES","changeMessageBoxState","messageBoxState","CHANGE_MESSAGE_BOX","setSelectedFilters","SET_SELECTED_FILTERS","loadFilters","fg","fgValue","isFabricatorCustomFilter","LOAD_FILTERS","setExpandedFilters","expandedFilters","SET_EXPANDED_FILTERS","filterId","SHOW_FILTERS","showDocuSign","showFiltersIfHidden","SHOW_FILTERS_IF_NOT_VISIBLE","setFilterVisible","SET_FILTER_VISIBLE","loadMobileNav","LOAD_MOBILE_NAV","hideUserPopup","visible","inline","showSchedulerPopup","SHOW_SCHEDULER","toggleConfirmPopup","confirmPopupOpened","confirmPopupType","TOGGLE_CONFIRM_POPUP","callback","SHOW_DOCUSIGN","showDeposit","SHOW_DEPOSIT","checkForOrderCompletePopup","checkout","hasPaymentGateway","checkoutSuccess","showOrderCompletePopup","showCheckoutLayout","enableDeposit","unlockCalculationsState","unlockCalculationsTutorialIsFinished","_showDeposit","then","enableDocuSign","_showDocuSign","_showCheckoutPopup","shouldUseContractSigning","hashHistory","contract","_showContractSigning","catch","setQtCategoriesRequested","qtCategoriesRequested","SET_QT_CATEGORIES_REQUESTED","setQtCategoriesLoaded","qtCategoriesLoaded","SET_QT_CATEGORIES_LOADED","setQtActiveCategory","SET_QT_ACTIVE_CATEGORY","setIntroVideo","introVideo","SET_INTRO_VIDEO","updateCanvasCount","UPDATE_CANVAS_COUNT","setPresetWasChangedByUser","presetWasChangedByUser","SET_PRESET_WAS_CHANGED_BY_USER","setFirstLoadedPreset","firstLoadedPreset","SET_FIRST_LOADED_PRESET","addLayoutHistory","layoutState","ADD_LAYOUT_HISTORY","setLayoutHistory","layoutHistory","SET_LAYOUT_HISTORY","getCurrentLayoutInstance","getCurrentCanvas","getCurrentZIndexes","createFakeLayout","asLayout","scene","LayoutInstance","fakeLayout","isFakeLayout","parentGroups","getFeatures","needToLoadFeatures","allDbFeatures","s3Bindings","RoomLayout","isNewLayout","RoomScene","loadDbFeature","createCustomConfigurations","setDefaultFeatures","initialized","getVisualizerTypeFromBvScene","bathroom_floor","shower_body","kitchen_floor","getCurrentRoomType","LOOK_ROOM_TYPES","as","grohe","mainNeeded","oppositeNeeded","COUNTERTOP_LABELS","shower_wall","featureGroupCountertop","getSubPartFromQtCategories","getFeatureGroupByPartId","bathTubTypeToString","bathTypeType","BathTubType","Custom60in","FreeStanding","bathTubStringToType","bathtubString","LayoutType","Layout1","Layout2","Layout3","Layout4","Layout5","Layout6","Layout7","Layout8","Layout9","Layout10","Layout11","Layout12","Layout13","Layout14","Layout15","Layout16","Layout17","Layout18","Layout19","Layout20","LayoutAbbreviation","All","LayoutAbbreviations","LayoutAbbreviationsToRemove","METADATA","ALL","NO","LeftSide","RightSide","Center","Inner","Outer","StandAlone","SingleHole","WallHungSinks","WidespreadFaucets","BathtubWithEnclosures","BathtubWithoutEnclosures","ShowerComboTubType","bathtub_liner","replacement_tub","walk_in_tub","jetted_tub","CountsType","allLayoutFeaturesCount","largeLayoutFeaturesCount","smallLayoutFeaturesCount","totalFeaturesCount","VANITY_TYPES","VanityTypes","Complete","Custom","ShowerBodyType","Glass","Door","Simple","ShowerHeadTypes","shower_arm","shower_head_bundle","shower_trim_kit","shower_fixture","shower_system","ShowerHandTypes","hand_shower_kit","hand_shower_holder","vanity_cabinet","vanity_console","vanity_washstand","useNewNavLogicPartIds","vanityWizardFilters","showerWizardFilters","NotQCVanityDoorStylesFilters","COUNTERTOP_GROUP_BATHROOM","CABINET_GROUP_BATHROOM","CORNER_SHELVES_POSITIONS","SIDE_POSITIONS","CONTEXT_MENU_VANITY_ONLY","createParentPositions","layerPositions","position","createPageToLoadArray","nextFeaturesPageToLoadArray","layoutAbbreviation","page","allReceived","PAN_POSITIONS","VANITY_POSITIONS","LOOK_OPENED_TYPES","edit","featureZoom","LOOK_FEATURE_CONTENT","info","threeD","aug","gallery","LOOK_OVERLAYS","exit","intro","print","reset","loadingCart","questionLogin","questionShare","questionView","questionViewUpdated","questionRemove","saveSucess","stylePairing","styleColor","styleRemove","styleRemoveBack","styleRemoveFeature","notCompatiblePopup","leadCapture","LOCAL_STORAGE_KEYS","introVisited","saveQuoteRequired","requiredShareButton","LOOK_INTRO_STEPS","welcome","layoutsAndRooms","wallsAndFloor","saveAndMore","review","LOOK_INTRO_STEPS_MOBILE","layouts","rooms","CONTEXT_MENU_VANITY_BUTTONS","CONTEXT_MENU_BATHTUB_BUTTONS","CONTEXT_MENU_SPLIT_WALL","CONTEXT_MENU_SHOWER_ALL","CONTEXT_MENU_SHOWER_OTHER","CONTEXT_MENU_SHOWER_ACCESSORIES","CONTEXT_MENU_KITCHEN_COUNTERTOPS","CONTEXT_MENU_KITCHEN_CENTER_ISLAND","DECORS_MAX","ALL_CONTEXT_MENU","ALL_CONTEXT_MENU_KITCHEN","LOOK_WALLS","LOOK_WALLS_ONLY","POSSIBLE_ONE_POSITION","WHITE_PAGE_ROUTES","view","login","register","AVAILABLE_FILTERS","WIZARD_STEP_WIDTH","WIZARD_STEP_MOBILE_WIDTH","WIZARD_STEP_PRODUCT_JOURNEY","LOOK_NAVIGATION_LIST_TYPES","regular","designRec","notMatchingMeta","isAnalytics","ga","isMixPanel","mixpanel","Analytics","sendEvent","action","label","analyticsDebugging","gtag","track","source","shareUrl","sendPageEvent","sendDataEnteredEvent","sendClickEvent","sendEcommerceEvent","setUserId","setMixPanelPerson","email","phone","alias","identify","people","setExistingMixPanelPerson","logOutMixPanel","sendParentPostMessage","country","firstName","phoneNumber","postal","postMessage","getSkuForAnalytics","withPartId","sku","getStringForAnalytics","string","QKB_ANALYTIC_EVENTS","quotingToolWizardSwitch","LOOK_JOURNEY_ANALYTIC_EVENTS","lookExit","lookCartButton","lookSidebarHome","lookSidebarFilters","lookSidebarEdit","lookSidebarRooms","lookSidebarPingPilot","lookSidebarSave","lookSidebarMore","lookSidebarShare","lookSidebarReset","lookSidebarFacebook","lookSidebarTwitter","lookSidebarPinterest","lookSidebarFeatureGroup","lookFooterExpandMenu","lookFooterCloseMenu","lookMenuHeaderClose","lookMenuHeaderBack","lookMenuHeaderViewType","lookFooterList","lookZoomPlus","lookZoomMinus","lookCanvasLayer","lookCanvasContextMenu","lookCanvasContextMenuItem","lookCanvasDemoPoint","lookFeatureImageChangeLeft","lookFeatureImageChangeRight","lookFeature3dAndArOpen","lookFeature3dAndArClose","lookFeatureMoreInfoOpen","lookFeatureMoreInfoClose","lookFeatureInfoContentHeaderClose","lookFeatureInfoContent3dAr","lookFeatureInfoContentSwitch","lookFeatureInfoContentFeatureLink","lookFeatureInfoContentAccordionOpen","lookFeatureInfoContentAccordionClose","lookFeatureChange","lookFeatureUnlock","lookFeatureRemove","lookFeatureEnable","lookFeatureConfirmChange","lookFeatureOptions","lookFeatureMatchColorsCheckbox","lookFeatureMobile3dButton","lookFeaturesListDesignRecommended","lookFeaturesList","lookFeaturesFiltersClose","lookFeaturesFiltersReset","lookFeaturesFiltersAccordionOpen","lookFeaturesFiltersAccordionClose","lookFeaturesFiltersValueChecked","lookFeaturesFiltersValuerUnChecked","lookOverlayLeave","lookOverlaySave","lookPopupLogin","lookRoom","lookLeadCapturePopupLogin","lookLeadCapturePopupRegister","lookLeadCapturePopupForgotPassword","lookLeadCapturePopupTwoFAResendCode","lookLeadCapturePopupTwoFAReceiveCall","lookLeadCapturePopupTwoFAUpdatePhone","lookMobileActiveFeatureButton","lookMobileListClose","lookIntroLearnToUse","lookIntroStartDesign","lookIntroSkip","lookIntroFinalStepStartDesign","lookIntroPagination","lookIntroNextStep","lookRoomIdeasOnIntro","lookRoomIdeasOpen","lookRoomIdeasClose","lookRoomIdeasPreset","lookMainCategory","lookCanvasPolicyLinks","lookListPolicyLinks","lookListHeaderSave","lookListBackToCustomize","lookListAddToCart","lookListOpenMiniCart","lookListSelectAllItems","lookListCartItemSelect","lookListCartItemQuantityChange","lookListCartItemRemove","lookListCartItemMoreDropdown","lookListCartItemMoreDropdownWishlist","lookListCartItemMoreDropdownChange","lookStylePopupConfirmRemove","lookStylePopupRemoveBackContinue","lookStylePopupRemoveBack","lookStylePopupConfirm","lookPopupSaveSuccessSubmit","lookPopupSaveResetSubmit","lookPopupChangeViewSubmit","lookMenuWizard","lookWizardParent","lookWizardListFeature","lookWizardListFilter","lookWizardMatchAll","lookWizardCompletedClose","lookShowCompatabilityAlert","lookCloseCompatabilityAlert","lookCloseAndApplyCompatabilityAlert","lookLockedButton","lookSidebarRevertCtrlZ","PRODUCT_JOURNEY_ANALYTIC_EVENTS","productTopButtonsShop","productTopButtonsExit","productTopButtonsMenu","productTopButtonsShare","productTopButtonsPingPilot","productTopButtonsShareFacebook","productTopButtonsShareTwitter","productTopButtonsSharePinterest","productTopButtonsSave","productCanvasLayer","productCanvasContextMenu","productCanvasContextMenuItem","productCanvasDemoPoint","productSidebarHeaderAllProducts","productSidebarHeaderRoomLayouts","productSidebarHeaderCart","productSidebarCategory","productFeatureChange","productFeatureImageChangeLeft","productFeatureImageChangeRight","productFeatureMoreInfoOpen","productFeatureMoreInfoClose","productFeatureInfoContentAccordionOpen","productFeatureInfoContentAccordionClose","productFeatureQuantityChange","productFeatureRemove","productFeatureEnable","productFeature3dAndArOpen","productFeature3dAndArClose","productFeatureInfoContentHeaderClose","productFeatureInfoContent3dAr","productFeatureInfoContentSwitch","productFeatureInfoContentFeatureLink","productFeatureUnlockNow","productFeatureLockedBadge","productFeatureLocked3DButton","productFeatureSQFT","productFeatureAddToCart","productFeatureContinueShopping","productFeatureCloseProductsList","productFeatureOptions","productFeatureMobile3dButton","productFeaturesNext","productFeaturesList","productFeaturesListViewType","productFeaturesFiltersClose","productFeaturesFiltersReset","productFeaturesFiltersAccordionOpen","productFeaturesFiltersAccordionClose","productFeaturesFiltersValueChecked","productFeaturesFiltersValuerUnChecked","productSimilarListClose","productSimilarListTitle","productSimilarListFeature","productSimilarListFeatureAddToCart","productOverlayLeave","productOverlaySave","productPopupLogin","productMatchColorsVisualizeAllCheckbox","productRoom","productRoomLayouts","productRoomIdeas","productRoomIdeasPreset","productFiltersOpen","productMenuFooterButton","productPopupSaveSuccessSubmit","productPopupResetSubmit","productPopupChangeViewSubmit","roomsRoomLayouts","roomsRoomIdeas","cartCheckoutLogin","cartCheckoutRegister","cartCheckoutSuccessContinueShopping","cartCheckoutSuccessViewAll","cartCheckoutSuccessFeature","cartTermsAccept","cartTwoFANext","cartTwoFAUpdatePhone","cartTwoFAResendCode","cartTwoFAReceiveCall","leadCapturePopupLogin","leadCapturePopupRegister","leadCapturePopupForgotPassword","leadCapturePopupTwoFAResendCode","leadCapturePopupTwoFAReceiveCall","leadCapturePopupTwoFAUpdatePhone","productLockedButton","shopFeaturesList","shopFeaturesListOptions","shopFeatureOptions","shopFeatureAddToCart","shopHelpChat","shopSQFTButton","SHAPE_PART_ID","SQFT_POST_MESSAGE_ACTIONS","initialLoad","setQTData","closeSqFtCalc","callResetDataPopup","callChangeLayoutDataPopup","userIdleResetCounter","resetHistory","saveHistory","setNewLayoutOnSqft","setCanvasCenter","stopRender","startRender","MEASURE_UNITS","Metric","Imperial","edge","seamPiece","backsplashPiece","waterfallPiece","slabPlaceHolder","top_cabinet","bottom_cabinet","tall_cabinet","lower_cabinet_boxes","upper_cabinet_boxes","tall_cabinet_boxes","countertop","spacer","vanity_countertop","center_island_countertop","front_wall","dishwasher","hood","fridge","stove","SIDEBAR_NAVIGATION_BUTTONS","FEATUREGROUP_PART_ID","specialty_cut_and_designs","SHAPE_ROTATE_DIRECTION","right","left","ALIGN","center","SHAPE_TYPE","polygon","square","wideangle","horseshoe","appliances","RENDER_TEMPLATES","default","linesOnly","filledPrimary","accordingToFeature","filledActive","SIDEBAR2_BUTTONS","menu","classNames","hasMenu","SIDEBAR_BUTTONS_MENU","move","shapes","summary","cabinetset","SIDEBAR_SLAB_BUTTONS","rotate","loadSlab","seam","duplicate","MOVABLE_IMAGE_TYPES","slabImage","SIDEBAR_SLAB_SEAM_BUTTONS","addSeamHorizontal","addSeamVertical","undoSeam","resetSeams","freeDraw","resize","corners","radius","backsplash","end_cap","angle","bumpout","hardCodeIsLowes","mitered","hardCodeIsMcDermott","toolWaterfall","hardCodeIsModerno","hardCodeIsPorcelanosa","toolUnderlayment","SIDEBAR_NAVIGATION_CABINET_BUTTONS","SIDEBAR_TYPE_AREA_NAVIGATION_BUTTONS","lower","upper","tall","centerIsland","wall","crown","top_handle","bottom_handle","end_panel","SQFT_APPLIANCES","SIDEBAR_NAVIGATION_BUTTONS_LEVEL3","filters","SIDEBAR_BUTTONS","message","shouldHardcodeMessage","subMenu","title","additionalClassNames","SIDEBAR_TYPE_AREA_BUTTONS","SIDEBAR_CABINET_BUTTONS","SIDEBAR_WITH_FEATURES_SUBMENU","SIDEBAR_HIDDEN_BUTTONS","buttonMitered","buttonCustomBacksplash","edgePeninsulaUnderwrap","SIDEBAR_SHAPE_BUTTONS","lshape","rectangle","dot","isDisabledInPopupShouldBeHidden","hardCodeIsCaesarStone","SIDEBAR_LAYOUTS_BUTTONS","refrigerator","range","sink","doubleSink","iceMachine","oven","stovetop","trashCompactor","wineFridge","CABINET_LABELS","SQFT_APPLIANCES_CAES","crown_molding","handle","SQFT_CABINET_APPLIANCES","CABINET_BOXES","SQFT_VIEW_MODE","SQFT_APPLIANCES_WITH_SUBMENU","microwave","SQFT_SHAPES_THAT_ADD_OVERHANG","SQFT_MODE","slab","twoDMode","threeDMode","threeDModeDoors","threeDModeFramed","threeDModeFrameless","augmentedReality","augmentedRealityCabinet","augmentedRealityDoorsOnly","SQFT_VIEW_AR_MODES","MANUAL_CALCULATION_ROW_TYPES","countertopRows","backsplashRows","edgeRows","DIRECTION","north","east","south","west","MANUAL_CALCULATION_MEASURE","SQFT_BACKSPLASH_TYPES","SQFT_BACKSPLASH_TYPES_METRIC","SQFT_WALL_TYPES","SQFT_MEASURE_UNIT","imperial","metric","FREE_DRAW_TYPE","shape","CONTEXT_MENU_TYPE","buttons","bumpouts","backsplashes","edges","shower_floor","vanity_accent","vanity_backsplash","shower_interior_wall","shower_interior_wall_accent","shower_wall_accent","accent_wall","wall_a","wall_b","wall_c","underlayment","wall_door_end_accessory","base_door","island_panel","refridgerator_panel","hinge","END_CAP_CABINETS_PART_IDS","PARENT_KEYS_WITH_COMBINED_FEATURES_IN_CART","END_CAP_AREA_PART_IDS","END_CAP_PART_IDS","SQFT_AREA_TYPE_PART_IDS","SQFT_PARENT_FEATURE_GROUP_PART_IDS","SQFT_CHILD_FEATURE_GROUP_PART_IDS","BACKSPLASH_LABELS","HANDLE_TO_CABINETS","CABINETS_TO_HANDLE","CABINET_COMMON_COLOR_PART_IDS","FEATURE_QUANTITY_UNITS","EDGE_LABELS","edge_profile","center_island_edge","CORNER_LABELS","corner","SHAPE_PART_IDS_USING_SAME_COLOR","FEATURES_WITH_0_VALUE_FOR_THE_SLABS","ALLOWED_LABEL_NAV_ITEMS","POINT_PROPERTY","arcLength","RESOURCE_TYPE","attachedToLine","waterfallSectionsData","underlaymentSections","RESOURCE_ATTACHED_TO_TYPE","waterfall","RESOURCE_ATTACHED_TO_NAME","WORKSPACE_RESOURCES","spacers","handles","crownMolding","walls","shapeColors","removedFeatures","snappedShapeGroups","selectedShapes","images3d","WATERFALL_SHAPES_KEY","cabinetReturn","overhangReturn","peninsulaUnderwrap","WATERFALL_SHAPES_NAME","SQFT_GROUP","area","cabinets","SQFT_AR3D_POPUP_CONTENT_TYPE","ar","SQFT_AR3D_GLB_VIEWER","singleModel","separateModels","MITER_UNDERWRAP_EDGE_NAMES","MITER_EDGE_NAMES","WATERFALL_OVERLAY_TYPE","MITERED_OVERLAY_TYPE","APPLIANCES_THAT_SHOULD_RENDER_MEASUREMENTS_INSIDE_THE_SHAPE","CABINET_FILTER_NAMES","knobs","hinges","slideSets","doors","drawers","CABINET_SET2","ContentType","None","Layout","Design","DisplayRoom","Loading","QuotedItems","ContentTypeName","2","3","6","ContentTypeNameTranslate","UserPopupTypes","Unlock","GetQuote","NewDesign","Schedule","ConfirmPopupTypes","ConsultationRequest","SqftResetChanges","SqftUpdateQuestion","AssignQuoteOnExistingUser","DeleteCartItemsPopup","ChangeWizardToPreviousStepSelection","ReplaceRoomWhenItExistsInCartButWeAddNew","UserPopupContent","terms","forgot","twoFA","twoFAVerify","QuoteRequestType","RequestQuote","ScheduleAnAppointment","RequestDateTime","RegularDesign","RequestConsultation","UserAction","Login","Register","SqftUpdateTypes","Reset","UpdateData","dbFeatureRelatedFeaturesProperties","dbFeatureFilterProperties","otherMissingProperties","colorOptions","matchesMetaFailed","initializeDependentProperties","fieldWidth","getMM","fieldWidthCabinet","updateDimensions","updateDefaultScale","scale","defaultScale","div","createElement","appendChild","dpi","offsetHeight","removeChild","getDPI","kioskApp","initialize","updateWorkspace","innerWidth","workspace","fontSize","fontSizeMetric","fontSizeSmallest","getMeasureMultiplier","millimetersMultiplier","getMeasureUnitPostfix","shouldAddWhitespace","isCabinetGroupInURL","isSQFTEnabledInURL","getScaledGridSize","gridSize","isDefault","scaledGridSize","nearest","ctx","mmDivider","mm2ToM2Divider","inchesToMMultiplier","sqftToMmMultiplier","sqftToM2Multiplier","lnftToMmMultiplier","waterfallImperialHeight","waterfallMetricHeight","miteredEdgeAdditionalImperialArea","miteredEdgeAdditionalMetricArea","edgeHeightImperial","edgeHeightMetric","minApplianceLineLength","maxApplianceLineLength","imageWidthMetric","imageHeightMetric","imageWidthImperial","imageHeightImperial","canvas","getDefaultScaledGridSize","debug","snapToGrid","menuItemActive","defaultScaleExport","zoomSpeed","controls","scaleHoriz","flipH","flipV","rotateLeft","rotateRight","activeClass","activePalletItemClass","groups","tools","tutorialIsRunning","highlight","points","lines","demoShow","rotateAngle","SNAP_OFFSET","activeFontRegular","activeFontBold","crownMoldingParams","distance","glbViewer","useGoogleModelViewer","useStagingDomain","shouldUseCabinetDoorsSQFT","hardCodeIsRenuit","addEventListener","mouseDown","mouseDownPosition","allowDragEdge","allowDragBumpoutEdge","allowDragMiteredEdge","lineHighlight","loading","objIds","pos","nodes","appBody","designDefault","setCanvas","isInitialized","isEdgeFeatureError","dataHasBeenImported","isLastParent","miteredController","underlaymentController","resultImages","textBoxManager","onMouseDown","mousePos","lineInputFocused","stealCursor","setCursor","onMouseUp","updateShapesIntersections","updateShapesSnappedGroups","onMouseMove","terminate","xDiff","yDiff","setPos","moveWorkspace","resetCursor","getObjIds","setObjIds","who","setAllowEdges","allow","getAllowEdges","setAllowBumpoutEdges","getAllowBumpoutEdges","setAllowMiteredEdges","getAllowMiteredEdges","setAllowLineHighlight","getAllowLineHighlight","getCenter","setCenter","canvasWidth","canvasHeight","innerHeight","getVisibleCenter","getAllShapePoints","allShapePoints","shapeCenter","getPointField","getShapesCenterPoint","getCenterPoint","getCanvas","get$Canvas","getOffset","setPosition","newPos","clone","getPosition","getScale","isEmpty","getShapes","getHoverShape","isHovering","getHoveredSqftShape","getMovingShape","getHoverBumpout","getLines","isWithBumpout","bumpoutOverlay","isHoveringRect","getLineWithMovingBumpout","isBumpoutPointMoving","getHoverPoint","point","getHoverMiteredPoint","isWithMitered","getHoveredLine","getHoverSegment","hoveredLine","getHoveredLines","skipShapeIds","iterateShapes","shp","hoveredLines","getHoverSegmentV2","getHoveredLineCorner","getHoverSegmentOutlineCorner","getShapesWithoutAttachedResources","isWithoutHidden","isHidden","attachedToLineResources","sqftResourceState","concat","getShapeIds","getShapesByIds","ids","getShapesBySlabModeCoreParentId","slabModeCoreParentId","clearWorkspace","removeAllShapes","removeAllTextBoxes","removeAllSlabImages","removeAllSlabBacksplashes","deleteAllResources","deleteAllMiteredSections","deleteShapeOffset","import","importData","clearAllMenusEvents","edgeFeatures","countertops","_images","_attachedResources","importShape","image","importSlabBacksplashes","slabAdditionalShapesList","attachedResource","getLinesAndLineCorners","line","attachedToId","isDisabledInPopup","attachResource","isLine","featureId","qtCatName","attachedTo","importImage","setImportedTextBoxes","textBoxes","importSlabImages","slabImages","sqftMenuState","isShapeFeatureMissing","showChangeShapeColorsMessage","importControllersData","controllers","rememberShapes","imageData","generateImage","importedMovableImage","addImage","subtype","priority","Image","imageProperty","shapeData","shapeIdsWithMissingFeature","setSQFTPopup","content","isOpened","confirmCallback","removeShapeWithIds","setShapeIdsWithMissingFeature","setShouldShowChangeShapeFeatureMissingMessage","closeSQFTPopup","confirmText","cancelCallback","cancelText","getPointProperty","arcLengths","from","getQtCatName","getSink","sinks","getAttachedTo","img","getImage","sinkId","dataset","bExists","qty","getBumpouts","flatMap","getBumpoutTotalArea","millimeters","inches","featureObjectDTO","addBumpoutArea","allLines","getLineCorners","allLineCorners","getLineById","getLineCornerById","undefined","lineCorner","getLineOrCornerLineById","lineSegment","getMiteredSections","sqftMiteredState","miteredSections","getShapeType","addedEdges","edgeName","isImageShapeType","isLabelShapeType","backsplashLength","realLength","lineLength","storedShapes","SHAPE_PART_IDS_VISIBLE_ONLY_IN_THE_SLAB_MODE","historyProps","getBacksplashArea","getBacksplashHeight","getBacksplashLength","getEdgeLength","getEdgeFeatures","edgeFeature","getLineLength","getLineLengthMm","getEdgeArea","parentId","segments","pieces","getTotalInches","getTotalMillimeters","getFeatureGroup","featureGroupName","mmToM","hoverShape","subType","historyCallBack","historyPosition","objId","hide","params","canSnap","isResizable","vc","newImage","onInit","onShapeReady","attachedToShape","init","attachedShape","attachedToParentId","unshift","getAttachedToLineResource","getImagesAttachedTo","addShape","shapeType","fromLayout","shapeParams","realPartId","checkShapeForAvailablePartId","mm","getMinMax","shapeId","newShape","openedMobileButton","setQtCatName","onHover","onShapeHover","hasClass","addClass","removeClass","tutorialShape","setFeatureId","getShapeFeatureId","removeTutorialShape","removeShape","shapeIds","removeShapeById","removeSlabImage","movableImage","croppedSlabImages","deleteCroppedSlabImage","deregisterEvents","getShapeById","combinedShapes","shapesCopy","currentShape","overlay","destroy","deleteAttachedItem","to","removeAttachedItem","originalIndex","removeShapePieces","slabAdditionalShapes","removeShapeFromList","updateCalculations","updateSQFTCalculations","updateRemovedFeatures","addResource","removeFeatureBySQFTId","sqftId","deleteAttachedItemById","removeAllBumpouts","removeBumpouts","setSqftCroppedSlabImages","setIntl","$canvas","addEvent","events","MOUSE_MOVE","priorities","WORKSPACE","MOUSE_DOWN","MOUSE_UP","RENDER","render","isSFTCabinetsGroup","initCabinetEvents","renderGrid","workspaceController","start","scaledGrid","lineWidth","clearRect","beginPath","moveTo","lineTo","strokeStyle","stroke","setLookOpened","lookOpened","SET_LOOK_OPENED","setLookExpanded","lookExpanded","setLookParentKeys","lookParentKeys","SET_LOOK_PARENT_KEYS","setLookViewType","lookViewType","SET_LOOK_VIEW_TYPE","setWishlistPopupOpened","wishlistPopupOpened","SET_WISHLIST_POPUP_OPENED","setSidebarModalOpened","sidebarModalOpened","SET_SIDEBAR_MODAL_OPENED","setLookActiveFeature","newLookActiveFeature","lookActiveFeaturePositionInList","SET_LOOK_ACTIVE_FEATURE","lookActiveFeature","useTrumbleApi","quantityOptions","setTrumbleInventoryForFeatures","UPDATE_LOOK_ACTIVE_FEATURE_STOCK_COUNT","setLookActiveCategory","lookActiveCategory","SET_LOOK_ACTIVE_CATEGORY","setLookMoreInfoOpened","moreInfoOpened","moreInfoContent","SET_LOOK_MORE_INFO_OPENED","setLookPageOpened","lookPageOpened","SET_LOOK_PAGE_OPENED","setLookOverlayOpened","lookOverlayOpened","lookOverlayAction","SET_LOOK_OVERLAY_OPENED","setLookViewChangeOptions","lookViewChangeOptions","SET_LOOK_VIEW_CHANGE_OPTIONS","setLookStylePopup","lookStylePopup","SET_LOOK_STYLE_POPUP","setLookRemovePopup","lookRemovePopup","SET_LOOK_REMOVE_POPUP","setLookIntroStep","introStep","SET_LOOK_INTRO_STEP","setLookIntroHidden","introHidden","SET_LOOK_INTRO_HIDDEN","setLookContextMenu","contextMenu","SET_LOOK_CONTEXT_MENU","setLookWallsApplyTo","lookWallsApplyTo","SET_LOOK_WALLS_APPLY_TO","setLookAllWallsOpened","lookAllWallsOpened","SET_LOOK_ALL_WALLS_OPENED","setLookReturnAction","lookReturnAction","SET_LOOK_RETURN_ACTION","setLookDemoPointsClicked","lookDemoPointsClicked","SET_LOOK_DEMO_POINTS_CLICKED","updateNavigationCount","UPDATE_LOOK_NAVIGATION_COUNT","setLookCompatabilityAlert","lookCompatabilityAlert","SET_LOOK_COMPATABILITY_ALERT","setLookRestoreState","lookRestoreState","SET_LOOK_RESTORE_STATE","setLookLockedTutorial","lookLockedTutorial","SET_LOOK_LOCK_TUTORIAL","setLookAllWallsTutorial","lookAllWallsTutorial","SET_LOOK_ALL_WALLS_TUTORIAL","SET_RELATED_GROUPS","SET_RELATED_GROUPS_SEARCH","TOGGLE_GALLERY_VISIBLE","SET_GALLERY_ACTIVE_IMAGE_INDEX","SET_MATERIALS_PAGE_SUB_STEPS","SET_MATERIALS_PAGE_ACTIVE_SUB_STEP","TOGGLE_NOT_COMPATIBLE_VIEW","TOGGLE_PRODUCT_NOTE_EDITOR_VISIBLE","SET_ROW_ITEMS","SET_MATERIALS_PAGE_CANVAS_CLASS","SET_LANGUAGE","SET_ACTIVE_THEME","SET_NETWORK_CONNECTION","SET_INITIAL_VISUALIZER_TYPE","SET_STATIC_CANVAS_IMAGE","SET_EMPLOYEES_LIST","RESTORE_USER_STATE","SET_ALREADY_REGISTERED_USER","SET_LEAD_CAPTURE_CLICK_COUNT","SET_USER_POPUP_CONTENT","SET_USER_TWO_FA","SET_USER_OPT_IN","SUBMIT_PAYMENT","SUBMIT_PAYMENT_RESPONSE","SHOW_ORDER_COMPLETE_POPUP","TOGGLE_SHOW_MOBILE_QUOTES","TOGGLE_SHOW_ALL_QUOTES_CART_ITEMS_LIST","SET_AGREE_EMAIL_CHECKBOX","SET_CART_FOOTER_ACTIVE_BUTTON_INDEX","SET_CART_ITEM_EDIT_FEATURE","SET_LOOK_REMOVED_CART_ITEMS","SET_AMAZON_IMAGE_URL","SET_CART_ITEMS_ADDED_TO_PARENT_CART","CHANGE_ALL_CART_ITEMS","SET_SURE_TAX","SET_SURE_TAX_LOADING","SET_MANUAL_TAX","SET_MARK_UP_LOGIC","SET_DELIVERY_LIST","SET_ALL_FEATURES_LOADED","SET_ALLOW_ROUTING","SET_ALLOW_MAIN_LOADING","SET_ACTION_AFTER_VISUALIZER_TYPE_CHANGED","SET_VISUALIZER_TYPE_CHANGING","TOGGLE_PRICE_WORKSHEET_OPENED","SET_DISCOUNT_SECTIONS","SET_CUSTOM_ADDED_DISCOUNTS","SET_FINANCE_PERCENTAGE","SET_ALL_FINANCE_OPTIONS_POPUP_VISIBLE","SET_DISCOUNT_FINANCE_CELLS_VISIBLE","SET_AVAILABLE_FILTER_VALUES","UPDATE_FILTERS_COUNT","SET_COUNTERTOP_FILTERS_RECEIVED","TOGGLE_DESKTOP_NAVIGATION","SET_ACTIVE_NAVIGATION_NAMES","SCHEDULER_SCHEDULE","SET_MODULE_CONTEXT_MENU_TYPE","SET_MODULE_CONTEXT_MENU_MODULE","SET_MODULE_CONTEXT_MENU_MODULE_PART","SET_MODULE_CONTEXT_MENU_DIRECTION","SET_NAVIGATION_VIEW_TYPE","SET_CABINETS_APPLY_TO","SET_CABINETS_APPLY_TO_BATHROOM","SET_COUNTERTOPS_APPLY_TO","SET_COUNTERTOPS_APPLY_TO_BATHROOM","SET_APPLY_TO_COMMON","SET_EDGES_APPLY_TO","SET_NAVIGATION_LOADING","UPDATE_DISABLE_FEATURE_GROUP_RADIO","TOGGLE_NAV_ITEM_POSITION_MODAL","SET_USE_FEATURES_LIGHT_REQUEST","SET_ACTIVE_NAVIGATION_FILTER","SET_ACTIVE_NAVIGATION_FILTER_STEP_INDEX","SET_CABINET_NAVIGATION_FILTER_COMPLETED","SET_COUNTERTOP_NAVIGATION_FILTER_COMPLETED","SET_COUNTERTOP_WIZARD","SET_WIZARD_CONFIG","SET_WIZARD_IS_ACTIVE","SET_WIZARD_ACTIVE_FILTER_GROUP_INDEX","SET_WIZARD_LIST","SET_WIZARD_ACTIVE_ITEM","SET_WIZARD_SHOW_FEATURE_SECTION","SET_WIZARD_ACTIVE_STEP","SET_WIZARD_SELECTED_VALUES","SET_ALL_WIZARD_SELECTED_VALUES","SET_WIZARD_CONFLICT_POPUP_OPENED","SET_WIZARD_CONFLICT_STEPS","RESTORE_ALL_WIZARD_SELECTED_VALUES","SET_WIZARD_MISSING_FEATURES","SET_WIZARD_SQFT_CART_ITEMS","ENABLE_SQUARE_FOOTAGE","SET_SQUARE_FOOTAGE_GROUP","SET_SQFT_VIEW_MODE","LOAD_SQFT","UPDATE_SQFT","UPDATE_SQFT_CALCULATIONS","SET_SQFT_SQUARE_FEET","TOGGLE_CHANGE_LAYOUT_POPUP","SET_NEW_LAYOUT_ON_SQFT","SET_SQFT_MEASURE_UNIT","CHANGE_SQFT_FEATURES_POPUP","SQT_SQFT_FROM_FEATURE","SET_CABINETS_GLB","SET_CABINETS_AR_BLOB_URL","SET_API_ERROR_MESSAGE","SET_SHAPE_IDS_WITH_MISSING_FEATURES","SET_CHANGE_SHAPE_FEATURE_MISSING_MESSAGE","ADD_SHAPE_ID_WITH_MISSING_FEATURES","SET_SELECTED_COUNTERTOP","SET_SELECTED_WALL","SET_ABORT_CONTROLLER","SHOW_SLAB_TOOL","SET_SLAB_TOOL_VISITED","ADD_ROOM_WITH_VISITED_SLAB_TOOL","SET_ACTIVE_SLAB_ID","SET_ACTIVE_SLAB_URL","SET_SQFT_SLAB_ACTIVE_STEP","SET_SQFT_SLAB_SEARCH_TEXT","SET_SQFT_SLAB_ASPECT_RATIO","SET_SQFT_SLAB_IMAGE_WIDTH","SET_SQFT_SLAB_IMAGE_HEIGHT","SET_SQFT_SLAB_CROPPER_DATA","SET_SQFT_CROPPED_SLAB_IMAGES","ADD_SQFT_CROPPED_SLAB_IMAGE","DELETE_CROPPED_SLAB_IMAGE","SET_PRICE_PER_AREA","SET_SLAB_IMAGE_TYPE","SET_IS_MEASUREMENT_VISIBLE_IN_SLAB_MODE","SET_IS_SIZE_VALIDATION_FAILED","SET_IS_SLAB_PRICING_ENABLED","SET_MITERED_SECTIONS","ADD_MITERED_SECTION","CHANGE_MITERED_SECTION","DELETE_MITERED_SECTION","DELETE_ALL_MITERED_SECTIONS","SET_RESOURCES","ADD_RESOURCE","CHANGE_RESOURCE","DELETE_RESOURCE","DELETE_RESOURCE_ATTACHED_TO","DELETE_ALL_RESOURCES","SET_SELECTED_FEATURE","SET_SELECTED_PART_IDS","SET_SQFT_MENU_OPENED","SET_SQFT_MENU_LOCK","SET_SQFT_MENU_ACTIVE_BUTTON","SET_SQFT_SYSTEM_MESSAGE","SET_SQFT_AR3D_POPUP","SET_SQFT_POPUP","SET_SQFT_CONTEXT_MENU","SET_SQFT_CONTEXT_MENU_V2","SET_SQFT_SYSTEM_DELETE_MESSAGE","SET_SQFT_ACTIVE_SUB_MENU_BUTTON","SET_SQFT_ACTIVE_LEVEL3_BUTTON","SET_SQFT_ROOM_LAYOUTS","SET_SQFT_ACTIVE_ROOM","SET_SQFT_ACTIVE_ROOM_ID","SET_SQFT_ACTIVE_ROOM_TYPE","SET_SQFT_ACTIVE_ROOM_INDEX","SET_SQFT_ROOM_SWITCHER_VISIBLE","SET_FREE_DRAW_MODE","SET_CHANGE_VALUE_POPUPS","ADD_CHANGE_VALUE_POPUP","CHANGE_VALUE_POPUP","DELETE_CHANGE_VALUE_POPUP","SET_VALIDATION_POPUPS","ADD_VALIDATION_POPUP","VALIDATION_POPUP","DELETE_VALIDATION_POPUP","SET_WALLS_UP_MODE","SET_WALLS_LOCK_MODE","SET_IS_ITEXT_EDITING","SET_SLAB_PLACEHOLDER_OVERLAPS_WITH_MULTIPLE_SHAPES","SET_RE_CACHE_MENU_COUNTER","TOGGLE_SHOW_MANUAL_CALCULATION","SET_SWITCHER_POSITION","ADD_MANUAL_CALCULATION_ROW","UPDATE_MANUAL_CALCULATION_ROW","UPDATE_MANUAL_CALCULATION_ROWS","DELETE_MANUAL_CALCULATION_ROW","SET_SQFT_TUTORIAL_STEP","SET_SQFT_TUTORIAL_SWITCHING","SHOW_CONTRACT_SIGNING","SET_AFTER_CONTRACT_SIGN_CALLBACK","SHOW_MATERIALS_TUTORIAL","SET_MATERIALS_TUTORIAL_STEP","SET_MATERIALS_TUTORIAL_FINISHED","SHOW_MATERIALS_AGENT_TUTORIAL","SET_MATERIALS_AGENT_TUTORIAL_FINISHED","SHOW_VISUALIZER_TUTORIAL","SET_VISUALIZER_TUTORIAL_STEP","SET_VISUALIZER_TUTORIAL_FINISHED","CONTRACT_SIGNING_SET_STEP","CONTRACT_SIGNING_POST_SIGNATURE","CONTRACT_SIGNING_JOB_DOCUMENT","CONTRACT_SIGNING_SHOW_SIGNATURE_PAD","CONTRACT_SIGNING_SET_CONTRACTS_VALUES","SET_CONTRACT_BLOB","CONTRACT_SIGNING_RESTORE_VALUES","CONTRACT_SIGNING_SET_CONTRACTS_LIST","SET_FABRICATOR_SUBSCRIPTIONS","SET_INITIAL_FLOW_FINISHED","SET_INITIAL_FLOW_ADDITIONAL_ROOMS","SET_INITIAL_FLOW_BUTTON","SET_INITIAL_FLOW_ROOM","SET_INITIAL_FLOW_VISUALIZER_NOT_AVAILABLE","SET_INITIAL_FLOW_ROOM_LAYOUT","SET_INITIAL_FLOW_STEP","SET_SHOW_UNLOCK_CALCULATIONS","SET_UNLOCK_CALCULATIONS_STEP","SHOW_UNLOCK_CALCULATIONS_CART_ITEM","SHOW_UNLOCK_CALCULATIONS_TOTAL_ITEM","SHOW_UNLOCK_CALCULATIONS_TUTORIAL","SET_UNLOCK_CALCULATIONS_TUTORIAL_STEP","SET_UNLOCK_CALCULATIONS_TUTORIAL_FINISHED","ADD_NEW_QUOTE","SET_QUOTES","UPDATE_QUOTE","SET_ACTIVE_QUOTE_INDEX","TOGGLE_SHOW_ADVANCED_QUOTING","SET_ADVANCED_QUOTING_SEARCH_ITEM","TOGGLE_SHOW_ASSIGN_QUOTE_POPUP","SET_ASSIGN_QUOTE_POPUP_SEARCH_TEXT","SET_ASSIGN_QUOTE_POPUP_EMPLOYEE","SET_ASSIGN_QUOTE_POPUP_CUSTOMER","SET_ASSIGN_QUOTE_POPUP_SUCCESS_TEXT","SET_ASSIGN_QUOTE_CLONE_MODE","SET_ASSIGN_QUOTE_OFFLINE_DATA","SET_RECEIPT_URL","SET_RECEIPT_SIGNATURE","SET_LOOK_EXPANDED","SET_LOOK_PARENT_KEY","SET_LOOK_LAYOUT_OPENED","SET_IFRAME_INTEGRATION_REQUEST","SET_IFRAME_INTEGRATION_RESPONSE","SET_GROHE_FILTERS_OPENED","SET_GROHE_SIMILAR_FEATURE","SET_GROHE_SIMILAR_PRODUCTS_OPENED","SET_GROHE_REQUIRED_BUT_NOT_INCLUDED_FEATURE","SET_GROHE_FILTERS_SEARCH_TEXT","SET_GROHE_LAST_OPENED_CATEGORY","SET_GROHE_SUB_CATEGORY_OPENED","SET_GROHE_SHOW_ADDED_TO_THE_CART_SUCCESS","SET_GROHE_ACTIVE_FEATURE_QUANTITY","SET_GROHE_SHARE_BUTTONS_OPENED","SET_GROHE_SAME_COLOR_ACTIVE_FEATURE","SET_GROHE_SAME_COLOR_SECTION_OPENED","SET_GROHE_SAME_COLOR_CHECKBOX_APPLIED","SET_GROHE_EXISTING_TEMP_ID","SET_GROHE_WIZARD_NAME","SET_GROHE_WIZARD_OPENED","SET_GROHE_WIZARD_STEP","SET_PAYMENT_INFO","SET_CARD_INFO","SET_CARD_ERRORS","SET_SHIPPING_ERRORS","SET_SHIPPING_INFO","SET_BILLING_INFO","RESTORE_PAYMENT_INFO","SET_SHOP_PAGE_LOADED","SET_SHOP_PAGE_OPENED","SET_SHOP_LAST_PAGE_VISITED","SET_SHOP_PAGE_LEAVED","SET_ADMIN_LOGOUT_VISIBLE","SET_ADMIN_LOGIN_POPUP_VISIBLE","SET_ADMIN_TOOL_SETTINGS_POPUP_VISIBLE","THUMBNAIL_SIZES","small","medium","large","imageThumbnail","features_root","getUrlSQFTHashParam","res","item","isEdge","getParamFromUrl","fabricatorId","getFontsize","getPointDistance","getFontsizeSmall","rotatePoint","PI","cos","sin","pointDistance","sqrt","pow","round10","getMidPoint","getClosestPoint","get45CornerLegDistanceByHypotenuse","hypotenuseDistance","point1","point2","getPointBetweenPoints","getSectionPartPoint","getParralelPoint","pointA","pointB","distanceFromLine","midPoint","getParallelPoints","vector","len","ud","parallelPoint1","parallelPoint2","getDistanceFromPointToLine","x1","y1","x2","y2","C","D","len_sq","xx","yy","dx","dy","getDistanceFromPointToInfiniteLine","abs","distanceFromPointA","decimals","Xa","Ya","Xb","Yb","k","Xc","Yc","posX","posY","offset","getMousePositionOnField","getPointOnWorkspace","mouseX","mouseY","wPos","getMousePositionOnShape","pointPosOnShape","getPointPositionOnShape","pointPosX","pointPosY","findClosestPointPairs","pointsA","pointsB","closestPoint","minDistance","MAX_VALUE","orientation","VERTICAL","HORIZONTAL","NORTHWEST","SOUTHEAST","NORTHEAST","SOUTHWEST","regex","RegExp","results","exec","mmToInches","numToLetter","num","mod","out","String","fromCharCode","letterToNum","charCodeAt","calculateHypotenuse","cmToInches","cm","inchesToM","cmToMm","inchesToMm","totalInches","shouldCeil","shouldRound","inchesToLNFT","sqftToM2","sqInchesToMM2","sqInchesToM2","sqftToMM2","lnftToMM","measureDistanceToInches","getTransformedMeasureUnit","numerator","denominator","common","total_segments","segmentDistance","fraction","rounded","floor","feet","reduced","decimal","gcd","getSnappedPos","distanceToInches","dist","fraction_text","distanceToMillimeters","lineBumpoutTotalHeight","lineCornerWidth","getLength","getLineBumpoutTotalHeight","get45CornerLegDistance","prevLine","getPrevLine","totalArea","isWaterfallFeature","isMiterEdge","miterEdgeHeight","getMiterEdgeHeight","backsplashValue","backsplashArea","getGCD","truncate","setStylesOnElement","element","styles","getMinInArray","attrib","prev","curr","getMaxInArray","getIntersectCords","getAspectRatio","heightGCD","aspectHeight","aspectWidth","getIntersectCordsBetweenLines","point3","point4","isRounded","shouldExtend","getIntersectCordsWithExtendedSegments","x3","y3","x4","y4","ua","ub","A1","B1","C1","A2","B2","C2","det","getPointOnTheLine","isPointInsideShape","includeBorder","inside","shapeLines","iPosition","jPosition","xi","yi","xj","yj","isPointOnLine","pt","linePt1","linePt2","dxc","dyc","dxl","dyl","getAreaByShoelaceFormula","addDecimalToLength","getAngleBetweenTwoPoints","atan2","getAngleRelativeToTheHorizontalAxis","getTanDeg","deg","rad","tan","getClosestHigherNumber","needle","isDisabledInPopupWithParents","isInnerCorner","minLineLength","shapePoints","getPointFieldArray","closePoint1","closePoint2","isPointInsidePolygon","parseImperialFractionToDecimal","input","wholePart","fractionPart","decimalValue","IntermediatePart","isChild","getNavItemsWithOptions","newFeatures","allFeatures","matchingFeatureProperty","useMatchingFeatureReplacement","neededColorName","getColorName","getColorFilterValue","otherOptions","getOptionsFromNavItemsForFeature","currentFeatureColor","customFullDisplayName","getMatchingOptionsName","matchByCollection","allowCheckForCollection","_collectionName","matchForSimilarSku","getSkusDifferences","lixilProductSubCategory","option","colorValue","mainFeature","allOptions","mainOption","setLayerPositions","conditions","getArrayOfConditions","defaultLayerLayoutPositions","matchesMetaForArrayOfConditions","layerPosition","matchingPositionFeature","getMatchingPositionFeature","name1","arrayOfConditions","cond","propName","roomLayoutMeta","condition","roomSceneMeta","propValue","getCurrentLayoutAbbreviation","skuNamesPartIds","whereToFind","getCurrentLayoutName","features","featuresPartsList","featuresParts","matchFeature","withSkuNameConditions","getCountertopGroupsSplittedFeatureName","_countertopGroupsCustomDisplayName","wasUpdatedFromAnotherResponse","manufacturerFilter","getFilterGroupValues","_customMatchingOptionsName","getSkuWithoutDot","getCustomFullDisplayName","getSplittedSku","_splittedSku","isFromAsRoom","getMatchingFeatureName","_customFullDisplayName","getModuleFeatureName","disabled","defaultDisabled","canBeDisabled","partNumber","instance","constructor","load_","setParent","featureList","featureName","galleryImages","featured","galImage","featuredImage","notAvailableInVisualizer","roomLayout","layoutName","roomLayoutAbbreviation","loadFeatureCommon","searchText","filteredAvailableFeatures","getFeaturesBySearchText","getFilteredFeaturesByFilters","featuresToDisplay","navigationSubItemsWithFilterMultipleConditions","returnUniqueNavFeatures","restOptions","returnAllFeatures","getFeaturesForNavigationFrom","HANDLES_GROUP_BATHROOM","allConditions","mountTypeCondition","matchesMetaForCondition","oneLayerPosition","navigationItemsWithOptions","navItems","collectionName","colorName","matchingOptionsName","conditionPassed","skuDiff","featureObject","filterNavigationItems","navFeatures","activePosition","navFeature","featuresToCheck","conditionObject","setNotInVisFeature","setFeatureGroupDefault","hideLayerCondition","hasAdditionalParts","checkIfFeaturePartIsMatching","_setLayers","setDefault","hideLayers","navFeatureCLick","firstClick","activeLockedFeature","featureClick","placeholderChanged","activeNotInVisualizerFeature","featureClicked","layer","activeFeatureParts","activeFeaturePart","placeholderFeature","zIndexes","getZIndex","increase","zIndex","additionalPartPartId","abbr","spaceWithLayoutName","edgeFilterGroup","filterGroupValue","activeFilters","activeFeatureConditions","getActiveFeatureConditions","getAdditionalPartsConditions","setActiveFeatureParts","getActiveFeaturePartsAccordingToActiveFeature","shower","currentActiveFeature","layoutAbbr","currentShowerBodyId","getCurrentShowerBodyId","wallConfiguration","previouslySelectedFeatures","showerBodyId","wallConfigurationFeature","filteredFeatures","hardCodedDefaultName","placeholderDefaultName","hardCodedDefault","placeholderDefault","hideItems","wizardGroups","clickedFeature","conflictingPositions","accParent","checkConflictingPosition","showerTubComboIsActive","showerBody","s3Path","s3BindingName","visualizer","isCropped","bvr_root","KIOSK_BVR_Root","S3_BVR_Root","bv5_root","KIOSK_BV5_Root","S3_BV5_Root","kv4_root","KIOSK_KV_Root","S3_KV4_Root","kv5_root","KIOSK_KV5_Root","S3_KV5_Root","bv6_root","s3Root","layersSize","s3FilterImagePath","S3_FILTERS_Root","KIOSK_FEATURES_Root","className","ignoreDefault","stopPropagation","preventDefault","iStartWith","hayStack","startsWith","iIncludes","getNonce","possible","random","iCmp","s1","s2","needToUppercase","matches","RgFeatureName","styleBkgImage","backgroundImage","getMetadataByDimensions","dimensions","NN","cb","getMousePos","evt","rect","getBoundingClientRect","getFilterGroupValue","featureFilterValueId","val","getFilterGroupValueByName","getAllFeatureFilters","featureHasSelectedFilters","featureFilterValueIds","filterObject","filterGroupId","unitedFilterValueIds","newFiltersArray","existingFilterGroup","filterGroupObject","existingFeatureFilter","filVal","scrollToDivInArea","divOffset","animate","scrollLeft","getTranslateX","myElement","getComputedStyle","WebKitCSSMatrix","webkitTransform","m41","reorder","indexA","indexB","tmp","requestAnimFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","setTimeout","isTouchDevice","prefixes","DocumentTouch","matchMedia","mq","makeLayerPolygon","fakeCanvas","setAttribute","context2D","getContext","globalAlpha","drawImage","imgData","getImageData","pnpoly","base64ToBlob","downloadCanvasImageById","canvasId","blob","getElementById","toDataURL","createObjectURL","download","click","revokeObjectURL","imageServer","LAYERS_SIZES","normal","full_hd","full_hd_large","isFeatureHasFilterValue","testFabFilter","filterGroup_id","filterValueId","testFilter","mergeFilterObjects","base64","mime","byteChars","atob","byteArrays","byteNumbers","byteArray","Uint8Array","Blob","toBoolean","visualizerOnly","convertImgToBase64URL","outputFormat","crossOrigin","onerror","onload","dataURL","disableFeature","updateLookCartItem","cabinetParent","topCabinet","allFeaturesReceived","getAdditionalFeaturesOnScroll","loaderDisable","bottomCabinet","bottomHandle","floorParent","floorBody","checkIfLookFeaturesReceived","disabledClick","updateLocalStorage","enableRelatedFeature","relatedFeaturesToEnable","relatedPartId","relatedFeatureGroup","someFeature","checkIfFeatureCanBeAddedToTheCart","shouldUseLixilAvailableQty","enableASInventorySync","enableGInventorySync","bundledFeatures","lixilAvailableQty","trumbleQty","cartItemInStock","getProductIdFromSku","featureIsBundle","getPostCartItemsList","forCart","lixilProductId","relatedProductParent","getLookId","getAvailableFeatureContent","availableFeatureContent","subDescription","preset","lookId","getLookIdUrl","withSlash","createShareUrl","getFeatureUrl","withCategory","finalUrl","urlName","urlPartId","getCategoryOnlyUrl","revertFeatureBeforeChange","featureGroups","getLookList","parentObject","featureBeforeChange","sameFeature","filterFeaturesByMetadata","metadataField","mType","getDefaultPresetByLook","numLookId","allMatchedPresets","buttonKey","afterSaveUrl","amazonImageUrl","shareImageUrl","shareImage","SHARE_BUTTONS","facebook","metaTag","querySelector","hostname","qfUrl","protocol","splittedHost","topLevelDomain","shareUrlSplitted","encodeURIComponent","pinterest","imageUrl","twitter","getShareWindowReference","open","getShareConfig","getFeatureParent","saveQuoteAndShare","propsShareUrl","saveNeeded","windowReference","isSafari","responseData","saveQuote","submit","showReceipt","setAmazonImageUrl","getCartItemsArrayFromFeature","neededFeature","firstCartItem","itemsToAdd","getSameFeatureWithAnotherMeta","metaName","activeFeatureValue","optionFeatures","metaValue","designNavigationItems","activeFeatureCollectionName","checkFeature","optFeature","getFeatureSectionIsHidden","lookFeature","getPropertyToMatchActiveFeature","getFeatureIsActive","parentFeatureGroup","removeLookPointFor","sku1","sku2","differences","letter","filterCartItems","withoutNotInStock","withoutZeroQuantity","parentsOnly","sortCartItemsForListPage","hideFeatureSection","showFeaturesOnly","partIdExistInQtCategory","isFeatureEnabled","hardCodelyRemovedClicking","isCoburn","Shower","showerDoorFeatureGroup","showerDoor","getWizardWithFirstStepCurrentPartId","wizardList","wizardItem","openWizardOnClick","firstStepGroups","getCurrentGroups","nodeType","getFeatureGroupFromWizardGroup","Small","SmallWithPopout","SmallWithPeninsula","SmallWithIsland","SmallWithPopoutWithPeninsula","SmallWithPopoutWithIsland","SmallWithPeninsulaWithIsland","SmallWithPopoutWithPeninsulaWithIsland","LShape","LShapeWithPeninsula","LShapeWithIsland","LShapeWithPeninsulaWithIsland","PLACEMENTS","Island","Countertop","MODULE_CONTEXT_MENU_TYPES","Filters","SliceButtons","MODULE_CONTEXT_MENU_DIRECTIONS","Vertical","Horizontal","CABINET_WIZARD_BUTTONS","buttonId","filtersGroupName","COUNTERTOP_WIZARD_BUTTONS","pluralText","wizardAllButton","displayText","parent_id","icon","additionalImages","BACKSPLASH_TYPES","COUNTERTOP_GROUP","CABINET_GROUP","EDGE_GROUP","sqftEventManager","renderEvents","renderEventsSlab","OVERALL","SLAB_RIGHT_PART_CONTENT","SLAB_RIGHT_PART_WORKSPACE","BOX_POINT","BOX","OVERLAY","IMAGE_LINE","IMAGE","POINT","SEGMENT_MEASUREMENTS","SEGMENT","SHAPE_LABEL","SHAPE_UPPER","SHAPE","SHAPE_SLAB_PLACEHOLDER","WALL","SLAB_IMAGE","SLAB_LEFT_PART","MOUSE_WHEEL","WHEEL","ON_MOUSE_WHEEL","RESIZE","TOUCH_START","TOUCH_END","TOUCH_MOVE","TOUCH_CANCEL","MOUSE_LEAVE","CLICK","DBLCLICK","CONTEXTMENU","KEYDOWN","DRAG_OVER","DROP","keyCode","ENTER","NumpadEnter","activeEvents","canvasOffset","processing","eventQueue","G_events","userIdleStartTimer","userIdleWarning","userIdleTimeOut","userIdleStopTimer","userIdleGoHome","userIdleGoHomeCountdown","hammerMC","LastKnownMousePos","zoomLock","resizeHandler","keydownHandler","getCtx","eventSort","pageX","pageY","getTouchPos","touch","mousepos","mousemove","event","sender","mouseup","mousedown","onMouseLeave","mouseleave","onKeyDown","code","onDblClick","onWheel","wheel","onResize","updateOffset","onContextmenu","contextmenu","onDrop","dragEvents","onDragOver","dragOverEvents","onTouchCancel","onRender","triangles","trigger","response","pinchToZoom","additionalEvent","isWithEventManager","Hammer","Manager","Pinch","enable","on","isComposing","processEventQueue","handled","touchPos","passive","clearAll","removeEventListener","override","revertBackAfterMouseUp","releaseStealLock","owner","cursor","noStealing","setCursorImage","cursorImage","getCursor","removeEvent","removeStuckCursorEvents","mouseupEvents","mouseupEvent","home","wizard","lookFeatureSku","category","cartLogin","cartRegister","cartTerms","cartBilling","cartBillingInfo","cartShipping","cartPayment","cartDelivery","cartTwoFAVerify","cartTwoFA","cartConfirm","cartSuccess","shop","shopRoutes","sqft","sqftCabinetsIntro","sqftCabinetsAR","cabinetsAR","sqftCabinetsTutorial","quoting","quoteDesign","newscope","shoppingcart","setSQFTMenuOpened","menuOpened","setSQFTMenuOpenedLock","menuOpenedLock","setSQFTActiveButton","activeButton","setSQFTActiveSubMenuButton","activeSubMenuButton","setSQFTActiveLevel3Button","activeLevel3Button","setSQFTActiveRoomIndex","activeRoomIndex","setSQFTActiveRoomType","activeRoomType","setSQFTActiveRoomId","activeRoomId","setSQFTActiveRoom","activeRoom","setIsRoomSwitcherVisible","isVisible","setFreeDrawMode","isFreeDrawMode","setWallsUpMode","isWallsUpMode","setWallsLockMode","isWallsLockMode","setSQFTRoomLayouts","roomLayouts","setSQFTContextMenu","setSQFTContextMenuV2","contextMenuV2","setSQFTSystemMessage","systemMessage","setSQFTAr3dPopup","ar3dPopup","setSQFTSystemDeleteMessage","systemDeleteMessage","sqftPopup","setChangeValuePopups","changeValuePopups","addChangeValuePopup","changeValuePopup","deleteChangeValuePopup","setValidationPopups","validationPopups","addValidationPopup","validationPopup","deleteValidationPopup","addShapeIdWithMissingFeature","setSelectedCountertop","selectedCountertop","setSelectedWall","selectedWall","setAbortController","abortRequestController","setIsItextEditing","isITextEditing","setIsSlabPlaceholderOverlapsWithMultipleShapes","isSlabPlaceholderOverlapsWithMultipleShapes","setReCacheMenuCounter","reCacheMenuCounter","RgCabinetSize","vanitySize","fromName","lastDigit","binding","arrayOfBindings","Large","tryToSetTheSameFeature","setFeatureLayer","shadowFeature","layoutAbr","s3Binding","entityID","featureDefinitionId","fromS3Binding","handleClick","placeholderName","shadowNeeded","activeName","includesCI","setShadowFeature","parentGroup","shadows","compatibleFeatures","shadow","shadowName","featuresArray","activeFilterValueIDs","filter1","filter2","showLoading","hideLoading","LoaderView","props","iframe","visualizersLoaded","color","COLORS","white","active","Component","connect","loaderState","lookState","dbFeatureInterface","number","shippingCost","fabricatorCost","featureInterface","featureCollectionInterface","isRequired","arrayOf","featureGroupInterface","navItemInterface","path","someLayoutFound","hasNoVisualizerLayers","clickFrom","keyIndex","skuName","skuName2","regexForWizardId","wizardIsDisabled","getCurrentWizardList","isSameVisualizerWizard","disabledScenes","showWizardInsteadOfQT","getActiveWizardItem","stringId","wizItem","isCenterIslandGroup","getFeatureGroupByGroupName","getDefaultMaterialsWizardItem","categoryIsInTheWizard","firstOnly","lookWhere","getCurrentGroupsFromSource","wizGroup","getMaterialsWizardItem","getUrlFromString","currentVisType","lastSelectedWizardInThisQuote","isLastActiveWizard","foundWizItem","wizardItemId","cachedSiblingFeatures","siblingGroups","wizardEdges","wizEdge","siblingGroup","WIZARD_GROUP_TYPES","useIncluded","featuresIncluded","alreadyCached","cacheObject","wizardId","wGroup","wGroupIndex","totalFeatures","included","exclObj","mergedGroups","featuresExcluded","excluded","exclFeature","getCorrectedWizardGroupId","stepSelectedValue","wizG","realWizardGroup","navItemIsExcluded","prevStepGroups","additionalWizardValuesToCheck","stepStr","toCheckValue","selectedPrevStep","selectedWizardGroupIsNotInCurrentStepAnymore","foundPreviouslySelectedGroup","wg","suggestedStepGroups","wizardGroupWithSelectedFeature","returnAllSteps","maxWizardSteps","stepsArray","currentGroups","findParentWizardFeatureGroup","getWizardStepCommonCoords","commonCoords","currentCoords","getFeatureCoords","getCommonCoords","compareCoords","wizardFeatureParentGroup","currentTry","recursiveFindParent","checkWizardGroup","sourceEdge","nextToCheckWizardGroup","findFeatureBySelectedFilters","skuColor","sameColor","getFilterValueThumbnailAndStyles","currentFilterValue","thumbnail","isColor","backgroundSize","backgroundRepeat","backgroundPosition","backgroundColor","featureDefinitionID","includedFeature","getLowerCasedSharedFeatureName","filterWizardNavItems","getCurrentWizardNavItems","shopPageOpened","showPrevStepsColorFirst","selectedStepsReversed","reverse","selectedStep","selectedFilter","parentWizardGroup","faucetParent","selectedFaucetConditions","filteredNavItems","allSelectedColors","currentColorOption","optionMatchForPrevSelectedColor","selectedColor","getExistingWizardForGroups","partIdGroups","getFilteredLayersForActiveWizard","layers","disableNotSelectedFeatureGroups","getCompressedAllWizardValues","newWizObject","wizValues","getCompressedFeature","getWizardStepIsDisabled","prevWizardGroup","notRequired","getWizardProductGroupName","productCartTitle","shouldUseNewWizardFeaturesRequestsLogic","counts","getMissingWizardFeatures","currentNavItems","requestInProgress","wizardMissingFeatures","missingSkus","setWizardMissingFeatures","slicedArray","stillMissingArray","getBvFeatures","missingSkusResponse","loadNewFeatures","useHideItemsDisabledfeatureGroups","visualizersLoadedLength","useEffect","getNextWizardStepQuantity","wizardSqftCartItems","addedCartItems","getFeatureGroupFeaturesQuantity","displayMaterialsWizardGroupAsFeature","custom","getWizardGroupFromCurrentSteps","wizardValues","neededWizardGroupId","neededStep","neededWizardGroup","step","mergedGroup","SHOWER_FLOOR_GROUP_BATHROOM","removeLayoutFromPartName","removeEdgeFromPartName","removeCabinetLayoutFromPartName","removeBacksplashTypeFromPartName","removeCountertopFromPartName","removeBacksplashFromPartName","cabinetLayout","getFeatureOptions","fromNavItemOptions","colorFilterGroup","activeFeatureValues","forSpecificLayout","forSpecificScene","alreadyAddedOptionIndex","getMatchingColorFeature","notMatchingFeature","colorFilterValue","currentCollectionName","currentFeatureName","featureFoundItems","setLayerPosition","getSameColorFeatures","sameColorOnly","sameColorFeatures","differentColorFeatures","doNotShowStylePopupFor","isAsBathroom","activeFilterGroupValue","sameFeatureAsActive","bathroomShowerPanExclude","getDisplaySameColorGroups","fromArray","activeCollectionFilterGroupValue","displayFeatures","otherGroup","colName","currentColGroup","sameColorObject","addedFeature","currentCollectionValue","getSimilarItemsList","matchingFeatures","sameColorItems","sameCollectionFeature","updateMirrorAndWallsCrop","vanityParent","mirror","setLayers","wallsParent","wallFeatureGroup","updateVanitySides","oldActiveFeature","currentSideMeta","nextSideMeta","vanity_type","nextVanityIsDouble","isDoubleVanity","isCountertopOrBacksplash","forceClick","updateVanityPositions","asBathroom","getActiveFeaturesAsObject","checkIfFeatureDisabled","featureParent","checkDisabledOnly","isDisabled","withLayerPositions","withDisabled","showAllGroups","showAllQtCategories","displayInMenu","defaultSubParts","featureGroupsObjects","getActiveFeatures","visType","sortByParents","parentKey","disallowedSkus","getLookListHeight","lmFeatureParent","opened","featuresLength","listHeight","styleNotificationIsVisible","getStyleAlertIsVisibleForGroup","isVisibleForNavigation","getCropCoordsCenter","createCartList","loadByTheDefault","existingCartItem","loadByTheDefaultCItem","foundFeature","getFeatureById","auto","relatedItemQuantity","alreadyAddedRelatedFeature","getLayerCenter","coords","canvasElement","clientWidth","clientHeight","COORDS_MAX","centerXPercentage","min_x","max_x","centerYPercentage","min_y","max_y","zoomPercentage","openedMenuWidth","featureMinX","featureMaxX","featureCenter","gPointPercent","shiftX","GROHE_CONFIG","sidebarWidth","mobile","featureX","getCoordsCenter","parsedCoords","getFeatureCropCoors","getStyleAlertNotMatchingFeatures","fromStyleAlertIcon","notMatchingFeatures","confirmedChange","wallsPartIds","wallPartId","wallGroup","alertIsVisible","names","getAllNotMatchingPartIds","zoomCanvasOut","imageCanvas","current","pinchZoom","zoomToCenter","getRoomLayouts","returnAllLayouts","newLooks","layoutNames","parents","roomScene","lookLayout","lookScene","currentName","getParsedLookUrl","checkURL","regexForRoomPreset","lookIdFromUrl","featureGroupFromUrl","skuFromUrl","splittedLookPath","coordProp","isWizard","zoomFeatureGroup","Coords","toggleArrayValue","newArray","checkForContextMenuCommon","returnObject","allButtons","showButtons","isBathroom","whereToCheck","contextMenuArray","checkPartId","disabledClickablePartIds","withQuotingToolFeatures","hasNavItemsLength","activeVanityType","isVanity","isShower","isCenterIsland","existingWizardItem","button","testBtn","hasSubMenu","sinkIndex","sinkParent","isPedestal","backsplashIndex","backsplashParent","vanityButtonIndex","vanityWizardButton","isAmericanStandard","showerWizardButton","isLixil","counteropWizardButton","accPartId","accFg","hideContext","getOptionStyles","enableSquareFootage","setSquareFootageGroup","SQFTGroup","setSQFTGroup","setSQFTViewMode","SQFTViewMode","loadSQFT","sqftLoaded","updateSQFT","sqftUpdateType","setSquareFeet","squareFeet","toggleChangeLayoutPopup","changeLayoutPopupOpened","layoutToApply","applyLayoutOnSqft","sendLayoutChangeOnSqft","setSqftMeasureUnit","changeSqftFeaturesPopup","sqftFeaturesPopup","setSqftFromFeature","sqftFromFeature","setSqftCabinetsGlb","cabinetsGlb","setCabinetsARBlobUrl","cabinetsARBlobUrl","setAPIErrorMessage","apiErrorMessage","getFeatureGroupIconURL","getFeatureGroupIconStyles","customImageUrl","getDashboardThemeIcon","largeLayout","bathTubThumbnail","ceilingThumbnail","floorThumbnail","showerThumbnail","showerAccessoriesThumbnail","showerOLDThumbnail","showerTubComboThumbnail","custom60in30X8Shower","custom30in30X8Shower","custom60in15X4Shower","custom30in15X4Shower","custom60inPonyShower","custom30inPonyShower","toiletThumbnail","vanityThumbnail","wallsThumbnail","windowThumbnail","smallLayout","featureGroupNameToIcon","largeLayoutShadow","smallLayoutShadow","shower30inWallShadow","floorPlaceholder","ceilingPlaceholder","showerWallSmallRoomPlaceholder","showerWallSmallRoomPlaceholder60in","showerFloorSmallRoomPlaceholder","showerFloorSmallRoomPlaceholder60in","showerPanSmallRoomPlaceholder","showerPanSmallRoomPlaceholder60in","LayoutThumbnails","homePage","vanity","vanity_sink","vanity_faucet","vanity_mirror","vanity_handle","shower_door","shower_pan","shower_pan_combo","shower_door_handle","threshold","bathtub","bathtub_fixture","toilet","ceiling","lighting","towel","left_shower_wall","right_shower_wall","pony_wall","left_wall","right_wall","popout_wall","faucet","center_island_sink","center_island_faucet","center_island_cabinet","center_island_handle","center_island_chairs","cutout","cutouts","edge_profiles","walls_ceiling","shareImageRebath","baseDashboardImagesPath","normalizeIconFileName","imageSplitted","actionTypes","getSaveQuoteFastData","forTempSave","printState","contractSigningState","needToRevertBackCostPrices","updateCurrentQuote","updatedQuotes","grandTotal","records","quoteObject","record","bvImage","staticCanvasImage","recordData","contractSigningValues","pagesCustomFieldsValue","contractsValues","savedInvoiceNumberOfPages","needToUpdateContract","receiptSignature","priceWorkSheetLogic","getPriceWorkSheetSaveValues","JSON","stringify","sqFtCalcImage","sqFtCalcData","canvasImage","sFtCalcDataJson","quoteId","recordCartItems","getCompressedCartItem","discounts","selected","oldDeleted","materialCost","installationCost","totalWithTaxes","customDeposit","getCustomDepositAmount","fromBV","notes","employeeId","installations","services","service","subId","saveQuoteFast","postMessageIsExecuting","savedFastData","yesNoConsultationRequest","quoteRequestType","fromCheckOutPage","assignQuotePopupCustomer","assignQuotePopupEmployee","showContractSignOnError","formData","FormData","sendConsumerEmail","agreeEmailCheckbox","customerEmail","salesPerson","fullName","salesPersonFullName","salesPersonEmail","leadOriginatorId","rawVal","postalCode","isNewUser","fromTool","installationTaxesRate","materialTaxesRate","fromDashboard","callFabricator","callFabricatorOnSave","language","fileContent","dataUri","append","employeeSelected","employeesListReceived","employeesList","getEmployees","emp","receipt","receiptCost","getCurrentReceipt","pdfReceipt","toBlob","pdfReceipt2","parse","showContractSignPopup","contractsList","showLeadCaptureShoppingCart","showDepositPopup","receiptUrl","signedDocumentUrl","receiptPrinted","setReceiptUrl","retryFunction","renderErrorPopup","Error","skipRequestsFor","loadFiltersOnly","getFilterGroups","getBathroomVisualizerData","featuresCount","loadVisualizerOnly","forVisualizer","featuresToReceive","errorMessage","defaults","updatePresetsArray","wizardData","wizardDataV2","getParsedWizardList","setWizardList","setAllFeaturesLoaded","getBvPresets","getDisplayRoom","getJobIdPreset","editToken","getBVJobData","updateFeaturesWithMarkUp","featuresResponse","useMarkUpFeaturesRequests","getMarkUpForFeatures","markUpResponse","setResponseFeaturesMarkUp","arrayOfSkus","requestSharedFeatureNames","getBathroomVisualizerFeatures","getBvGroups","getBathroomVisualizerGroups","getBvGroupFeatures","pageSize","axiosController","requestOldFeatures","getBathroomVisualizerGroupFeatures","getBvGroupFilterValues","withStoneFilters","getBathroomVisualizerGroupFilterValues","filterResponse","submitPayment","paymentInfo","useNewHoc","transactionResponse","responseCode","msg","errors","errorText","messageDetails","sepIdx","getQtCategories","useWizard","getFabricatorSubscriptions","subscriptions","setFabricatorSubscriptions","fabricatorName","wasCreatedFromFabricator","globalMarkUp","parseMarkUp","setMarkUpLogic","getDiscounts","getFabricatorDiscounts","dis","enabled","isSaveOnlyDiscount","setDiscountSections","getNavigationButtons","testConnection","forTool","getMenuNavigation","menuData","copySqftImagesToAnotherJob","postData","copySqftImages","red","gray","gray2","gray3","gray4","light","GROHE_FILTER_COLORS","primary","primary_hover","active_hover","assetsPath","ShowerType","ShowerTypes","GET_CANVAS_SCALE","CANVAS_SCALE_CHANGED","RESET_CANVAS","ENABLE_PINCH_ZOOM","DISABLE_PINCH_ZOOM","CHANGE_LAYOUT","UPDATE_ALL_ITEMS","USER_IS_LOGGED_IN","USER_POPUP_CLOSED","REMOVE_GREEN_ZONE_ON_CANVAS","FEATURE_IS_CLICKED","OPEN_MOBILE_NAVIGATION","CHANGE_MOBILE_MENU_CONTENT_TYPE","UPDATE_QUOTING_TOOL","SHOW_NUMERIC_KBD","OVERLAY_CLICK","SHOW_SUMMARY","DIRECTIONS","EAST","WEST","NORTH","SOUTH","UNDEFINED","ShapeHelper","activeShape","activeShapeLines","intersectionPoints","activeShapeLine","testShapeLine","pointFieldActiveShapeLineFrom","pointFieldActiveShapeLineTo","pointFieldTestShapeLineFrom","pointFieldTestShapeLineTo","intersectionCords","shape1","shape2","testShapeLines","getIntersectionCordsV2","shape1Pos","vertex","distances","lineDirection","getAngleDirection","diff","lineMidPoint","diffX","diffY","getResources","getBordersOfWallLines","lineOrientation","getLineOrientation","pointFieldActivePoint","testImagePoints","getLinePointsPointField","getAppliances","images","getSlabImages","usePointsV2","modelCorePoint","getPosX","getPosY","slope","itemBounds","resultV","resultH","vertical","itemBound","horizontal","guides","minV","minH","newItemBounds","verticalElements","horizontalElements","verticalElement","horizontalElement","minLength","pointDistances","pointField","dir","isAngleInner","isInner","facing","isSlabMode","rotatePointX","posSlab","rotatePointY","xCords","yCords","min","max","getAbsolutePosFromSnapPossibilities","snapPossibilities","absolutePos","snapWithShape","snap","getLineLengthNumberText","pointFrom","pointTo","changeValueCallback","yOffset","xOffset","betweenPoints","shouldRenderFrameBorder","isLength","getPointDirection","aP","bP","cP","lineBeforeFrom","vDir","hDir","mAC","newDirection","cornerMargins","fromTop","fromLeft","fromRight","fromBottom","dirX","dirY","point1X","point1Y","point2X","point2Y","point3X","point3Y","pointBeforeX","pointBeforeY","direction","getLineLengthNumberTextV2","getLineDirection","getFontSizeFromContext","design","getLineLengthNumberTextV2ForTheImage","shouldOnlyRenderText","eventsPriority","deltaX","deltaY","getSlope","getSlopeV2","getAngleBetweenTwoSlopes","getAngleBetweenTwoLines","line1","line2","slopeLine1","slopeLine2","M1","M2","atan","getVectorByPoints","getEdgeFeatureGroup","getAngleBetweenTwoLinesV2","vector1","vector2","cosAngle","acos","getAngleBetween3Points","A","B","AB","BC","AC","edgeFeatureGroups","getIsShapePlacedOnTheFloor","edgeFeatureGroup","getNavItemsFromTheWizard","firstFeature","firstConditions","getCountertopPartNames","countertopNavItem","centerIslandNavItem","countertopPartName","centerIslandPartName","canShapeBeAutoShifted","testShape","isShapePlacedOnTheFloor","isShapePlacedOnTheWall","getIsShapePlacedOnTheWall","isTestShapePlacedOnTheFloor","isTestShapePlacedOnTheWall","parentPartId","SaveIcon","viewBox","strokeWidth","fill","fillRule","transform","ProductsIconAnimated","version","xmlns","TimingIconAnimated","EditIcon","EyeBallIcon","cx","cy","rx","ry","ScreenshotIcon","PlusIcon","LookLayoutIcon","data-name","LookExitIcon","LookCoBrowseIcon","LookShareIcons","LookExpandIcon","LookMinimizeIcon","LookCartIcon","LookRoomIdeasIcon","Look3DIcon","LookAugmentRealityIcon","LookIconHover","strokeDasharray","LookIconNavigate","LookIntroIcon","groheIcon","AmericanStandardIcon","GroheListIcon","GroheFilterIcon","GroheGridIcon","GroheArchitectureIcon","GroheLockIcon","GroheLockIconSmall","GroheNoteAddIcon","GroheBoxIcon","GroheVehicleIcon","opacity","GroheDownloadIcon","GroheSQFTIcon","GroheInkPenIcon","setWizardIsActive","setWizardConfig","wizardConfig","setWizardActiveItem","setWizardShowFeatureSection","wizardShowFeatureSection","setWizardActiveStep","currentWizardItem","wizardConflictingSteps","newWizValues","selectedKeyNumber","wizObject","lastVisitedStep","clearWizardSelectedValue","setWizardSelectedValues","direct","currentStep","commonObject","newWizardSteps","getNextWizardSteps","changeWizardValuesToUseNewGroups","updatedWizardValues","shouldReassignValues","switchCartItemsToNewWizardGroups","shouldReassign","changeAllCartItems","getConflictingWizardSteps","getUpdatedAllWizardValues","setAllWizardSelectedValues","getMissingWizardValuesFeatures","compressedAllWizardsValues","missingFeatures","wizardObject","getWizardVisualizerType","compressedFeature","getLoadedFeatureById","featuresFromJob","getRestoredWizardValues","selectedWizardObject","compressedWG","foundWg","updateAllWizardValues","restoreAllWizardSelectedValues","valuesToRestore","setWizardConflictPopupOpened","wizardConflictPopupOpened","setWizardConflictSteps","setWizardSqftCartItems","getFeaturePropertyToSort","getNavItemsSortedByProperty","property2","prop1","prop2","prop3","prop4","getSortedNavItems","isQuotingTool","sortNavigationItems","showPricing","hideCheckoutBreakdownCost","hidePricesFromUser","propertyToSort","useMatchesFailedNavigation","unLockedFeatures","lockedFeatures","inVisFeatures","notInVisFeatures","getDesignRecommendedNavItems","getReorderedItems","needToReplaceActiveFeature","navItemsToChange","activeNavItem","isWalls","stoneFeatures","getStonesActiveFeatures","stoneName","existingInNavItems","sorted","nItemToChange","currentIndex","getReplacedNavItemsWithUnlockedFeatures","pricingIsLocked","pricingLocked","unlockedOption","nItem","desRecFilterGroup","desRecFeature","desRecColorFeatures","desRecValues","colorOption","desRecValue","filterValueObject","findNextVanityTypeFeature","getNavigationItemsLists","navItemsList","designRecommended","others","designNavItem","regularFeatures","MountHoles","navTranslate","existingNonMatchingList","navItemsObject","notMatchingMetaName","nextSink","nextFeatureGroup","nextSinkSku","isQCSink","maxWidth","maxTotalWidth","positionFeature","getSinksWidth","matchingVanities","allVanities","testFeature","currentSkuFeature","currentSideFeatures","updateNonCompatibleListWithVanity","nonCompatibleList","Vanity","currentVanityTypeFeatureGroup","nextVanity","fromToObject","getNextSinkOnWashstandOrConsoleChange","isQcSink","forSinkConditions","nextAvailableSinks","conditionsToMatch","updateSinkWithNewFeature","sinkFeature","checkForCompatabilityAlert","matchCounterTopObject","getMatchingCounterTop","matchingFeature","hasSameName","getSinkToClickFromMatchingSinks","clickedSinkConditions","nextFaucet","showerArmFeatureGroup","showerHeadParent","showerHead","clickedArmConditions","showPrice","clickLeadCapture","getMissingFeaturesAndClickThem","updateCanvas","originalPartId","requestInProcess","wallParent","missingFeatureObject","relatedItem","navigationItemName","requestFromBackendName","cropResponse","setGroupFeatures","setCurrentFeature","featureFound","activeFeatureBeforeAllWalls","clickFromAllWalls","alreadyRequestedFeatureNames","requestAfterRoomChange","getShowMatchRadio","checkForTileBacksplash","getApplyToLogic","setApplyToFunction","applyToArrayAll","currentApplyToArray","navigationState","cabinetsApplyTo","countertopsApplyToArray","edgesApplyTo","cabinetsApplyToBathroom","countertopsApplyToArrayBathroom","handlesApplyToBathroom","showerFloorApplyToBathroom","clickOnSimilarFeatures","wallFeature","applyToLogic","useFeaturesLightRequest","isSolidSurface","applyAllCountertops","applyClickTo","getSubPartByPartId","setActiveFeaturesBeforeAllWalls","applyToArray","onlyForOneFeatureGroup","promises","all","applyNewPreset","roomPreset","setActiveFeaturesFromObject","setItemsFromBvState","isRoomLayoutsVisible","featureQuantity","defaultQuantity","ShowerTubCombo","bathTubLiner","replacementTub","walkInTub","jettedTub","bottomTub","leftShowerWallType","showerComboSize","relatedItemName","RelatedItemClass","categoryEnabled","load","wallConfigurations","createCustomWallConfiguration","placeholdersNeeded","getRelatedItems","addTo","showerParent","setZIndex","conf","sqftShapeManager","addPlaceholderShape","shouldUseSlabPricing","shapeSegments","updateSlabPlaceholderFeatureId","deregisterLineEvents","setSlabPricing","initTitle","SLAB_IMAGE_TYPES","placeholder","getShapeByIds","hasSameFeatureId","firstFeatureId","hasSameSharedFeatureName","currentShapeFeature","currentShapeFeatureSharedName","testShapeFeature","setShapeFeature","visualizerFeature","setBacksplashFeatureId","setShapeFeatureId","setShapeRelatedParentFeatureId","relatedParentFeatureId","getCounterTopShapes","cLabel","getBacksplashLabeledShapes","getCabinetShapes","partIds","hideSeamShapes","isWithShapePieces","hideShapePieces","restoreSeamShapes","reInitEvents","hideSlabShapes","restoreSlabShapes","reInitLineTitleEvents","hideMiteredSections","miteredOverlay","restoreMiteredSections","resetShapeChangesInTheSlabMode","updateSlabPoints","setShapePieces","shapeSlab","setRotationDegreesSlab","removeAllActiveBacksplashesAttachedToShape","checkForUpdateSlabPoints","isPointsChanged","checkForUpdateSlabPosition","isPositionChanged","updateSlabPosition","hideCorePieceShapes","restoreCorePieceShapes","hideShapeParts","shouldSkipSlabPlaceHolders","deregisterPartEvents","restoreShapeParts","reInitPartEvents","seamHistory","getSeamHistory","latestShape","pop","shapePieces","resetAllSeams","setSeamHistory","ctxCenter","minX","maxX","minY","maxY","getMinMaxWorkspacePoints","isIncludeBumpout","getMinMaxBumpoutPoints","disableRotatableStateForAllShapes","shapeRotatable","disableRotatableState","canShapeBeRotated","isShapeCanBeRotated","isMovableImageCanBeRotated","closeRotatablePopups","getIsRotatable","setIsRotatable","reInitShapePoints","setShapeAsRotatable","shapeOffset","changeValuePopupPosition","shapeHeight","getHeight","shapeCabinet","getShapeHeight","shapeWidth","getWidth","getShapeWidth","changeRotatedDegreeValuePopup","valuePopup","Direction","LEFT","newValuePopup","rotatedDegreesSlab","rotatedDegrees","rotateShapeTo90Deg","currentRotation","newRotation","getShapeCornerPoints","isPointOnField","bumpoutPoints","getBumpoutPoints","dragPoint","getMinMaxShapesPointsOnWorkspace","shouldGetRegularPosition","shapesPoints","getPointsPosOnWorkspace","pointsMinMax","getMinMaxPoints","getShapesConvexHullPointsOnWorkspace","convexHull","getShapesConvexHullPointsPointField","getPointsPointField","getShapesContourPointsOnWorkspace","shoudRemoveRepeatingPoints","shapesPointsOnWorkspace","unifiedPoints","unifyShapePoints","removeConsecutiveDuplicates","getShapesOverhangOnWorkspace","contourPoints","snappedShapes","minOverlap","overhangShapes","canShapeCreateOverhang","isShapeInsideSnappedShapes","overhangShape","pointsPosOnWorkspace","roundedPoints","roundShapePoints","cp1","cp2","rp1","rp2","areCollinearAndOverlap","getShapesContourPointsPointField","shapesPointField","getMinMaxShapePoints","getGrandParent","setIsDisabledShapeInPopup","resetShapeSeams","getSnappedShapes","snappedShapeGroup","shapeAbsolute","getSnappedShapeGroup","changeShapesFeatureIDIfColorWasChanged","changeFeatureIdIfColorWasChanged","updateShapeColorSet","updateColorSet","updateMinMaxMiteredPoints","updateMinMaxPoints","toggleDesktopNavigation","desktopNavigationOpened","setNavigationViewType","navigationViewType","setActiveNavigationNames","activeNavigationParentName","activeNavigationChildName","setNavigationLoading","navigationLoadingActive","setModuleContextMenuType","moduleContextMenuType","setModuleContextMenuDirection","moduleContextMenuDirection","setModuleContextMenuModule","moduleContextMenuModule","setModuleContextMenuModulePart","moduleContextMenuModulePart","setActiveNavigationFilter","activeNavigationFilter","setActiveNavigationFilterStepIndex","activeNavigationFilterStepIndex","setCabinetNavigationFilterCompleted","cabinetNavigationFilterCompleted","setCountertopNavigationFilterCompleted","countertopNavigationFilterCompleted","setCountertopWizard","countertopWizard","setCabinetsApplyTo","setCabinetsApplyToBathroom","setCountertopsApplyTo","countertopsApplyTo","newArrayLogic","setCountertopsApplyToBathroom","countertopsApplyToBathroom","setApplyToCommon","arrayToChange","isNewNotUsed","arrayPropertyToChange","setEdgesApplyTo","toggleUpdateDisableFeatureGroupRadio","updateDisableFeatureGroupRadio","toggleNavItemPositionModal","navItemPositionModal","setUseFeaturesLightRequest","LOWES_DISCLAIMER_EN","getFabricatorLogo","hardCodedLogo","isRenoDepot","hardCodedRenoDepotLogo","isRona","hardCodedRonaLogo","hardCodedLowesLogo","logoUrl","subDomain","hardCodeIsAmericanImport","hardCodeIsAmericanStandard","hardCodeIsRona","hardCodeIsRenoDepot","hardCodeIsFlexFinish","hardCodeIsGraniteTransformation","hardCodeIsGraniteTransformationUK","hardCodeIsLixil","hardCodeIsTorrco","hardCodeIsAgent","hardCodeIsCoburn","hardCodeIsSolidSurface","hardCodeIsLakesideSurfaces","hardCodeIsDeStefano","hardCodeIsNhance","hardCodeIsEncore","hardCodeIsFabricator","hardCodeIsFloform","hardCodeIsDeluxegarage","isProd","materialTotalCost","isCafeCountetops","fabId","fabricatorsHardcodeObject","isAmericanImport","isGraniteTransformation","isGraniteTransformationUK","isModerno","isMcDermott","isFlexFinish","isTorrco","isLakesideSurfaces","isNhance","isGrohe","controllersConfig","groupedDataInControllers","exportableControllers","workspaceControllers","WORKSPACE_CONTROLLERS_THAT_WILL_ADD_FEATURES","getControllersExportData","exportData","controllerName","controller","usePrevious","ref","useRef","useIsMounted","isMountedRef","isMounted","useCallback","requestInProgressTimeoutId","IsMountedComponent","children","isMountedComponent","useOutsideClick","useSQFTCanvas","contains","handleClickThroughCanvasEvents","objectName","useOutsideClickSimple","excludedClassNames","closest","useProgressiveImage","useState","thumbnailLoaded","setThumbnailLoaded","complete","useFeaturesChecker","featuresLoaded","setFeaturesLoaded","callRecursiveFeaturesCheck","clearTimeout","checkFeatures","useShowRoomLayoutsButton","useMemo","splittedFromTheLayoutName","MaterialSpinner","withCounter","propTypes","oneOfType","bool","PropTypes","wizardGroupInterface","oneOf","scopeImageUrl","filtersExcluded","productCartDescription","uploadedImageUrl","noAvailableFilters","wizardGroupIcon","hideInCartAndReceipt","multipleAddToCart","inputFields","headerTitle","headerSubTitle","visibleInVisualizers","hideForCustomers","skipProductInfo","hidePriceNoCart","skipLockDontApply","wizardNodeInterface","wizardEdgeInterface","wizardItemInterface","wizardNodes","startTitle","startDescription","wizardSelectedValueInterface","singleFeature","wizardAllObjectInterface","wizardConflictingObjectInterface","cartItemId","setCustomVanitySinkMetaData","activeSubType_","Types","vanityCabinet","completeVanity","vanityBacksplash","vanityHandle","vanityPTrap","vanityWashstand","vanityMiddle","drawerPull","wsTowelBar","vanityLegs","vanityConsole","doorHandle","drawerHandle","relatedGroupNames","loadFeature","faucetIndex","vanityPart","forFeatureGroup","getCounterTopSize","isAsBathroomState","sinkFeatureGroup","sinkTypes","currentSku","needToUpdateCustomMetadata","sinkUTypes","FloorWithIsland","KVSCENE_BACKSPLASH_TYPES","oldKitchenCabinetsLogicProfiles","hasOldCabinetLogic","useOldCabinetLogic","Type","customBodyType","showerGlass","showerInteriorWall","showerInteriorWallAccent","showerFloor","showerOverlay","showerPanCombo","showerFixture","showerBodySelectedByUser","showerDoorHandle","ponyWallCap","ponyWallGlass","showerFloorIsActive","relatedItemType","showerBodyFeature","handleNavigationItemClick","ponyWallIsActive","getActiveShowerGroup","showerDimensions","isPonyWallPart","showerSizeValues","warn","showerBodyType","comboPart","Combo","FeatureName","maxLength","stringFeatureName","injectIntl","cartItemInterface","isMinimumCharge","isMinimumChargeItems","keepOnLookUpdate","shippingName","shippingTime","LIXIL_USER_QUERY_PARAMS","postSaveTempData","getPassedUserInfo","userData","postSaveVisualizerImage","base64Image","tempData","expiresIn","postTrumbleInventory","getSaveTempData","getTempIdForPostMessage","returnAction","existingTempId","stringifiedSaveData","receivedTempId","postSureTax","postVerifyAddress","addressObject","address1","city","stateShort","errorDescription","getTrumbleShippingOptions","skuList","zipCode","postTrumbleShippingOptions","skusArray","requestMoreThanUsualPartIds","postShipperHQOptions","shippingAddress","destination","postShipperHqShipping","availableOptions","options","carrier","shippingRates","shippingRate","totalCharges","success","inventory","featureToUpdate","request6kFeatures","getFeaturesPageSize","isCommonRequest","createdManually","nextFeaturesPage","getNextPageToLoad","responseArray","oldFeatures","responseWithOldFeatures","allRelatedItemsCheck","neededParts","shouldUpdateNavigation","neededFeatureGroup","isVanityChild","isCabinetChild","isCountertop","isFaucetOrSink","isShowerHeadOrArm","isDoorOrShowerPan","appliancesParent","wallId","fridgeEnclosure","centerIslandCabinet","centerCountertop","edgeProfile","showerArm","responses","getFeatureFromTheBackendBySku","requestFirstSharedFeaturenames","featureGroupPartId","getFeatureBySku","response2","setRelatedGroups","setRelatedGroupsSearch","relatedGroupsSearch","toggleGalleryVisible","galleryVisible","galleryShowActiveFeature","setGalleryActiveImageIndex","galleryActiveImageIndex","setMaterialsPageSubSteps","subSteps","setMaterialsPageActiveSubStep","activeSubStep","toggleNotCompatibleView","showNotCompatibleView","toggleProductNoteEditorVisible","productNoteEditorVisible","setRowItems","rowItems","setMaterialsCanvasClass","materialsCanvasClass","pedestalSink","lightingFixture","showerWall","showerWallAccent","showerTubCombo","activeRelItem","SqftStore","viewGL","clickedEdgeButton","isShowSlabTool","isRegularMode","addSeamHistory","COLOR","black","blackLight","blue","red_transparent","primary_transparent8","primary_transparent","active_disabled","active_transparent","totalShapeCount","minAngle","maxAngle","marginFromShape","hovering","handlerHold","isPointsMovable","isRotatable","getAngleRotatedParts","rotatedAngleValue","baseConfiguration","isHovered","isActive","isPulsing","angleDirection","hoverShapeColor","redHoverShapeColor","fillColor","layout270","slabPos","staticCenterPoint","linesWithoutAngle","shapeSpacer","isSpacer","shapeEditable","shapeIntersections","shapeAutoShuffle","shapeMemory","shapeRender","colorSet","seamCutPoints","shapeParent","isContextMenuActive","labelsMenu","slabParentPartId","isPointsMoved","isResetSlabModePopupWasDisplayed","RIGHT","FlipDirection","rotateAngleParts","slabModeWaterfallSegmentId","originalPointsCoords","getFillColor","getDesign","getColorset","getIsPointsMovable","setType","setProperty","setId","setPartId","getFeatureNameById","generateAttachedFeatures","isShapeUseTheSameFeatureColor","isSeamPiece","updateRelatedShapes","updateSeamShapes","getFeature","getRelatedParentFeature","relatedParentFeature","setSlabParentPartId","setSlabModeCoreParentPartId","setSlabModeCoreParentId","setSlabModeWaterfallSegmentId","setColorSet","getColorSet","getOrGenerateNewShapeColorByFeatureId","relatedShapes","relatedShape","shapePieceId","shapePiece","updateSeamedShapesPosition","setPositionWithoutChange","setIsPointsChanged","addCrownMolding","setIsPointsMovable","getSize","resetMouseDown","isFromParams","thisShapeMeasurementPoints","getDepth","depth","setFillColor","green","alpha","setShape","setHovering","setHoveringOnlyShape","hoveringOnlyShape","getRotateAngleRectangle","rotateAnglePart","renderFrom","calculateRenderPosition","renderTo","renderFrom2","renderTo2","setSlabPosition","slabAbsolutePos","getSlabAbsolutePosition","getAbsolutePosition","workspacePos","_pos","getSnappedPosition","getRegularPosition","getSlabPosition","isHoveringOnlyShape","setResetSlabModePopupWasDisplayed","getResetSlabModePopupWasDisplayed","addShapePieceId","restoreShapePieces","export","getTotalArea","getCabinetDoorsSQFT","SHAPE_LAYOUTS","lowerLayoutType1","LowerLCorner","lowerLayoutType2","LowerDullangle","lowerLayoutType3","LowerIroningBoard","lowerLayoutType4","LowerDimondShape","lowerLayoutType5","LowerDimondCorner","upperLayoutType2","UpperLCorner","upperLayoutType4","UpperDimondShape","upperLayoutType5","UpperDimondCorner","newFeature","shouldChangeShapePartId","shouldChangeCabinetShapePartId","newParent","getNeededFeatureFromNavItems","featureRelatedFeatures","getFeatureRelatedFeatures","newShapeDbFeature","getCabinetSimilarFeatureFromAnotherColor","updateLineHovering","isAngleHovering","getHoverSegmentCorner","isCornerLineHovering","getPoints","getHoverLabel","labelOverlay","getHoverPointOnClick","isOverPointField","shouldIncludeBumpoutLines","linesWithBumpouts","getBumpoutLines","createLinesWithoutAngle","getLinesWithoutAnglePoints","getLinesWithoutAngle","lineCorners","getPointsCoords","setOriginalPointsCoords","getOriginalPointsCoords","getPointPosOnWorkspace","getOriginPointOnWorkspace","SHAPE_DIAMOND_LAYOUTS","shapeLayout","pointsOnWorkspace","anglesTotalArea","getCornersArea","getAnglesTotalArea","getEdgesAdditionalArea","getWaterfallToolAdditionalArea","getMiteredTotalArea","getTotalVolume","totalVolume","cornersAdditionalArea","getRectangle","basePoint1","basePoint2","norm","next","rect1","rect2","intersection","calculatePolygonClippingPolygonArea","getTotalLnft","getAttachedEdges","isWithWaterfallToolEdge","isWithPeninsulaUnderwrapEdge","waterfallOverlay","getResourceByLineId","getArea","getInnerCornerPoints","handleArrowInputIncrease","isNegative","basePoint","secondaryPoint","rotated90_1","rotated90_2","bottomLine","rotateAngleInputChange","moveShape","resetShapeSnappedGroup","updateShapeSnappedGroup","setAbsolutePosFromSnapPossibilities","setAbsolutePos","isMouseOverShape","wp","vertx","verty","vert2x","vert2y","pointDirection","pointFromX","pointFromY","prevState","rotPart","pnpolyArray","hideShapeOffsetInTheSlabMode","preventNegativeArea","restoreShapeOffsetInTheSlabMode","handleSlabPlaceholderIntersections","handlePlaceShapeOnTheLine","shiftKey","isShapeSelected","removeShapeFromSelection","addShapeToSelection","rememberShapePosition","setShapeToShapeOffset","setRotateAnglePartActive","deActivateRotateAngle","addSeamPieceVertical","addSeamPieceHorizontal","slabShapeOffset","getShapeOffset","restore","initShapeOffset","hideAngleTooltip","angleTooltip","inputArrows","querySelectorAll","display","elem","parentNode","replaceChild","cloneNode","hideAngleTooltipArrows","inputArrowUp","inputArrowDown","clearInterval","pointsArray","reversePoints","reversedPoints","getPointCordsArray","lineIndex","setPosSlab","activateRotateAngle","isAngleRotatedPartsWithCorner","renderAngleCircle","inputSubmit","expandedSidebar","scrollTop","secondaryLineLength","oninput","focus","onkeydown","blur","onblur","holdStarter","holdActive","arrow","currentTarget","setInterval","deleteBumpout","setRotateAnglePartBaseConfiguration","basePointX","basePointX2","basePointY","basePointY2","baseOldX","baseOldY","baseOldX1","baseOldY1","widthDiff","rotated90_1Calc","rotated90_2Calc","anglePercentage","diffToMinus","pointToRotate1","pointToRotate2","getAngle","rotationCenterPoint","getRotationCentrePoint","rotated","rotated2","getOrientation","getNextLine","angleIsChanged","shouldSearchAmongLinesWithoutAngles","lineBefore","flip","flipDirection","degrees","aroundPoint","Right","count","changeCornerDirection","rotateShapeBumpoutPoints","rotateShapeRotatablePoints","bumpoutPointsKey","setRotationDegrees","rotationDegrees","removeActiveBacksplashByLine","getRandomInt","initEvents","getPriority","eventManager","resetState","reInitTitleEvents","restoreState","protect","isShapeHasIntersections","hasIntersections","renderAnglePartActive","save","rotateShape1","closePath","fillStyle","showMaterialsTutorial","materialsTutorialIsOpened","setMaterialsTutorialStep","materialsTutorialStep","setMaterialsTutorialFinished","materialsTutorialFinished","showMaterialsAgentTutorial","materialsAgentTutorialIsOpened","setMaterialsAgentTutorialFinished","materialsAgentTutorialFinished","showVisualizerTutorial","visualizerTutorialIsOpened","setVisualizerTutorialStep","visualizerTutorialStep","setVisualizerTutorialFinished","visualizerTutorialFinished","RenderFigures","isFilled","tl","tr","br","bl","defaultRadius","side","quadraticCurveTo","h","fullOval","lx","ty","by","magic","xMagic","yMagic","bezierCurveTo","arc","scaleX","scaleY","lineColor","fillRect","innerX","innerY","innerW","innerH","centerX","centerY","radiusBig","radiusSmall","innerYTop","innerWTop","innerHTop","innerYBottom","innerWBottom","innerHBottom","centerXTop","centerYTop","centerYBottom","startPoint","strokeRect","drawArrow","context","fromX","fromY","toX","toY","drawRotatedArrow","cornerPointX","cornerPointY","midpoint","rotateDirectionPoint","arcTo","renderPolygon","firstPoint","renderPolygonArray","drawArrowsAround4points","prevPoint","nextPoint","afterNextPoint","offsetPoint1","offsetPoint2","midPoint2","drawArrowsAroundPoints","minArrowLength","renderHandle","showerScreen","showerHeadBundle","handShowerKit","tubSpout","bodySpray","diverterTrim","handShowerHolder","handShowerOnly","showerHose","showerSystem","showerTrimKit","valveTrim","wallUnion","shower_head_type","shower_hand_type","showerHeadType","fromPartId","arrayToDisable","arrayToEnable","canBeEnabled","showerType","setGroheFiltersOpened","filtersOpened","setGroheSimilarFeature","similarFeature","setGroheSimilarProductsOpened","similarProductsOpened","setGroheRequiredButNotIncludedFeature","requiredButNotIncludedFeature","setGroheFiltersSearchText","groheFiltersSearchText","setLastOpenedCategory","lastOpenedCategory","setGroheSubCategoryOpened","subCategoryOpened","setShowAddedToTheCartSuccess","showAddedToTheCartSuccess","setGroheActiveFeatureQuantity","groheActiveFeatureQuantity","setGroheShareButtonsOpened","groheShareButtonsOpened","setGroheSameColorActiveFeature","groheSameColorActiveFeature","setGroheSameColorSectionOpened","groheSameColorSectionOpened","setGroheSameColorCheckboxApplied","groheSameColorCheckboxApplied","setExisingTempId","exisingTempId","bgImageUrl","splitFilter","keysAndProps","prop","isObject","imagePathCache","imagePath","dev","pathPrefix","convertKeysToCamelCase","newObj","each","toCamel","build","destKey","ignore","playVideo","hideVideo","$guide","guide","pause","getIntroVideo","exportCanvasAsPNG","fileName","MIME_TYPE","imgURL","dlLink","downloadurl","monads","ifNotNull","notNullCallback","isEmail","isZip","zip","isPhoneNumber","region","phoneUtil","PhoneNumberUtil","getInstance","parsedPhone","isPossibleNumber","isValidNumberForRegion","getPhoneFormatted","formatInOriginalFormat","getUserPhoneSplitted","oldCountry","googlePhouneUtilInstance","allRegions","getSupportedRegions","phoneCountry","regionCode","dialCode","getCountryCode","iso2","getNationalNumber","phoneSplitted","parseUserResponse","newUserInfo","lastName","isNew","password","parseShippingAndBillingResponse","billingAddress","billingSameAsShipping","address2","getValidationErrors","currentValue","hasErrors","errorsObject","textSubStringEllipsis","_checkNetworkErrorMessage","renderMessagePopup","retryConnectionFunction","closeButtonCallback","afterContractSignCallback","closeMessageBox","needContractSignDocument","setAfterContractSignCallback","newStyles","renderAccountNotActivatedErrorPopup","resendActivationEmail","renderConfirmPopup","tag","confirmPopupTag","reduxState","qtState","switcherTitle","roomNavItem","ACTIVE_ROOM_TYPE","getRoomNameInQuote","getQtCategoryName","roomGroup","getRoomGroupById","getQuoteByRoomName","isQuoteByQTCatNameEqualToCurrentQuote","newQuoteIndex","loadQuoteByQtCatName","setActiveQuoteIndex","loadActiveQuoteToSQFT","roomName","quoteByQtCatName","quoteByRoomName","onSQFTLoadPrepareData","onSQFTLoadImport","updateQuoteWithSQFTData","saveSQFTDataToQuote","sqftCalcData","createQuoteIfNotExistOrUpdateCurrent","prepareSQFTData","updateActiveQuoteWithSQFTData","addRoomToCart","newQuotes","qIndex","setQuotes","getSQFTIdsFromAllParentLists","parentsLists","SQFTIds","parentsList","sqftFeatures","sqftFeature","getSQFTIdsFromSQFTCalcData","deleteCartItemsThatAreMissingInParentLists","sqftIds","SQFTCalcData","deleteCartItemsThatAreMissingInSQFTCalcData","sqftQuantities","updatedQuantities","sum","currentQtCategoryInQuotes","getQuoteForCurrentQtCatName","createQuoteFromSqftCalcData","isManualCalculateNotEmpty","createNewQuoteFromCategory","isVisibleInSQFT","addNewQuote","manualCalculate","isCreatedInSQFT","getRoomCartItemForCategoryName","roomsFeatureGroup","getNavItems","LoadingSpinner","orderCompletePopupVisible","toggleShowMobileQuotes","showMobileQuotes","toggleShowAllQuotesCartItemsList","showAllQuotesCartItemsList","getMinimumChargeCartItem","fromCartItem","onlyMinimum","newDbFeature","costplus","minCartItem","setCartFooterActiveButtonIndex","cartFooterActiveButtonIndex","setCartItemEditFeature","cartItemEditFeature","setLookRemovedCartItems","lookRemovedCartItems","setCItemsAddedToParentCart","setSureTax","setSureTaxLoading","sureTaxLoading","setDeliveryList","clearCartAndStartOver","fullClear","setManualTax","manualTax","foundGroup","changeWizardToNextStep","getHandleFeatureGroupFromShape","handlesPartId","withPlaceholders","checkFeatureGroup","activeQuote","loadData","currentLayout","remove","setMeasureUnit","rememberConfig","manualCalculateImport","updateManualCalculateRows","getInitialManualCalcRows","closeSQFTTool","redirectToPage","shouldChangeWizardToNextStep","changeWizardStepRoute","isSQFTinUrl","getNextNotCheckedStep","withGroupIds","getWizardGroupsFromTheWizard","allNavItems","navItemsFromWizardGroup","newWizardGroupId","newWizardStep","wizardStep","newNavItem","getUnderlaymentFeature","underlaymentFeatureGroup","underlaymentFeaure","Cabinet","partThumbnailSize","topHandle","topCabinetShadow","bottomCabinetShadow","withHidden","hideWithoutFeatures","filterRelatedItem","getWizardGroupName","allWizardSelectedValues","newValues","actionPayload","conflictingWizardSteps","confObject","nextStepKey","testWizG","selectedWizardValue","currentStepGroups","stepWizGroup","selectedWizardGroup","wG","mG","checkFeatureGroupForOpposite","erasedValues","updated","newWizGroup","parseWizardData","getFeatureGroupFromWizardSteps","allItems","getUpdatedWizardId","mainResponse","parseOnly","newVisualizerType","wizardItemIndex","fixWizardItem","oldWizardItemId","withToolVersion","commonName","existingSubscription","hasSubscriptionForRoom","getVisualizerTypeFromSubscription","PrintDocumentContext","createContext","leftImagePos","inEnabled","isCenterButtonRightPartHovered","isCenterButtonLeftPartHovered","rightPartZoomedShapeId","leftPartZoomedShapeId","isSlabPlaceHolderPresent","measurementPoints","centerButtonRightPart","centerButtonLeftPart","getPos","setEnabled","setSlabPlaceHolderPresent","getRightPartWidth","initRightPart","initLeftPart","centerButton","beforeRenderCenterButtonRightPart","beforeRenderCenterButtonLeftPart","initSlabWorkspaceEvents","renderSlabLeftPartWrapper","renderSlabRightPartWrapper","disableSlabImages","eyeballButtonLeftPartClick","isOverRightPart","eyeballButtonRightPartClick","moveSlabWorkspace","shapesIds","closestHigherNumber","zoomToSlabShape","zoomToShape","rpw","isFullRender","renderSlabRightPart","isMeasurementVisibleInSlabMode","renderMeasurementsAroundSnappedShapes","Part","isParent","realFeaturesReceived","nextFeaturesPageToLoad","featureGroupVisible","featureGroupEnabled","selectedFeaturesHistory","filtersReceived","condValue","applianceThumbnail","cabinetThumbnail","centerIslandThumbnail","countertopGroupThumbnail","SmallLayoutShadow","DISCOUNT_MAIN_TYPES","freeFill","subTotal","nested","finance","deposit","percent","DISCOUNT_MODES","and","or","discountInterFace","DISCOUNT_SECTION_TYPES","DISCOUNT_FINANCE_CELLS","financePercentage","financeMonths","financeSalesPercentage","isRidged","isSubTotal","uuId","nestedParent","discountType","financeOptions","multiSelections","approveOptions","discountSectionsInterface","port","baseNewImagesPath","noInternetMode","getPriceWithIncluded","getShowPrice","forTotal","getMarkUpPrice","markUpValue","markUpType","percentCost","retail","markUpString","isUpdatedInJobBoard","updateQuote","updatedQuote","setActivePartFilterValues","filterValuesArray","activePart","availableCountertopGroupFilters","allFilterGroups","getAvailableFiltersForNavItems","featureFilters","featureOptions","fOptions","filterGroupFromAll","currentFilterValues","getAvailableFiltersForReceivedFilters","getAvailableFilters","checkIfNeedToReceiveFeaturesIfFiltersApplied","currentParent","onScroll","getRealFeaturesReceivedProperty","arrayOfNeededFiltersToReceive","filterObj","filterIdsReceived","filterIds","existingFiltersRequest","filtersReceivedObject","allFeaturesWithFiltersReceived","getFeaturesFromBackendWithFilters","counterTopFiltersIdsReceived","existingFilterObject","featuresReceived","featuresCountToReceive","getSelectedFiltersLength","shopNavItems","forceFromNavItems","getFeatureGroupFilters","filtersRequested","featureGroupFiltersResponse","updateFiltersCount","availableFilters","getHardCodedFilterGroups","LockedView","getQuoteEnabled","enableQuote","onClick","handleUserLoginClick","MobileMenuSelect","handleParentItemClick","parentItem","onParentItemClick","showRelatedItems","handleToggleDropdown","setState","scrollHeight","handleBackClick","handleRelatedItemClick","onSubPartClick","toggle","activeSubPart","handleWrapperBlur","handlePrevClick","prevItem","currentChildIndex","childItem","currentParentIndex","parentItems","prevParentItem","lastSubPart","handleNextClick","nextItem","nextParentItem","desktop","setShowName","nextProps","dropDownStyles","data-parent","func","instanceOf","defaultProps","setLanguage","setActiveTheme","setAgreeEmailCheckbox","setInitialVisualizerType","initialVisualizerType","setNetworkConnection","networkConnection","allFeaturesWereLoaded","setAllowRouting","allowRouting","setAllowMainLoading","allowMainLoading","setActionAfterVisualizerTypeIsChanged","actionAfterRoomChange","setVisualizerIsChanging","visualizerIsChanging","getQuoteInfo","forLocalStorage","nextVisualizerType","quoteTotalPrice","getQuoteVisualizerType","allowVisualizerSwitching","getImagePromiseFromLayout","leadFeatures","getActiveNames","getRoomImageFromQtCategory","indexToUpdate","currentQuoteObject","q","setNewActiveQuote","newQuote","switchToNewVisualizerType","switchToWizardItem","deleteCartItemFromSQFTCalcData","cItemQuote","nvert","testx","testy","isPointInsidePolygonArray","ShowerCommon","isShowerCommonGroup","setShowerHeadType","showerSize","featureGroupId","modulePartsList","lowerCasedVisualizerType","existingAddedCartItem","getRoomNameToCompare","roomFg","roomFeatureNavItem","roomFeature","getCurrentQuoteRoomName","withVisualizerCheck","quoteRoomCartItem","qtCategoryName","fgNavItems","visualizerRoomName","roomsNavItems","getQtCategoryFromQuoteRoomName","updateQuoteRoomsForCartItems","setNewRoomIndex","shouldCreateNewQuotes","createdRoomCartItems","withCreated","existingCartRoom","newActiveQuoteIndex","newRoomCartItem","updateSQFTCreatedStatusForQuotes","quoteRoomName","qtCat","needToLowerCaseName","checkCatName","customLowerCasedName","originalLowerCasedName","checkIfNeedToSetNewCategory","getOtherRoomCartItemThatIsAddedToCurrentQuote","addedRoom","addNewQuoteWithNewRoomCartItem","oldRoomCartItem","isCabinetsMode","sqftFromFeatureParentGroup","relatedParentParentGroup","getEdgeFilterByValue","edgeFeatureId","getEdgeByFeatureId","parseNumberFromString","fractionMatch","whole","numberMatch","miterEdgeFeature","heightFromFeatureName","getMiterEdgeFeature","getMiterUnderwrap","getBumpoutFeature","bumpoutFeatureGroup","isFeatureUnitUseEach","createApplianceOnTheWorkspace","itemName","iconFullName","svg","xml","XMLSerializer","serializeToString","svg64","btoa","getDbFeatureName","ActualDisplayedName","getSortedFeatures","widthA","getActivePartsCounts","getAvailableLayouts","getShowOtherLayouts","showOtherLayouts","showSmallDesignForClients","showSmallDesignFromDashboard","getAvailableRoomScenes","availableRoomScenes","getAllFeatures","scrolledVerticalToTheEnd","ceilScrollHeight","floorScrollHeight","ceilScrollTop","floorScrollTop","ceilClientHeight","floorClientHeight","getSideBarSubParts","getSQFTGroupFromUrl","getIsSFTAreaGroup","isSFTAreaGroupInUrl","getSQFTGroup","getPartIdsFromMenuOpened","getSearchTextFromMenuOpened","getItemClickCallbackForPartId","itemClickCallback","setHighlighting","setSelectedFeature","WithOverlay","popupClassName","overlayElement","fadeIn","hideOverlay","closePopup","fadeOut","any","AccessoryCommon","showerCondition","accessoriesParent","otherFeatureGroup","soapDish","grabBar","largeCornerSeat","seats","newPosition","getAvailableWizardList","qtCatProperties","getWizardSubParts","getFeatureGroupDescription","customDescription","getGroupDescription","getLixilRequiredNotIncludedFeatures","lixilRequiredNotIncluded","formatStrToUrl","unitsToCountQuantity","getCartItemsCount","forceCheckAllQuantitties","featureUnit","endsWith","searchString","subjectString","lastIndex","serverConfig","__hideFeatures","_get","signal","_post","headers","post","__urlBase","_getUrlBase","addUrlMode","baseUrl","hardcodeResponsesFolder","JsonApi","saveUserKiosk","saveQuoteKiosk","encodedUserId","quoteData","saveSchedule","json","getKioskApiResponse","reject","token","encodedCustomerId","forVisualizerType","allResponse","localUrl","remoteUrl","sharedFeatureNames","skus","Ids","fixedGroupName","fixGroupName","requestUrl","searchGroupName","oldVersion","fixFeaturesResponse","featureLocal","featuresPerGroupAmount","getKioskData","saveData","forceNew","otherData","additionalInfo","getRawKioskData","kioskData","KioskApp","PostMessage","customerId","postString","getSubTotalPrice","withoutCurrent","allDiscounts","currentDiscount","disSection","customDiscount","section","sec","categoryId","customDiscounts","calculateCellValue","numberOfMonths","finalPrice","fixedDeposit","rate","nper","pv","cellValue","PMT","getNextCustomDiscountOrder","fromDiscount","shouldDisplayDiscount","selectedOption","getDepositDiscount","depositDiscount","priceTaken","getPercentage","getDepositAmount","selectedDiscounts","mapDispatchToProps","withRouter","groheState","history","withAddToCart","updateLookCartItemsNew","updateRemovedCartItems","newRemovedCartItems","existingIndex","removedCartItem","currentCartItem","oldExistingCartItem","positionKey","itemToAdd","changeUrl","directChange","needToBeUpdated","toiletEnabled","featureToClick","nextStep","getSkippedWizardValues","skippedValue","setWizardValuesFromCartItems","shouldUpdate","changeRoute","foundWizardSelectedObject","wizSelObject","urlStepNumber","nextUrl","currentHash","useChangeWizardStepRoute","useHistory","useRouteMatch","propsWizardItem","currentWizardIndex","prevEnabledWizard","nextEnabledWizard","stepUrl","withEdge","withBacksplash","withWall","withBumpout","isWithUnderlayment","isWithWaterfallEdge","isWithFakeEdge","withId","attachedHandleId","attachedHandleUrl","attachedCrownMoldingFeatureId","attachedCrownMoldingUrl","backsplashFeatureId","backsplashHeight","backsplashName","backsplashType","attachedItems","isWithCrownMolding","isWithEndCap","movePointDistance","angleLinePoints","slabModeSkipMiteredEdgeCreation","isHiddenForever","seamCutPoint","aroundLineColor","cornerGutterSize","outlineWidth","outlineMargin","horizontalOutlineMargin","lineThickness","overlayImportData","lineCornerImportData","overlayMiteredData","overlayUnderlaymentData","titleOverlay","staticOffset","blink","lineAttachmentsComposite","getAttachedShape","isWithEdge","isWithBacksplash","isWithHandle","isWithMiteredPrev","isWithMiterEdge","isWithWaterfallEdgeFeature","getAttachedFeature","shouldExcludePoints","getWithId","setWithId","setBacksplashHeight","attachedToResource","updateAttachedToLineResource","renderBacksplashText","getHandleId","setHandleId","getHandle3dURL","setHandle3dURL","getCrownMolding3dURL","setCrownMolding3dURL","getCrownMoldingFeatureId","setCrownMoldingFeatureId","getBacksplashFeatureId","updateAdditionalShapeFeature","setStateParams","getPointsFeatures","getAttachedItems","isAnyItemsAttached","attachedItemKey","setTutotialImage","tutorialImage","setFakeEdge","setHiddenForever","sqftMode","xCord","yCord","getLineField","fieldSquares","squeezeRatio","setMouseOverLine","field","getMouseOverLineV2","getLineBordersArrayV2","getLineHovering","addFreeSeam","mousePosOnShape","lineStart","lineEnd","getClosestPointOnLine","isCabinet","moveLine","updateCornerHoverState","underlaymentOverlay","waterfallData","existing","foundFrom","foundTo","createMiteredOverlay","addMiteredSection","createUnderlaymentOverlay","labelText","createWaterfallOverlay","temp","renderWaterfallText","historyPointFeatures","moveBumpout","moveMitered","nextLine","updateShapeWaterfallLength","updateMiteredLength","updateUnderlaymentLength","getLineDirectionV2","getPairedLines","pairedLines","prevLineStep2","nextLineStep2","prevLineStep3","getLineDistance","getBumpoutTotalHeight","getBiggestXPoint","getBiggestYPoint","getSmallestXPoint","getSmallestYPoint","getSmallestAndBiggestPointWithCorners","toCornerLength","getArcLength","fromCornerLength","toLinePoint","fromLinePoint","biggestLinePoint","smallestLinePoint","toCornerMargin","fromCornerMargin","getLinePointsWithoutCorners","toAngleLength","fromAngleLength","toPoint","fromPosition","toPosition","testLine","testLineFromPosition","testLineToPosition","intersections","toOnly","renderLineBorder","drawBumpoutLine","renderArcLength","renderAngle","nextLineRenderTo","radiusMultiplier","marginFrom","renderLineOverlay","highLightBorder","fromPointWithIndent","toPointWithIndent","drawResizeCursor","setLinePoints","marginTo","prevLineRenderFrom","drawLineFrom","drawLineTo","drawLineBumpoutPoints","bumpoutInOrOut","setPointsOutlineIntersection","prevLineFrom","nextLineTo","fromBorderIntersectionPoint","getBorderFromIntersection","fromOutlineIntersectionPoint","getOutlineFromIntersection","isWithAngle","isWithCorner","closestIntersectionPoint","toBorderIntersectionPoint","getBorderToIntersection","toOutlineIntersectionPoint","getOutlineToIntersection","renderCircle","getOutlineIntersectionPointWithNextTLine","pointOnTheLine","pointOnTheNextLine","nextLineToPointField","nextLineFromPointField","prevLineToPointField","prevLineFromPointField","pointOnTheLineBeforeFrom","pointOnThePrevLine","drawLine","border","drawCorner","interSectionPoint","drawAngle","lineCap","getOutlineStrokeStyle","getOutlineHoverStrokeStyle","getAnglePoints","cord1","cord2","cord3","cord4","get45CornerLegDistanceScaled","setMidpointOffset","pointName","deleteMitered","createLineLength","deleteUnderlayment","deleteWaterfallTool","attachedItemsKey","removeLineText","deleteSlabBacksplashByLine","deleteResourceAttachedTo","addEdgeToLine","renderEdgeText","addBacksplashToLine","addCrownMoldingToLine","crownMoldingName","addEndCapToLine","endCapName","addBumpoutToLine","addMiteredToLine","addUnderlaymentToLine","addWaterfallToLine","createSlabModeWaterfallShapes","addPeninsulaUnderwrapToLine","createPeninsulaUnderwrapOverlay","renderLineField","tutorial","highLightedByTutorial","isHighlightedLightOn","isBumpoutHighlighted","isMiteredHighlighted","canBeMoved","isMovable","pointWasMoved","miteredFeatureId","fillStyleEdge","fillStyleWhite","fillStyleBlack","fillStyleDelete","fillStyleBlue","radiusFillStyle","translateX","translateY","pointRadiusOverlay","setPointWasChangedInRegularMode","shouldResetSlabModePopupOnPointMoveBeDisplayed","renderResetSeamPopup","renderAngleArc","exportAndImportProperties","getMiteredFeatureId","setMiteredFeatureId","setPointWasChanged","setPointWasMoved","setTranslates","movePosition","canPointBeMoved","allowedNavItems","allowedNavItemsForMovingPoint","isLineWithBumpout","isPrevLineWithBumpout","miteredPoints","addEdgeToPoint","revertPositionIfHasIntersections","exportPoint","importPoint","xPos","yPos","useFieldWidth","getPointCords","isFitSize","isWithoutMitered","rememberPos","backupX","backupY","restorePos","marginX","marginY","pointDiff","pos2","shouldHighLightRadius","isNotHighlighted","renderCircleLayout","renderSmallCircleLayout","renderArrowCircleLayout","renderBlankLayout","renderHighlightRadiusLayout","renderRotateAngleLayout","renderWhitePointLayout","renderGrayPointLayoutV2","arcRadius","renderGrayPointLayout","renderArcLayoutOld","SQFTResourceController","resourceName","removeResource","resource","searchedId","exportedData","sqftSlabManager","resetBacksplashes","getSlabPlaceHolderShapes","hideShapeOffset","reInitShapeOffset","emit","animateShapeTransition","iconPlusGreen","iconPlusBlack","iconPlusBlue","iconplusPurple","objectFlipVertical","objectFlipHorizontal","iconGreenPlus32","iconGreenClip","iconHeight","iconLength","iconLink","iconThickness","iconEyeball","iconCursorPointer","iconLibrary","iconUpload","iconImage","showSlabTool","setActiveSlabId","activeSlabId","setActiveSlabUrl","activeSlabUrl","setActiveStep","setSlabSearchText","setSlabAspectRatio","slabAspectRatio","setSlabImageType","slabImageType","setSlabImageWidth","setSlabImageHeight","setCropperData","cropperData","addSqftCroppedSlabImage","croppedSlabImage","setSqftSlabToolVisited","isSlabToolVisited","addRoomWithVisitedSlabTool","setPricePerArea","pricePerArea","setMeasurementVisibleInSlabMode","setIsSizeValidationFailed","isSizeValidationFailed","setIsSlabPricingEnabled","replacementTubFixture","loadCommon","Appliance","fridgeEnclosureHandle","seg","segCorner","resourceType","resourceId","addResourceToStore","shouldShowEyeBall","attachedToHovered","attachedToExisting","prepareResource","attachResourceToLine","createAttachedResourceInStore","shouldChangeExisting","newSection","resourceActionMap","addEdgeToCornerLine","addBacksplashToCornerLine","addSection","addMiteredToCornerLine","setResources","resources","changeResource","deleteResource","setSelectedPartIds","selectedPartIds","UserLoginButton","userPopupType","handleLoginClick","toggleMobileButton","userLogoutActive","handleDropdownWrapperBlur","handleLogOutButtonClick","logout","saveQuoteAfterLogin","toggleShowAssignQuotePopup","allowClickLeadCapturePopup","findLongestLine","longestLine","getDistanceLength","getLineCrownMoldingPoints","linePointsIds","getDiagonalPointsForTheLine","getLineBordersArrayV1","outlineDistance","pointField1","pointField2","pointOnTheLine2","parallelPoint4","getBordersOfTwoPoints","lineBorderArray","virtualLines","borderPointKey","currentLineBorderPoint","nextLineBorderPoint","virtualLine","addEdgeToTheLines","lineNumbers","addFakeEdgeToLines","setLineParams","shapeLine","updateWaterfallLength","setNewLineWidth","createSimpleLinesFromPoints","initAllLineLength","hideAllLineLength","findCollinearLine","searchLine","roundedSearchLinePoints","roundedTestPoints","isHorizontalDirection","isVerticalDirection","isWesternHemisphere","isEasternHemisphere","adjustedLines","legLengthTo","calculateLeg","legLengthFrom","linePosTo","linePointTo","linePosFrom","linePointFrom","cloneLine","newLinePosFrom","newLinePointFrom","legLength","newLinePosTo","newLinePointTo","Layer","fromS3","splitWallPartIds","shouldCheckAdditionalPartsConditions","WallCommon","splitWall","getSplitWallType","actions","toggleFilterArrayValue","FilterSwitchers","replaceFilterArrayValue","setActiveFilterValue","setDefaultFilterValue","setDefaultFilterArrayValue","availableFilterValues","setAvailableFiltersValues","filterGroupName","isRebath","activeFilterValueId","appliedFilter","dbFeaturesArray","setNextPage","loadedPage","fromSearch","edgeGroup","edgeValue","countertopFeature","addFilterArrayValue","FilterSelection","removeFilterSelection","getAvailableFilterValues","featuresToFind","moduleParts","FeatureThumbnail","isLoading","setThumbnailUrl","smallerSizeTried","setSmallerSizeTried","baseThumbnail","alt","onLoad","onError","featureIsMatchingDisplayLogic","displayLogic","displayRules","currentQuoteCartItems","visibleUpdated","rule","entityVal","entityId","countertopCount","matchingCartItem","entVal","ruleVal","comparison","isMatching","propertyName","originalValue","finalValue","inCatProperties","inCatFabCost","inCatCost","inCatPrice","getOldHidePropertyName","forPage","hidePropertyName","toolSettings","checkProperty","toolSettingsObject","tool","setFabricatorFeatureCategoriesProperties","fabricatorFeatureCategories","fabricatorFeatureCategoriesPropertiesAreSet","qtCategoriesList","inCat","currentFabricatorFeatureCategory","fabricatorFeatureCategoryId","inCatName","bvSetting","setting","kvSetting","hideFromBathroomVisualizer","enableVisualizer","hideFromBVQT","enableQuotingTool","hideFromKitchenVisualizer","hideFromFrontEnd","fCat","hideFromBV","hideFromKV","hideFromKVQT","forActiveQTCategory","SuccessNotification","isHiding","showQuoteSavedNotification","saveQuoteTimeoutId","createCanvas","backCtx","finishDraw","errorImages","backgroundLayers","quality","useNewEnhance","maxHeight","canvasObject1","canvasObject3","canvasObject2","globalCompositeOperation","imageObject","cropCoords","layerWidth","layerHeight","layerDimensions","dim","polygonArray","loadedImage","getSubscriptionThumbnail","fabricatorSubscriptions","subscription","getBackgroundLayers","showPlaceHolders","bvConfig","showPlaceholders","getLayers","backGroundLayers","imagesPromise","cnt","newLayoutType","Background","getIsBathroom","CountertopSwitchers","setToggledByUserProperty","currentCategoryPartId","COUNTERTOPGROUPS","applyTo","newPartId","toggleSwitchedOffByUser","neededSubPart","getUpdatedCountertopSwitcherButtons","countertopsApplyToPartId","countertopsApplyTo2","existingIndex2","setToggleOffProperies","toggleCountertopsApplyTo","getButtonName","getValueText","buttonIsDisabled","renderDropDown","selectItems","withCheckboxes","valueText","disabledButton","showAsDropdown","isMaterials","updateCountertopSwitcherButtons","currentGroupPartId","propsCountertopsApplyTo","setApplyTo","typeGroup","filterName","tileFilterValue","navigationItemPart","passedArrayApplyTo","clickedPartId","currentPartId","isNewKitchen","isNewKitchenBacksplash","featureName2","manufacturerFilterGroup","featureManValues","withSameManufacturerFeatures","currentHeight","getCurrentActiveFeatureType","sameHeight","getFeatureBacksplashType","searchFeaturesByName","turnOffToggles","FiltersClass","blurClickSet","activeFilterId","handleSearchInputChange","filterVisible","Layout41","SLAT_WALL_POSITIONS","setEmployeesList","setAlreadyRegisteredUserInfo","alreadyRegisteredUserInfo","setLeadCaptureClickCount","leadCaptureClickCount","setUserPopupContent","userPopupContent","setUserTwoFa","userTwoFa","setUserOptIn","optIn","crossProduct2D","vectorA","vectorB","findClosestIntersectingPointAndLine","referenceLine","perpendicularVector","getPerpendicularMidpointVector","intersectionPointsAndLines","intersectionPoint","getClosestLineAndIntersectionPoint","convertShapesToPolygons","convertShapeToPolygon","convertFromPolygon","areCollinear","getSegmentIntersectionPoint","isPointOnSegment","p1","p2","p3","p4","seg1","seg2","sortedY1","sortedY2","sortedX1","sortedX2","getOverlapLength","findLowestRightmostPoint","resultPoint","hypotenuse","lineVec","lineLen","lineUnitVec","mouseVec","dotProduct","clampedDotProduct","coordinates","findNearestPoint","targetPoint","nearestPoint","Infinity","getThePositionOfAPointToTheLeftOrRightOfALine","linePoint1","linePoint2","searchedPoint","ax","ay","bx","crossProduct","onSegment","allowOverlap","d1","d2","d3","d4","closestIntersectionPointAndLine","roundShapesPoints","cross","roundPoint","polygons","coord","union","a1","b1","c1","a2","b2","c2","determinant","findTopLeftPoint","topLeft","adjustPointsRelativeToTopLeft","sortPointsClockwise","topRight","bottomLeft","bottomRight","roundCoordinate","precision","factor","BodyPanelRadio","radioClick","refreshItems","forceUpdate","quotingTool","isToggle","canvasCount","firstCat","wizardAllObject","stepsState","currentActiveCategory","sPart","changeQTRoutePath","relatedItemIndex","subPartItem","showContractSigning","contractSignPostSignature","contractSignData","showSignaturePad","setContractsValues","contractId","pageIndex","fieldIndex","setContractSigningStep","setContractDocumentForJob","documentData","setContractBlob","contractBlob","restoreContractValues","setContractsList","getContracts","contractsReceived","useContractSigning","getContractDocuments","savedContracts","getLocalStorageItem","newOrderedList","contractIndex","getSelectedContracts","getActiveContract","allContractsList","withoutContractsCheck","setContractBlobs","receiptPagesLength","isOfflineFirstLoad","pagesCount","updatedContractsList","pagesFrom","pagesTo","useDocument","documentWithoutTagsUrl","documentUrl","blobUrl","fetch","responseFetch","totalPages","globalContractPage","getAllContractsValues","selectedContracts","activeContract","activeContractPage","changeContractsPage","newPage","changeContext","receiptPages","allValues","showPage","setLocalStorageItem","localStorage","setItem","getItem","setSessionStorageItem","sessionStorage","removeSessionStorageItem","removeItem","getSessionStorageItem","withParse","fixVisualizerType","neededSubscriptionName","getToolVersionByVisualizerType","disableLoader","wizardIsActiveObject","roomFeatureGroup","newActiveFeature","advancedQuotingState","showAdvancedQuoting","nextWizard","toolVersionToCheck","quoteCartItems","shouldSwitchVisualizer","hasSubscription","createNewQuoteAfterVisualizerChange","newRoomName","needToAddRoomToCart","replaceIncorrectSymbols","getPercentAmount","fromTotal","forCartItems","totalArray","featureCurrency","existingGroup","resetEvents","currentCursorOwner","clearRotateAngles","drawFinish","workspace_onClick","tookAction","bumpoutLine","getTextBoxes","initDraw","drawShape","isJustCreated","setIsJustCreated","box","mixin","movable","cornerLine","miteredPoint","deletePoint","resetHoveredPoint","lineWithTheLabel","activeMenu","cloneShape","cloneMovableImage","createSpacer","isBoxActive","FeatureWizardSteps","setFeatureWizardStep","featureWizardStep","availableSteps","exitFeatureWizard","allStepsCompleted","selectedValueId","selectedItemIsLocked","showFeatureWizard","toggleWizardFilterSelection","enableFeatureWizard","isLastStep","nextStepIsLocked","lastStepIsDisabled","allProducts","finishClicked","wizardButton","prevStep","buttonName","getFilterDisplayName","showAssignQuotePopup","assignQuotePopupSaveButtons","setAssignQuotePopupSearchText","assignQuotePopupSearchText","setAssignQuotePopupEmployee","setAssignQuotePopupCustomer","setAssignQuotePopupSuccessText","assignQuotePopupSuccessText","setAssignQuoteCloneMode","assignQuoteCloneMode","setAssignQuoteOfflineData","offlineData","doNotZoomPartIds","shouldZoomPartId","shouldZoomToTheBottom","getCorrectedCenter","zoomFactor","zoomToFeature","zoomToPostion","closeOpenedCategory","clickOnFeature","lookUrl","hoveredLayer","featureExistInQuotingTool","allowFeatureScreen","shouldZoomCanvas","tapZoomFactor","zoomFeature","togglePriceWorksheetOpened","priceWorksheetOpened","setCustomAddedDiscounts","setFinancePercentage","setAllFinanceOptionsPopupVisible","allFinanceOptionsPopupVisible","setFinanceCellsVisible","financeCellsVisible","CORE_POINT_LAYOUTS","ear","PointV2","pointPrams","isCentered","isCenteredByY","isResizedByPoint","isScaledByPoint","isVisibleOnHover","shouldRotateShape","pointData","mixins","isHoveredWithParent","isMouseDownWithParent","subLineHeight","renderOval","renderImage","moveCallback","mouseUpCallback","mouseDownCallback","_modelCorePoint","setPosX","setPosY","isParentMovableHovered","isParentHovered","isParentChildrenHovered","hoveringWithChildren","isParentMouseDown","isParentChildrenMouseDown","mouseDownWithChildren","isMouseDown","getUrlMatchingByColor","getRelatedFeatureMetadata","getCabinetDimensions","parentFeature","thirdPartyAR3DMetaData","getWidthFromDbFeature","getDepthFromDbFeature","getHeightFromDbFeature","featuresListToSearchForNewFeature","currentShapeDbFeature","cabinetBoxName","generateQRCode","qrData","getThirdPartyAR3DMetaData","thirdPartyAR3DUrl","metadataString","getDepthFromAR3DMetaData","Depth","getWidthFromAR3DMetaData","Width","getHeightFromAR3DMetaData","Height","getCategoryFromMetadata","getSpecialShape","SpecialShape","Category","getDepthFromDescription","getWidthFromDescription","getHeightFromDescription","normalizeString","findGLBLink","links","link","splitAndNormalize","getUrlByName","nameSearch","thirdPartyAR3DUrls","featureNameParts","urlParts","containsHEBeforeExtension","get3dURLsForFeature","urlByFeatureName","setCabinetsSetToCabinetGLB","startsFromH","isHoodShape","shapeDbFeature","shapeFeature","setCabinetGLBFromCabinetsSet","displayDoorsOnly","shouldDisplayFramedDoors","cabinetsData","CabinetsSet","prepareCabinetsSet","getUrlToCabinetGLB","cabinetsUrl","setUrlToCabinetGLB","abort","cabinetSet","abortController","AbortController","postCabinetSet","s3Url","relatedParentFeatureName","sortedUrls","groupUrlsByVersion","urlBySharedFeatureName","urlBySimilarity","similarityByWords","urlBySimilarityFromFeatureName","matchingUrl","CabinetSwitchers","toggleCabinetsApplyTo","getCabinetsApplyTo","getSetCabinetsApplyTo","cabinetsApplyToPartId","CABINETGROUPS","getCabinetGroups","getFeatureDoorStyleFilter","doorStyleFilterGroup","neededPartId","doorStyles","featureDoorStyles","featureMaterials","ds","mat","applyAllCabinets","propsCabinetsApplyTo","PartCommon","forQtCategory","_featureName","originalName","customGroupName","_lowercaseCustomDisplayName","_lowercaseSharedFeatureName","currentLayoutAbbr","collectionFg","fGroup","featureCollectionValue","featureCollectionValueObject","getFeatureSavedFilterName","_filterNames","_colorName","getFeaturesFromLayout","currentLayoutFeatures","bvPreset","layout_type","stringifiedLayout","checkAutoAddToCart","setRoomNotInVisualizerProperty","clickable","shouldLoadInDifferentGroups","refactoredArray","Exception","NotImplementedBaseClass","arrayToFilter","getFeaturesBySearchTextLixil","_searchText","isPartName","isFilterName","filterGroupIds","filterIndex","fgv","collectionFilterGroup","matchByName","partsToo","neededId","inParts","arrayToFind","featureParts","matchingItem","_partNameWithoutSpaces","groupId","matchingFeatureExist","currentColorFilterValue","getFeatureByPartName","prevFeatureMatchingName","foundFinally","setCustomConfigurationsAfter","layoutToSet","addFromPageSize","uniqueLayoutsTypes","layoutNumber","activeFeatures","layersBinding","featuresHistory","createNavItems","returnNavItemsFromFeatures","propsFilterGroups","_useCurrency","_relatedFeaturesSet","loadRelatedFeatures","NavigationRequests","getBvPartFeatures","navigationItem","callBack","itemPart","_isMounted","getRelatedItemFeatures","checkIfAllFeaturesReceived","materialsPage","showerComboParent","centerIslandParent","countertopParent","applianceParent","isWallItem","vanityAccent","cabinet","checkIfAllFiltersReceived","changeLayout","firstChange","relatedArray","countertopPageChanges","getSubPartLayoutPageChanges","backsplashPageChanges","requestNeeded","requestNameNeeded","getNeeededKvPartsOnLayoutChange","finishChangeLayout","getBvSceneParts","oldType","currentState","selectLayout","refreshCB","childName","nextLayoutFeaturesPage","maxCurrentFeaturesPage","currentActiveName","neededLayoutName","relatedPartsToReceive","relatedPartsToReceiveForLayouts","pageChanges","nextLayoutName","featuresSize","searchName","WithClickCount","newLeadCount","clickLeadCount","LookAllWallsRadioButton","showColumnCheckbox","viewType","showTutorialToolTip","checked","allWallsCheckboxClick","control","disableRipple","onChange","MessageBox","getMessage","msgIndex","bClass","hClass","messageClass","buttonsElements","MessageBoxButton","sqftShapeIntersectionsManager","resetShapesIntersections","setOverlappedWithShapeIds","getTwoShapesIntersections","addOverlappedWithShape","checkIfShapeContainsAnother","logShapeFeatureIds","overlappedWithShapeIds","logSnappedShapeGroups","intersectedShape","showSlabPlaceHolderErrorMessage","slabPlaceHolderShapes","slabPlaceHolderShape","DesktopNavigationCommon","handleContextMenuClick","menuItem","showNavigation","clickedParent","clickedButton","isBacksplash","bType","backsplashSubPart","applyBacksplash","getFeatureByBacksplashType","parentNavigationItem","subMenuParent","contextMenuOpen","ponyWallAndLeftWallClick","contentType","triggerOpenNavigationMenu","setNewActiveFeature","clickFeature","subMenuText","handleNavTabClick","closeNavigation","navigationIsClosing","setContentType","openLayoutMenu","_menuOpened","activeDefaultPreset","showFilterSelection","showerWallWizardGroupsSelected","off","overlayClick","navClick","lockClick","userPopupClick","handleHeaderBackClick","resetNavigation","updateSideBar","updateSidebarItems","handleSubPartClick","childNavigationItem","subItemPart","childNavigationItemPartId","scrollAsideToMenuItem","rememberWallsSelection","setActivePartRelatedItemIndex","setNavigationFilterIfTheChildWasChanged","menuItemText","child","needToScroll","handleSubPartHover","renderGreenLayerByZindex","scrollToDefault","getElementsByClassName","handleMobileSelectClick","navigationItemClickCommon","useFilters","contentDesign","handleLayoutItemClick","contentRoom","contentLoading","contentDesignBody","onItemClick","navWidth","toggleApplyWallsCheckbox","handleSubTypeClick","showMenu","setStateActiveFeature","contentDesignWizard","getWizardGroupsByPartId","setWizardGroups","setWizardLockedItem","wizardStepIndex","onBackClick","onSubTypeClick","onSubPartHover","activeChildNavigationItem","presets","checkedForLockedPresets","presetIsLocked","handleDefaultPresetClick","bv_screen","navigationMenuButtons","availableNavButtons","tabClassName","navWrapper","_componentDidMount","_componentWillReceiveProps","setHoveredLayer","setDemoPointClicked","NavigationFiltersSteps","wizardButtons","nextStepIndex","lastStep","commonView","mounted","currentActiveIndex","firstStepIsActive","lastStepIsActive","isCountertopWizard","buttonIcon","MobileNavigationCommon","reRenderComponent","parentCategoryClick","parentItemText","firstChild","openMobileMenu","mobileMenuOpened","handleContextMenuBlur","scrollContentToTop","listContainer","messageBoxClick","twoFactorPopup","countryList","searchClick","wizardClick","loadingClick","touchMove","canvasIsDragging","setCanvasClass","handleChangeContentType","resetNav","resetEverything","resetWizardSteps","getDisplayRoomContent","toggleSearchInputFocus","searchInputFocused","contentBody","filterSelectionHasValues","switchers","updateParent","backsplashSelectClick","subTypes","activeSubType","subTypeToString","onFocus","onBlur","filtersVisible","keyType","existInQtCategory","parentUpdate","updateComponent","btn","goToMaterialsInfo","MobileNavigationButtons","handleDropDownButtonClick","designNavigationOpened","handleResetButtonClick","changeContentType","resetDropDown","handleDisplayRoomClick","newButtonClick","dropDownClick","handleFiltersClick","dashboardFramed","mobileNav","enableScheduling","buttonLayoutId","MobileNavigationAllWallsCheckbox","allWallsClick","allWallsApplied","MainButtons","handleLoginButtonClick","handleScheduleButtonClick","enableCalendarForScheduling","consoleTableAllFeatures","downloadCSV","consoleActiveFeatures","allPagesEnabled","quoteEnabled","goToCart","enableSharing","goBack","Visualizer","applyStoredItems","localStorageKey","setIframeMessaging","VISUALIZER_MANAGEMENT_ACTIONS","checkState","updatePresetRoomLayout","visualizerIsLoaded","canvasScaleChanged","canvas_scale","setFirstPreset","layoutTypes","isCartAndUserStatedUpdateNeeded","getQtCategoriesCommon","setNewBvState","firstLoad","handleRefresh","navBar","onBvLoad","askToRestore","checkShareUrl","jobResponse","parseJobIdResponse","canvasClass","removeAllClasses","imageCanvasScroll","newMessageBoxState","demoPointClicked","loadQtCategoriesFeatures","featureGroupsWithoutFeatures","loadFeatureGroupFeatures","toRequestFeatureGroups","finishLoading","setShopPageLoaded","getContractSignDocument","getAssignQuoteCustomersAndEmployees","alreadyRestored","initialFlowStep","initialFlowRoomLayout","tryToSetSelectedRoom","elements","setSubscribers","needToSaveQuote","saveJobResponse","visualizerIsSaved","getOfflineReceiptImages","getCustomersAndEmployees","custAndEmpResponse","clients","employees","assignQuoteOfflineCustomers","client","assignQuoteOfflineEmployees","employee","roomChosen","initialFlowState","initialFlowRoom","selectedRoomFeature","checkToShowTutorial","lockedView","bvGroupsResponse","savedTempData","parseWizardResponse","setGroupsItemsCount","setQtCategoriesSubparts","recoverFromTempId","editJobId","bvStateVersion","isNewlyCreatedJob","GROHE_ON_OPEN_ACTION","shareFacebook","sharePinterest","shareTwitter","useMouseHovering","useTouchZoom","handleToggleFeatureInfo","VisualizerTutorial","componentDidMount","showTutorialStep","exitTutorial","scrollAndHighLightRing","roomLayoutsOrIdeas","getRoomLayoutsOrIdeasStepLogic","selector","changeHighlightRingPosition","handleNextStepClick","forever","getHighLightButton","buttonComponent","mainTranslate","ringStyles","texts","highlightButton","mainTextId","showText","showNextButton","tutorialState","date","year","getFullYear","printLogo","notFoundImage","assignQuotePopupNewCustomer","newEmployeeSelected","isContractSign","assignQuoteState","cartItemsThumbnails","receiptSettings","showThumbnailsAndDescriptions","getCartItemThumbnails","pdf","getCurrentReceiptPages","withReceiptUrl","onRenObj","receiptLayout","_INTERNAL__LAYOUT__DATA_","printReceipt","fileURL","setReceiptSignature","setPaymentInfo","setCardInfo","setCardErrors","cardErrors","setShippingErrors","shippingErrors","setShippingInfo","setBillingInfo","restorePaymentInfo","someValues","NumberText","isInit","initEventListeners","fontColor","fontFamily","fontHeight","valuePrefix","valuePostfix","isMouseOverText","getTextPointsArea","mText","measureText","getMaxLength","initialValue","inputWrapper","createAdjustableInput","onInputChange","onClose","valueBeforeUpdate","isHoveringPoint","hoveredPoint","isHoveredOverText","setValue","setAngle","setBetweenPoints","parentOffset","angleRad","calculatedXOffset","calculatedYOffset","getValue","isString","withSuffixes","updateOrientation","updatePositionBetweenPoints","pointBetweenPoints","renderFrameBorder","renderText","translate","roundedRect","font","textAlign","wrapText","MovableImage","_state","mouseDownSize","minimumHeight","minimumWidth","resizablePoint","onClicked","around","newPoint","_setHovering","_isMouesOverImage","_moveImage","initialSize","thickness","hoverColor","renderMovableImage","_setFillColor","_setImage","_setAttachedTo","_snappedPos","updateSnappedPos","resetAbsolutePos","setSnappedWithShape","setSnappedShapeGroup","updateLinesLength","updateLineLength","distancesToShapes","getDistancesToShapes","distancesToImages","getDistancesToImages","snapPossibilitiesToShapes","getSnappingPossibilities","snapPossibilitiesToImages","absolutePosToShapes","snappedWithShape","setSameSnappedShapesGroup","absolutePosToImages","snappedWithImage","realPos","realSize","axis","_getRotatedPoint","_onMouseDown","getCenterPosition","setSize","setInitialSize","getPosField","getThickness","getRotation","linesData","Lines","currentSrc","$","attr","nameMetric","shapeAbsoluteData","skipImportProps","lineData","rotateBorderPoints","getLinePoints","createLines","_onMouseMove","_onMouseUp","_render","initResizablePoint","pointParams","grandParent","newWidth","newHeight","pointDesign","pointPositionX","pointPositionY","reInitLineEvents","appVersion","getSrc","isSVG","getBorderPointsOnWorkspace","posField","createBorderPointsPosition","getImagePoint","revealMeasurementsInsideShape","measurementInsideShape","revealEvents","hideMeasurementsInsideShape","hideEvents","isAnyLineHovering","createImageLinesFromPoints","shouldRenderMeasurementsInsideTheShape","getOuterShape","centerPos","centerPosOnField","RenderParts","drawMeasurementAroundPoints","xMargin","yMargin","drawShapeBorders","strokeTemplate","fillTemplate","renderDevMode","isShapeHovering","shapeColorSet","renderFilledPrimaryTemplate","primary_border","renderColorSetTemplate","renderFilledActiveTemplate","getBoundingBoxFromShape","drawStripedRectangle","color1","color2","lineGap","clip","fillStripedRectangle","gradient","createLinearGradient","addColorStop","drawDiagonalStripesV2","bbox","pointPos","drawDiagonalStripes","lightGray","darkGray","scaledLineWidth","drawHoveredBorders","shadowBlur","extendHoveredLine","shadowColor","drawSpacerBorders","drawShapeCrownMoldings","crownMoldingPoints","renderCrownMolding","drawShapeEndCap","lineState","renderEndCap","drawHandles","renderPosition","getIntersectionPoints","intPoint","pf","sqftImageManager","getAppliancesThatShouldRenderMeasurementsInsideTheShape","hideSlabImages","movableImages","restoreSlabImages","getExportedSlabImages","croppedImages","croppedImage","workspaceImages","movableImageData","workspaceImage","hideImages","restoreImages","hideTextBoxes","restoreTextBoxes","enableRegularMode","hideAdditionalShapes","enableSlabMode","shouldUpdatePlaceholderFeatureIds","initWaterfallToolShapes","initBacksplashAndEdgeShapes","initMiteredToolShapes","initUnderlaymentToolShapes","initBumpoutShapes","restoreBacksplashShapes","getDimensionsDependingOnShapePositions","maxCordX","maxCordY","imageWidth","imageHeight","fontSizeMatch","TubCommon","showerTubComboParent","setShowerTubCombo","setActiveTub","bottomTubId","applyFeatureIfNotCompatible","getWizardList","getWizardListFromBackend","setLeadPopup","getErrorPopupObject","wizardsArray","nextActiveItem","SET_APPOINTMENT_DATE","SET_APPOINTMENT_TIME","SET_APPOINTMENT_TIME_STEP_ACTIVE","SET_AVAILABLE_APPOINTMENTS","SET_APPOINTMENTS_NOT_AVAILABLE","SET_SALES_REP_ID","setAvailableAppointments","setAppointmentDate","setAppointmentTime","time","timeSlot","setAppointmentTimeStepActive","timeStepIsActive","availableAppointmentDates","appointmentState","appointmentDate","appointmentTimeSlot","formattedToMatchApiDate","formatCalendarDateToMatchAvailableDate","selectedLixilDateObject","dateObject","salesRepAppointmentDate","salesRepsInSlots","timeSlotObject","setSalesRepId","setAppointmentsNotAvailable","appointmentsNotAvailable","salesRepID","getCommonLixilPostData","userLocation","productId","productName","getLixilCampaignInfo","Product","LIXIL_PRODUCT_TYPES","srBathing","contactData","installationAddress","address","zipcode","streetName","streetNumber","productInfo","checkLixilCalendar","postCalendarData","postLixilCalendar","postCalendarResponse","salesRepAvailability","availableSalesReps","getLixilSalesRep","postLixilGetSalesRep","postSalesRepResponse","calendarDate","withSlashes","day","getDate","month","getMonth","getSelectedLixilDateObject","appDate","Walls","Ceiling","RightWall","LeftWall","PopoutWall","Backsplash","BacksplashRightWall","BacksplashLeftWall","RightWallBacksplash","LeftWallBacksplash","Floor","Globals","GlobalShadow","Baseboard","CeilingLights","CeilingHighlights","Decor1","Decor2","Decor3","Decor4","TopCabinetShadow","TopCabinetShadowPart2","BottomCabinetShadow","TopCabinet","TopCabinetModuleBox","CrownMolding","TopCabinet2","TopCabinetModuleBox2","CrownMolding2","BottomCabinet","BottomCabinetModuleBox","BottomCabinet2","BottomCabinetModuleBox2","TopHandle","TopHandle2","BottomHandle","BottomHandle2","Peninsula","TopCabinetModules","BottomCabinetModules","Appliances","Microwave","Hood","Dishwasher","Range","Fridge","FridgeShadow","CountertopGroup","Countertop2","Sink","Faucet","Stovetop","CenterIsland","CenterIslandShadow","ChairsShadow","Chairs","Handle","moduleTopNumber","moduleBottomNumber","module_modulePart","getLayerDimensions","fullImagesFactor","checkForCanvasScale","offsetWidth","getMenuByHoveredLayer","contextMenuPartId","leftWallBacksplash","hoveredMousePos","rightWallBacksplash","backsplashLeftWall","backsplashRightWall","Edge","islandHood","chairs","setEdgeNotInVisualizer","disallowBlurClasses","NavItemPositionModal","activePartId","checkboxesUpdated","setCheckboxesUpdated","popupPosition","contextMenuBlur","cls","popupOpened","updateCheckboxes","maxRight","fixedTop","triangleStyles","marginTop","isShelf","positionsArray","getPositionsArray","shelf","shelfIndex","ownProps","getAnalyticsEcommerceItem","item_brand","itemQuantity","item_id","item_name","affiliation","companyName","coupon","item_category","lixilProductCategory","item_category2","item_category3","item_category4","item_category5","item_list_id","item_list_name","item_variant","location_id","getAnalyticsEcommerceValues","cartItemsToInclude","cartItemIndex","shipping","GroheCartHeaderCommon","subTitle","afterTitle","withSave","subTitleValues","aria-label","withoutSave","toggleShowManualCalculation","showManualCalculation","setSwitcherPosition","switcherPosition","addManualCalculateRow","updateManualCalculateRow","row","updatedRowValue","manualCalculationRows","deleteManualCalculateRow","changeRoutePath","nextRelatedItemIndex","nextPath","subPartName","getMaterialsFixedName","nextSubPart","DemoPoints","setPoints","layoutFeatures","getBathroomPointPositionByPartName","pointC","bvScenePoints","relPoint","bvScenePoint","getKitchenPointPosition","currentLayoutType","handleResize","pointResponsive","ImageCanvasCommonNew","alreadyRenderedImages","copyImages","shouldUpdateGreenZone","layersHoverings","backCtxBg","canvasBg","greenImage","mouseMoveSet","setOnMouseMove","setLayersHoverings","setShowCanvasLoader","getGliaImage","el","canvasImg","nonTransparentPixelHovered","mousePosArray","layerHovering","pixelHovered","willReadFrequently","hovered","layerIsExcludedFromHover","checkMorePointsPartIds","activeGreenZoneIndex","renderGreenLayer","draw","neededLayerHovering","canvasContext","firstX","isGreenHovering","firstY","lookCanvasClick","onDoubleClick","data-mobile","stickyFooterButtons","classes","variant","resetLoading","loadingBarReducer","loadingBarMiddleware","LoadingBar","ImmutableLoadingBar","_loading_bar","require","_loading_bar2","_interopRequireDefault","_loading_bar_middleware2","_loading_bar_ducks","_immutable2","compressedDbFeature","priceWasChanged","customCost","customPrice","compressedCartItem","featureDefinition_id","fabricatorFeatureId","calculatedCost","getCompressedCartItems","getFeatureGroupsProperties","customNames","setFeatureGroupsProperties","addGACookie","cookie","cookiesAll","cookie_ga","getCookie","getCartItemPartIdFix","setInitialFlowAdditionalRooms","initialFlowAdditionalRooms","setInitialFlowType","initialFlowType","setInitialFlowRoom","setInitialFlowVisualizerNotAvailable","visualizerNotAvailable","setInitialFlowFinished","initialFlowFinished","setInitialFlowRoomLayout","setInitialFlowStep","scheduleCustomer","am","scheduleData","scheduleEntryData","duration","alert","appointmentType","jobIdType","setUserLoginResponse","fromConfirmationDialog","showSchedule","updatedUserInfo","pendingPhoneVerification","responseDataBase","callUserRegisterErrorPopup","userLogin","showConfirmationPopup","userAction","assignQuote","withCheckoutLogic","noInternetCallBack","executeAfterRegisterIfUserExist","isEmailTaken","errorUserMatch","applyFunction","userRegister","agreedToTerms","subscribeToNewsletter","preferredCommunicationMethod","howDidYouHearAboutUs","phone2","registerResponse","schedulerPending","saveQuoteResponse","resetUserPassword","withLoader","emplList","getCustomerById","showContractOnError","generateTwoFaAuthenticationToken","generateAuthenticationToken","validateTwoFaAuthentication","authCode","validateAuthenticationRequest","sendAuthenticationRequest","MiteredController","imgSrc","miteredSectionsHTML","createCursor","registerEvents","attachMiteredEdge","attachMiteredUnderwrapEdge","checkForRestoreCursor","miteredSection","updateSection","changeMiteredSection","deleteSection","deleteMiteredSection","isWaitingToRestoreCursor","onMeasureUnitChange","getSegments","segment","heightNumberText","getEdgesLength","additionalLength","getEdgeLengthValue","getExportedMiteredEdges","edgeLengthValue","miteredSectionsArea","getMiteredToolTotalArea","setMiteredSections","SHAPE_HARDCODED_PART_IDS","SHAPE_PART_IDS_FROM_ADDITIONAL_SHAPES_LIST","leftWall","rightWall","centerWall","frontWall","popoutWall","backWall","ceilingPanels","leftWallSplitter","activeRelatedPart","selectedByUser","Navigation","userHasLoggedIn","navItemToClick","defaultPresetIndexToClick","messageListening","closeVisualizerNavigation","closeMobileNavigationMenu","hoveredZone","menuItemToShow","subMenuItemToShow","getSearchProducts","searchProductRequest","searchAPIDebounced","activeShower","ponyWall","receiveAllFeaturesAndClickFeatureByName","wallExL","exLSubPart","findAndClick","wallExLFeature","itemClick","searchForSameNameWallsBeforeFeatureApply","applyFeature","featureCanChangeShowerSize","applyAllWalls","itemParent","itemIsLocked","exLAndBathtubAndSmallRoom","callMetaMathesFailedPopup","nonCompatibleWith","handleChangeParent","callToiletFailPopup","shouldRecoverWalls","recoverPrevioslySelected","allWallsCanBeApplied","setPrevioslySelected","allWalls","featuresAvailableToClick","getAvailableFeatures","removeChoosingView","setDefaultPartAfterSubTypeClick","nextSubPartIndex","currentSubPart","subNavigationItem","featureToSet","defaultPreset","finishPresetLoading","currentActiveItemIsLocked","wizardActiveItemIsLocked","lockedFilters","showSmallRoomLayout","presetUnlocked","bvStateHasLockedItems","closeContextMenu","setWizardStepIndex","wizardGroupsName","currentGroup","selectedValueName","hidden","resetActiveFeature","vanityWizardGroups","showerWallWizardGroups","setWizardFiltersFromActiveItem","wizardConsumers","wizardClients","currentActiveFilters","selectedFilterValueId","doorStyleFilter","doorStyleActiveValue","doorStyleFilterValue","stepName","materialFilter","materialValueId","materialValue","showPositionsPopup","showLayerPositionsModal","eventPosition","contextMenuPosition","contextMenuPonyWall","bindCanvasClick","$scrollList","SET_LOADING","EXPAND_FOOTER_INFO","SET_LEAD_POPUP","ALLOW_SAVING_JOB_ON_INPUT_STEP","SET_JOB_SAVED","setJobSaved","SET_FOOTER_INFO_BUTTON_TEXT","setLoading","faradayLoading","expandFooterInfo","footerInfoExpanded","setFooterInfoButtonText","footerInfoButtonText","leadPopup","jobData","someUserInfoIsDifferent","setAllowJobSavingOnInputStep","registeredUser","saveJobAction","isDelayedSave","isLoggedIn","registerUser","registered","setRegisteredUserData","authToken","updateUser","updatedCustomer","postSaveJob","getSaveJobData","postScheduleAppointment","getSaveAppointmentData","LEAD_WIZARD_GROUP_TYPES","inputs","contact","appointment","getLeadFormSteps","leadFormSteps","leadStep","existingLeadStepObject","leadStepObject","leadStepName","leadStepUrl","leadSubSteps","getUrlLeadStepName","ImageCanvasCommon","drawPropsLayers","updateGliaCanvasImage","createPinchZoom","canUseUpdate","disable","updateLookCanvas","handleOrientationChange","fromDesktopToMobile","navBreakPoint","fromMobileToDesktop","layoutScene","excludedPartIdsFromHover","excludedIndexesFromHover","excludedLayer","existingGreenLayerHoveringIndex","getHoveringLayer","makeHoveringLayer","hoveringLayer","enableLoader","imagesRendered","alreadyRenderedImage","imageRendered","hoveringImage","allowPropsLayers","greenImageIndex","resizedContext","resizedCanvas","backgroundCanvas","windowHover","Window_Default","windowLayerHovering","layersHovering","Window_Covering","allLayers","timeout","hoveredLayerIndex","layersToRender","checkForLayerParts","moveStart","thisX","thisY","imageCanvasScroll2","statusSwipe","detectedSwipeLeft","detectedSwipeRight","currentTranslate","html","tX","tY","delta","nextPosition","visibleCanvasWidth","transform2d","mozTransform","msTransform","oTransform","moveEnd","hoverZones","backgroundImages","setPinchZoom","onlyLayers","onlyStateLayers","needToUpdateCanvas","onTouchStart","onTouchMove","onTouchEnd","Wall_A","Wall_B","Wall_C","Wall_A_Accent_Mask","Global_Shadow_Overlay","Ceiling_Lights","Wall_Lights","Towel_Rack","Body","ShowerDrain","FloorShadow","ExtrusionWallRight","ExtrusionWallRightShadow","Wall","Wall2","WallAccent","WallAccent2","WallShadow","LargeCornerCaddie","Fixture","ShowerHead","ShowerPanCombo","LargeCornerSeat","CornerCaddie","SoapDish","SmallCornerShelf","GrabBar","ExtrusionWallLeftHalfWall","ExtrusionWallLeftShadowHalfWall","Threshold","ThresholdShadow","ShowerDoor","ShowerDoorHandle","ExtrusionWallLeft","ExtrusionWallLeftShadow","Overlay","PonyWall","PonyWallShadow","PonyWallCap","PonyWallCapShadow","PonyWallGlass","Steam60in","0","TubCombo","WallConfiguration","Liner","ReplacementTub","WalkInTub","JettedTub","BathTub","FixtureFloorMount","Base","Spa","Top","Toilet","VanityBacksplash","CounterTop","Mirror","BackgroundBG","ShowerWall","CenterWall","ShowerWallAccent","Accessories","WindowBody","WindowKits","LargeCornerCaddie2","LargeCornerSeat2","CornerCaddie2","SoapDish2","SoapDish3","GrabBar2","GrabBar3","CornerShelf1","CornerShelf2","CornerShelf3","CornerShelf4","CornerShelf5","CornerShelf6","ShowerPod","LargeShelf","ShampooShelf","Seats","ShowerRod","TowelBar","ShowerPan","ShowerFixture","ShowerFixture2","ShowerDoor2","CeilingPanels","PaperHolder","ToiletPaper","ToiletPaperHolder","Towel","LightFixture","LampFixture","DecorWindow","DecorSeat","Bathtub","BathTubFixture","BathTubBody","sizeFactor","ShowerAccessories","largeCornerCaddie","cornerCaddie","smallCornerShelf","showerPod","windowBody","windowKits","largeShelf","shampooShelf","towelBar","caddie_type","Layout31","LookFeatureImage","withoutGallery","setGalleryImages","activeImageIndex","setActiveImageIndex","featureGalleryImages","galleryEnabled","preview","arrowClick","analyticsLabel","nextIndex","mainImageUrl","manualCalculationsCheckForChangesApplied","manualCalculationsCountertopArea","manualCalculationsEdgesLength","manualCalculationsBacksplashArea","manualCalculationsEdgeLength","getCountertopArea","totalAreaToMeasureUnit","shapeLength","getCabinetsVolume","getCabinetsDoorsSQFT","totalSQFT","getCabinetsLNFT","totalLength","LowerDualangle","getQuantityFromFilters","getTotalDoors","getTotalKnobs","getTotalDrawers","getEdgesArea","edgeCount","getBacksplashTotalArea","backsplashesArea","shapeArea","getSlabTotalArea","previousValue","imageSize","getSlabImagesAreaGrouped","slabImagesAndPlaceHolders","slabImagesPrepared","preparedSlabImage","prepared","getSlabSameTypeArea","totalSlabs","getSlabSameType","sqftManualCalculationState","getRowSum","cathetus","LowerIroningBoardRight","LowerIroningBoardLeft","totalQuantity","getConvertedMultipliedValue","getCountertopQtCategory","getExportedManualCalculateBacksplashes","linearFeet","M","inputLength","inputHeight","getExportedManualCalculateEdges","selectedEdges","getExportedManualCalculateCountertops","inputWidth","IRONING_BOARD_DIRECTION","SHAPE_UPPER_LAYOUTS","SHAPE_LOWER_LAYOUTS","addShapeHelper","upperShapes","getShapeLayout","lowerShapes","otherShapes","shapeArray","getShapeLines","specialShape","specialLayoutName","specialShapes","createPoints","createIroningBoardShape","resetUpperShapes","activeBacksplashData","backsplashShape","slabAdditionalShape","addActiveBacksplash","additionalShapes","backsplashShapeId","findAdditionalShapeByLine","additionalShape","shapeToRemove","initialState","SET_CABINET_RELATED_ITEMS","roomSwitcher","menuItems","validationMessage","cabinetRelatedItems","filteredImages","roomsWithVisitedSlabTool","DEFAULT_SLAB_IMAGE_PART","upload","selectedImage","AxiosInstance","baseURL","leadApiGet","leadApiPost","VISIT_ROUTES","thanks","VISIT_STEPS","personal","project","IS_DEV_MODE","SKIP_CALENDAR","SET_USER_VALUE","SET_USER_LOCATION","SET_USER_ERRORS","SET_REGISTERED_USER_DATA","setUserLocation","setUserErrors","registeredUserEmail","registeredUserAuthToken","replacePhoneToMatchMask","cleaned","replaceMaskToPassPhoneOnTheBackend","GROHE_POST_MESSAGES_ACTIONS","signIn","openMiniCart","LookFeaturePrice","withUnit","isBundleChild","listPage","mainContentPrice","showPriceAlways","getQuote","showPriceLocked","lockedText","priceEditable","finalText","cartItemsLength","featureInfoCount","qtCategoriesLoadedLength","FeatureDescription","brief","textLength","desc","dangerouslySetInnerHTML","__html","_extends","arguments","_defineProperty","configurable","writable","scope","DEFAULT_SCOPE","SHOW","HIDE","RESET","_ref","_ref$scope","enableFreeDrawMode","disableFreeDrawMode","createShapeFromPoints","pointCords","isClonePointRequired","canPointsBeMoved","shapeCreationParams","polygonLines","polygonArea","minimumShapeArea","maximumShapeArea","maximumLineDistance","polygonLine","createWallFromPointsV2","centerPoint","lockedAngleStep","createShapeFromCorePoints","createPolygonFromCorePoints","miteredEdges","shapesList","totalSQFTArea","workspaceCenter","sqftApplianceImages","getCanvasApplianceImages","sqFtSlabImage","getSlabResultImage","sqFtSlabCalcImage","getSlabCalcImage","getCanvasImage","sqftCanvasImage","images3D","radii","getExportedTextBoxes","slabImagesTotalArea","manualDiv","getCanvasImageScaled","pointsCords","clonePoint","pointCord","LayoutCommonNew","getFeatureFromAllLayouts","featuresToLoad","childSubPart","featureLoaded","qtCategoryHasBeenChanged","changedSubPart","needToLoadFeature","useNames","needToChangeLayout","isFake","disabled_parts","previouslySelectedItem","getDefaultFeature","partIdPosition","additionalFeature","setCartStateAndUserStateFromBvState","mValue","LayoutCommon","selectedLayoutFeatures","getNotAvailableInVisualizerFeatures","notInVisualizerFeaturesThatLeft","featureSplittedName","allNotAvailableFeatures","additionalSet","neededDbFeatures","featureGroupFeatures","needToLoadFeatureGroupsFeatures","_navItemsCount","checkedAfterReceived","partsToShow","enabledParts","thirdParam","nItems","bvGroups","groupKeys","withShadow","currentType","ri","fixFeatureMetaData","dbFeatures","forParentGroup","applyCustomConfigurations","forNextBvState","employeesOnly","updateExistingFeature","fixFeatureBeforeLoad","loaded","setSpecificRules","withOtherGroups","skuNumber","allLayouts","withSharedFeatureName","propToSearch","featureGroupFound","searchFrom","allParents","sameSkuFeatures","sameSide","recentlyViewedItems","displayLogicCartItems","useSqftCartPopup","disabledPartIds","getDisabledFeatures","returnAllData","addSpecificPropertiesToLocalStorage","addDisabledPartsToLocalStorage","getActiveInstallations","addCartAndUserStatesToLocalStorage","checkAllLayouts","setCustomPrices","ciFeature","partDataHasLockedItems","isComplex","displayType","unitText","hasFeatures","anotherFg","qtCategoryId","hasFeaturePropertyName","bathroom","kitchen","fireplace","laundryroom","hasBVFeatures","hasKVFeatures","dbName2","addSubPartProperties","_subParts","newSubParts","qtCategorySubPartNavItem","isWordpressPlugin","getCartItemsFromBvState","defaultType","forceReturn","addCustomLayers","zSort","layerToReturn","bgImg","zIndexesObject","receiveAllFeatures","subItems","subItem","subPartsObject","qtCategoryIndex","excludedGroups","excludedGroupName","parentName","setCartAndUserState","hasPreviouslySavedItem","featureIndex","strippedGroupName","strippedCurrentName","inGeneral","qtCategoryToSearch","searchPartOfId","countertopExist","valueObj","CabinetWorkspace","cabinetShapes","cabinetShapesLayout","__crownMoldingParams","onRightClick","handleDrop","handleDrag","dataTransfer","getData","parentFeatureId","mousePosOnField","currentBottomTub","ExternallWall","isComplete","wallName","matchesByBindings","getShadowConditions","hardCodedName","activeShowerGroup","zIndexShadow","ponyWallFeature","decor","center_wall","background_bg","x1Percentage","x2Percentage","y1Percentage","y2Percentage","clickLogic","showNotCompatibleViewConditions","skipNotCompatible","parseFabricatorSettings","kitchenSettings","bathroomSettings","fireplaceSettings","laundryRoomSettings","finalSettings","getFinalSettings","finalKvSettings","finalBvSettings","finalFPSettings","finalLRSettings","received","fabricatorHardcode","useIMEAPI","useIMEAPI_PartnerId","currentSettingsProperty","nextSettings","useShipperHQ","hideYourListButton","dashboardUserPermissions","permission","ProtectedAreaId","AccessRights","getDashboardModeSettings","parseFabricatorSettingsOLD","kitchenToggles","oldKey","newKey","checkOut","generalProperties","settingsObject","stateSettings","fabricatorResponse","mUnit","leadCaptureProduct","measurement","showLanguageSelect","useVisualizerSwitching","callForPricing","enableASProductSync","enableGProductSync","INITIAL_FLOW_BUTTON_TYPES","Quote","AllFeaturesChecker","_filtersRequestsMade","withFiltersRequest","loaderOnly","initialShopContextValues","shopAllNavItems","shopNavItemsLoaded","shopActiveCategory","shopActiveFeature","shopLastActiveFeature","ShopContext","useShopContext","useContext","shopContextAction","shopContextReducer","UiIcon","filteredRows","newRow","lastRow","lastRowId","getDefaultManualCalcRowEdge","DEFAULT_MANUAL_CALC_ROW","newList","isShowTypesList","getEdgesPlaceholder","OnScreenKeyboard","componentWillUnmount","keyboardFrame","detach","appendTo","handleShowKeyboard","handleOutsideClick","getFields","$parent","inputId","$parentInput","parentInput","$input","oskInputId","tryBindToParent","osk","fields","setKBPosition","lightbox","is","css","draggable","selectionStart","selectionEnd","blockOutsideClick","onShow","inputFocused","passwordify","changeValue","runKeyStroke","selStart","selEnd","inc","isUpperCase","select","setSelectionRange","setParentValue","done","mouseUp","renderEmailPanel","keyValue","renderNumericKeyboard","tabIndex","node","prependTo","$keyboardFrame","arrowKeys","mainFrameClass","keyValue2","raw","rightSide","replaceDialCode","inputValue","dialWithPlus","charLength","LookUserPhoneInput","isUserPopup","inputsValidated","inputRef","defaultValue","blurred","setBlurred","focused","setFocused","wasChanged","setWasChanged","utilsScript","handleInputBlur","isValid","restartInput","relatedTarget","replacedValue","fullNumber","formattedPhone","setInitialState","setFlag","setNumber","errorsExist","renderScreenKeyboard","handleInputChange","tel","v","IntlInputComponent","inputClassName","containerClassName","onSelectFlag","currentNumber","selectedCountryData","preferredCountries","getPreferredCountries","onPhoneNumberChange","forceCarrot","forceCarrotFunc","onPhoneNumberBlur","onPhoneNumberFocus","separateDialCode","defaultCountry","fieldId","aria-hidden","shrink","restartPhoneInput","DiscountCommon","handleDiscountSelectClick","isDiscountDisabled","updateDiscount","setDiscountProperty","getGrandTotal","withoutDiscount","forDiscount","discountAmount","getDiscountPercentageAmount","setAmountValue","getMaxDiscountValue","getDiscountAmount","getInputValue","customDepositAmount","renderAmountInput","isDiscount","numberInput","onRealChange","maxValue","currencySing","printContext","getCartItemName","SIMILAR_FILTER_GROUP_NAME","getFeaturesCollectionsList","cartFeatureFilters","featuresCollectionsList","cartFeatureFilter","collectionObject","colObject","getSimilarItemInfoObject","addedCountertops","featureCollection","totalCountertopsQuantity","fromCartItemName","countertopTotalPrice","subTotalPrice","filterValueName","loadTexture","gl","oc","texture","createTexture","bindTexture","TEXTURE_2D","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","texImage2D","RGBA","UNSIGNED_BYTE","TEXTURE_MAG_FILTER","LINEAR","TEXTURE_MIN_FILTER","setArrays","prog","vertex_buffer","createBuffer","bindBuffer","ARRAY_BUFFER","bufferData","Float32Array","STATIC_DRAW","getAttribLocation","vertexAttribPointer","FLOAT","enableVertexAttribArray","prepareWebGL","vertSh","createShader","VERTEX_SHADER","shaderSource","compileShader","fragSh","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","useProgram","viewport","webglCanvas","useNewCanvas","wgl","uSampler","getUniformLocation","uniform1i","activeTexture","TEXTURE0","clearColor","clear","COLOR_BUFFER_BIT","drawArrays","TRIANGLES","longPressInterval","longPressDelay","isClosed","adjustInputValue","dispatchEvent","Event","longPressTimeout","delayTimeout","startLongPress","stopLongPress","incrementButton","textContent","onmousedown","onmouseup","onmouseleave","decrementButton","onchange","closeInput","moveElement","newX","newY","speed","oldX","offsetLeft","oldY","offsetTop","distanceX","distanceY","startTime","performance","now","currentTime","elapsedTime","progress","delay","DrawImage","htmlImg","svgImageId","isScale","svgImageDataURI","drawSvg","getHorizontalLineIntersectionPoints","mousePosOnFiled","verticalLinePoint1","verticalLinePoint2","getClosestIntersectionPoints","intersectionXPointAndLine1","intersectionXPointAndLine2","getVerticalLineIntersectionPoints","intersectionPointAndLine1","intersectionPointAndLine2","intersectionPoint1","intersectionPoint2","closestPont","getIntersectionPointsAndLines","pointAndLine","closestPont1","closestPont2","getCircleLineIntersection","circleX","circleY","circleRadius","lineX1","lineY1","lineX2","lineY2","t1","t2","RenderCabinets","getDiagonalPointsForTheSquare","returnPoints","pointIndex","previous","diagonalPoint","currentPoint","squarePoint","linePointId","crownMoldingPoint","fromPointField","toPointField","MiteredOverlay","sectionIndex","hoveredText","pointsDistance","heightMetric","thicknessMetric","maxSegmentPriority","minMiteredSize","measurementMargin","dragPointMargin","rulerMargin","heightMargin","sectionIndexMargin","sectionArrowWidth","letterMargin","thicknessMargin","movePointOffset","lineTextColor","deleteFillStyle","_segments","miteredTextParameters","setMiteredPoints","setSegments","movePointInOrStop","biggestLineCord","smallestLineCord","stopPointLeft","stopPointRight","moveStopPoints","smallestPointStopped","biggestPointStopped","lengthDiff","movePoint","moveMeasurements","getMousePosPointDiff","sameOrientation","getMiteredTextParameter","isMiteredPointMoving","preparePoints","prepareMeasurements","prepareHeight","initPoint","exportSegment","importMitered","preparePoint","shouldAddTwoPointsInTheMiddle","point33","point66","addMeasurementBetweenPoints","xMarginHeight","yMarginHeight","posHeight","heightValue","setSegmentHeightFromNumberValue","endPoint","updateSegmentsLength","updateSegmentThicknessPos","importSegment","point1Index","lengthText","setSegmentLengthFromNumberValue","getPointBetweenCords","closestIndex","secondPoint","isPrev","closestPointField","addPointBetweenPoints","getSegmentBetweenPoints","point2Index","getSegmentPointsBySegment","segmentIndex","removeMeasurementBetweenPoints","removeIndex","length2","updateCornerPoints","updateSectionHeightPos","setSegmentLength","numberText","miteredSegment","setPriority","resizeMiteredSegment","newValue","setSegmentHeight","setSegmentThicknessFromNumberValue","setSegmentThickness","getSegmentByNumberText","getResizedSegmentsWithoutPriority","closestLeft","closestRight","getResizedSegmentsFreeSpace","getResizedSegmentsByPriority","minPrevSegment","minNextSegment","prevSegments","nextSegments","movePointWithMouse","resizeMiteredSegmentFreeSpace","resizeMiteredSegmentWithoutPriority","resizeMiteredSegmentWithPriority","minNextSegmentIndex","minPrevSegmentIndex","segmentPoint1","segmentPoint2","moveAllNextPoints","segmentBetweenPoint2","moveAllPrevPoints","segmentBetweenPoint1","getLeftRightStopPoint","renderTopBlueLine","renderRuler","renderLetter","renderHeight","renderSectionIndex","pointsToRender","parallelPointFrom","parallelPointTo","drawFlatArrow","renderThickness","xMarginLine","yMarginLine","xMarginImage","yMarginImage","thicknessValue","renderSectionIndexOld","xWidth","yWidth","xMarginValue","yMarginValue","renderPos","renderDoubleCircle","isMouseOverPoint","slabState","slabWorkspacePos","shapeRegularPointField","shapeSlabPointField","clearSlabLeftPart","renderLinesWithoutStroke","slabIndex","movableImagePosition","movableImagePointField","movableImageSize","shapeCenterOffset","drawSlabMidDivider","renderSlabWorkspace","drawSlabRightPart","renderMeasurementArrows","getMeasurementPoints","renderMeasurementLength","sqftResourcesManager","getLineByAttachedItemId","attachedItem","rectangleWidth","RECTANGLE_WIDTH","rectangleHeight","RECTANGLE_HEIGHT","RECTANGLE_HEIGHT_METRIC","HARDCODED_DOMAIN","SqftJsonApi","sqftPost","ShapeAbsolute","__shape","__intersectionPoints","__absolutePos","__snappedWithShape","__snappedShapeGroup","setIntersectionsPoints","getSnappedWithShape","shapeGroup","setMinLengthToIntersectionPoints","__minLengthToIntersectionPoints","absolutePosition","movingLine","baseLineDistance","newFrom","newTo","pointDistance2","horizontalEastLineExpand","horizontalWestLineExpand","verticalSouthLineExpand","verticalNorthLineExpand","mathRound","pointOnTheLineFrom","pointOnTheLineTo","prevLineDirection","nextLineDirection","prevPrevLine","nextNextLine","prevPrevLineDirection","nextNextLineDirection","getMaxResizeWidth","SHAPE_LABELS","updateShape","initLabel","firstShapeLine","setLabelText","thirdShapeLine","labelTextColor","isTitle","lineOffset","getFreeDrawPoint","pointState","getLockPointPos","getLockedPoint","existingPoint","lockedPosition","lockedPositionOnField","pointV2","angleStep","pointV2PointField","rotateToMouseAngle","closestAngle","LineCorner","additionalOutlineHoverWidth","isMouseOverAngle","isMouseOverCornerLine","getOutlineAngleLineField","getAngleLineField","cordCornerFrom","cordCornerTo","isLineCornerInner","pointIndent","pointOnTheBlueLine","pointOnTheBlueNextLine","cordCornerIndent","UiSelect","handleItemClick","selectItem","getSelectText","itemText","baseClass","data-index","WindowParent","otherParent","shower_tub_combo_is_active","bottom_tub","shower_floor_is_active","setShowerHandType","showerRod","robeHook","paperHolder","toiletBrush","towelTowelRing","towelTowelBar","towelTowelHook","EnclosureCommon","bathParent","relName","bathtubParent","bathTubBody","VanityCommon","counterTopSize","activeSideMeta","getActiveMatchingMetaFromRelatedItem","setShowLoader","loadAdditionalVisualizerGroups","additionalFeatures","qtCategoriesResponse","loadVisualizer","groupsResponse","LookSideBarShareButtons","outerWidth","screenX","screenLeft","outerHeight","screenY","screenTop","toolbar","status","directories","menubar","scrollbars","resizable","centerscreen","chrome","handleClose","autoFocusItem","data-id","shareClickButton","setLixilAuthorizationToken","useLixilCalendar","postSignInAuth","postAuthResponse","bathRemodel","lixilTermsText","globalState","textWithUpdatedButton","isSrBathing","addressIsNotSupported","appointmentTime","defaultTimeValue","featureIsExcluded","matchingName","getFilteredNavItems","afterCurrentSelectionWizardSteps","allWizardSteps","wizardGroupIndex","layoutThumbnails","globalShadowParent","Window","shower_interior_wall_accent_parts","shower_interior_wall_parts","left_shower_wall_type","partPredicate","bvStateKey","shower_type","shower_parts","shower_part_id","shower_accent_wall_part_id","accordingPart","showerFeature","availableParts","bathTub","bathtub_type","showerAccessoriesParent","SelectionMobileViewSwitchers","LookFeatureRemoveButton","isIcon","isList","alreadyDisabled","updateForOldUI","deleteButtonClick","featureLabel","startIcon","BacksplashSelect","handleBacksplashItemClick","maxClickCountReached","getBacksplashPart","useButtons","getBackplashTypes","renderButtons","topCabinetModuleSystem","bottomCabinetModuleSystem","getModuleCombinations","fridgeShadow","centerIslandshadow","ScheduleButton","scheduleButtonOnClick","getAnalyticsEvent","getSchedulingButton","stringNum","area2Codes","createDeliverySections","cartItemsList","deliveries","cartItemShippingCost","cartItemShippingName","cartItemShippingTime","cartItemShippingCode","existingDelivery","setCartItemsShipping","shippingOptions","shippingForItem","shippingObject","firstOption","shippingCode","area3Codes","getAreaCost","deliveryCost","materialsQuantity","paymentState","LookUserInput","userInputChange","userInputBlur","onInputBlur","useInputsValidation","required","InputLabelProps","helperText","setShowUnlockCalculations","showUnlockCalculations","setUnlockCalculationsStep","unlockCalculationsStep","showUnlockCalculationsCartItems","showCartItems","showUnlockCalculationsTotalItems","showTotalItems","setShowUnlockCalculationsTutorial","showUnlockCalculationsTutorial","setUnlockCalculationsTutorialStep","unlockCalculationsTutorialStep","setUnlockCalculationsTutorialFinished","LookIntroPopper","anchorRef","placement","toolTipText","roomIdeasButtonTranslate","anchorEl","transition","disablePortal","TransitionProps","transformOrigin","initialContext","pageRendered","selectedFieldIndex","ContractsContext","__tryAddToInstallation","__tryRemoveFromInstallations","__toggleInstallationServiceUsage","getInstallationCost","__installations","hourly","fabricatorFeature_id","fabricatorInstallation_id","hasChanges","ID","__getInstallations","inst","instGroup","installation","autoAddWithProduct","installationName","hideQuantity","instGroupIdx","serviceIdx","customerAdd","similarProductsWidth","mainBarWidth","handleHttpError","getResponse","shouldUseKvConfigDomain","HOST_NAME","checkApiError","__error__","ok","statusMessage","reason","isFormData","method","Headers","fixStringEncoding","forLeadForm","inputObject","getWizardFeatureAsync","nameToCompare","_self","cfg","clearHistory","getHistoryStore","restoreShapesFromHistory","setDataToQt","checkForChangesApplied","shapesChanged","historyShape","historyShapetoFind","DEFAULT_COUNTERTOP_HEIGHT","DEFAULT_BACKSPLASH_HEIGHT","cabinetPositions","prepareCabinetsPositions","countertopPositions","CountertopPositions","prepareCountertopPositions","wallPositions","WallPositions","prepareWallPositions","shapePosition","prepareRegularCabinetSet","prepareImageCabinetSet","shapeDepth","radians","centerZ","offsetX","offsetZ","zCorrection","z","getShapeCorrectedPos","thetaRad","xInit","yInit","targetWidth","getShapeDepth","targetDepth","originPointOnWorkspace","material_url","CabinetsHelper","getCabinetPosY","threeDPos","getHandles","applianceRotatedDegrees","appliancePosition","adjustApplianceModelPosition","partIdsCoveredByCountertop","textureUrl","URLByFeatureName","getCountertopTexture","groupShapes","lastHeight","isDishwasher","prepareCountertopForGroup","posA","posB","countertopCabinets","countertopCabinet","countertopCabinetHeight","overhang","getWallTexture","currentShapeHeight","upperCabinetHighestCabinetValue","getHighestCabinetValue","tallCabinetHighestCabinetValue","handle3dURL","getParsedSqftData","sqftPassedData","previouslyAddedSqftFeatures","sqftFeaturesObj","availablePartIdsKey","createSqftFeaturesObj","isFromCartFeatureAdded","featuresPassed","shouldUseRelatedParentFeatureAsMain","prepareCountertopFeaturesPassed","prepareSlabFeaturesPassed","prepareEdgesAndBacksplashesManual","prepareEdgesAndBacksplashes","prepareCrownMoldings","prepareDefaultFeatureObjectGrouped","prepareDefaultFeatureObject","sections","featurePassed","getSimilarFeatureGroup","isSqftFromFeature","getQuantityFromCalculator","getFakePriceFromCalculator","getFeatureFromSQFT","featureToCheckUnit","quantityRounded","initialQuantity","isRecalculateSlabNeeded","recalculateSlabs","useStonePricing","useSlabImagePricing","parentList","firstOpen","splitPriceBetweenSlabsMaterial","setPriceIntoSingleFeature","commonSharedFeatureNames","getCommonSharedFeatureNames","sharedObject","biggestFeature","sortOrder","isBiggestFeature","isQuantityAddedToBiggestFeature","sortSqftFeatures","sortSharedObject","updateSharedObjectWithGroupQuantity","alreadyAdded","sharedName","quantityPerFeature","totalFeaturesInGroup","slabImagesGrouped","slabImagesGroup","centerIslandExist","manCountertopObject","sqftPassedDataHandler","passedObject","groupByKey","filteredData","groupedByKey","groupKey","rest","sqftData","edgeLength","addedEdge","fakePrice","slabAlreadyInTheCart","slabImageAreaGroup","previouslyAddedSqftFeature","idToFind","slabParentFeatureGroup","getFeatureFromCalculatorPassedId","hasSamePartIdWithPreviouslyAddedFeature","foundNavItem","QtCategoryName","setAvailableFilterValues","isDrawFinished","addedPoints","dimensionToMouse","drawLineToMouse","outlineColor","drawType","useLockedPoints","currentNumericInput","clickedBackSplashButton","createDimensionToMouse","updateMeasurementToMousePosition","isLengthKeyCode","isBackspaceKeyCode","isDeleteKeyCode","createPointFromCurrentNumericInput","drawWall","lastPoint","isPointExist","segmentLength","newCordsAtDistance","drawStart","mPosOnField","lockedPointPos","lockPointOnField","isInited","isFitDistanceWithLastPoint","isMousePosFitDistanceWithLastPoint","wallPointLocked","getWallLockedPoint","wallPoint","getWallPoint","addLineDimensions","shouldResetPoints","addedPoint","dimension","preparedPoints","createWall","changeFirstPointCoordinatesToCreate45or90DegAngleWithTheLastPoint","createShape","lockPointPos","intersectionPointOnField","postAuthData","jwtToken","withSignInRetryRequest","request","checkLixilPostalCode","serviceAvailable","NavigationItemsList","itemClickCount","reorderItems","checkPassed","getActiveFeatureName","uniquePartNamesArray","getSelectedWallIndexes","selectedFirstItemIndex","otherSelectedWallsIndexes","Map","uniquePartName","foundIndex","getLockedFeature","getActiveItemIndex","isActiveItemIndex","activeFeatureId","indexesToReplace","selectedExist","reOrderedFeatures","featuresToPlaceFirst","navItemToReplace","checkForSelectedAccessories","checkIfFeatureSelected","getNavItemsList","reorderedFeatures","isPulsating","currentFeatureCartItemsCount","currentFeatureId","stoneFeature","customClassName","switchToFeatureInfo","largeThumbnail","getLoadingFeatures","onDesktopNavigationScroll","scrollWidth","getNewFeaturesOnScroll","onMobileNavigationScroll","finalScrollPosition","featureReceivingStarted","additionalFeaturesLoading","finishScrollRequest","shouldUpdateNavItems","needToUpdate","parentItemPassed","useNewWizardFeaturesRequestsLogic","additionalFeaturesOnScroll","CommonFeatureItemsMethods","scrollToRelatedFeatureId","featureInfo","setCommonStuff","nextCatName","neededCat","featureParentName","$scrollableDiv","scrollToArea","scrollToDiv","BodySwipable","getScrolllableElement","scrollableRef","scrollableSelector","handleOnMouseDown","swipeActive","scrollableElement","currentScrollLeft","handleOnMouseMove","handleOnMouseUp","LayoutNavigationItem","imageOnly","minHeight","ShareButton","clickShareAfterLogin","toggleShareList","shareListOpened","checkForLoggedIn","share","renderList","faceBookButtonClick","takeRight","getShareButtons","data-share","getShareList","createRef","shareButton","PingPilotButton","pingButton","pingButtonClick","WrappedComponent","usePingWidget","scriptAdded","dataSignal","shopPageLoaded","setShopPageOpened","setShopLastPageVisited","shopLastPageVisited","setShopPageLeaved","shopPageLeaved","CONTENT_TYPES","searchCustomer","newCustomer","contractSelect","PREFERRED_COMMUNICATION_METHODS","HOW_DID_YOU_HEAR_ABOUT_US_OPTIONS","animateButtonsJQ","$buttons","hideButtonsJQ","animateButtons","hideButtons","miteredSectionInterface","miteredSegmentInterface","waterfallSectionInterface","waterfallSection","waterfallSegmentInterface","waterfallSegment","changeValuePopupInterface","increaseCallback","decreaseCallback","inputChangeCallback","setIframeIntegrationRequest","savePostMessage","loginPostMessage","wishlistLines","savePostData","postMessageToParent","postMessageData","referrer","setIframeIntegrationResponse","iframeIntegrationState","iframeIntegrationRequest","iframeIntegrationResponse","iframeIntegrationRequestType","iframeIntegrationResponseSuccess","handleIFrameMessage","attachEvent","setInputsValidated","DesktopHeader","toggleSubNav","subNavVisible","handleLogoClick","renderSubNav","nav","displayOrder","rel","showInstallations","addLaborCustomer","addLaborInstaller","logoStyles","initialFlowIsRunning","initialFlowEnabled","hideLogo","isShoppingCartPage","hideTopButtons","uploadsAndNotes","questionShown","DesktopHeaderWithRouter","LookFeatureOptions","lookActiveFeatureCustomName","lookActiveFeatureCollection","lookActiveFeatureMatchingFeature","lookActiveFeatureMountType","lookActiveFeatureMountHoles","lookActiveFeatureLixilSubCategory","navigationCount","setAvailableOptions","checkCollectionName","optionsButtonClick","storeActiveFeature","GroheFeatureOptions","wizardOptionClick","optionFeature","parentOptionClick","TERMINATING_ANIMATION_DURATION","ANIMATION_DURATION","PROGRESS_INCREASE","MAX_PROGRESS","UPDATE_TIME","_createClass","defineProperties","descriptor","Constructor","protoProps","staticProps","_react","_react2","_reactLifecyclesCompat","_propTypes","_reactRedux","_classCallCheck","TypeError","_possibleConstructorReturn","ReferenceError","_Component","_temp","_this","_len","args","_key","__proto__","getPrototypeOf","terminatingAnimationTimeoutId","newPercent","progressIncrease","simulateProgress","_ref2","maxProgress","subClass","superClass","setPrototypeOf","_inherits","prevProps","stop","progressIntervalId","updateTime","terminatingAnimationDuration","isShown","showFastActions","animationDuration","willChange","renderComponent","shouldStart","shouldStop","polyfill","ConnectedLoadingBar","loadingBar","getAddressFromObject","displayAddress","addressPart","PrintDocumentInfo","customerName","customerPhone","customerAddress","customerHasShippingAddress","threeColumns","main","sectionLeft","sectionTwo","mainTitle","mainText","mainTextEmail","sectionCenter","PrintDocumentBodyCartItem","isComplexMultipliedUsed","priceTotal","getFeatureQuantity","hideUnitPrice","displayFake","bundleProducts","wrap","cartItemWithThumbnail","cartItemThumbnail","cartItemThumbnailImage","uri","cartItemWithThumbnailBody","cartItemName","cartItemNameCentered","cartItemNameBig","hideSku","cartItemSkuFullWidth","wizardItemDescription","cartItemDescription","cartItemInfo","cartItemUnit","cartItemUnitItem","cartItemPrice","cartItemNote","cartItemUnitSKU","filterGroupInterface","visualType","filterValueInterface","navigationFilterValueInterface","Movable","_posX","_posY","_width","_height","isMouseOverArea","setHoveringWithChildren","p7","textarea","posOnField","cursorName","addedImages","renderCursor","alreadyAddedImage","addCursorImage","imgWidth","imgHeight","domImg","$img","ratio","mPos","navRadius","arcButtons","angleButtons","closeButton","cornerContainer","radiusContainer","measure","angleButton_onClick","handleButtonClick","arcButton_onClick","setImage","hoverPoint","hoverMiteredPoint","hoverSegmentCorner","TranslatesProvider","createRadiusElements","createCornerElements","ShapeAutoShuffle","shapeToShift","shapeToShiftMeasurementPoints","hoveredLineDirection","newShapePosition","hoveredLinePointFromPosOnWorkspace","shapesToShift","shapeCurrentPos","shapeNewPos","isHorizontal","isVertical","angleDifference","originalWidth","originalHeight","upperLeftX","upperLeftY","referencePosition","resultShapes","shapeTopLeftPoint","hoveredShape","calculateNewPosition","moveShapeToPositionAndRotate","getShapesToShift","calculatePositionDiffForOtherShapes","moveShapesToPositions","hoveredLinesShapes","lowestRightmostPoint","snappedShapesWithoutMovingShape","findShapesRightAndBelow","textWidth","imageSrc","flagMargin","svgCache","setLine","editable","dString","midPointPointField","editState","editPoint","isInEditState","renderDimensionToMouseFromPoint","destroyPoints","setEditMode","setEditPoint","addPoint","disableEditingWall","destroyResource","isMouseOverWall","addedPointKey","lineFieldArray","wallLockedPoint","renderLines","drawLineFromPointV2ToMouse","renderLinesBetweenPoints","RenderFreeDraw","drawLines","nextPointField","drawLastLine","shouldUseLockedMode","drawLineFromPointV2ToMouseLocked","drawLineFromPointV2ToMouseFree","movablePoint","getWallByPoint","editWall","existingWallPoint","newWallPoint","__crownMoldingFeatureId","handlesFeatureGroup","handlesFeature","hingesFeatureGroup","template","renderBorders","renderDimensionsInsideShape","renderHandles","renderDimensionsOutsideShape","renderTestShapeLines","renderShapeSnappedGroup","textHeight","mTextWidth","mTextHeight","lineHeight","movingShape","getCrownMoldingPoints","LineHandlesModel","lineId","HingesModel","isHighlighted","timer","highliteBlinkTime","highliteBlinkTimeTotal","startHighlightingLoop","stopHighlightingLoop","subscr","existingDbFeature","relatedFeatureIds","relFeatureId","loadedDbFeature","coor","BackWall","skirting_board","shower_curb","bathtub_body","split_wall","towel_bar","towel_ring","shower_glass","grab_bar","robe_hook","window_body","toilet_brush","paper_holder","left_wall_splitter","left_wall_crop","right_wall_crop","front_wall_crop","shower_wall_mirror","back_wall","NonVisualizerSubPart","navigationNoMetaSubItems","homePageTitle","ToiletBody","neededFeatureGroupsToCheckOnShowerSizeChange","showerPanComboParent","newSizeCondition","newConditions","TextBox","_posOnField","_placeholder","_design","addRect","addTextBox","modelText","txt","newState","alreadySelectedWizard","wizardWasRestored","skipStartStep","existingAllObject","existingValues","updatedValues","roomType","responseDefaults","noPresetsAtAll","presetIndex","fixEdgeMeta","metaObject","sinkMeta","mountWidthMeta","currentSinkMetaData","getCurrentSinkMetaData","conditionsWithoutSink","CountertopCommon","getFeatureEdgeFilter","getSameEdgesFeatures","currentEdgeMetaData","allEdgesCountertops","sameEdgeCountertops","countertopMetaDataValues","EdgeCommon","matchingByName","allCountertopFeatures","getEdgeFilterGroupFilters","_allEdgeFilters","allEdgeFilters","getMatchingCounterTopFeaturesBySplittedName","getEdgeFilterGroup","assignedEdgeFilter","metaDataMatchName","featurePart","forNavigation","PrintDocumentDisclaimer","withTotal","depositDisclaimer","enableDisclaimer","disclaimerMessage","getDisclaimerMessage","notification","notificationMargin","notificationImage","warningIcon","notificationText","TRANSLATES","getCustomJson","isEnglish","customJsonResponse","translations","setTranslations","renderLanguage","setRenderLanguage","prevLanguage","prevWasCreatedFromFabricator","parseTranslatesResponse","trans","translatesArray","translatesArrayIndex","translateValue","translateValueIndex","getCustomTranslates","transDoc","localeString","loadTranslates","responseMain","customTranslates","responseLowes","jsonFile","responseCaes","columnName","responseSqft","transSqft","defaultLocale","Shadow","wallExR","wallA","wallB","wallC","navSubItems","CheckBox","onChecked","textOnly","BodyPanel","renderAllWallsCheckbox","showWizardGroupsSelection","activeNavPart","showNavigationFilters","canUseNavigationFilter","canUseNavigationFilterSteps","activeFeatureEdgeFilter","edgeFilters","activeEdgeFilter","activeEdgeFilter2","currentFeatureFilters","matchingEdgeFeature","countertopFeatures","edgeFilterValue","edgeFilterId","currentEdgeFilterId","waterFallFilter","matchingCounterTop","NavigationFilters","setToStateFilterValues","setParentFilterValues","getFilterGroupNameByButtonId","colorFilterName","selectedColorFilter","filterG","selectedColorValue","reorderedFilterValues","reorderFilterItems","activeA","filterValueIsActive","activeB","getFeatureBodyItemThumbnail","modulePartJoined","inlayTypeObject","inlayTypes","mJoined","defaultInlayType","removeNavigationFiltersAndSetCommonView","handleFilterValueClick","neededInlayTypesObject","inlayTypeObj","existingMJoinedIndex","selectedF","activeFeatureNameSplitted","featureNameSplitted","getMatchingFeaturesBySplittedName","getFilterFeatureItem","renderMobileFiltersList","renderLoadingList","filterValueIndex","renderFiltersList","innerElements","resetFilters","countertopMaterialOrColor","counterTopWizard","FeatureWizard","updateStepValues","reload","setStepValues","getFilteredFeatures","getLockedPropertyValueObjectById","stepId","filterToFind","selectionAvailable","activeItemIsSelected","checkStepForHidden","doorStyleValueId","doorStyleValue","setLockedView","currentGroupValue","getCurrentFilterObject","selectedFilterObject","availableStep","defaultSteps","showMobileGroups","wizardValueObject","allFiltersObject","getFilterValue","currentStepFilterName","resetStepValues","setHiddenStateToStep","sizeStep","doorStyleStep","existingIdeallyFeature","doorStyleMatch","sizeMatch","sizeValue","patternStep","patternGroup","patternGroupSlabValue","smoothFilterObject","tryToClickOnMatchingFiltersItem","withoutDoorStyle","wizardIsFinished","getPlaceholdersFeatures","arrayOfSelectedKeys","foundFeaturesFromFilters","arrayOfCurrentKeys","onItemClickDisabled","askQuestion","filterValueClicked","itemIsSelected","currentFilter","hasValues","sizeIds","doNotPush","interiorShowerWallWizard","ContextMenu","contextMenuButtons","setShowerBodySelectionButtons","currentShowerSize","intlTranslate","bgImageText","isPony","clickedItemIndex","setWallBButtons","wallPart","zIndexToFind","clickedItem","vanityFaucet","getItemsToRender","hoveredParent","itemsToRender","menuButton","subNav","removeNotUsedTubItemsFromContextMenu","itemToRender","activeTub","keepThisItem","handleSubNavClick","showerTubComboSubParts","activeTubMenuItems","handleContextMenuHover","hoveredButton","hoveredZindex","setContextMenuButtons","getShowerRelatedItems","contextMenuStyles","onMouseOver","HomeMenu","handleBack","handleMobileBlur","backButtonClick","SaveButton","saving","handleSaveQuote","saveQuoteSubmit","Tutorial","stateProperty","highlightElement","globalShadow","countertopGroupParent","relatedName","matchingParts","featuresPart","moduleSystem","top_cabinet_parts","bottom_cabinet_parts","crown_molding_parts","countertop_parts","top_module_system","inlay_types","bottom_module_system","allSubParts","newSubPart","cPart","countertopSubParts","changedSubParts","getChangedSubPart","ContextMenuSimple","availablePartIds","getBackSplashButtons","setBacksplashButtons","backSplashButtons","currentLayoutName","CabinetContextMenu","resetModule","arrayNumber","setCabinetModule","moduleSplitted","modulePart","moduleSystemPart","oldIndex","getSliceButtons","getResetButton","getExitButton","openNavigationMenu","getCabinetConfigurationButtons","cabinetConfigurationButtons","availableModuleCombinations","getContextMenuButtons","sliceButtons","firstSliceIsActve","contextButton","contextButtonIndex","getShowerBodySelectionButtons","desItem","ContextMenuQKB","setStyles","setButtons","maxAllowedWidth","maxAllowedHeight","negativeMargin","getContextMenuPosition","contextStyles","modifiers","altAxis","altBoundary","tether","rootBoundary","padding","onClickAway","actionCartItems","stateCartItems","stateCartItem","sameCartItemIndex","checkForAddToCartFeaturesWithDisplayLogic","checkHardcodedRulesItems","oldItem","cartItemToDeleteIndex","isRecalculateSlabsInCartNeeded","recalculateSlabsInCart","isSlabsStillExistInCart","removeFakePriceFromCartItems","cI","activeApplyPopupItem","existingCartItemIndex","newCi","checkoutPopupVisible","depositVisible","depositCallback","cItemsAddedToParentCart","manualTaxEntered","supportedCountries","zipCodeRg","supportedCountriesList","displayLogicCartItem","allowMinimumChargeConditions","countertopItems","accumulator","MINIMUM_SQFT","MINIMUM_SQFT_2","theMostValuableCartItem","currentMostFeatureCost","checkLowesHardcodedRulesItems","uniqueSharedNames","uniqueSharedName","matchingItems","checkCaesHardcodedRulesItems","similarFeatures","isSameNameFeature","Quantity","minValue","handleOnKeyDown","allowDecimals","handleChangeValue","getColor","squared","htmlFor","readOnly","loginButtonCommonClick","updateInputValidations","loginResponse","saveQuoteAfterSignIn","savedSuccess","registerButtonCommonClick","registeredResponse","remindPasswordCommonClick","fullStore","getUpdatedUserInfoFromTheResponse","responseCustomer","tryToSetUserFromUrl","getDeviceType","opera","DEVICE_TYPE","iOS","Android","Desktop","unknown","rgx","TextInput","inputElement","editing","getUpdatedValue","finishEditing","handleKeyDown","autoComplete","LookDropdown","selectedItem","selectItemClick","selectLabel","maxItems","changeErrorsObject","setOpened","selectElement","checkForError","selectItemHeight","preText","endIcon","selectItemIndex","isSelected","handleSelectItemClick","LookFeatureSku","withoutCheckout","sendFeatures","lookImage","LookListFeature","fromDesignRecommended","isAllWallsTutorialItem","featureElement","noFeatureSection","showMatchRadio","positionInList","finished","showAllWalls","viewTypeFour","isLockedAndViewTypeFour","Consumer","compatabilityLogic","listFeatureClick","ShoppingCart","getRecentlyViewedItems","recentItem","recentItemId","getFinalButton","intlText","handleCheckOut","showBackToDashboard","leadCaptureOnQuote","handleSaveClick","handleStartOverClick","assignButtonsToShow","getFieldValue","getFirstUnfilledCustomField","contractsContext","signIsRequired","showReceiptInContract","customFieldInfo","fieldsNeeded","isEditable","isCheckBox","pageRect","ury","fieldIndexOnPage","getFieldNameWithoutRequired","getFieldCoords","contractFields","fieldsCoords","isCustom","fieldCoords","idx","getAlreadyFilledSignatureField","fieldName","signatureValue","withoutRequiredSignatureName","isSignature","getLookRowHeight","LookVirtualizedList","contentHeight","onScrollHandler","loadingCount","columnCount","listSettings","columnWidth","rowCount","rowHeight","overscanRowCount","showScrollingPlaceholder","useDynamicRowHeight","cellRenderer","columnIndex","rowIndex","noRowsRenderer","GroheFeatureQuantity","hideTitle","MIN","updateQuantity","quan","fromButton","analyticsAdjust","pattern","moreInfoType","GroheCartBackButton","BathroomVisualizer","baseResponse","setVisualizerInfo","showTutorial","PrintDocument","Provider","pageAS","object-fit","pageNumber","fixed","showWizardStepDoneCheckMark","wizardSelectedValue","stepGroup","prepareData","prepareCountertopRows","prepareBacksplashRows","prepareEdgeRows","dataCountertops","preparedData","dataCountertop","dataBacksplashes","dataBacksplash","dataEdges","dataEdge","clearManualCalcData","manualCalculationRowType","getGroupedShapesByColor","getFeatureGlb","zoomToLine","shapePos","sqftPoup","popUpWidth","newWorkspacePos","zoomTo","isHalfScreen","shapeMinMax","zoomToInSlab","isXIncrementUp","isYIncrementUp","refreshIntervalId","incrementX","incrementY","similarity","longer","shorter","longerLength","costs","lastValue","editDistance","arrayToSearch","highestMatchCount","phraseBySimilarity","searchWords","urlWords","matchCount","urls","versionedUrls","versionMatch","isSqftPassedDataEmpty","UnderlaymentController","changeMaterialToColorArray","getHardCodedFilterGroupName","weShouldHideFilterGroup","weShouldHideFilterValue","selectedFiltersLength","getFixedFilterValueName","FiltersBody","isFilterSelected","isFilterExpanded","handleExpandFilter","handleSelectFilter","handleGroupClick","handleReset","renderFiltersBody","getCurrentNavItems","availableOtherFilterGroups","renderGenericFilters","checkFilterGroupForAvailableFilterValues","renderBrand","renderColor","whichFeatures","filterList","groupsFirst","filterOptions","sortedItems","name2","brandFilterGroup","filterButtons","buttonText","filterNameLowerCased","buttonEnabled","KitchenVisualizer","kvGroupsResponse","KvSceneVisualizer","BvSceneVisualizer","LookVisualizer","decorAndAttachmentResponses","userDataResponse","FireplaceVisualizer","LaundryRoomLayout","slatWall","slatWallType","ProjectScopeFunctions","goToMaterialsPageCommon","parentSimple","getBathroomHomeSections","vanityItems","showerAndBathTubItems","otherItems","bathTubFixture","disableOnHomeSections","getKitchenHomeSections","getSections","sqftVisited","visited","closeSQFTCalc","useCloseSQFTCalc","handleAddToQuoteClick","stayOnSqft","isLocationNotUsesPopup","setEdgesQuantity","setRadiusQuantity","setBacksplashesQuantity","setCountertopsQuantity","saveSQFTHistory","edgesIdsObject","edgeId","setSubPartQuantity","radiusCount","angles","countertopSquareFeet","centerIslandCountertopSquareFeet","countertopIsAdded","countertopIsAddedToQtCategory","centerIslandCountertopIsAdded","updateCurrentFeature","setFeatureGroupSqftQuantity","setSqftQuantityToSubPartFinal","sqftQuantity","setAdminLoginPopupVisible","adminLoginPopupVisible","setAdminLogoutVisible","adminLogoutVisible","setAdminToolSettingsPopupVisible","adminToolSettingsPopupVisible","adminToolSettingsPopupFeature","ARButtonGoogleWebXR","modelViewer","activateAR","handleResizeClick","handleSpacerClick","handleRotateClick","handleWallClick","handleDuplicateClick","handleAngleClick","handleTextClick","handleResetClick","handleMiteredClick","handleUnderlaymentClick","SQFTFeaturesHeader","isFiltersOpened","protoTypes","featureTitleId","LookListMainFeature","withShipping","bundleExpanded","setBundleExpanded","outOfStock","expandBundleButton","isBundle","inStock","isBundleParent","HomeButton","MobileMenu","bvDataPart","showSubNav","getMenuItems","smallButton","smallButtonClassName","FeatureInfoPrice","mainFeaturePrice","showDiscount","unitAfter","accItemQuantity","salePercentage","priceOld","getListItemHeight","itemsList","widthPercentage","shouldReplaceSelectionInfoFeature","featureG","SelectionGridItem","goToFeatureInfo","wizardSkipAndAddToCartButtonVisible","quoteOrUnlockButtonVisible","isAddToCartButtonVisible","infoButtonVisible","updatedToolSettings","getDifferentToolSettings","handleFeatureClick","adminState","shiftFilterTitleInterface","shiftTitleIndex","elementIndex","positionTop","columnPosition","HardcodedCanvasImage","setStaticCanvasImage","currentQtCat","onLoadStart","retryConnectionClick","clipPath","LookFeaturePairPrice","GroheFeatureSQFTButton","featureOpened","handleSQFTButtonClick","shopState","GroheFeatureSoldOut","setGroheWizardOpened","wizardOpened","setGroheWizardName","wizardName","setGroheWizardStep","LookMainCategory","lookViewTypeWasChanged","navItemsLists","setNavItemsLists","firstOpenedFeature","setFirstOpenedFeature","firstOpenedConditions","setFirstOpenedConditions","shouldRunAnalytics","setShouldRunAnalytics","prevActiveCategory","setReceivedFeatures","clickedOnItem","navItemIndex","currentPositionInList","nItemsLists","firstLockedIndex","firstUnlockedIndex","withGrid","reqFeatures","desRecNavItemList","navItemList","regularNavItemList","notMatchingNavItemList","scrollObject","onEventScrollHandler","LookFeatureRevertButton","revertButtonClick","zoomToFeatureGroup","LookWizardContentButtons","onSkipClick","previousClick","nextClick","skipEnabled","isCompletedStep","nextDisabled","reducers","combineReducers","docuSignState","groheQuotingToolState","historyState","sqftTutorialState","updateFeatureCount","overflow","route","isTouch","javascriptErrors","handleToggleUserPopup","urlLanguage","urlTheme","bvData","newQuoteData","groupedFeatures","groupedFeaturesDescriptions","introVideoStarted","introVideoFinished","initialRoute","imgUrl","d3_geom_contourDx","NaN","d3_geom_contourDy","grid","d3_geom_contourStart","pdx","pdy","_slicedToArray","arr","iterator","_arr","_n","_d","_e","_s","_i","sliceIterator","promiseTypeSuffixes","defaultTypeSuffixes","_promiseTypeSuffixes","PENDING","FULFILLED","REJECTED","isPending","isFulfilled","isRejected","actionScope","meta","lightBlue","bold","getStyles","Font","family","StyleSheet","paddingTop","paddingBottom","paddingHorizontal","header","marginBottom","flexDirection","alignItems","justifyContent","headerInfo","headerLogo","flex","headerLogoAS","paddingLeft","paddingRight","headerLogoImage","alignSelf","objectFit","headerText","headerTextBold","specSheet","headerTextASSheet","headerTextASInfo","headerTextValue","sectionRight","borderBottomWidth","borderBottomColor","borderLeftColor","borderLeftWidth","borderLeftStyle","roomTitle","textTransform","roomBody","subPartTitle","marginRight","marginLeft","borderWidth","borderColor","borderRadius","flexBasis","flexGrow","flexShrink","borderStyle","cartItemSimilar","cartItemSimilarTitle","cartItemSimilarTitleBundled","cartItemBundled","cartItemSimilarTitlePadding","cartItemSimilarContent","cartItemSimilarContentCell","cartItemSimilarItem","borderBottomStyle","cartItemSimilarItemNoBorder","cartItemSimilarItemBlock","cartItemSimilarItemName","cartItemSimilarItemLabel","cartItemSimilarItemPrice","cartItemSimilarItemExample","roomTotal","marginVertical","roomTotalSecond","roomTotalText","roomTotalAmount","footer","footerLeft","marginHorizontal","totalSectionFirst","totalSection","totalSectionText","totalSectionAmount","totalSectionFinal","totalSectionAmountFinal","bottom","signature","signatureText","borderTopWidth","borderTopColor","borderTopStyle","signatureImage","width100","flexRow","flexColumn","flexCenter","marginT5","marginT8","marginT10","marginT16","marginT20","marginT30","marginT40","marginB5","marginB8","marginB10","marginB16","marginB20","marginB30","marginB40","marginL10","marginL20","marginR10","marginR20","discountDeposit","discountPercent","financeCell","financeCellMonths","financeCellText","PrintDocumentHeader","logoView","jobInfoView","toLocaleDateString","toLocaleTimeString","PrintDocumentInfoFabricator","mainAddress","addresses","adr","addressType","ADDRESSES_TYPES","Shipping","provence","contactEmail","emails","emailIndex","Billing","PrintDocumentBody","getGroupName","fixedPrice","uniqueCartItemIds","showWizardSteps","differentCurrencyObjects","currentCartItems","slabsCartItems","mainCartItems","subPartIndex","currObject","currentTotal","PrintDocumentBodyBundledCartItems","bundleCartItem","PrintSimilarProducts","insideQuote","featureCollectionIndex","lastItem","PrintSimilarProductsListItem","interceptors","use","toJSON","apiResponseError","apiGet","apiPost","sqftCursorManager","currentCursor","noCursorStealing","prefix","setPoint","cornerMargin","radiusLetter","dstring","Fraction","mtext","tLen","SpacersController","isNotCreatedSpacerExist","getIsCreated","Spacer","isCreated","createShapeFromSpacerPoints","getPointsToTheMouse","point3PointField","point4PointField","topLeftPoint","adjustedShapePoints","sortedPoints","spacerShapeId","spacerShape","setCreated","renderLinesToMouse","betweenPoint1","betweenPoint2","distanceFromMouseToTheLine","pointLeftRightPosition","parallelPoints","ModelCorePoint","_x","_y","_mixins","setOuterShape","renderMeasurementsInsideShape","outerShape","renderSVG","RenderMeasurementsInsideShape","updateLinePoints","imageCenterPosOnField","imageCenterPosOnShape","imagePosOnField","imagePosOnShape","sideImagePoints","getImageSidePoints","lineStartVerticalOnImage","lineEndVerticalOnImage","sideShapePoints","getShapeSidePoints","lineStartVertical","lineEndVertical","renderLineToBorder","renderArrowLineToCenter","intersectionsWithShape","sideShapePoint","intersectionsWithImage","sideImagePoint","imageLine","closestPointPairs","entries","closestPointPair","startPointField","endPointField","betweenPointFrom","betweenPointTo","imageCenterPosOnShapePointField","lineStartHorizontal","lineEndHorizontal","lineStartHorizontalOnImage","lineEndHorizontalOnImage","intersectionXPointAndLine1WithImage","intersectionXPointAndLine2WithImage","intersectionXPoint1","intersectionXPoint2","intersectionXPoint1PointField","intersectionXPoint2PointField","measurement1Distance","measurement2Distance","measurement2BetweenPointTo","measurement2BetweenPointFrom","imageCenter","imgOffset","renderHovering","containerSize","getContainSize","drawBorder","aspectRatio","renderAttachedTo","MiteredSegment","_length","parentShape","attachedToLineResource","getBacksplashesPos","getSegmentById","getBumpoutPointCords","posOnFiled","getShapePosAndPoints","underlaymentPoints","getWaterfallPoints","addMiteredEdgesToWaterfallShape","miteredEdge","waterfallShapes","edgeParams","miteredEdgeDistance","SlabAdditionalShape","getShapeAdditionalShapes","findOneByBacksplashShapeId","activeBacksplash","disallowDemo","hoveredLineCorner","featureNameTranslated","StaticImage","beforeRenderCallback","getHoverArray","SQFTShapeOffset","animationPoints","offsetPoints","calculateOutlineV2","parentPoints","setLineDash","calculateOffsetPoints","offsetDistance","dir1","dir2","norm1","norm2","avgNorm","unitNorm","originalShapePoints","newShapePoints","getTime","elapsed","interpolatedShape","pointNew","pointOriginal","outlinePoints","nx","ny","listeners","eventName","getUrlBase","fetchDataWithCancellation","shouldSaveDataInStore","cancelFetch","requests","LineImage","updatePosInsideShape","lineLengthText","prevValue","angleInRadians","posXDiff","posYDiff","currentSize","newImageWidth","newImageHeight","testNewImageValue","parallelLine","getParallelLine","updatePrentSize","SimpleLine","initLineLength","setLineLengthFromNumberValue","isMouseOverLineV2","lineBordersArray","lineHoveredArea","isMouseOverLine","moveLineWithMouse","imageState","pointFieldFrom","pointFieldTo","ShapeRotatable","initCornerBorderPoints","hideShapePoints","__cornerPoints","rotateToPointAngle","shapeCenterOnField","movablePointOnField","shapeZeroAnglePoint","rotateToAngleIn360","rotateToAngleWithoutHoveredPointAngle","normalizedRotateToDegreesValue","getCornerPoint","displayValueInPopup","getCornerPoints","getCornerPointsPointField","cornerPointsPointField","renderFramePoints","cornerPoint","HandlesController","addHandleToTheShape","findGLBModel","suffix","glbModels","modelWithSuffix","WallsController","searchPoint","ShapeColorsController","defaultColorSets","getShapeColorByFeatureId","createShapeColor","g","getResourceById","baseColor","generateRandomRGB","shapeColorModel","ShapeColorModel","WaterfallController","addWaterfallToStore","waterFallOverlay","waterfallOverlaySegment","changeWaterfallSectionInStore","waterfallSectionData","segmentController","WaterfallOverlay","createPeninsulaUnderwrapSections","createWaterfallSections","getEnabledSegments","addSegment","segmentData","waterfallLength","underlaymentLength","isLineInWesternHemisphere","defaultCabinetReturnLength","defaultOverhangReturnLength","cabinetReturnLength","overhangReturnLength","parentSection","COMMON_HEIGHT","USE_DEPTH_INSTEAD_OF_HEIGHT","USE_LINE_LENGTH","overlayId","setIsDisabled","WaterfallSegmentController","parentController","changeSegmentLength","segmentId","postChangeValue","changeSegmentHeight","updatedSegment","changeSegmentThickness","changeSegmentIsDisabled","RemovedFeaturesController","SnappedShapeGroupsController","addNewSnappedShapeGroupNumber","newNumber","snappedShape","snappedWithShapeGroup","groupNumber","shouldUpdateAbsolutePos","aPos","bPos","visitedShapes","Set","resetShapesSnappedGroups","has","updateGroupForShapeAndConnected","connectedShapes","connectedShape","snapPossibilitiesToWalls","distancesToWalls","getDistancesToWalls","itemBoundsWithSamePartId","getItemBoundsForTheSamePartIdIfExist","absolutePosToWalls","snappedShapeIds","snappedShapeFromAllPossibilities","snapPossibility","SelectedShapesController","clearSelection","removeAllResources","CrownMoldingController","contours","getCrownMoldingForShape","contoursByFeatureId","contour","feature3dUrl","contour_points","addUniquePoint","getCabinetPosYFromShape","cabinet_position","Images3dController","HingesController","isFitLineLength","isFitSiblingLineCorner","isFitBumpout","isFitPontDistancesToCornerLine","isFitByAngleBetweenLines","isFit","getBumpoutTextParameter","length4to","minDistanceNeeded","prevLineLength","isEditInputDisplayed","hoveredColor","originalLineText","lineTextResized","lineText","lineType","offsetFromLineEnd","getLine","getHoveredArea","rotatedPoint1","rotatedPoint2","pointToRotate3","rotatedPoint3","pointToRotate4","rotatedPoint4","getLineDistanceFull","roundedDiff","getAdditionalLineDistance","getCtxColor","getMidpoint","getLineLengthText","getLineDistanceFullInPixels","lineLengthInPx","additionalLineDistance","additionalDistance","orientationValue","space","medgeText","fromPosOnField","marginTotal","renderHoveredArea","hoveredArea","getFrameBorderPosition","minBumpoutSize","bumpoutTextParameters","lengthFrom1","length14","length34","bumpoutLines","flipPoints","biggestPoint","smallestPoint","stopPoint","move23Point","parentLine","lengthMidPoint","createBumpoutLines","bumpoutPointsCords","importPoints","bumpoutFeature","isFeatureExist","bumpoutData","bumpoutPoint","getBumpoutLength","bumpoutDistance","lineLengthInches","lineLengthMm","bumpoutLength","resizeBumpoutPart","vectorAB","vectorADrag","crossProdZ","drawBumpoutRect","renderMeasurements","bumpoutXOffset","bumpoutYOffset","pointDistance34","renderHorizontalText","renderRotatedText","bumpoutTextParameter","textToRender","pointArea","isMouseOverRect","textOrientation","inputPosition","inputClass","scaledValue","Color","LineAttachmentsComposite","component","execute","angleValue","tempLinePointFrom","tempLinePointTo","getRotationCentrePointByBottomLine","ShapeSlab","__seamTool","renderSeamLinesOnHover","renderSeamCutPoints","seamToolRender","renderSeamVerticalIntersection","renderSeamHorizontalIntersection","seamCutPointOnField","startPointOnField","endPointOnField","__measurementArrows","_shape","absoluteLinePoint1Pos","linesWithoutAnglePoints","seamShapesPoints","splitShape","createShapesFromSeamPointsAndSetSlabRotation","parentShapeCenter","seamPoints","isBacksplashPiece","preparePointCords","rotatedDiffPos","parentSlabAdditionalShape","newSlabAdditionalShape","setSlabPos","shapePieceCenterPointBeforeRotation","reqRotatedDegreesToZero","shapePieceCenterPointAfterRotation","coreShapeAbsolutePosition","slabAbsolutePosition","setParentId","seamPoint","splitOnlyOrientation","piece1Points","piece2Points","intersectionNumber","filterEqualAndPointsOnTheSameLine","isEqual","isOnTheSameLine","ip","seamTool","__measurement1","__measurement2","absoluteLinePoint2Pos","distancesToLines","getDistancesToPoint","snappingPossibilitiesToLines","getSnappingPossibilitiesToLines","renderSeamDashedLine","horizontalLinePoint1","horizontalLinePoint2","renderSeamArrowLine","intersection1","intersection2","intersectionYPoint1","intersectionYPoint2","intersectionYPoint1PointField","intersectionYPoint2PointField","mousePosOnShapePointField","measurement1Midpoint","measurement2Midpoint","measurement1Pos","measurement2Pos","removeOverlappedWithShape","overlappedId","restoreShapePosition","memory","shapeSlabAbsolutePos","shapeAbsolutePos","ShapeRender","renderRegularShape","shapeDesign","hoverLine","shapeState","VanityHandle","toggleVanityParts","VanityCabinet","canUseWizard","toggleLayerPositions","updateSink","updateVanityParts","getfilterValueIdByValue","placeholderAvailableFeatures","Other","windowNeededLayouts","BathTubLiner","navigationSubItemsWithSides","setShowerSize","WalkInTubFixture","ReplacementTubFixture","layerPriority","ShowerScreen","FrontWall","SplitWall","LeftWallSplitter","ShowerGlass","ShowerBody","loadedShowerBody","loadShowerDimensions","loadShowerMetaData","loadThumbnail","bathTubBase","availableFeatures","showerPanCondition","showerBodyParent","showerBodyThatFits","showerSizeValues2","condValue2","shBody","showerBodyToSet","comboParent","clickedPosition","nameSplitted","nameSplitted2","size2","CornerShelf","showerPodParent","windowParent","ToiletBrush","toiletParent","RobeHook","TowelRing","GlassHolder","TowelRack","Wainscoting","TowelTowelRing","towelRing","TowelTowelBar","TowelTowelHook","hardcodedSkus","finalNavItems","forMeta","leftNavItems","existingNavItem","setAdditionalMetaData","setDefaultAccordingToPreviousSelect","rememberPreviousSelection","compatible","ShowerFloor","thresholdAvailableFeatures","currentFloorName","sameThreshold","showerDoorParent","currentShowerPanCondition","showerFloorAvailableFeatures","currentThresholdName","sameShowerFloor","navItemFloor","setArmHeadType","ShowerArm","ShowerHeadBundle","TubSpout","HandShowerKit","ShowerCurb","BodySpray","DiverterTrim","HandShowerHolder","HandShowerOnly","ShowerHose","ShowerSystem","ShowerTrimKit","ValveTrim","WallUnion","removeInterferingParts","cornerShelf","FloorBody","compareMountPosition","dbFeatureLoading","checkForExistingDecor","currentDecorFeatureGroup","decorName","toiletPaper","decor1","showerWallMirror","lamp","mirrors","decorCount","Attachment","currentConditions","selectFrom","attFeature","alreadyAddedFeature","Decor","needShowerSizeMeta","ShowerWallMirror","enclosureTop","enclosureBottom","skirtingBoard","EnclosureTop","EnclosureBottom","SkirtingBoard","table","chair","carpet","basket","frame","plant","Table","Chair","Carpet","Lamp","Basket","Frame","Plant","VanityCountertop","activeMatchingSink","activeMatchingSinkSku","getActiveSkuFromRelatedItem","shownFeature","sinkFeatures","MountType","alreadyExistingIndex","shouldCheckSize","currentActiveMatchingFeatureSku","currentActiveMatchingFeatureMeta","sinkSku","currentMatchingMatchingFeature","currentMatchingMatchingSku","setVanityOnly","getNextVanityTypeFeature","setActiveFeatureByFilter","singleHoleMeta","activeMatchingVanity","activeMatchingFeatures","VanityFaucet","sinkActiveFeature","getMatchingSinks","matchingByCabinetType","withCurrentVanityType","sameCollectionName","sameCustomName","fromWhereToPick","featureToCLick","concettoTMIndex","sinkCollectionName","sinkCustomFullDisplayName","mountHolesMeta","sinkType","mountLevel","waterLevel","Ptrap","VanityWashstand","VanityMiddle","DrawerPull","WSTowelBar","VanityLegs","VanityConsole","DoorHandle","DrawerHandle","Box","_mixin","initPoints","deleteEvents","removeBox","pointsParams","IText","_fontHeight","_hMargin","wMargin","fillStyleGray","fillStyleTransparent","parentWidth","parentHeight","createTextArea","fontFace","wrapWords","fillText","hMargin","textBaseline","spaces","currentLine","words","_modelText","ModelText","_txt","_font","_angle","isNumericKey","isCommaKey","isPeriodKey","isSpace","isSlash","newId","currentShapePosition","cloneShapeLines","cloneShapeLine","currentMovableImagePosition","getText","posText","adjustedSize","rulerSize","ResultImages","dimensionsMultiplier","clippingWidth","clippingHeight","getCanvasScreen","updateCanvasAtStartPoint","shouldReturnToRegularMode","shapesWithoutSlabImages","pointsMinMaxRegular","resultImage","updateCanvasSlab","applianceImages","createdImagesForShapes","applianceImage","outerShapePosition","newScale","startClippingX","startClippingY","updateCallback","srcCanvas","destinationCanvas","destCtx","currentCategory","createShapesFromCabinetSet","positions","cabinetData","TextBoxManager","_textBoxes","getHoveredTextBox","textBox","boxes","FeatureObjectDTO","arrayIds","MARK_UP_APPLY_TO_TYPES","retailPrice","retailPriceAndCost","MARK_UP_PROPS_MATCH","Retail","Cost","Discount","getUpdatedFeaturePriceFromMarkItem","dbFeatureIdString","setFeaturePriceFromMarkItem","markUpListItem","isCaes","priceType","PriceType","Value","setFeaturePriceFromMarkItemQKB","markUpItem","originalValues","markUpObject","fv","pvif","pmt","part2","fridgeConditions","getFridgeWidthAndHeightConditions","widthAndHeightArray","widthHeightConditions","currentHoodWidth","currentHoodNavItems","sameWidth","Oven","Stove","hideLayer","FridgeEnclosure","getFridgeEnclosureSplittedFeatureName","_fridgeEnclosureSplittedFeatureName","FridgeEnclosureHandle","hoodIsVisible","microwaveIsVisible","fridgeIsVisible","TallCabinet","currentTopCabinetColor","cabinetFeatures","cabinetFeature","withStoveConditions","rangeIsActive","withDishWasherConditions","withFridgeConditions","relatedFaucet","mountTypeMeta","EdgeProfile","Cutouts","Radius","PrintDocumentBodyWizardItem","baseInfo","withThumbnail","PrintDocumentTotal","allTaxes","showTaxes","roundedPrice","discountsTotalAmount","currObjectIndex","currencySubTotal","taxObject","taxObjectIndex","taxTotal","taxName","PrintDocumentSignature","formattedDate","toLocaleString","hour","minute","doNotFillNameAndDate","isSignField","hideSignatureField","PrintDocumentDiscountsList","discountSectionIndex","displayDiscounts","discountIndex","PrintDocumentDiscount","PrintDocumentDiscountFinance","financeSection","parsedOptions","propertyIndex","cellStyles","selectedDiscount","getJobRecords","selectedFeatures","lixilCampaignInfo","appointment_date_stc","slotStartTime","appointment_time_stc","lixilData","receiveSmsCheckbox","appForm","saveDataBeforeConverting","timeToPass","splittedTime","parsedUrl","parseUrl","getUserRegisterOrUpdateData","withNewBackgrounds","isBackgroundLayer","multipliers","putImageData","makeHoveringLayerOld","naturalHeight","nextSource","nextKey","triggerEvent","createEvent","initEvent","sanitizeValue","PinchZoom","elText","lastScale","coImage","containerScrolled","timerId","setupMarkup","bindEvents","update","isCloseTo","expected","interaction","zoomOutFactor","minZoom","lockDragAxis","use2d","dragPixelsBeforeClick","zoomStartEventName","zoomEndEventName","dragStartEventName","dragEndEventName","doubleTapEventName","handleDragStart","stopAnimation","lastDragPosition","hasInteraction","handleMove","getTouches","drag","sanitizeOffset","handleDragEnd","handleZoomStart","nthZoom","lastZoomCenter","handleZoom","touchCenter","getTouchCenter","handleZoomEnd","closeToOne","handleDoubleTap","startZoomFactor","updateProgress","scaleTo","getCurrentZoomCenter","swing","allowMoving","withFeatureScreen","zoomOutFromLeft","alreadyZoomed","startOffset","targetOffset","moveContainer","removeContainerScroll","withAnimation","setContainerTransform","moveGroheContainer","percentX","menuWidth","containerTransition","container","getContainerX","getContainerY","maxOffsetX","maxOffsetY","minOffsetX","minOffsetY","needToMoveContainer","scaleZoomFactor","addOffset","originalZoomFactor","lastCenter","getVectorAvg","vectors","sanitize","zoomOutAnimation","isInsaneOffset","sanitizeOffsetAnimation","sanitizedOffset","updateAspectRatio","setContainerY","getInitialZoomFactor","offsetRight","widthOffsetRatio","offsetBottom","heightOffsetRatio","canDrag","posTop","posLeft","framefn","timefn","inAnimation","animateNew","timeFraction","implementation","createHTMLDocument","innerHTML","insertBefore","webkitTransformOrigin","mozTransformOrigin","msTransformOrigin","oTransformOrigin","detectGestures","updateCheck","imgEl","nodeName","getCanvasTransform","targetZoomFactor","useNewScale","offsetY","transform3d","setCanvasTransform","updatePlaned","removeClone","offsetXForContainer","is3d","pointerEvents","WebkitTransition","MozTransition","firstMove","fingers","startTouches","setInteraction","newInteraction","updateInteraction","targetTouches","getDistance","cancelEvent","endTouches","startDistance","calculateScale","definePinchZoom","containerX","scrollTo","behavior","getLayerPartToRender","imageCanvasComponent","ShowerBodyIndexes","ShowerIndexes","missingBodyPart","layerHovering2","layersHoveringItem","missingZIndex","CabinetIndexes","CountertopGroupIndexes","missingZindex","missingZindex2","hoveredLayerIndex2","layerHovering3","hoveredLayerIndex3","needToCheck","layerHov","towelRack","bathtubRim","bathTubSpa","bathTubType_","bathTubParent","walkInTubType","possibleWalkInTubTypes","featurePartName","BathTubBase","sameStoneAsWalls","floorMount","placeTypeGroup","featurePlaceTypeValue","getFixtureType","BathTubRim","BathTubSpa","BathTubTowelRack","CompleteVanity","availableCompleteFeatures","vanityPedestal","handleMeta","hardCodedWizardConditions","VanityPedestal","counterTopsAvailable","LightingFixture","oldVanityType","colorFilter","secondFilter","mathesToCurrentVanity","featureHasFilters","itemA","itemB","tryToSetTheSameFeatureByFilters","setPlaceholderFeature","vanityFilters","matchingFilterFeature","currentNameSplitted","vanityFaucetFeature","sinkSize","getCurrentSinkSize","withSinkSize","isWindowCovering","isWindow","windowDefault","ceilingLight","CeilingBody","CeilingLight","LG","SM","activeShowerPartId","showerBodyActiveFeature","ShowerInteriorWall","wallFeatures","zIndex2","zIndex3","showerSize2","ShowerInteriorWallAccent","doorFeature","checkIfPlaceHolderFits","activeFeatureShowerPanCondition","setNewPlaceHolderFeature","compatibleValue","nameToFind","showerPanValues","showerDoorsThatFits","showerDoorFeature","showerPanValues2","showerSizePassed","showerPanPassed","condPanValue","condPanValue2","sameWallFeatures","showerDoorsThatFit","wallValue","dontFilterByDoorPanMeta","showerDoorType","showerDoorActiveFeature","currentShowerPanMetadata","previousFeature","currentColorArrayValue","colorGroup","existingPans","filteredFeature","filteredFeatureColor","col","filteredByPan","doorCondition","handleCondition","GlobalShadowBody","WallA","WallB","WallC","WallExR","WallExL","shadowSmallRoomName","showerValue","VanityAccent","DesktopNavigation","ponyWallGroup","openContextMenu","updateSideBarIds","sinkSizeConditionValue","tilePatternFilterGroup","acrylicPatternFilterGroup","tileID","acrID","showLockedView","onClickCapture","SidebarClass","getSideBarContent","dni","dniIndex","data-text","FiltersSearch","handleToggleSearch","searchVisible","searchInputNode","handleInputSearchFocus","KeyboardKey","RIGHT_PANEL","NORMAL","NUMERIC","NUMERIC_EXTENDED","PureComponent","BACKSPACE","NORMAL_3","NORMAL_5","NORMAL_2_5","BodyClass","showLoader","itemsDispatcher","level2ItemsNew","level1Items","currentPart","showNavigationFiltersSteps","BodyPanelCheckbox","BodyPanelWizardSteps","BodyPanelNavigationFiltersSteps","setNavigationWizardStep","wizardButtonIndex","countertopWizardPartIds","allowIcons","timeoutId","LookAllWallsRadioButtonSmall","showTooltip","setShowTooltip","getToolTipTranslate","BodyItemsClass","childItemText","renderVirtualizedGrid","menuBody","columnsCount","cloneElement","verticalAlign","BodyItems","column","featureIsEnabledForQt","sameWallAsLeftWall","leftWallName","featureIsFullWall","setFeatureByName","passedName","splittedName","findFeatureByPartName","cabinetLayoutMetaData","getUniqueFeatures","neededType","currentPartName","getTopCabinetCabinetLayoutMetadata","sameCabinetType","alReadySplitted","applianceType","doorSet","zIndexBox","activeFeaturePartIndex","currentModuleSystemNumber","modulePartSplitted","moduleMatchingPart","topCabinetApplianceType","getTopCabinetApplianceType","allowedPorticos","backsplashActiveFeature","matchedByName","zIndexBox2","featureFilterValueIDs","findFeaturesByModuleSystem","fPart","matchesInlayType","inlayTypeName","getFilterGroupObjectByInlayType","getFilteredFeaturesByTopCabinetFilters","activeTopCabinetFilters","woodTypeFilter","stainColorFilter","featureIsMatchingFilters","matchesByMetaDataAndFilters","filteredFeaturesByTopCabinetFilters","hoodType","isHood","isMicrowave","topCabinetConditions","matchingCabinets","getFeaturesMatchingAllCabinets","featuresMatchingAllCabinets","ignoreConditions","getTopCabinetType","getTopCabinetShadowLayout","ignoreAppliance","getBottomCabinetApplianceType","fromFeatureFilters","edgeFilterGroupId","realActiveFeaturePart","featureIsMatchingEdgeFilters","currentCheckFeature","currentFeatureEdgeFilters","relatedSink","existInSomeLayout","currentLayoutAbbreviation","getCabinetType","getChairType","FeatureWizardBody","getFilterValueObjectById","neededImage","filterValueIds","getFeatureWizardBodyItem","bgFilterName","backGroundSizeCover","selectedFilterValue","renderItemsList","currentValues","setCurrentValues","selectedId","selectedA","selectedB","FeatureWizardBodyItem","FeatureWizardSelection","setWizardValue","clickedFilterValue","setAllItems","FeatureWizardSelectionItem","activeScene","setActiveScene","RoomSceneNavigationItem","imageResponse","roomSceneClick","DesktopNavigationLayoutsContent","allowLoading","setAllowLoading","timeoutRef","MobileNavigation","showerGroup","MobileNavigationBodyNewClass","itemClicked","showMobileMenu","menuList","MobileNavigationBodyNew","MobileParentNavigationItems","parentItemClick","parentItemIndex","QuoteButton","DesignButton","toggleDesignList","designListOpened","handleDesignButtonClick","analyticsEvent","handleDesignResetClick","MinimizeButton","backToQuote","csvRows","blobConfig","encoding","msSaveBlob","DemoPoint","setNotesToFeatures","notesFeatures","notesFeature","hasMultipleVisualizers","loadFeaturesAndNotesForMultipleLayouts","featuresToReturn","differentVisualizers","recordIndex","arrayOfFeaturesIds","currentObject","forLayout","nextBvState","getBvStateProperty","isDesignOnly","firstRecord","loadedFeaturesFromJob","rec","recIndex","allWizardValues","restoreCartFeatures","allDiscountSections","sameDiscountSaved","selectedDiscountSection","discountSectionFound","discountFound","disc","savedCountry","jobMarkUp","baseboard","ceilingHighlights","ceilingLights","decor2","decor3","countertopGroup","alreadyExistingGroups","receiveBackSplashes","isCenterIslandDecor","IslandHood","Pendants","RightIsland","activeType","alreadyAddedFeatureIndex","alreadyAddedIndex","matchByType","matchByCabLayout","getBacksplashNavItems","sameNameOnly","updateRadio","handleRadioButtonClick","checkRelatedFeatureGroupPositions","filteredAvailableFeatures2","featuresToDisplay2","feature2","countertopSize","partsLayouts","partsRoomLayouts","pl","isPartsLayout","lightFixture","showOnLayouts","showPositionPopup","NavItemPositionModalButton","setChecked","positionName","getPositionName","isChecked","buttonClick","fromConflictingPopup","callConflictingPopup","checkForSameMountPosition","togglePosition","checkRelatedFeatureGroups","checkCenterGrabWall","checkboxDisabled","applyConflictingPosition","NavItemPositionModalSlatWall","isCurrentFeatureActive","getSlatWallButton","checkForContextMenu","hoveredPartId","needToRequestFeatureGroupsOnClick","ContextMenuQKBButtons","vanitySubMenuOpened","setVanitySubMenuOpened","contextButtonClick","vanButtons","openPartId","regularSink","isVanityParent","FireplaceParent","Furniture","worktop","cabinetLeg","hook","tallCabinet","tallHandle","tallCabinetLeg","CabinetLeg","Hook","CabinetGroup","SlatWall","isMainFeature","OverheadRack","TallHandle","TallCabinetLeg","BottomCabinetLeg","attachment1","allVisualizersPresets","renderSteps","userPopup2FAOpened","userSchedulerOpened","getDefaultCountry","countries","areaCodes","GBP","PLN","CAD","USD","edittoken","showPrivacyPolicy","confirmedAssign","twoFALoading","twoFAToken","loadFilterGroups","filtersCount","isNewBathroomOrKitchen","removeTutorial","_show","oldPage","isSignaturePadVisible","signaturePadTag","invoiceNumberOfPages","jobDocumentUrl","contractLoading","discountsReceived","advancedQuotingSearchItem","filteredResource","resourceTypes","filteredMiteredSections","removeMenuFromState","defaultCompatabilityObject","lookActiveFeatureStockCount","newScene","itemsToRemove","colors","featureGroupCount","anchorDbFeatureId","lastOpenedFeature","cardInfo","cardNumber","cardName","expMonth","expYear","cvv","selectedShippingAddressIndex","selectedBillingAddressIndex","lastState","getLastVisitedShopPage","withFeature","currentPage","UserFieldErrors","setTerms","privacyPolicyUrl","getPrivacyPolicyUrl","termsResponse","anchorScroll","anchor","closeLixilUi","leaveSqft","customerInterface","employeeInterface","customerError","subPartIsDone","relatedIem","SubPartDoneCheckMark","SqftFeaturesPopup3dButtons","threeDButtonClick","arButtonClick","threeDButtonID","augButtonID","LookInput","setInputValue","blockClassName","endAdornment","getEditFeaturesRequestData","postDiffData","featuresToUpdate","toolSettingsDiff","getSameNameFeatures","toolSetting","newToolSettings","oldToolSettings","existingObject","setNewLayout","setNextLayout","shapeSize","setRoomLayouts","updatedRoomLayouts","roomLayoutIndex","roomIndex","expanded","buttonRefs","shapesLength","data-side","data-layout","MultiLoader","useCabinetLoader","shouldGetModelsOnlyWithThirdPartyAR3DUrls","featuresData","setFeaturesData","setIsLoading","newFeaturesData","rows","newViewType","getViewIcon","SqftOptionsRelatedItemList","shouldSortByWidth","activeItemIndex","setActiveItemIndex","containerRef","containerHeight","setContainerHeight","setParentFeature","setWidth","setupResizeObserver","resizeObserver","ResizeObserver","currentContainer","observe","unobserve","expandedGroheFiltersSearchText","relatedItemsList","emptyUrlsLog","LookVirtualizedListLoadingItem","LookFeaturePriceLocked","LookFilters","wrapperStyles","isRelatedItemsFilters","shouldCloseLevel3Sidebar","LookPolicyLinks","isSimple","useLocation","openLink","linkKey","ancestorOrigins","openUrl","sessionEnded","tempId","stringifiedParams","withHashUrl","LookSidebar","popupCloseClick","highLightForDemo","stylePopups","stylePopupOnMobile","popupType","sidebarButtonClicked","showRoomLayoutsButton","sendAuthRequest","TwoFaCodeInput","setAuthCode","inValidCode","setInValidCode","isBlurred","setIsBlurred","checkCode","newAuthCode","currentLocation","LookWizardSectionListFeature","applyWizardItemClick","propToMatch","nameLength","ShoppingCartButton","dropdownVisible","setDropdownVisible","activeLanguage","newVisible","languageIndex","handleLocaleClick","getLanguageName","toggleShowAdvancedQuoting","setAdvancedQuotingSearchItem","InstView","closeInstallationView","unmount","FeatureInfoPriceLocked","handlePriceLockClick","FeatureInfoDescription","pros","SelectionGridWizardGroupItem","isRowItem","wizardItemClick","clickOnLogic","NotInVisualizerView","getThumbnail","allVisualizerNotAvailable","goToBV","checkForDeletePopup","fromDelete","removeCartItemsWithQuoteIndex","cartItemsToRemove","checkForWizardPreviousChanges","LookFeatureNotInStock","GroheCategoriesMenu","isAccessory","showWizardItems","isShopPage","lmFeature","ACCESSORIES","acc_groups","GroheVirtualizedList","mainContent","parentPositions","loadScript","script","readyState","onreadystatechange","GroheCartColumns","isShort","instTaxes","showInstTaxes","showTotal","LockedPrice","getTaxColumn","LookWizard","closeCompatability","wizardSections","LookCompatabilitySection","compatabilityContentElem","closeButtonClick","isInstagram","isFacebook","handleBackToDashboard","salesForceLoaded","sr","QCJobId","eventPayload","Sfdc","publish","sfdcMessage","handleSaveAndBackToDashboard","VIEW","steps","TwoFactorAuthClass","getDialogContent","getVerifyPhoneNumberContent","getTermsAndConditionsContent","getUpdatePhoneContent","handleResendSMS","handleResendVoice","handleCheckVerificationCode","validating","handlePostPhoneNumberUpdated","valid","handleUpdatePhoneNumber","setOldValues","phoneUpdateError","revertUserValues","oldPhoneNumber","getDialog","popupStyles","ConfirmPopup","handleApply","confirm","closeSQFtCalc","allowDelete","declineFunction","getConfirmMessage","MobileRotateButton","getIcon","getLogo","isHttpBNIP","AssignQuoteVirtualizedList","selectEntity","activeEntity","noEntitiesFound","contentDimensions","hideEmployeesColumn","scrollToIndex","setScrollToIndex","prevEntity","scrollToIn","rowRenderer","customer","wrapperRef","handleClickOutside","MaterialsWizardFooterStepThumbnail","testCard","replaceAll","amex","visa","cup1","cup2","mastercard","mastercard2","disco1","disco2","disco3","diners","jcb","_getSvgCardIcon","iconName","postLoginAdmin","loginAdmin","postEditFeatures","handleCloseSQFtCalc","SqftPopupWindow","isIsland","ManualCalculateSwitcher","sideBarButtons","blockStyle","exporter","gltf","ThreeDWorkspace","THREE","SeparateModelGLBViewer","glbUrl","lightIntensity","spinner","animationFrameId","modelScale","envMap","modelLoader","modelsCenter","modelsSize","modelsLoaded","initScene","modelsLoader","Scene","background","camera","PerspectiveCamera","renderer","WebGLRenderer","antialias","preserveDrawingBuffer","powerPreference","setPixelRatio","devicePixelRatio","outputColorSpace","SRGBColorSpace","useLegacyLights","toneMapping","ACESFilmicToneMapping","toneMappingExposure","shadowMap","autoUpdate","VSMShadowMap","gammaOutput","gammaFactor","domElement","enableDamping","dampingFactor","screenSpacePanning","maxDistance","xr","loadHDRMap","HDR_MAP_LOADER","pmremGeneratorEXR","copy","Vector3","near","far","lookAt","updateProjectionMatrix","boxCenter","dynamicIntensity","baseHeight","PointLight","castShadow","ambientLight","AmbientLight","directionalLight","DirectionalLight","addLight","Light","addLightV9","addLightV10","intensity","cancelAnimationFrame","dispose","ARButton","makeImage","contextMenuType","backSplashFeature","setBackSplashFeature","SqftOptionsLoading","FeaturePriceInput","priceEditing","setPriceEditing","hidePrice","togglePriceEditing","handlePriceOnChange","newAmount","NavMiteredSection","sectionName","SEGMENTS","debounceRequest","ended","debounceFn","fullWidth","LookFiltersList","wizardFeatureGroup","setActiveFilterId","availableFilter","isExpanded","underscoredText","expandIcon","aria-controls","GroheFiltersValues","filterValueText","resetFilterClick","getWindowDimensions","windowDimensions","setWindowDimensions","ARViewUSDZButton","makeLink","canvasSrc","setCanvasSrc","LookListContent","LookListContentHeaderRightSide","saveButtonClick","leadPopupWasOpened","setLeadPopupWasOpened","shouldOpenLeadCapturePopup","itemsToCount","hideTotal","hideCheckout","openMiniCartPostMessage","viewCartClick","addToCartPostMessage","leadCaptureTimeoutId","checkoutClick","lookListRequestQuote","downloadAllFeatures","useFeaturesRoomLayoutsChecker","fgObject","needToRequestNames","featureGroupObject","LookListFeatureCheckmark","getUnlockCalculationsCartItems","runAnimations","animateCartItems","exitAnimations","LoadingDots","LookListActiveFeatureMobileButton","InstallButton","fabSettings","ProjectScopeMobileHeader","ProjectScopeSections","updateSections","goToMaterialsPage","checkForWallsComplexGroup","wallsSubPart","qtCatSubPart","FeatureInfo","getDefaultFeatureQuantity","defaultOrPositionsQuantity","handleChangeItemQuantity","handleSQFTCabnetButtonClick","getFeatureModules","materialsQuantityIndex","mQuantity","showRecentlyViewedItems","navItemParent","changeActivePartRelatedItem","nextActivePartRelatedItemIndex","existInCart","associatedProduct","showFeatureModules","availableMeasureUnits","lowerCasedUnit","um","defaultMessage","isPriceUnlocked","FeatureInfoBrand","featureBrandValues","brandFilterValue","SelectionMainList","currentParentText","itemClickCountQuote","updatePositions","listItemHeight","deleteNotInVisualizerFeature","wizardSubStepIsActive","existingWizSetup","unlockedIndexes","$gridBody","isRowView","setRef","showItemsList","setRelatedStones","checkForDisabled","wizardClickOnLogic","clickLeadCaptureOnQuote","clickLeadCountOnQuote","checkIfNeedToSwitchRoom","handleOnMobileGridScroll","ceilScrollWidth","floorScrollWidth","ceilScrollLeft","floorScrollLeft","showListForce","currentFeatures","scrollElement","handleOnDesktopGridScroll","changeSet","renderVirtualizedList","isFinished","enableForQuoting","RowItem","isRelated","FeatureCartItemsCount","matchingCartItems","getAddedCartItemsCount","SuperAdminFeatureToolSettingsButton","WizardFilterItem","SelectionGridFiltersTitle","filterTitle","allTitles","filtersGrid","isTopTitle","prevTitle","renderFeature","titleIndex","nextTitle","scrollToTitle","scrollToPosition","arrowUpDisabled","arrowDownDisabled","data-title","getWithFilters","withFilters","filtersLoading","materialFilterGroup","caesProfiles","countertopFilters","useGetFiltersRequest","useRequest","requestFilters","filtersLoaded","setFiltersLoaded","checkFilters","GalleryViewClass","handleCloseClick","galleryOpened","thumbnailClick","activeImage","gIndex","showFeature","SelectionDescriptionCover","prevActivePart","coverText","setCoverText","showCover","descText","player","play","playsInline","autoPlay","SelectionMainHeader","handleChangeListView","subPartPartId","showBacksplashSelect","showDisabledRadioButtons","SelectionFooterSubParts","scrollToActiveSubPart","animationTime","footerList","maxScroll","scrollIndex","neededScroll","handleFooterListScroll","shadowLeft","shadowRight","updateItems","setRelatedItems","getSubPartsList","withShoppingCart","itemIndex","handleFooterButtonClick","MaterialsFooterBackButton","checkForSubStepChange","subStepChange","MaterialsAgentTutorial","materialsAgentTutorialTimeoutId","setButtonsPositions","resizeId","MaterialsWizardFooterSteps","isShoppingCart","scrollElementRef","stepDisabled","quantityIsZero","$scrollableInfoArea","getCurrentRelatedCartItems","arrayToAddtoTheCart","relatedGroup","relatedItemCartObject","getCartFeatureParentName","ShoppingCartItemsList","switchToMaterialsPageGroup","listItem","neededQtCat","sIndex","setFeatureGroupCustomName","createCommonParentsList","quotesList","cartList","addToCartList","featureGroupDisplayName","getCartItemsList","quotesListArray","isAddMoreDisabled","editFeatureGroupClick","editCartItem","index2","getInstallations","separateLaborInCart","instItem","instItemIndex","getTaxes","ShoppingCartItemsListItem","editorVisible","editorCanRender","handleRemoveClick","handleEditClick","handleAddNoteClick","onNoteSave","editingPriceAvailable","priceIsLocked","neededObject","wizValueObject","selectedWizValues","itemTitle","hasBundleProducts","closeEditor","parentCartItem","NoteEditor","setNoteText","onNoteSaveClick","ShoppingCartItemsBundledProducts","isAdvancedMode","advancedModeProperties","bundledCartItems","AdvancedQuotingListItem","deleteEmptyCartItem","setQuantity","setEditorVisible","handleNoteButtonClick","setClickedItemActiveQuoteIndex","isSearchDisabled","setParentQuantity","AdvancedQuotingListItemRemoveButton","prevConfirmPopupTag","deleteCartItem","DiscountSubTotal","shoppingCartItem","AdvancedQuotingSubpartItems","advancedCartItems","advancedCartItemsLength","allIds","allSqftIds","setCartItems","addEmptyCartItem","keepPrevious","currentCartItemsList","isAddProductButtonVisible","SimilarProducts","similarOpened","setSimilarOpened","updateState","RecentlyViewedItems","renderEmptyItems","emptyItems","recentlyItems","minItems","emptyItem","ShoppingCartFooter","finalButton","saveButton","renderFooterLeftSide","firstKey","showPriceWorksheet","finalButtonElement","saveButtonElement","activeButtonIndex","dropDownHeight","setActiveButtonIndex","clickFunction","ShoppingCartTotalColumns","showIncluded","avgPerSqftPrice","showAveragePrice","ShoppingCartCanvas","setStateLayers","openVisualizer","ImageCanvas","ShoppingCartInstallationQuestion","openInstallationView","handleNoClick","updateAllQuotes","PriceWorksheetView","closePriceSheetView","DiscountDropdown","dropdownItems","useIntl","dropdownTitle","UnlockCalculationsTutorialFunctions","runUpdates","updateSureTax","LookCanvas","useReducer","showCanvasLoader","movedCanvasForIntro","shouldOpenWizardItem","imageCanvasRef","GroheFeatureButtons","addToCartGroheButtonClick","continueShoppingButtonClick","changeButtonClick","lockedButtonClick","addToCartButtonTextId","mobileMainButtonClick","requiredFeatures","setRequiredFeatures","selection","selectedWizardValues","wizVal","allQuantity","GroheFeatureTopButtons","threeDDisabled","lixilQRCode","lixilAR3DUrls","hasWizard","contentToOpen","LookLockedButton","GroheFeatureWizardButton","wizardButtonClick","useViewItemAnalyticsEvent","prevActiveFeature","parentClick","hideInMenu","data-key","LookMainCategoryLoading","filtersButtonClick","viewButtonClick","badgeContent","invisible","FeatureSubDescription","LookFeatureColorMatchCheckbox","currentColorFeatures","checkboxText","updateAllLookCartItems","featuresToClick","checkboxClick","setSameColorFeatures","setCurrentColorFeatures","checkMatchingFeatures","sectionOpened","notPassedLeadCaptureProcess","checkRedirect","exact","executeAfterRegister","registerButtonClick","registerForm","googleComponentsToOurProperties","LookAddressInput","allowRef","setAllowRef","autoCompleteRef","google","maps","pacContainer","handlePlaceSelect","getPlace","formatted_address","address_components","componentKey","long_name","short_name","handleScriptLoad","places","Autocomplete","setFields","addListener","isDeliveryPage","paymentSubmit","cartCheckoutClick","paymentResponse","transaction_id","transId","GroheBillingAndShippingInputs","setAddressInfo","setAddressErrors","addressErrors","shippingInputChange","checkValue","inputKey","skusRequested","firstTimeLoaded","LookRouting","timeOut","lookHistoryListener","categorySet","featureSet","layoutChanged","activePresetState","getPartIdFromLixilCategoryName","allAvailableSubCategories","allAvailableCategories","categoryName","parsedCatName","LookWizardContentCanvas","setTransform","canvasLoaded","setCanvasLoaded","GroheWizardSelectedSteps","stepsContainerElement","useMobile","scrollContainerWidth","amountOfVisibleSteps","LookMainWizardSelectedStep","isProductJourneyDesktop","isProductJourneyMobile","stepWidth","featureIsInStock","notSelected","actFeature","shopContextState","shopContextDispatch","wasShopPage","cartOpened","loadShopPage","createRelatedItems","qtCatResponse","splittedAfterShop","skuId","getFeatureGroupFromUrl","shopCategoryId","getFeatureFromUrl","WithShopFeatureVisualizeClick","visualizeButtonClick","newPreset","ShopFeatureOptionsCommon","withTitle","navItemOptions","activeOption","activeOptionText","LookCartButton","cartButtonClick","showPopper","setShowPopper","prevActiveStep","LookFeature","lookLeadCaptureId","setFeatureGroupName","showSelectWord","useContainerOverFlow","LookWizardCompletedAlertModal","closeWizardButtonClick","getRoomIdeasTranslate","popperStep","roomIdeasButtonClick","buttonTranslate","resetMixpanelId","resetKiosk","ELEMENT","decimalAdjust","exp","predicate","thisArg","searchElement","fromIndex","sameValueZero","kValue","O","relativeStart","relativeEnd","Element","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","parentElement","floor10","u","global","_toolsProtectJs3","_babelPolyfill","__dirname","filename","process","normalizeArray","allowAboveRoot","up","last","splitPathRe","splitPath","xs","resolvedPath","resolvedAbsolute","cwd","normalize","isAbsolute","trailingSlash","paths","relative","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","ext","extname","_process","4","queue","draining","drainQueue","currentQueue","noop","nextTick","fun","browser","env","argv","versions","once","removeListener","removeAllListeners","chdir","umask","5","IS_INCLUDES","$this","toObject","toLength","toIndex","TYPE","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","callbackfn","that","assertDefined","ES5Object","7","assert","msg1","msg2","def","fn","it","isFunction","8","enumKeys","T","S","9","TAG","cof","classof","stat","10","safe","forOf","$has","isExtensible","O1","LAST","FIRST","ITER","SIZE","DESC","fastKey","getEntry","entry","getConstructor","wrapper","NAME","ADDER","iterable","setDesc","setIter","iterated","kind","iter","11","$def","P","12","WEAK","LEAK","findFrozen","leakStore","13","BUGGY","species","assertInstance","methods","IS_WEAK","proto","fixMethod","KEY","buggyZero","chain","G","W","F","core","14","assertFunction","15","$redef","own","isGlobal","isProto","16","17","getKeys","getDesc","getSymbols","18","close","19","FW","20","getNames","windowNames","getOwnPropertyNames","getWindowNames","21","un","22","assertObject","23","$iter","SYMBOL_ITERATOR","Iterators","DEFAULT","IS_SET","FORCE","createMethod","$$","_native","_default","IteratorPrototype","getProto","24","SAFE_CLOSING","riter","25","setIterator","getIter","26","createDefiner","toInteger","bitmap","simpleSet","documentElement","getOwnPropertyDescriptor","setDescs","getOwnPropertySymbols","__e","__g","27","28","29","30","invoke","pargs","holder","31","tpl","SRC","_toString","base","inspectSource","32","regExp","isStatic","replacer","33","34","check","buggy","35","36","SPECIES","37","TO_STRING","38","repeat","fillChar","fillLen","RangeError","sFillStr","sFillVal","39","40","defer","channel","cel","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","counter","run","listner","importScripts","port2","port1","onmessage","41","42","sid","43","UNSCOPABLES","44","45","arrayMethod","IE_PROTO","ObjectProto","_slice","_join","getOwnDescriptor","IE8_DOM_DEFINE","$indexOf","$forEach","$map","$filter","$some","$every","Attributes","propertyIsEnumerable","Properties","keys1","keys2","keysLen1","createDict","iframeDocument","contentWindow","write","createGetKeys","Empty","seal","freeze","preventExtensions","isSealed","isFrozen","partArgs","bound","constr","buggySlice","createArrayReduce","isRight","memo","lz","begin","klass","upTo","cloned","arg","reduceRight","brokenDate","toISOString","isFinite","getUTCFullYear","getUTCMilliseconds","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","callee","46","copyWithin","fin","47","endPos","48","forced","$find","49","50","arrayLike","mapfn","mapping","51","setUnscope","Arguments","52","of","53","54","HAS_INSTANCE","FunctionProto","55","56","strong","57","E","EPSILON","EPSILON32","MAX32","MIN32","sign","expm1","acosh","asinh","atanh","cbrt","clz32","LOG2E","cosh","fround","$abs","$sign","hypot","value1","value2","larg","imul","xn","yn","xl","yl","log1p","log10","LN10","log2","LN2","sinh","tanh","58","$Number","toNumber","valueOf","toPrimitive","binary","59","_isFinite","isSafeInteger","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","60","61","62","63","64","65","Wrapper","setProto","same","RECORD","isNode","asap","testResolve","sub","useNative","works","P2","thenableThenGotten","isThenable","notify","react","fail","rej","$reject","promise","isUnhandled","$resolve","executor","onFulfilled","onRejected","remaining","race","66","ITERATOR","$Reflect","Reflect","_apply","_isExtensible","_preventExtensions","buggyEnumerate","enumerate","Enumerate","reflect","thisArgument","argumentsList","construct","propertyKey","attributes","deleteProperty","receiver","ownKeys","V","existingDescriptor","ownDesc","67","$RegExp","re","CORRECT_NEW","ALLOWS_RE_WITH_FLAGS","flags","patternIsRegExp","flagsIsUndefined","68","69","$at","codePointAt","70","endPosition","71","$fromCodePoint","fromCodePoint","72","73","74","callSite","sln","75","76","77","setTag","shared","keyOf","$create","$names","$Symbol","setter","HIDDEN","_propertyIsEnumerable","SymbolRegistry","AllSymbols","setSymbolDesc","protoDesc","sym","symbolStatics","keyFor","useSetter","useSimple","78","weak","$WeakMap","79","80","$includes","81","82","getOwnPropertyDescriptors","83","createObjectToArray","isEntries","84","escape","85","86","at","87","$pad","lpad","88","rpad","89","$Array","statics","setStatics","90","ArrayValues","NL","NodeList","HTC","HTMLCollection","NLProto","HTCProto","91","$task","92","partial","MSIE","93","94","hasOwn","iteratorSymbol","inModule","runtime","regeneratorRuntime","ContinueSentinel","Gp","GeneratorFunctionPrototype","Generator","GeneratorFunction","isGeneratorFunction","genFun","ctor","mark","awrap","AwaitArgument","defineIteratorMethods","AsyncIterator","async","innerFn","outerFn","tryLocsList","Context","sent","delegate","tryEntries","resetTryEntry","tempName","tempIndex","rootRecord","completion","rval","dispatchException","exception","loc","caught","tryLoc","hasCatch","hasFinally","catchLoc","finallyLoc","abrupt","finallyEntry","afterLoc","finish","thrown","delegateYield","resultName","nextLoc","generator","_invoke","doneResult","returnMethod","tryCatch","makeInvokeMethod","invokeNext","invokeThrow","unwrapped","previousPromise","invokeReturn","enqueueResult","pushTryEntry","locs","iteratorMethod","subscribe","onData","App","BVQuotingTool","setJobIdVisualizerType","jobRecords","getFabricatorData","enableAutoSaveQuote","callRecursiveAutoSave","autoSaveTimerId","disableAutoSaveQuote","setMobileState","handleHeightResize","resizeHeightId","setGlobalHeight","getVisualizer","visMgmt","CommonVisualizer","ApplyPopup","applyPopupItem","applyPopupItemIndex","handleApplyPopupToggle","applyCartItems","getFeaturesList","filteredActiveApplyPopupItems","allreadyExist","exisingIndex","filteredActiveApplyPopupItem","nextActiveApplyPopupItem","UserPopup","setCanvasImage","handleUserPopupToggle","checkFieldsForErrors","neededFields","handleSubmit","isValidPhone","handleChangeView","handleChangeTerms","termsSelected","setInputFocused","handleAdditionalFieldsShow","twoFAOnClose","cancel","updatedPhoneNumber","getTermsText","getUserPopupTitle","getUserPopupText","textKey","KioskMode","UserFields","dataSet","validation","handleInputFocus","closestLiElement","handleInputKeyPress","which","blurPhoneKeyboard","activeElement","errorsExistFirstName","errorsExistEmail","errorsExistPostal","data-input","data-validation","onKeyPress","ConfirmationScheduleView","selectedDate","aptType","handleMonthDayChange","handleTimeTableTimeChange","handleCancelClick","handleScheduleClick","dateChanged","timeChanged","contextTypes","router","MonthView","handlePrevMonthClick","subtract","handleNextMonthClick","handleDayClick","handleTodayClick","renderDays","mom","dayOfWeek","daysInMonth","today","moreCnt","monthHeaderView","dayView","TimeTableView","handleTimeClick","selectedTime","handleAptTypeClick","renderTimes","endTime","postfix","styleApt","styleHomeEstimate","postFix","MobileRotateButtonIcon","xlinkHref","filterUnits","in","stdDeviation","DocuSignLayer","setupDocuSignForm","docuSignSuccess","hideMe","errorMsg","jsonMatches","jObj","iFrameUrl","allowFullScreen","frameBorder","scrolling","fabricatorWebSiteUrl","newMsgBoxState","DepositPopup","agreeAndContinue","agreeChecked","closeDepositPopup","depositPerc","depositAmount","depositMessage","setContext","isContractSelect","changeContent","saveContract","newContextValues","agreeEmailCheckboxVisible","hideEmployeesList","switchToContract","AssignQuotePopupContent","salesPersons","setSalesPersons","customers","setCustomers","responseReceived","setResponseReceived","empList","customersList","testString","AssignQuoteCustomersList","customerSelected","handleCustomerClick","AssignQuoteEmployeesList","AssignQuotePopupContentHoc","setContentDimensions","assContentElement","setCurrentContentDimensions","AssignQuotePopupNewCustomer","selectFields","getSelectFields","activeContractName","cont","contIndex","getSelectedContractString","AssignQuotePopupNewCustomerInput","requiredFields","AssignQuotePopupNewCustomerSelect","methodIndex","AssignQuotePopupSaveButtons","saveFromAlreadyRegisteredUser","saveFromOfflineContract","newChangesExist","fullNameSplitted","quotesId","fromQuoteId","toQuoteId","showSaveButton","showCheckoutButton","checkoutButtonText","signIsDisabled","AssignQuoteContractSelection","prevIsActive","renderContractList","handleContractCheck","OrderCompletePopup","backToHomeClick","getAnotherQuoteClick","getPopupText","message1","message2","viewInSalesForce","scheduleFlexFinishAppointment","popupText","CookieMessage","cookieElement","checkToDisplayCookie","enableCookiePopup","handleAcceptButtonClick","handlePrivacyPolicyClick","getCookieMessage","setParentsLists","edgesFeatureGroup","edgesReceived","removeDeletedInSQFTFeatures","rebuildQuoteLists","quoteLists","SqftFeaturesPopupApplyButton","skipAddedSteps","applyButtonClick","$scrollToFeature","addedFeatures","newPreviouslySelectedFeatures","prepareSqftFeaturesBeforeAddToCart","findCartItemAlreadyAddedToCart","updateCartFeatureWithSqftFeature","updateCartFeatureWithSqftFeatureWithoutIdUpdate","replaceCartItem","updateCartFeatureWithSqftFeatureWithSqftIdUpdate","shouldSkipCeilQuantity","cartItemToAdd","addWizardProperties","remember","alreadyRememberedIndex","addCabinetFeatures","relatedGroupsWithNewQuantity","sqftFeaturesPrepared","isFoundById","isFoundByName","cartItemToUpdate","cartItemsInCurrentQuote","cartItemFeatureGroup","sqftFeatureFeatureGroup","isFoundByDbFeatureAndParentKey","isFoundBySqftIds","SqftFeaturesPopupBody","showNotification","show3dAndArButtons","SqftFeaturesPopupParentList","sqftFeatureIndex","SqftFeaturesPopupFeature","editButtonColor","shouldDisplayEyeball","shouldDisplayEditButton","data-feature","filterNavItemsWithSearch","productText","SqftFeaturesPopupFeatureDropdown","setProductText","ignored","dropdownElement","handleNavItemClick","updateResourcesId","namesArray","loader","wizNavItems","getNamesArray","SqftFeaturesPopupFeaturePrice","shouldSkipCeilPrice","useSlabPriceCalculation","featureToGetPrice","toFixedFeatureCostParams","featureGroupTotalPrice","getFeaturePrice","realUnit","displayQuantity","displayPrice","SqftFeaturesPopupFeatureDeleteButton","actionButtonColor","updatedLists","updatedList","SqftFeaturesPopupFeatureEyeball","openShapeRoom","zoomToSqftFeature","SqftFeaturesPopupParentListTitle","isChangeable","relatedParentPartId","SqftFeaturesPopupTitleFeatureDropdown","featureGroupSubPart","WizardConflictPopupCartItem","wizardSelectedKey","wizKey","runDeclineFunc","stepIndexClicked","setEmail","setPassword","setErrors","closeModal","loggedIn","setToolSettings","saved","innerStyle","defaultCountryValue","CheckoutPopup","scrollIntoView","scrollBack","removeAttribute","updatePaymentInfo","ccNum","paymentAmount","getPaymentAmount","checkoutCallback","offlineRetryCallback","depositTotal","countryIndex","showFake","setShowFake","defineGetter","defineSetter","lookupGetter","lookupSetter","hasOwnProp","oThis","aArgs","fToBind","FNOP","fBound","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","propDescriptor","HTML5_DOMStringMap","attrVal","attrName","attribute","attsLength","n0","e1","e2","preBind","currentBindings","CanvasRenderingContext2D","metrics","testWidth","isFloat","roundToPlaces","wholepart","toTeX","mixed","rescale","td","multiply","divide","equals","scalar","scaleup","gcf","primeFactors","factors","_factor","negative","remainder","approximation","MEASURE_UNITS_LABELS","volume","empty","InfoPanel","titleId","unit2","countertopArea","edgesArea","baseSQFT","baseLNFT","baseDoorSQFT","wallSQFT","wallLNFT","wallDoorSQFT","tallSQFT","tallLNFT","tallDoorSQFT","totals","setTotals","measureUnitLabels","setActiveColorSet","handleShapeOffsetChange","activeShapeWithOffset","setIsOpened","getTotalItems","getTotalItem","xmlnsXlink","xmlSpace","ChangeLayoutPopup","setNewActiveFeatureInfo","shouldDisplayEdgeColumn","handleAddRow","$selector","dropDownUl","data-content","rowLetter","data-type","handleUpdateClick","handleToggleShowTypeClick","hideRowTypesList","updateRowSelectedFeatureAfterIndex","data-group","data-for","SqftEdgeRowDropdown","componentMeasureUnit","setComponentMeasureUnit","handleChangeMeasureUnitClick","handleSettingsClick","isSave","data-popup-id","data-action","data-value","data-step","data-menu","data-set","data-open","popupContent","setPopupContent","SqftFeaturesPopupSaveImageButton","SaveImageButtonClick","imageDataURL","screenshotIconStyle","camera-controls","camera-orbit","canvasRef","viewGLRef","startAnimation","loadAllModels","closeMultiLoader","onWindowResize","intensityValue","setIntensity","newIntensity","updateLightIntensity","handleLightingChange","updateSceneLighting","defaultChecked","hdrLoader","hdrUrl","rgb","rgbeLoader","EquirectangularReflectionMapping","environment","needsUpdate","pmremGenerator","PMREMGenerator","compileEquirectangularShader","hdrTexture","fromEquirectangular","environmentIntensity","exrCubeRenderTarget","newEnvMap","SceneModelsLoader","sceneViewer","loadCountertops","countertopPromises","countertopPosition","getCountertops","loadWalls","wallPromises","wallPosition","getWall","cabinetLoader","loadCabinetSet","loadPromises","should_display_framed_doors","loadModel","allSettled","models","totalBox","calculateModelsBox","calculateAndSetCameraPosition","Box3","model","Object3D","expandByObject","targetLength","setFromObject","CabinetLoader","handlesLoader","crownMoldingLoader","urlToLoad","target_width","framed","getResizedCabinetModel","resizedCabinet","cabinetScene","traverse","isMesh","metalnessMap","rotation","MathUtils","degToRad","loadMaterial","loadHandles","loadCrownMolding","materialUrl","materialGltf","materialMesh","getObjectByProperty","getResizedCornerCabinet","getResizedCabinet","LineBasicMaterial","geometry","BufferGeometry","setFromPoints","Line","HandlesLoader","drawerObjects","doorObjects","logMeshes","handleIndex","loadHandle","gltfHandle","drawer","applyHandleAsChild","door","handleMesh","objectPlacement","handlePosition","handleRotation","cabinetPosition","finalHandlePosition","addVectors","handleClone","allAssets","CrownMoldingLoader","crownMoldingPositions","CrownMoldingPositions","prepareCrownMoldingPositionsForTheShape","cabinetMaterial","crownMoldingPromises","crownMoldingPosition","getCrownMolding","crownMoldingURL","loadMoldingModel","moldingModel","getCrownMoldings","SingleModelGLBViewer","initSceneV2","loadGLBModel","halfHeight","correctGltfProps","addLightV8","envMapIntensity","cameras","receiveShadow","isGroup","isLight","boxSize","multiplyScalar","maxSize","lightOffset","intensityScale","maxDimension","lightDistance","verticalOffset","lights","addLightV4","addLightV5","addLightV6","addLightV7","pointLight","floorGeometry","PlaneGeometry","floorMaterial","MeshStandardMaterial","Mesh","floorMat","roughness","metalness","bumpScale","textureLoader","TextureLoader","wrapS","RepeatWrapping","wrapT","anisotropy","sRGBEncoding","bumpMap","roughnessMap","floorMesh","reader","FileReader","onloadend","base64data","readAsDataURL","getCurrentStep","MultiLoaderSteps","shapesData","getAnimationSpeed","baseDuration","animationDurations","startAnimations","transformStyles","finishedIterations","loaderStep","loaderStepIndex","opacityDiff","qrImage","setQrImage","cabinetsInSingleModelUrl","arUrl","extractARUrl","imageDataUrl","renderArButton","deviceType","GLBLoader","updateWorldMatrix","arraybuffer","hiddenModelViewerStyle","ar-scale","touch-action","shadow-intensity","max-camera-orbit","xr-environment","cropperRef","handleSelectSlab","initialAspectRatio","autoCropArea","crop","handleRectClick","imageType","isHeightFocused","setIsHeightFocused","isWidthFocused","setIsWidthFocused","handleSizeChange","rawValue","numericValue","cropper","setAspectRatio","sizeInputError","setActive","checkboxClasses","prepareImageDraw","imageElement","imageSource","croppedCanvas","getCroppedCanvas","imageFile","files","maxSizeMB","maxWidthOrHeight","useWebWorker","compressedFile","domString","handlePlaceholderClick","qtActiveCategoryName","separateSqftLabel","labelName","subpart","contextMenuTitle","contextMenuSelection","ContextmenuList","CONTEXTMENU_WIDTH","CONTEXTMENU_HEIGHT","data-part-id","getMaxWidth","KITCHEN_CONTEXT_MENU_BUTTONS","BATHROOM_CONTEXT_MENU_BUTTONS","CONTEXT_MENU_BUTTONS","SqftContextMenuV2","ChangeValuePopupWindow","defaultOptions","shouldPreventDefault","increaseLongPressEvent","decreaseLongPressEvent","strokeLinejoin","isTouchEvent","onLongPress","shouldLongPressBeContinuous","longPressTriggered","setLongPressTriggered","setHandlerHold","shouldTriggerClick","isSFTAreaGroup","navRef","sqftGroup","parentRef","setSideBarButtons","menuThatStaysOpened","getSubMenuActiveButton","sidebarButton","subMenuActiveButton","submenuButton","setNavigationDisplayButton","preparedSidebarButtons","preparedButton","buttonToDisplay","newMenuButton","newMenu","buttonEls","newButtons","getTranslationId","handleWaterfallClick","addWaterfall_onClick","segName","handleFreeDrawClick","addWaterfallLayout","navItemMitered","shapeName","data-shape","counterTopArea","setCounterTopArea","setBumpouts","setEdges","setBacksplashes","setWalls","radiiCounts","radiusName","radiusDisplayName","anglesCount","angleDisplayName","anglesValue","angleName","messageTotal","bumpoutsArea","selectedEdge","setSelectedEdge","SqftNavEdgesFeature","data-shared-feature-name","setEgeFeature","attachAdditionalResources","edgeNameTranslated","lowerCaseEdgeName","attachEdgeResource","SqftNavEdgesMiteredButton","partIdMap","getFeatureGroupByItemName","getNavItemsWithThirdPartyAR3DUrls","processItemSelection","addBumpout_onClick","resetAllBumpouts","selectedBacksplash","setSelectedBacksplash","backsplashOptions","getBackSplashText","data-backsplash","data-name-metric","SqftNavBacksplashesCustomButton","activeCornersMenu","setActiveCornersMenu","radiusButtonRef","cornerButtonRef","data-href","isRadiiFeatures","radiiNavItems","staticFeature","staticFeatureGroup","getHardcodedRadii","radiiToDisplay","getHardcodedRadiiMitered","imperialRadii","radiiValue","getRadiusFeatureId","cornersNavItems","cornersToDisplay","getHardcodedCorners","cornerToDisplay","drawCornerValue","getCornerFeatureId","setSearchInput","SqftFeaturesChecker","checkSubPart","setDataTransfer","setData","dragImage","setDragImage","onDragStart","mouseEvent","MouseEvent","dragEvent","DragEvent","bubbles","cancelable","DataTransfer","dropEvent","handlePartId","generateHandles","SqftOptionsHandles","activeItem","setActiveItem","SqftOptionsHandlesContent","togglePartId","allowedPartId","SqftOptionsCrown","setRows","listWidth","setListWidth","isActiveItem","NavMiteredSegment","segmentMaxLength","navMiteredSegment","navMiteredSection","underlaymentSection","NavWaterfallSection","waterfallSegmentsData","getTitle","waterfallSegmentData","NavWaterfallSegment","segmentThickness","NavWaterfallSegmentSwitcher","hasMultiplePartIds","featureData","Fragment","shouldShowFullHeight","gridWidth","setGridWidth","SqftNavCustomBacksplashSection","SqftNavCustomBacksplashSegment","setHeightValue","hasRooms","roomsNavItem","QuotesSwitcher","isToggled","setIsToggled","handleDropDownClick","QuotesSwitcherLists","visibleQuotes","startIndex","QuotesSwitcherListQuotes","handleQuoteClick","quoteRoomFeature","loadQuoteToSQFT","visualizerQuotes","QuotesSwitcherListCategories","setQtCategories","categoriesFiltered","isMatchingWithQuote","isRoom","isRoomGroupExist","handleCategoryClick","nextQtCatName","existingQuoteForSelectedCategory","newVisualizer","QuotesSwitcherListRoomGroups","roomGroups","setRoomGroups","roomsNavItemsFiltered","roomNavItemPartName","nextRoomGroupName","existingQuoteIndex","handleItemSelect","handleDropdownSelect","prevIsOpen","onItemSelect","onDropdownSelect","isOpenInitially","Dropdown","isOpen","setIsOpen","internalActiveItem","setInternalActiveItem","hoveredItem","setHoveredItem","toggleDropdown","handleMouseLeave","onMouseEnter","handleMouseEnter","subIndex","topCabinetFeature","bottomCabinetFeature","getWorkspace","showSqftTutorial","frameCount","renderTask","slide","ui","slider","setMouseWheel","detail","wheelDelta","scaleMinus","scalePlus","returnValue","resizeTimes","stepText","addImageToBody","nodeKey","tutorialImages","initNodes","translates","setSpecificStepRules","showTimer","ring","setButtonClicks","addCursorImages","buttonNext","addToQuote","addToQuote2","edgeImageButton","showNextStep","resizeLines","edgeClick","showFinishStep","forEver","removeCursorImages","animationFinished","$scrollDiv","moveRing","verticalLine","resizeVerticalLine","resizeVerticalLineBack","horizontalLine","resizeHorizontalLine","resizeHorizontalLineBack","toTheRight","basicX","stopResize","toTheBottom","basicY","timer2","edgesButtonsArray","edgeButton","chapeCount","excludedLines","translatesPath","replaceHtml","updateButtonAddToQuote","allElements","translated","innerText","getTranslationColumn","translationMissingValue","translationColumn","translateEdgeToFrench","edgeSharedFeatureName","isSqftVisited","glbLink","setGlbLink","usdzLink","setUsdzLink","saveFiles","sceneFiles","qrCode","glbFile","usdzFile","SceneExporter","exportSceneToGLB","exportSceneToUSDZ","exportToUSDZ","usdzBlob","blobToBase64","usdzBase64","fileExtension","base64FileContents","exportToGLB","glbBlob","glbBase64","savedFiles","encodedLinks","dynamicLink","generateDynamicLink","pageUrl","shouldReturnURL","parseAsync","usdzUrl","whitePageRoute","prevPageRoute","LookListLeft","LookListContentHeader","selectAllChecked","LookListMainFeatureActions","LookListMainFeatureActionsMoreButton","moreOpened","setMoreOpened","showLabel","LookListMainFeatureActionsPopper","closePopper","LookListMainFeatureActionsPopperButtons","addToWishListButtonCLick","changeItemButtonCLick","LookFeatureQuantity","propsQuantity","useLixilQuantity","MAX","LookFeatureQuantityText","LookListBundleFeatures","GroheCartItemActions","LookListMainFeatureCheckbox","LookListMainFeatureShipping","existingFeature","shippingOption","LookLayoutMain","looks","setLooks","showAllLayouts","setShowAllLayouts","updateMain","lookIndex","LookLayoutItem","analyticsQuery","lookViewOpened","realDisabled","lookLayoutOpened","loginOpened","buttonTextId","wishlistButtonClick","neededIntroStep","showPoints","LookSideBarEditButtonPopper","setShowPoints","aria-describedby","shareModalOpened","setShareModalOpened","shareClick","resetLookClick","LookSideBarShareModal","hideButton","undoButtonClick","keyboardDetect","ctrlKey","popupClose","loginButtonClick","termsButtonClick","LookRegisterButton","LookRoomsMain","LookRoomPreset","closeRooms","afterSwitch","nextRoute","roomPresetClick","renderButton","questionPopups","getDescription","getButtonText","presetToSet","submitButtonClick","stylePrefix","LookStylePopupFeature","LookStylePopupButtons","removeButtonClick","updatedDeletedCartItems","getBundleFeatureWithoutChildItems","bundleFeatureWithoutChildItems","countRelatedProductParent","removeBackContinueButtonClick","removeBackAddItemsBackClick","removeBothButtonClick","titleString","exitPostMessage","leaveButtonClick","getButtons","sourceChanged","sourceChangeType","variantUrl","changedFeature","currentSelected","fromPreset","preparedVariantUrl","lixilVariantUrl","hideFunction","updateDesignButtonClick","LeadCapturePopupContent","isQuotation","getSubTitle","getContent","LeadCapturePopupContentInputs","forgotPasswordLinkClick","LeadCapturePopupFooter","privacyClick","oneButtonOnly","LeadCapturePopupFooterSubmit","tryToSwitchToTwoFa","resendSMSButtonClick","receiveCallButtonClick","fromShare","saveResponse","getSubmitButtonText","LeadCapturePopupTwoFA","LeadCapturePopupTwoFAVerify","LeadCapturePopupBoxImage","UnlockCalculationStep","closeTutorial","preventRequiredFunc","animationData","loop","autoplay","rendererSettings","preserveAspectRatio","LookFeatureItemLocked","LookListFeatureName","LookWizardSectionListFeatureQuantity","PrintPopup","logoString","logoBase64","setLogoBase64","setCartItemsThumbnails","setLogoUrl","newLogo","cartItemsThumbnailsBase64","_initialFlowVisited","inititalFlowOnEnter","checkForInitialFlow","nextState","visualizerOnEnter","visualizerEntered","checkForVisualizerOnly","newScopeOnEnter","materialsPageOnEnter","showTutorialVideo","shoppingCartOnEnter","onEnter","QuoteDesignPage","goToVisualizer","goToQuotingTool","buttonClass","WebsiteButton","showCheckoutLineItemPricesToggle","showPrices","showCostPricesToggle","isLoggedAsAdmin","InitialFlow","setQtCategoriesRooms","roomKey","handleFooterBackClick","InitialFlowFooterQuestion","getFooterQuestion","handleInitialButtonClick","buttonType","InitialFlowRoom","handleInitialRoomClick","kitchenSubscription","exitInitialFlow","InitialFlowLayout","setMissingInititalFlowValues","handleInitialRoomLayoutClick","layoutIndex","getLayouts","IntroVideo","getStepText","videoPath","videos","fluid","ProjectScope","ProjectScopeMobile","checkForResize","shopClicked","scrollY","changeContainerHeight","handleShopClick","$sections","searchInputChange","getSearchItems","getAllFeaturesByText","goToItemInfo","selectionBodyStyles","ProjectScopeSearchInput","handleOnFocus","handleOnBlur","ProjectScopeDesktop","getVisualizerName","ProjectScopeDesktopSearchInput","dropDownItems","smallDropDown","SelectionWindowPage","historyUpdateTimeout","SelectionMainWindow","updateQtRoutePath","getSubPartFeatures","listenToRouteChangeForQtCategories","nextCategory","qtCategoryIndexFromUrl","subPartsMatching","subPartIndexFromUrl","subPartIndexFromUrlTest","setFirstAvailableCategory","setFirstRoute","runActionAfterVisualizerChange","getActiveChildPart","nextCategoryName","hashHistoryListener","listenerObject","existingSelGroup","selGroup","changeActivePart","requestName","_partIdRequestsMade","nextSelGroup","relatedNavItem","checkForCheckedStep","activePartIndex","switchToDirectCategory","closeSelectionWindow","searchRequest","realSubPart","unlisten","listen","showVanityChoose","showShowerChoose","SelectionWindowBvRequests","SelectionMain","paginationOffset","pageCount","featuresPerPage","mobileSearch","canvasLoading","canvasExpanding","canvasCollapsing","needToRefreshItems","_ismounted","checkIfNeedToSwitchListView","checkViewType","setDesktopItemHeight","cameFromBV","firstClickDone","showLockScreen","showHomeButton","showVisualizerExpandButton","showNotInVisualizerView","getZoomingPartId","canvasImageStyles","renderCanvasPosition","handleToggleLayout","getCurrentParent","checkPart","navItemsForPrevParent","InstList","clickedIndex","handleServiceClick","groupIndex","serviceIndex","updateServiceValue","valueName","getSublistHeight","servicesLength","FeatureInfoAssociated","addAllClicked","handleAddAllClick","handleRelatedItemsSearchChange","handleViewAllOptionsClick","prodAll","FeatureInfoAssociatedProducts","relatedFeaturesRequestMade","activeDbFeatureId","getLoadedFeatures","relatedGroupIndex","subItemIndex","FeatureInfoAssociatedProduct","showGalleryButton","data-feature-id","FeatureInfoDesc","FeatureInfoMaterial","featureMaterialValues","materialFilterValue","gImg","changeImage","galleryExist","setVisible","setLoaded","cols","cache","fixedWidth","defaultHeight","SelectionMainVirtualizedList","thisFeatureAdded","rItem","showRowRelatedItems","updateVirtualizedCache","deferredMeasurementCache","RowItemButtons","RowItemQuantity","thisFeature","newRowItems","existingItemIndex","RowItemPrice","existingItem","RowItemRelatedProductsButton","RowItemRelatedProducts","setRelatedFeaturesRequestMade","relGroups","setRelGroups","loadedFeatures","featureHeight","relatedStyles","relatedFeatureIndex","MaterialsWizardSqftButton","WizardList","filterGroupValues","setFilterGroupValues","getFilterValues","filterGroupAll","filteredFilterValues","getRenderFilterValues","filterGroupValuesArray","filObject","WizardDesktopGrid","wizardObjectInterface","enableForVisualizer","WizardMobileGrid","minColumns","SelectionMainVirtualizedGrid","SelectionMainVirtualizedFiltersGrid","setCurrentFilter","defaultTitle","setDefaultTitle","gridFeatures","setGridFeatures","setAllTitles","reversedTitles","setReversedTitles","filterValuesAvailable","firstTitle","getFeaturesAndFirstTitle","renderFeatures","newAllTitles","skipTitles","countertopsFiltered","spacersCount","spacersTitleCount","rowsToAdd","onGridScroll","shiftTitle","firstT","getRowHeight","firstFilterTitle","SelectionGridFiltersTitleDropdown","dropdownOpened","setDropdownOpened","fTitle","fTitleIndex","SelectionMainVirtualizedGridMobile","SelectionMainVirtualizedFiltersGridMobile","columnsToAdd","getColumnWidth","firstRowFeatureIndex","ExpandVisualizerMethods","expandCanvas","wideScreen","bigScreen","SelectionViewSwitchers","showListView","data-view","FiltersButton","SelectionFooter","handleAddCartItemClick","updateCartAndGoBack","otherRoomCartItem","createNewQuoteAndAddNewCartItemAfterConfirmPopupClick","replaceOldCartItemAfterConfirmPopupClick","executeAfterAddToCart","updatedWithQuoteIndexRoomCartItem","exitFeatureInfo","changeRelatedItem","handleAddRowItemsClick","handleSelectItem","footerButtonCick","existingWizSetupIndex","wizObjectIndex","activateWizardAgain","canGoToFeatureInfo","handleNextButtonClick","renderFooterSelect","relatedItemClick","setCurrentWizardStepFinished","addToCartTranslate","rowIsActive","SelectionMainSelect","bvPart","SelectionMainSelectCategory","SelectionFooterSubPart","collapsing","collapseRing","expandTimeoutId","expandRing","SelectionFooterSubSteps","currentSteps","subStepIndex","mapDispathToProps","MaterialsWizardMain","setNavItems","scrollElem","setNavigationItems","newNavItems","setNewCanvasClass","prevFeatureGroup","alreadyAddedCartItem","fakeSetShowLoader","MaterialsMainCanvas","setCanvasLoading","showNotCompatibleViewReal","MaterialsWizardMainList","resizing","setResizing","prevItemHeight","itemHeight","updateHeight","alreadyRequestedWizardFeatures","currentStore","stepFromUrl","MaterialsWizardFooterStep","stepButtonClick","showDoneCheckMark","activeStepIndex","setExpanded","setCollapsing","goToTheNextStep","realNextStep","selectedValueIsNotFromCurrentSelections","currentG","mg","setMaterialsCameFromPage","newItems","isSingleFeatureGroup","showConflictingButton","greenNextIsVisible","hasNavItems","greenNextDisabled","alreadyInCart","addToCartVisible","addToCartDisabled","rowItem","renderWizardList","MaterialsWizardFooterSelectButton","ShoppingCartView","ShoppingCartMobile","onContentScroll","scartContent","needToShowQuestionAgain","handlePaneClick","activePaneIndex","activePane","$activePaneTitle","$scartContent","hardcodedImage","ShoppingCartMobileHeader","ShoppingCartMobileHeaderWithRouter","ChangeRoomButton","handleAddRoomClick","PriceInput","setPrice","CartItemQuantity","cartItemQuantity","isInputDisabled","CartItemCalcButton","handleCalculatorButtonClick","CartItemTotal","CartItemSearch","updateCounter","prevConfirmPopupOpened","updateInputText","updateForNewNavItem","closeDropdown","fromConflicting","neededVisualizerType","CartItemSearchButton","handleSearchButtonClick","ShoppingCartDiscountsList","getDiscountTitle","ShoppingCartDiscountsListItem","ShoppingCartItemsListInstallationItem","handleRemoveInstallationClick","instPrice","otherCartItems","isSlabsCartItem","slabCartItems","selectedQuoteRoomName","SimilarProductsList","SimilarProductsListItem","AdvancedQuotingWizard","notFromWizardCartItems","notFromWizardSlabCartItems","commonVisualizerType","wizardsSelectedObject","AdvancedQuotingWizardGroups","nothingSelected","AdvancedQuotingWizardGroupsSearch","defaultText","ShoppingCartItemsListWizardCustomItem","PriceWorksheetButton","handlePriceWorkSheetButtonClick","ShoppingCartTaxInput","VisualizerButton","ShoppingCartFooterSubParts","setSelectionGroup","firstCatName","ButtonGroup","dropdownOpenedFirstTime","setDropdownOpenedFirstTime","handleArrowClick","buttonIndex","currentQuoteWizards","wizValue","lastFinishedWizard","getLastWizardItem","quoteClick","quoteDeleteClick","updateAllQutoesTiedItems","changedCartFeatures","newAllValues","selectedObject","severalQuotes","showEditButtons","PriceWorksheetList","DiscountAdd","approvePersonSelectHandle","approveObject","optionIndex","DiscountDeposit","DiscountFinance","percentageChangeClick","dropdownItem","monthChangeClick","getDropdownOptions","textAfterProperty","dropdownPercentageItems","setCellVisible","withPercentage","dropdownMonthItems","DiscountNestedParent","allNested","uuIdId","nestedOptions","allSelectedNested","nestedChild","nestedChildIndex","parentDiscount","DiscountNestedChild","discountDropdownClick","updatedDiscounts","updatedDiscount","addNestedDiscountClick","lastSelectedNested","ShoppingCartDesktop","UnlockCalculations","UnlockCalculationsSteps","exitRunAnimations","currentRenderTime","renderUnlockCalcTimes","waitTime","renderIndex","getStep","stepStart","UnlockCalculationsTutorial","countertopButtonStyles","countertopButtonText","checkCountertopButtonStep","countertopSelector","countertopButton","$list","computed","UnlockCalculationsTutorialLowes","buttonStyles","currentDate","currentYear","currentMonth","sureTaxData","sureTaxResponse","totalTax","contractsPopupOpened","checkContractBlobs","contractData","closeContracts","closeSignPopup","ContractsPopupSuccess","showEmail","disableCustomerEmails","ContractsPopupDocument","contractRef","pageRef","depositValue","isReceipt","onLoadSuccess","onRenderSuccess","ContractsPopupFooter","onPagerClick","newContext","pageClick","firstUnFilledCustomField","postSaveContracts","Pagination","handlePageClick","pager","setPage","getPager","pages","startPage","endPage","postContractSign","signaturePngBase64","responseSaveQuote","replacements","customFieldValues","contractFieldValuesOnly","contractSign","getDocumentForJob","fromPostSignContract","pdfReceiptPagesLength","hasContractCallBack","DocumentValueDict","Replacements","CustomFieldValues","coordInterface","fieldInterface","isPresent","occurrencesCount","contractInterface","documentKey","documentOptions","cMapUrl","cMapPacked","needToScrollToViewAfterPageChange","ContractsPopupFields","masterContractFields","handleTextFieldOnKeyDown","scrollToIndicator","handleTextFieldOnBlur","block","handleNextIndicatorClick","pageOffsetLeft","pageOffsetTop","renderFields","selectedFieldCoords","selectedFieldHasValue","coordIndex","llx","lly","urx","yExpand","autoFocus","handleTextFieldOnChange","firstEmpty","ContractsPopupSignatureField","fieldValue","signatureName","alreadySignedSameFieldValue","data-coordname","ContractsPopupCheckboxField","ContractsPopupNextIndicator","ContractsPopupFieldValue","getFieldDiv","balance","SignaturePadPopup","setSignatureImage","sigCanvas","_sigPad","_reset","_canvas","fromDataURL","_isEmpty","isInformationFilled","postContractSignature","pngBase64","getTrimmedCanvas","isReceiptSign","closeContractSigning","contractSigningCallback","canvasProps","getReceiptSignStyles","childView","lookTutorialModalRef","neededNumber","scrollSelector","scrollDiv","firstLockedElem","modalEl","LookLockTutorialModal","nextButtonClick","roundToDecimals","getCurrentPositionFromScale","LookZoomer","currentPosition","setCurrentPosition","isDragging","setIsDragging","startY","setStartY","startPosition","setStartPosition","startZoomCenter","setStartZoomCenter","onZoomEnd","zoomButtonClick","currentScale","MIN_SCALE","getCurrentScaleFromPosition","nextScale","prevScale","thumbStyles","LookContextMenu","LookContextMenuContent","zoomedFeature","isShowerWizard","isVanityWizard","isCenterIslandWizard","wizButtonName","LookContextMenuVanityContent","setLoadingCart","prevOverlayOpened","locked","GroheFeature","GroheFeatureOptionsType","updateOptions","activeMetaDataValue","leftRightArray","GroheFeatureOptionsShelfSide","displaySideOptionsFor","GroheFeatureOptionsSide","leftDisabled","rightDisabled","getPanTranslateId","GroheFeatureOptionsShowerPan","currentMeta","positionsAvailable","GroheFeatureOptionsCabinetSide","neededPosition","isButtonDisabled","positionLetter","regexNumbersAndEmptyString","BODY_SPRAY_POSITIONS","GroheFeatureOptionsBodySpray","currentQuantity","positionIndex","GroheFeatureOptionsSlatWall","addedToCartClicked","setAddedToCartClicked","updateCartItems","cartItemsArray","requiredFeature","addAllToCartButtonClick","GroheFeaturesTotalPrice","totalFeaturesPrice","withDecimals","SLIDE_DIRECTIONS","sliderRef","handleScrollClick","categoriesOpened","GroheCategory","featureGroupClick","closeFilterClick","displaySameColorGroups","zoomToFeatureGroupByFeature","changeFeature","groheSimilarItemClick","GroheFeatureShort","addedToCart","setAddedToCart","addToCartButtonClick","layoutsOpened","wizardSubParts","totalSteps","featureGroupDescription","boundaryCount","hidePrevButton","hideNextButton","activeTitle","setActiveTitle","lixilURL","infoKey","panel","titleKey","LookFeatureInfo3d","arButtonOnly","threeDSrc","glb","usdz","hdr","arButton","slot","LookFeatureInfo3dViewer","reveal","ar-modes","ios-src","environment-image","class","exposure","aar-modes","quick-look-browsers","infoButtonClick","threeActive","threeColor","augActive","augColor","isRoomIdeasOpened","isRoomLayoutsOpened","continueShopping","selectedValues","canBeAdded","getCartButtonText","checkoutDisabled","allowRender","setAllowRender","roomButton","GroheLayoutItem","GroheRoomPreset","presetTitle","presetPrice","GroheTopButtons","topButtonClick","setHomeRoute","GroheMenuButton","GroheShareParentButton","GroheShareButton","shareButtonClick","GroheSaveButton","GroheSameColorFeaturesContent","sameColorFeature","headerButtonClick","GroheCartLoginHeader","allSteps","setUserInputValue","subTitleTranslateId","parentGroupClick","GroheCartDesignRecommendedList","translateIndex","setTranslateIndex","slideButtonCLick","GroheCartDesignRecommendedFeature","termsAcceptClick","GroheCartDeliveryColumn","resendCodeButtonClick","gcRef","cartFooterCheckoutClick","GroheCartFooter","paymentSelect","valuesBeforeCheckbox","setValuesBeforeCheckbox","defaultValues","addressError","setAddressError","confirmButtonClick","shipping_tier","addressValidated","isConfirmed","payment_type","GroheCartPaymentInputs","cardInputChange","countryItems","countryName","countryItem","cartItemsTotalQuantity","deliveriesReceived","setDeliveriesReceived","prevQuantity","getTrumbleResponseShipping","cartItemsString","getShippingHQResponseShipping","getOptionsAndCreateDeliveryList","deliveriesSections","deliveryIndex","GroheCartDeliverySection","deliveryCartItems","fromToString","getMinAndMaxDays","SHIPPING_TIMES","minDays","maxDays","days","groheCartDeliveryInterface","showWizard","selectedInSqft","canSelectNavItem","showFinalPrice","GroheWizardContentFeature","showPriceInput","GroheWizardContentSingleFeature","LookWizardSection","propsTypes","LookWizardSectionGroup","nextPedestal","LookWizardSectionList","setAdditionalFeaturesLoading","activePositionInListExist","LookLockTutorialCaller","LookWizardSectionFilters","LookWizardSectionFilterItem","listFilterClick","setFeature","featureDownloaded","setFeatureDownloaded","featureFromUrl","newResponse","ShopFeature","galleryImageClick","galleryImageIndex","galleryImage","ShopFeatureImageGalleryItem","ShopFeatureVisualizeButton","ShopFeaturePrice","priceSplitted","ShopFeatureShipping","ShopFeatureOptions","setActiveOption","ShopFeatureAddToCartComponents","ShopFeatureSuccessMessage","setIsVisible","successElement","ShopFeatureDownloads","ShopFeatureBackNextButtons","ShopFeatureWizardButton","stateFeatureGroup","setStateFeatureGroup","checkReceivedFeatures","useSimpleView","ShopCategoryList","startLoadingAdditionalFeatures","ShopCategoryVirtualizedGrid","listElement","gridColumnCount","featureWidth","gridRowCount","gridItemRenderer","overscanIndicesGetter","cellCount","overscanCellsCount","stopIndex","overscanStartIndex","overscanStopIndex","disableHeight","autoHeight","ShopCategoryListFeature","ShopCategoryListFeatureOptions","prevFeature","ShopCategoryAside","ShopCategoryBackNextButtons","LookCompatabilitySectionButtons","closeAlert","compatabilityObject","compatabilityObjectIndex","toFeature","lm_styles","fullScreenHeight","sectionStyles","buyNow","expandDisabled","contentStyles","featureSectionIsHidden","LookFeatureMatchingStyleAlert","styleAlertModalOpened","setStyleAlertModalOpened","deletedFromCart","LookFeatureMatchingStyleAlertModal","reviewYourLookButtonClick","LookFeatureUnlockButton","setShowAllGroups","showAllGroupsCheckbox","parentObjects","LookWizardContent","thumbnailRef","nextActiveFeature","wizRef","LookIntroBox","urlBeforeIntro","setUrlBeforeIntro","skipIntroButtonClick","showAnotherTextFor","stepTranslateId","getStepTranslateId","roomIdeasTranslate","closeIntro","LookIntroBoxSteps","LookIntroBoxIcon","getPartIdsToHighLight","LookIntroCanvasHighlighting","runHighlighting","partIdsToHighLight","callRecursiveRendering","onTop","videoPlayerRef","video","muted","getArButton"],"mappings":"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","file":"js/bundle.min.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t1: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({}[chunkId]||chunkId) + \".min.js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// The chunk loading function for additional chunks\n \t// Since all referenced chunks are already included\n \t// in this file, this function is empty here.\n \t__webpack_require__.e = function requireEnsure() {\n \t\treturn Promise.resolve();\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonpQuickQuote\"] = window[\"webpackJsonpQuickQuote\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([2721,0]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import {createStore, applyMiddleware, compose} from 'redux';\r\nimport thunk from 'redux-thunk';\r\nimport {reducers} from './reducers';\r\n\r\n// const reduxDevtoolsExtensionOptions = {\r\n// actionSanitizer: (action) => { // https://github.com/zalmoxisus/redux-devtools-extension/blob/master/docs/API/Arguments.md#actionsanitizer--statesanitizer\r\n// console.log('action', action);\r\n// return action\r\n// },\r\n// trace: true,\r\n// traceLimit: 25\r\n// };\r\n\r\nconst createStoreWithMiddleware = compose(\r\n applyMiddleware(\r\n thunk\r\n ),\r\n window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__() : f => f\r\n // window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__(reduxDevtoolsExtensionOptions) : f => f\r\n)(createStore);\r\n\r\n\r\n// const store = createStore(\r\n// reducers,\r\n// window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()\r\n// );\r\n\r\nconst store = createStoreWithMiddleware(reducers);\r\n\r\nexport default store;\r\n","const __bucketName = 'kv3';\r\nlet _zoomLevel = 0;\r\n\r\nlet _isDemo = null;\r\nlet _isShowroomMode = false;\r\nlet _isTimeoutDisabled = false;\r\nlet _isTabletMode = false;\r\nlet _kioskConfigs = {};\r\nlet _userInfo = {};\r\nlet _kioskStandAlone = document.kvConfig && document.kvConfig.kioskMode && (\r\n// eslint-disable-next-line no-restricted-globals\r\n (parent && parent.window && parent.window.app && parent.window.app.db) ||\r\n// eslint-disable-next-line no-restricted-globals\r\n (parent.parent && parent.parent.window && parent.parent.window.app && parent.parent.window.app.db)\r\n);\r\n// eslint-disable-next-line no-restricted-globals\r\nlet _parent = parent || null;\r\n// eslint-disable-next-line no-restricted-globals\r\nif(_kioskStandAlone && parent && parent.parent && parent.parent.window && parent.parent.window.app)\r\n// eslint-disable-next-line no-restricted-globals\r\n _parent = parent.parent;\r\n\r\ntry {\r\n if(parent && parent.exitEditQuote) { //editing from dashboard\r\n _parent = parent;\r\n }\r\n} catch (e) {\r\n //console.log('Error accessing window.parent.property ', e)\r\n console.log('running in iframe on remote site');\r\n}\r\n\r\nexport const UseFullSizeImages = window.location.href.indexOf('fsi=') !== -1;\r\n\r\nexport const IS_OFFLINE_MODE = document.kvConfig.offlineMode || window.location.href.includes(\"offlineMode\");\r\nexport const USE_SERVER_CACHING = true;\r\nexport const AVAILABLE_VISUALIZERS = {\r\n Bathroom: \"Bathroom\",\r\n Kitchen: \"Kitchen\",\r\n Fireplace: \"Fireplace\",\r\n LaundryRoom: \"LaundryRoom\",\r\n};\r\nexport const BATHROOM_VISUALIZER_TYPES = [\"Bathroom\", \"BV\", \"bvScene\", \"bvLook\"];\r\nexport const AVAILABLE_VISUALIZER_TYPES = {\r\n Bathroom: \"Bathroom\", // toolVersion 4\r\n Kitchen: \"Kitchen\", // toolVersion 4\r\n kvScene: \"kvScene\", // toolVersion 5\r\n bvScene: \"bvScene\", // toolVersion 5\r\n bvLook: \"bvLook\", // toolVersion 5\r\n Fireplace: \"Fireplace\", // toolVersion 6\r\n LaundryRoom: \"LaundryRoom\", // toolVersion 6\r\n};\r\n\r\nexport const NAVIGATION_TYPES = {\r\n qkb: \"qkb\", // regular ui\r\n look: \"look\", // lixil 1\r\n product: \"product\", // lixil 2\r\n};\r\n\r\nexport const IS_LIXIL_SERVERS = window.location.host.includes(\"qkandb\")\r\n || window.location.host.includes(\"kbquote\")\r\n || window.location.host.includes(\"grohe\")\r\n || window.location.host.includes(\"americanstandard-us\")\r\n || (document.kvConfig.domain && document.kvConfig.domain.includes(\"qkandb.net\"))\r\n || (document.kvConfig.domain && document.kvConfig.domain.includes(\"kbquote.com\"));\r\n\r\nexport const IS_LIXIL_PRODUCTION = IS_LIXIL_SERVERS && !window.location.host.includes(\"qkandb\");\r\n\r\nif (IS_LIXIL_SERVERS && !document.kvConfig.devMode) {\r\n // document.kvConfig.toolVersion = 6;\r\n if (document.kvConfig.userId === 140818 && document.kvConfig.visualizerType === \"Kitchen\") {\r\n document.kvConfig.toolVersion = 5;\r\n }\r\n if (!window.location.href.includes(\"nav=\")) {\r\n document.kvConfig.navigationType = \"look\";\r\n }\r\n}\r\n\r\nexport const IS_PRODUCT_JOURNEY = document.kvConfig.navigationType === NAVIGATION_TYPES.product || window.location.href.includes(\"nav=product\");\r\nexport const IS_LOOK_JOURNEY = document.kvConfig.navigationType === NAVIGATION_TYPES.look || window.location.href.includes(\"nav=look\");\r\nexport const IS_LIXIL_UI = IS_PRODUCT_JOURNEY || IS_LOOK_JOURNEY;\r\nexport const IS_QKB_UI = document.kvConfig.navigationType === NAVIGATION_TYPES.qkb || !IS_LIXIL_UI;\r\nexport const IS_SUPER_ADMIN = window.location.href.includes(\"a=1\") || document.kvConfig.isSuperAdmin;\r\n\r\nexport const USE_FAB_FILTERS_ONLY = window.location.href.includes(\"ff=1\");\r\n\r\nif (IS_PRODUCT_JOURNEY) {\r\n document.kvConfig.navigationType = NAVIGATION_TYPES.product;\r\n // document.body.classList.remove('theme-qc');\r\n document.body.classList.add('bv', 'theme-lixil', 'theme-grohe');\r\n} else if (IS_LOOK_JOURNEY) {\r\n document.kvConfig.navigationType = NAVIGATION_TYPES.look;\r\n // document.body.classList.remove('theme-qc');\r\n document.body.classList.add('bv', 'theme-lixil', 'theme-look');\r\n} else {\r\n document.kvConfig.navigationType = NAVIGATION_TYPES.qkb;\r\n document.body.classList.add('bv', 'theme-qc');\r\n}\r\n\r\nexport const getCommonVisualizerType = (visualizerType) => {\r\n const stringToCheck = visualizerType || document.kvConfig.visualizerType;\r\n switch (stringToCheck) {\r\n case \"Bathroom\":\r\n case \"BV\":\r\n case \"bvScene\":\r\n case \"bvLook\":\r\n return \"bathroom\";\r\n case \"Kitchen\":\r\n case \"KV\":\r\n case \"kvMaster\":\r\n case \"kvScene\":\r\n return \"kitchen\";\r\n case \"Fireplace\":\r\n return \"fireplace\";\r\n case \"LaundryRoom\":\r\n return \"laundryroom\";\r\n default:\r\n return (stringToCheck || \"\").toLowerCase()\r\n }\r\n}\r\n\r\nexport const AVAILABLE_LANGUAGES = [\"en-US\",\"en-AU\",\"fr-FR\",\"pl-PL\",\"es-ES\"];\r\nexport const POST_MESSAGES = {\r\n setIframeLanguage: \"SET_IFRAME_LANGUAGE\",\r\n userRegisterTrue: \"analytics_register_success\",\r\n userRegisterFalse: \"analytics_register_error\",\r\n userLoginTrue: \"analytics_login_success\",\r\n userLoginFalse: \"analytics_login_error\",\r\n};\r\n\r\nexport const IS_BATHROOM_OLD_BV_SCENE = window.location.href.includes(\"kitchen8k.quotesflooring\")\r\n || window.location.href.includes(\"bathroom_8k.quotekandb.com\");\r\n\r\nexport const REACT_APP_GOOGLE_API_KEY = \"AIzaSyCU0TUFdkbHi0O4yAUPMPxSC7tzyTy84AY\"; // same as the Solar app\r\n\r\n// export const USE_LIGHT_QT_CAT_REQUEST = (window.location.href.includes(\"quotekandb.com\") // not used anymore, old logic\r\n// || (document.kvConfig.domain === \"https://quotekandb.com\")\r\n// || IS_LIXIL_SERVERS);\r\n\r\n\r\nconst _isQTEmbedded = window.location.href.indexOf('qt=1') !== -1;\r\nconst _isTutorial = window.location.href.indexOf('intro=1') !== -1;\r\nconst _visMgmt = window.location.href.indexOf('visMgmt=1') !== -1;\r\nconst _isDevMode = (window.location.href.indexOf('dev=1') !== -1) || (document.kvConfig.devMode);\r\nconst _showAllVisualizerGroups = (window.location.href.indexOf('all=1') !== -1) || (document.kvConfig.showAllVisualizerGroups);\r\nconst _isMobile = (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent)\r\n || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(navigator.userAgent.substr(0, 4)));\r\n\r\nexport const IS_AS_BATHROOM = (!window.location.href.includes(\"grohe\")\r\n && ([\"dev\", \"bravo2\"].every(subDom => (window.location.host || \"\").split(\".\")[0] !== subDom))) || _isDevMode;\r\n\r\nlet _subdomain = 'demo';\r\n\r\nif (_kioskStandAlone) {\r\n _parent.window.app.db.tables.config.getConfigs((configs) => {\r\n configs.forEach(c => {\r\n _kioskConfigs[c.key] = c.value;\r\n });\r\n console.log('kiosk_configs', _kioskConfigs);\r\n _isShowroomMode = _kioskConfigs['kv-showroom-mode'] || false;\r\n _isTimeoutDisabled = _kioskConfigs['kv-timeout-disabled'] || false;\r\n _isTabletMode = _kioskConfigs['tablet-mode'] || false;\r\n _subdomain = _kioskConfigs['subdomain'];\r\n });\r\n}\r\n\r\nconst Config = {\r\n AmazonS3: {\r\n bucketName: __bucketName,\r\n root: function() {\r\n if(_kioskStandAlone) {\r\n return \"file:///\" + encodeURI(_parent.window.app.userDataPath.replace(/\\\\/g, \"/\")) + \"/resources/\" + __bucketName + \"/\";\r\n }\r\n //return \"https://s3.amazonaws.com/\" + __bucketName + \"/\";\r\n return `http://${__bucketName}.s3.amazonaws.com/`;\r\n }()\r\n },\r\n getScriptPath: function() {\r\n let scripts = document.getElementsByTagName(\"script\");\r\n if(scripts && scripts.length) {\r\n for(let i = 0; i < scripts.length; i++) {\r\n let src = scripts[i].getAttribute('src');\r\n if(src && (src.includes(\"bundle.js\") || src.includes(\"bundle.min.js\"))) {\r\n return src.substring(0, src.lastIndexOf('/'));\r\n }\r\n }\r\n }\r\n },\r\n appRootNode: '.main-wrapper',\r\n layerSize: function () {\r\n return \"1620x1080\";\r\n\r\n //switch (_zoomLevel) {\r\n // case 0: return \"1620x1080\";\r\n // case 1: return \"2419x1613\";\r\n // case 2: return \"3218x2145\";\r\n // case 3: return \"4018x2678\";\r\n // case 4: return \"4817x3211\";\r\n // case 5: return \"\"; // it is actually 5616x3744, but we use the original image which is of this size and doesn't have the size suffix on S3\r\n // default: throw \"Unsupported zoom level: \" + _zoomLevel;\r\n //}\r\n },\r\n\r\n maxZoom: 10,\r\n zoomIn: () => {\r\n if (_zoomLevel < (this.maxZoom - 1)) {\r\n _zoomLevel++;\r\n }\r\n },\r\n\r\n zoomOut: () => {\r\n if (_zoomLevel > 0) {\r\n _zoomLevel--;\r\n }\r\n },\r\n\r\n zoomLevel: () => _zoomLevel,\r\n\r\n /**\r\n * Returns an object of current view size based on zoom level\r\n */\r\n viewSize: () => {\r\n const w = 1620 + (1620 * _zoomLevel / 100.0) * 5;\r\n\r\n return {width: parseInt(w, 10), height: parseInt(w * 0.666667, 10)};\r\n },\r\n demoUserDomains: ['demo', 'cosentino'],\r\n isDemo: function () {\r\n if (_isDemo !== null) {\r\n return _isDemo;\r\n }\r\n\r\n _isDemo = document.kvConfig &&\r\n document.kvConfig.kioskMode &&\r\n this.demoUserDomains.some((d) => document.kvConfig.subdomain.toLowerCase() === d);\r\n return _isDemo;\r\n },\r\n kioskStandAlone: _kioskStandAlone,\r\n kvConfig: document.kvConfig,\r\n isKiosk: document.kvConfig.kioskMode,\r\n isShowroomMode: () => { return _isShowroomMode; },\r\n isTimeoutDisabled: () => { return _isTimeoutDisabled; },\r\n isTabletMode: () => { return _isTabletMode; },\r\n getSubdomain: () => { return _subdomain; },\r\n isMobile: () => _isMobile,\r\n getParent: () => _parent,\r\n isQTEmbedded: () => _isQTEmbedded,\r\n isTutorial: () => _isTutorial,\r\n isDevMode: () => _isDevMode,\r\n showAllVisualizerGroups: () => _showAllVisualizerGroups,\r\n isVisualizerManagement: () => _visMgmt,\r\n parent: _parent,\r\n /**\r\n * Is filled after the customer logins\r\n */\r\n userInfo: () => _userInfo,\r\n /**\r\n * Set user info\r\n * @param userInfo {object}\r\n */\r\n setUserInfo: (userInfo) => _userInfo = userInfo,\r\n\r\n};\r\n\r\nexport default Config\r\n","import forEach from 'lodash/forEach';\r\nimport uniq from \"lodash/uniq\";\r\n\r\nimport {QuotePricing} from 'shared_components';\r\nimport store from '../store';\r\nimport {getInstallationsTotalCost} from \"../reducers/instReducer\";\r\nimport {DISCOUNT_TYPES} from \"../bvcomponents/priceWorksheet/discounstInterface\";\r\nimport {checkIfInCatProperty} from \"./displayLogic\";\r\nimport {PartMenuType} from \"../bvcomponents/visComponents/constants\";\r\nimport {filterFeaturesByValues, isVisualizerRoute, s3FeatureImagePath, splitFeatureName} from \"./utils\";\r\nimport {getCountertopFeatureGroup, getCurrentLayout} from \"../bvcomponents/appLayout\";\r\nimport {\r\n featureIsMatchingQtCatName,\r\n getCurrentQuoteRoomCartItem,\r\n} from \"./categorySwitchingFunctions\";\r\nimport {\r\n BACKSPLASH_LABELS,\r\n CABINET_LABELS, CORNER_LABELS,\r\n COUNTERTOP_LABELS,\r\n EDGE_LABELS,\r\n SQFT_FEATURES\r\n} from \"../bvcomponents/sqft/constants\";\r\nimport sqftConfig from \"../bvcomponents/sqft/components/canvas/store/sqftConfig\";\r\nimport {mm2ToM2, sqInchesToSqFoot} from \"../bvcomponents/sqft/helpers/sqftHelper\";\r\nimport {getBundledFeatures, isInStock} from \"../bvcomponents/look/lookNavigation/lookFunctions2\";\r\nimport {LIXIL_USER_QUERY_PARAMS} from \"../api/look-api\";\r\nimport {CART_ITEM_ADDED_BY} from \"../bvcomponents/shoppingCart/cartItemInterface\";\r\nimport {ROUTES} from \"../routes\";\r\nimport {getCommonVisualizerType, IS_LIXIL_UI, IS_PRODUCT_JOURNEY} from \"../config\";\r\nimport {LOOK_WALLS_ONLY} from \"../bvcomponents/look/core/constants\";\r\nimport {getFeaturePriceProperty, numberWithCommas, updatePriceWithMarkUp} from \"./priceFunctions\";\r\nimport {getHardCodedFloFormShopCartCost, isCabinetsFabricator, isCafeCountetops} from \"./fabricatorHardcode\";\r\nimport {getDifferentCurrencyCartItems} from \"./misc2\";\r\nimport {\r\n getCafeCountertopsDeliveryCost,\r\n getCartItemShippingCost\r\n} from \"../bvcomponents/look/grohe/groheCart/groheCartDelivery/deliveryFunctions\";\r\nimport {\r\n getDiscountsForSection,\r\n getFilteredSections,\r\n shouldCalculateDiscount\r\n} from \"../bvcomponents/priceWorksheet/discountFunctions\";\r\n\r\nexport const featureThumbnailUrl = (feature, size) => {\r\n if (feature.menuType === PartMenuType.Complex) {\r\n return feature.partThumbnail\r\n }\r\n return feature.dbFeature.customThumbnail\r\n ? feature.dbFeature.customThumbnail\r\n : feature.dbFeature.thumbnailUrl\r\n ? s3FeatureImagePath(feature.dbFeature.thumbnailUrl, size)\r\n : \"\";\r\n}\r\n\r\nexport const getPartThemeThumbnail = (partThumbnail, activeTheme) => {\r\n if (partThumbnail && partThumbnail.includes(\"/images\") && activeTheme && activeTheme !== \"qc\") {\r\n const splitted = partThumbnail.split(\"/images\");\r\n if (splitted[0] && splitted[1]) {\r\n return splitted[0] + \"/images-\" + activeTheme + splitted[1];\r\n }\r\n }\r\n return partThumbnail\r\n}\r\n\r\nexport const TAX_DISCOUNT_PCT = 25;\r\n\r\nexport const browserIsSafari = () => {\r\n return navigator.vendor && navigator.vendor.indexOf('Apple') > -1 &&\r\n navigator.userAgent &&\r\n navigator.userAgent.indexOf('CriOS') === -1 &&\r\n navigator.userAgent.indexOf('FxiOS') === -1;\r\n};\r\nexport const isIOSDevice = () => {\r\n return !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\r\n};\r\nexport const isChrome = () => {\r\n return !!navigator.userAgent.match('CriOS');\r\n};\r\nexport const isIphoneX = () => { // https://stackoverflow.com/questions/47226824/iphonex-and-notch-detection\r\n let iPhone = /iPhone/.test(navigator.userAgent) && !window.MSStream;\r\n let aspect = window.screen.width / window.screen.height;\r\n return !!(iPhone && aspect.toFixed(3) === \"0.462\")\r\n};\r\nexport const isAndroid = () => {\r\n return navigator.userAgent && navigator.userAgent.toLowerCase().indexOf(\"android\") > -1;\r\n};\r\nexport const isIframe = () => {\r\n try {\r\n return window.self !== window.top;\r\n } catch (e) {\r\n return true;\r\n }\r\n};\r\nexport const isIE = () => {\r\n return (window.navigator.userAgent.indexOf('MSIE ') > 0)\r\n || (!!window.MSInputMethodContext && !!document.documentMode)\r\n || (window.navigator.userAgent.indexOf('Trident/') > 0)\r\n};\r\nexport const isFirefox = () => navigator.userAgent.toLowerCase().indexOf(\"firefox\") > -1;\r\n\r\nlet __pricingProfiles = null;\r\nlet __pricingProfilesHit = false;\r\nconst pricingProfiles = () => {\r\n if (!__pricingProfilesHit) {\r\n __pricingProfilesHit = true;\r\n __pricingProfiles = QuotePricing(store.getState().fabricatorState.pricingPreset);\r\n }\r\n\r\n console.log(\"__pricingProfiles\", __pricingProfiles);\r\n\r\n return __pricingProfiles;\r\n};\r\n\r\nexport const FEATURE_INSTALLATION = 1;\r\nexport const FEATURE_REGULAR = 2;\r\nexport const FEATURE_STONE = 3;\r\n\r\nexport const getFeatureType = dbFeature => {\r\n if (dbFeature && dbFeature.isInstallation)\r\n return FEATURE_INSTALLATION;\r\n if (dbFeature && (!dbFeature.stonePricingId || dbFeature.stonePricingId.length === 0 || dbFeature.stonePricingId[0] === -1))\r\n return FEATURE_REGULAR;\r\n return FEATURE_STONE;\r\n};\r\n\r\n/**\r\n *\r\n * @param cartItem {cartItemInterface} this is used to calculate first all same name countertops, than display it's total price / quantity, exclude current editing\r\n * @return {cartItemInterface}\r\n */\r\nexport const detectComplexLaborCartItem = (cartItem) => {\r\n return cartItem.cartFeature && (cartItem.partId === \"installation\")\r\n && cartItem.cartFeature.dbFeature.autoAddToCart && cartItem.cartFeature.dbFeature.complexLogic\r\n}\r\n\r\nconst hardcodedFloformV5Features = [\"Costco Shop Card\", \"Costco Citi Visa Cardholder\", \"Costco Executive Members\"];\r\n\r\n/**\r\n *\r\n * @param forQuote {any} get total prices only for specific quote (number or null)\r\n * @param calculateDiscount {boolean}\r\n * @param cartItemsToCount {array}\r\n * @param withNotInStock {boolean}\r\n * @return {object}\r\n */\r\nexport const getTotalPrice = (forQuote = null, calculateDiscount = true, cartItemsToCount = null, withNotInStock = false) => {\r\n const state = store.getState();\r\n let cartItems = cartItemsToCount || state.cartState.cartItems;\r\n if (IS_LIXIL_UI && !cartItemsToCount) {\r\n cartItems = cartItems.filter(cartItem => {\r\n if ((IS_PRODUCT_JOURNEY && cartItem.addedBy !== CART_ITEM_ADDED_BY.user) || cartItem.isRemoved) {\r\n return false\r\n }\r\n if (withNotInStock) {\r\n return !getBundledFeatures(cartItem.cartFeature).length\r\n }\r\n return isInStock(cartItem.cartFeature) && !getBundledFeatures(cartItem.cartFeature).length\r\n });\r\n }\r\n const instList = state.instState.instList;\r\n const {fabricatorTaxes, settings} = state.fabricatorState;\r\n const {sureTax} = state.cartState;\r\n\r\n let materialPrice = 0;\r\n let materialTaxes = 0;\r\n let totalDeliveryCost = 0;\r\n let priceTaxes = Array.isArray(fabricatorTaxes) ? fabricatorTaxes.map(fabTax => {\r\n const {id, state, materialRate, laborRate, nameIntl} = fabTax;\r\n return {id, state, materialRate, laborRate, nameIntl, materialTax: 0, laborTax: 0}\r\n }) : [];\r\n let installationPrice = getInstallationsTotalCost(instList);\r\n\r\n if (Number.isInteger(forQuote)) { // get total prices only for specific quote\r\n cartItems = cartItems.filter(cartItem => cartItem.currentQuote === forQuote)\r\n }\r\n\r\n let multipliedCostUsed = false;\r\n\r\n cartItems\r\n .sort((a, b) => (a.partId === \"installation\") - (b.partId === \"installation\"))\r\n .forEach(cartItem => {\r\n\r\n if (getDifferentCurrencyCartItems(settings, [cartItem]).length && !cartItemsToCount) {\r\n return false\r\n }\r\n\r\n if (multipliedCostUsed && detectComplexLaborCartItem(cartItem)) {\r\n return false\r\n }\r\n\r\n if (cartItem.cartFeature && hardcodedFloformV5Features.some(name => cartItem.cartFeature.dbFeature.sharedFeatureName === name)) {\r\n // if (cartItem.cartFeature.dbFeature.sharedFeatureName !== \"Costco Shop Card\") {\r\n return false\r\n // }\r\n }\r\n\r\n const dbFeature = cartItem.cartFeature.dbFeature;\r\n let featurePrice = 0;\r\n\r\n if (parseFloat(cartItem.displayFakePrice) === cartItem.displayFakePrice) {\r\n featurePrice = cartItem.displayFakePrice\r\n } else {\r\n const featureType = getFeatureType(dbFeature);\r\n switch (featureType) {\r\n case FEATURE_INSTALLATION:\r\n // installation dbFeature\r\n //installationPrice += calculateFeatureCost(cartItem.cartFeature, cartItem.quantity);\r\n // never gets here\r\n break;\r\n case FEATURE_REGULAR:\r\n // regular dbFeature, part of the total cost\r\n featurePrice = calculateFeatureCost(cartItem.cartFeature, cartItem.quantity, cartItems, cartItem.fromQtCategory, cartItem.currentQuote);\r\n break;\r\n case FEATURE_STONE: {\r\n const stonePricing = state.serverState.stonePricing;\r\n const stoneSupplier = state.fabricatorState.stoneSupplier;\r\n // dbFeature stone related\r\n const stoneCost = calculateStoneCost(\r\n dbFeature,\r\n cartItem.quantity,\r\n stonePricing,\r\n stoneSupplier,\r\n cartItem.partId === SQFT_FEATURES.slabs && state.sqftSlabState.isSlabPricingEnabled, //cartItem.shouldUseSlabPricing, // calculate shouldUseSlabPricing globally and not per cItem\r\n settings,\r\n state.cartState,\r\n );\r\n const multipliedCost = multiplySlabCostForFeature(cartItem.cartFeature, cartItem.quantity, state, cartItem);\r\n if (multipliedCost && cartItem.partId !== \"slabs\") {\r\n featurePrice = multipliedCost;\r\n multipliedCostUsed = true;\r\n } else {\r\n featurePrice = stoneCost || calculateFeatureCost(cartItem.cartFeature, cartItem.quantity, cartItems, cartItem.fromQtCategory, cartItem.currentQuote);\r\n }\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n const productPriceAfterDiscount = calculateDiscount\r\n ? getQuotePriceWithDiscounts({materialPrice:featurePrice}, [], true)\r\n : featurePrice\r\n materialPrice = materialPrice + productPriceAfterDiscount;\r\n if (fabricatorTaxes && !dbFeature.notTaxable && !settings.sureTax) {\r\n if (Array.isArray(fabricatorTaxes)) {\r\n priceTaxes = priceTaxes.map(tax => {\r\n tax.materialTax += productPriceAfterDiscount * tax.materialRate / 100;\r\n return tax\r\n })\r\n } else {\r\n materialTaxes += productPriceAfterDiscount * fabricatorTaxes.materialRate / 100;\r\n }\r\n }\r\n if (settings.useShipping) {\r\n totalDeliveryCost += getCartItemShippingCost(cartItem);\r\n }\r\n });\r\n\r\n if (isCafeCountetops) {\r\n totalDeliveryCost += getCafeCountertopsDeliveryCost(totalDeliveryCost, cartItems, state);\r\n }\r\n\r\n if ((typeof sureTax === \"number\") && sureTax > 0) {\r\n materialTaxes = sureTax;\r\n }\r\n\r\n const result = {\r\n materialPrice: Math.round(materialPrice * 100) / 100,\r\n installationPrice: Math.round(installationPrice * 100) / 100,\r\n materialTaxes: Math.round(materialTaxes * 100) / 100,\r\n totalDeliveryCost: Math.round(totalDeliveryCost * 100) / 100,\r\n priceTaxes,\r\n installationTaxes: 0,\r\n multipliedCostUsed,\r\n };\r\n\r\n if (fabricatorTaxes) {\r\n result.installationTaxes = Array.isArray(fabricatorTaxes)\r\n ? fabricatorTaxes\r\n .filter(fabTax => fabTax.isEnabled)\r\n .reduce((acc, tax) => acc + (result.installationPrice * tax.laborRate / 100.0), 0)\r\n : result.installationPrice * fabricatorTaxes.laborRate / 100.0;\r\n }\r\n\r\n return result;\r\n};\r\n\r\nexport function getQuotePriceWithDiscounts(totalPriceObject, ignoreDiscounts = [], splitStaticPrice = false) {\r\n const state = store.getState();\r\n let totalPrice = totalPriceObject.materialPrice;\r\n if (state.fabricatorState.settings.priceWorksheetEnabled) {\r\n const discountSections = getFilteredSections(state.priceWorksheetState.discountSections);\r\n discountSections.forEach(discountSection => {\r\n const allDiscounts = sortByOrder(getDiscountsForSection(discountSection, state.priceWorksheetState.customAddedDiscounts));\r\n allDiscounts.forEach(discount => {\r\n if (shouldCalculateDiscount(discount)\r\n && (!ignoreDiscounts.length || ignoreDiscounts.every(ignoreDiscount => ignoreDiscount.id !== discount.id))) {\r\n totalPrice = (discount.type === DISCOUNT_TYPES.price)\r\n ? totalPrice - (splitStaticPrice ? discount.amount / state.cartState.cartItems.length : discount.amount)\r\n : totalPrice * (1 - discount.amount/100) // total - percent\r\n }\r\n })\r\n })\r\n }\r\n return totalPrice;\r\n}\r\n\r\nexport function getQuotePriceWithTaxes(totalPriceObject) {\r\n const taxes = totalPriceObject.priceTaxes.length\r\n ? totalPriceObject.priceTaxes.reduce((acc, tax) => acc + tax.materialTax, 0)\r\n : totalPriceObject.materialTaxes;\r\n\r\n const totalPrice = totalPriceObject.totalDeliveryCost + totalPriceObject.materialPrice + taxes + totalPriceObject.installationPrice + totalPriceObject.installationTaxes;\r\n return +toFixedPrice(totalPrice);\r\n}\r\n\r\nexport function getDeliveryCost(deliveryList) {\r\n if (!deliveryList) {\r\n deliveryList = store.getState().cartState.deliveryList || [];\r\n }\r\n let deliveryCostArray = [];\r\n deliveryList.forEach(delivery => {\r\n // const activeDelivery = deliveryList.find((del, deliveryIndex) => deliveryIndex === delivery.activeDeliveryIndex);\r\n // if (activeDelivery && !deliveryCostArray.includes(activeDelivery.price)) {\r\n // deliveryCostArray.push(activeDelivery.price)\r\n // }\r\n if (delivery.cartItems.length) {\r\n deliveryCostArray.push(delivery.price)\r\n }\r\n });\r\n return deliveryCostArray.reduce((total, cost) => total + cost, 0);\r\n}\r\n\r\n/**\r\n *\r\n * @param feature {object} (object which has dbFeature property)\r\n * @param quantity {int}\r\n * @param state {object}\r\n * @param cartItemToSkip {cartItemInterface} this is used to calculate first all same name countertops, than display it's total price / quantity, exclude current editing\r\n * @return {number}\r\n */\r\nconst multiplySlabCostForFeature = (feature, quantity, state, cartItemToSkip) => {\r\n const stonePricing = state.serverState.stonePricing;\r\n const stoneSupplier = state.fabricatorState.stoneSupplier;\r\n const allCartItems = state.cartState.cartItems;\r\n const isSlabPricingEnabled = state.sqftSlabState.isSlabPricingEnabled;\r\n\r\n let allSameFeaturesQuantity = quantity;\r\n const checkCartItems = allCartItems.filter(cItem => {\r\n return cItem.cartFeature && (cItem.cartFeature.dbFeature.sharedFeatureName === feature.dbFeature.sharedFeatureName)\r\n });\r\n checkCartItems.forEach(cItem => {\r\n if (cartItemToSkip && (cartItemToSkip.id === cItem.id)) { // current editing on feature page\r\n return\r\n }\r\n // Skip adding quantity if it's a slab and slab pricing is disabled\r\n if (!(cItem.partId === SQFT_FEATURES.slabs && !isSlabPricingEnabled)) {\r\n allSameFeaturesQuantity += cItem.quantity;\r\n }\r\n });\r\n if ((checkCartItems.length > 1 || (checkCartItems[0] && checkCartItems[0].partId !== feature.partId))\r\n && allSameFeaturesQuantity && (allSameFeaturesQuantity !== quantity)) {\r\n let allStoneCost = calculateStoneCost(\r\n feature.dbFeature,\r\n allSameFeaturesQuantity,\r\n stonePricing,\r\n stoneSupplier,\r\n false,\r\n state.fabricatorState.settings,\r\n state.cartState,\r\n );\r\n const laborExist = allCartItems.find(cItem => detectComplexLaborCartItem(cItem)) // here we check existing auto add to cart feature (which is depending on countertop quantity)\r\n if (laborExist) {\r\n allStoneCost += getFeatureCost(laborExist.cartFeature, laborExist.quantity, laborExist.fromQtCategory);\r\n }\r\n // console.log(\"quantity\", quantity);\r\n // console.log(\"allSameFeaturesQuantity\", allSameFeaturesQuantity);\r\n // console.log(\"allStoneCost\", allStoneCost);\r\n return Math.round((quantity * (allStoneCost / allSameFeaturesQuantity)) * 100) / 100\r\n }\r\n return 0\r\n}\r\n\r\n/**\r\n *\r\n * @param feature {object} (object which has dbFeature property)\r\n * @param quantity {int}\r\n * @param fromQtCategory {string} (cart feature should be calculated from the category it was added)\r\n * @param withTotalSlabCost {boolean} this is used to calculate first all same name countertops, than display it's total price / quantity\r\n * @param cartItemToSkip {cartItemInterface} this is used to calculate first all same name countertops, than display it's total price / quantity, exclude current editing\r\n * @param useSlabSqftPricing {boolean} this is used to calculate slab pricing assigned from algorithms, slabSqftValue from backed\r\n * @param forQuoteIndex {number} for complex logic\r\n * @return {number}\r\n */\r\nexport const getFeatureCost = (feature,\r\n quantity,\r\n fromQtCategory,\r\n withTotalSlabCost = false,\r\n cartItemToSkip = null,\r\n useSlabSqftPricing = false,\r\n forQuoteIndex = null,\r\n) => {\r\n switch (getFeatureType(feature.dbFeature)) {\r\n case FEATURE_INSTALLATION: // installation dbFeature\r\n case FEATURE_REGULAR:\r\n // regular feature, part of the total cost\r\n return calculateFeatureCost(feature, quantity, null, fromQtCategory, forQuoteIndex);\r\n case FEATURE_STONE: {\r\n // is a stone, calculate using a different algorithm.\r\n const state = store.getState();\r\n const stonePricing = state.serverState.stonePricing;\r\n const stoneSupplier = state.fabricatorState.stoneSupplier;\r\n // feature stone related\r\n // console.log(\"stonePricing\", stonePricing);\r\n // console.log(\"stoneSupplier\", stoneSupplier);\r\n // console.log(\"feature.dbFeature.stonePricingId\", feature.dbFeature.stonePricingId);\r\n const stoneCost = calculateStoneCost(\r\n feature.dbFeature,\r\n quantity,\r\n stonePricing,\r\n stoneSupplier,\r\n useSlabSqftPricing,\r\n state.fabricatorState.settings,\r\n state.cartState,\r\n );\r\n if (stoneCost && withTotalSlabCost && cartItemToSkip.partId !== SQFT_FEATURES.slabs) {\r\n // console.log(\"stoneCost\", stoneCost);\r\n const multipliedCost = multiplySlabCostForFeature(feature, quantity, state, cartItemToSkip);\r\n if (multipliedCost) {\r\n return multipliedCost\r\n }\r\n }\r\n return stoneCost || calculateFeatureCost(feature, quantity, null, fromQtCategory, forQuoteIndex);\r\n }\r\n }\r\n};\r\n\r\nexport const toFixedPrice = (price, withCommas = false) => {\r\n try {\r\n if (Math.round(price) !== price || IS_LIXIL_UI) {\r\n price = price.toFixed(2);\r\n }\r\n } catch(ex) {\r\n console.log(\"Helpers toFixedPrice failed for \", price, ex);\r\n }\r\n return withCommas ? numberWithCommas(price) : price\r\n};\r\n\r\n/**\r\n *\r\n * @param feature {object} (object which has dbFeature property)\r\n * @param quantity {int}\r\n * @param fromQtCategory {string} (cart feature should be calculated from the category it was added)\r\n * @param withTotalSlabCost {boolean} this is used to calculate first all same name countertops, than display it's total price / quantity\r\n * @param cartItemToSkip {featureInterface} this is used to calculate first all same name countertops, than display it's total price / quantity, exclude current editing\r\n * @param useSlabSqftPricing {boolean} this is used to calculate slab pricing assigned from algorithms, slabSqftValue from backed\r\n * @param forQuoteIndex {number} for the complex logic\r\n * @return {string}{number}\r\n */\r\nexport const toFixedFeatureCost = (feature,\r\n quantity,\r\n fromQtCategory = \"\",\r\n withTotalSlabCost = false,\r\n cartItemToSkip = null,\r\n useSlabSqftPricing = false,\r\n forQuoteIndex = null,\r\n) => {\r\n let price = getFeatureCost(feature, quantity, fromQtCategory, withTotalSlabCost, cartItemToSkip, useSlabSqftPricing, forQuoteIndex);\r\n return toFixedPrice(price);\r\n};\r\n\r\n/**\r\n *\r\n * @return {number}\r\n */\r\nexport const getSingleSlabArea = () => {\r\n const storeState = store.getState();\r\n const slabImageHeight = storeState.sqftSlabState.slabImageHeight;\r\n const slabImageWidth = storeState.sqftSlabState.slabImageWidth;\r\n const slabArea = slabImageHeight * slabImageWidth;\r\n\r\n return sqftConfig.measureUnit === \"Imperial\"\r\n ? Math.ceil10(sqInchesToSqFoot(slabArea), -2)\r\n : mm2ToM2(slabArea);\r\n};\r\n\r\n/**\r\n *\r\n * @param feature {featureInterface} (object which has dbFeature property)\r\n * @param quantity {int}\r\n * @param cartItems {array}\r\n * @param fromQtCategory {string} (cart feature should be calculated from the category it was added)\r\n * @param quoteIndex {number}\r\n * @return {number}\r\n */\r\nfunction calculateFeatureCost(feature, quantity, cartItems, fromQtCategory, quoteIndex) {\r\n // is a stone, calculate using a different algorithm.\r\n const storeState = store.getState();\r\n const stonePricing = storeState.serverState.stonePricing;\r\n const stoneSupplier = storeState.fabricatorState.stoneSupplier;\r\n const activeQuoteIndex = Number.isInteger(quoteIndex) ? quoteIndex : storeState.quotesState.activeQuoteIndex;\r\n const dbFeature = feature.dbFeature;\r\n\r\n let featureCost = checkIfInCatProperty(feature, \"inCatPrice\", getFeaturePriceProperty(feature), fromQtCategory);\r\n let featureTotalPrice = 0;\r\n\r\n let material = 0;\r\n let materialPrice = 0;\r\n let backsplashMaterial = 0;\r\n\r\n let quoteMaterial = 0;\r\n let quoteBacksplashMaterial = 0;\r\n\r\n let materials = [];\r\n for(let index in storeState.cartState.cartItems) {\r\n let cartItem = storeState.cartState.cartItems[index];\r\n if(cartItem.cartFeature && cartItem.cartFeature.isStoneFeature) {\r\n switch (cartItem.partId) {\r\n case \"vanity_countertop\":\r\n case \"center_island_countertop\":\r\n case \"countertop\":\r\n case \"front_wall\": {\r\n if (cartItem.partId === \"front_wall\") { // added front_wall to the Fireplace material\r\n const visType = cartItem.fromVisualizerType || document.kvConfig.visualizerType;\r\n if (visType !== \"Fireplace\") {\r\n break;\r\n }\r\n }\r\n material += cartItem.quantity;\r\n // dbFeature stone related\r\n const currentPrice = calculateStoneCost(\r\n cartItem.cartFeature.dbFeature,\r\n cartItem.quantity,\r\n stonePricing,\r\n stoneSupplier,\r\n cartItem.partId === SQFT_FEATURES.slabs && storeState.sqftSlabState.isSlabPricingEnabled, //cartItem.shouldUseSlabPricing,// calculate shouldUseSlabPricing globally and not per cItem\r\n storeState.fabricatorState.settings,\r\n storeState.cartState,\r\n );\r\n materialPrice += currentPrice;\r\n if (cartItem.currentQuote === activeQuoteIndex) {\r\n quoteMaterial += cartItem.quantity;\r\n }\r\n materials.push(cartItem.cartFeature.dbFeature);\r\n break;\r\n }\r\n case \"vanity_backsplash\":\r\n case \"backsplash\": {\r\n backsplashMaterial += cartItem.quantity;\r\n if (cartItem.currentQuote === activeQuoteIndex) {\r\n quoteBacksplashMaterial += cartItem.quantity;\r\n }\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n \r\n const measureUnit = storeState.sqftState ? storeState.sqftState.measureUnit : null;\r\n if (validateFeaturePrice(dbFeature, quantity, measureUnit)) {\r\n let complexLogic = checkIfInCatProperty(feature, \"complexLogic\", dbFeature.complexLogic, fromQtCategory);\r\n if (dbFeature.comparisonType === 'gte+' && dbFeature.comparisonFor !== 'complex') {\r\n const baseQuantity = feature.baseQuantity - 1;\r\n let fQuantity = quantity;\r\n if (dbFeature.comparisonFor === 'material') {\r\n fQuantity = 0; // no material quantity\r\n }\r\n const plus = dbFeature.maxQuantity;\r\n let cost = baseQuantity * featureCost;\r\n for (let i = baseQuantity + 1; i <= fQuantity; i++) {\r\n cost += plus;\r\n }\r\n\r\n featureTotalPrice = cost;\r\n } else if (hardcodedFloformV5Features.some(name => dbFeature.sharedFeatureName === name)) {\r\n if (dbFeature.sharedFeatureName === \"Costco Shop Card\") {\r\n featureTotalPrice = getHardCodedFloFormShopCartCost(storeState.cartState.cartItems);\r\n } else {\r\n const totalPrice = getTotalPrice();\r\n featureTotalPrice = totalPrice.materialPrice * 0.02;\r\n }\r\n } else if (dbFeature.comparisonFor === 'complex' && complexLogic) {\r\n try {\r\n\r\n const $m = material; // amount of square foot of material the feature is using, probably have to be calculated based on the meta data size of the feature\r\n const $b = backsplashMaterial; // we added a new backsplash property, if we need to calculate both, we should have ($m + $b) in the complex logic\r\n const getSqft = (stonePricingId) => {\r\n const stoneSupplierStone = stonePricing[stonePricingId]; // stone supplier stone\r\n if (!stoneSupplierStone) {\r\n return -1\r\n }\r\n const pricingProfileId = stoneSupplierStone.pricingPreset_id;\r\n const quotePricing = __quotePricing || (__quotePricing = pricingProfiles());\r\n var profile = _.first(quotePricing.pricingProfiles.filter((pp) => {\r\n return (pp.Id || pp.id) === pricingProfileId;\r\n }));\r\n if(profile) {\r\n var ppdList = storeState.fabricatorState.settings.useFabricatorCostPrices\r\n ? profile.pricingProfileCostData\r\n : storeState.fabricatorState.settings.showSalePrices\r\n ? profile.pricingProfileDiscountData\r\n : profile.pricingProfileData;\r\n if (Array.isArray(ppdList) && ppdList.length) {\r\n for(var n = ppdList.length - 1; n >= 0; n--) {\r\n let ppd = ppdList[n];\r\n switch(ppd.type)\r\n {\r\n case \"pricing-presets/set-slab\":\r\n if(ppd.slabSqftValue > 0) {\r\n return ppd.slabSqftValue;\r\n }\r\n else {\r\n return parseFloat(ppd.value) / parseFloat(ppd.end);\r\n }\r\n default:\r\n return -1;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n var materialSqft = -1;\r\n for (const m in materials) {\r\n if (Array.isArray(materials[m].stonePricingId)\r\n && materials[m].stonePricingId.length\r\n && materials[m].stonePricingId[0]) {\r\n const msqft = getSqft(materials[m].stonePricingId[0]);\r\n if (msqft > materialSqft) {\r\n materialSqft = msqft;\r\n }\r\n }\r\n }\r\n\r\n const $mc = materialSqft > -1 ? materialSqft : materialPrice / material; // material cost broken down to square foot\r\n const $p = 1; // the per-quantity value of the selected material of the feature\r\n\r\n const $f = quantity; // the feature quantity of the selected feature\r\n const $c = featureCost; // the feature cost of the selected features\r\n const $fa = storeState.cartState.cartItems ? storeState.cartState.cartItems.map(ci => ({\r\n id: ci.cartFeature.dbFeature.id,\r\n quantity: ci.quantity,\r\n name: ci.cartFeature.dbFeature.customDisplayName || ci.cartFeature.dbFeature.displayName,\r\n sharedFeatureName: ci.cartFeature.dbFeature.sharedFeatureName,\r\n groupName: ci.cartFeature.dbFeature.groupName,\r\n wizardGroupId: ci.fromWizardGroupId,\r\n currentQuote: ci.currentQuote,\r\n partId: ci.partId,\r\n })) : []; // an array of key value pairs with the keys being feature id and value being quantity\r\n\r\n if (storeState.wizardState.wizardActiveItem) { // we need to check wizard current selected values to display prices\r\n Object.keys(storeState.wizardState.wizardSelectedValues).forEach(stepIndex => {\r\n const selectedValue = storeState.wizardState.wizardSelectedValues[stepIndex];\r\n if (selectedValue.selectedFeature && selectedValue.quantity) {\r\n $fa.push({\r\n id: selectedValue.selectedFeature.dbFeature.id,\r\n quantity: selectedValue.quantity,\r\n name: selectedValue.selectedFeature.dbFeature.customDisplayName || selectedValue.selectedFeature.dbFeature.displayName,\r\n groupName: selectedValue.selectedFeature.dbFeature.groupName\r\n })\r\n }\r\n })\r\n }\r\n const $room = {\r\n $i: activeQuoteIndex,\r\n $m: quoteMaterial,\r\n $b: quoteBacksplashMaterial,\r\n }\r\n const $other = { // to prevent creating new parameters, all new properties should go here\r\n $useCostPrices: storeState.fabricatorState.settings.useFabricatorCostPrices,\r\n $useDiscountPrices: storeState.fabricatorState.settings.showSalePrices,\r\n $sharedFeatureName: dbFeature.sharedFeatureName,\r\n }\r\n // const $fs = layout.dataObject.features; // its an array of all the fabricator's features\r\n const $fs = []; // its an array of all the fabricator's features\r\n const logic = new Function('$m', '$mc', '$f', '$c', '$fa', '$fs', '$p', '$b', '$room', '$other', complexLogic);\r\n featureTotalPrice = logic($m, $mc, $f, $c, $fa, $fs, $p, $b, $room, $other);\r\n // console.log(888, 'Complex', feature.complexLogic, featureCost, quantity);\r\n } catch (e) {\r\n console.log('Feature complex logic failed.', e);\r\n }\r\n } else if (dbFeature.comparisonType === \"min\" && dbFeature.comparisonFor !== \"complex\") {\r\n if (quantity < dbFeature.baseQuantity) {\r\n featureTotalPrice = featureCost * dbFeature.baseQuantity;\r\n } else {\r\n featureTotalPrice = quantity * featureCost;\r\n }\r\n } else {\r\n featureTotalPrice = featureCost * quantity;\r\n }\r\n }\r\n\r\n if (isNaN(featureTotalPrice)) {\r\n return 0\r\n }\r\n if (storeState.cartState.markUpLogic) {\r\n return updatePriceWithMarkUp(featureTotalPrice, storeState.cartState.markUpLogic, storeState.fabricatorState.settings);\r\n }\r\n return featureTotalPrice;\r\n}\r\n\r\nlet __stoneSupplierStones = null;\r\nlet __quotePricing = null;\r\n\r\nexport function calculateStoneCost(feature, quantity, stonePricing, stoneSupplier, useSlabSqftPricing, fabricatorSettings, cartState) {\r\n if (!feature || (feature.stonePricingId && feature.stonePricingId.length === 1) && feature.stonePricingId[0] === -1) {\r\n // stone was not found\r\n if (feature) {\r\n const price = getFeaturePriceProperty({dbFeature: feature});\r\n if (price > 0) {\r\n return price\r\n }\r\n }\r\n return 0;\r\n }\r\n\r\n // only one fabricator here\r\n\r\n let minPrice = -1;\r\n const quotePricing = __quotePricing || (__quotePricing = pricingProfiles());\r\n const stoneSupplierStones = __stoneSupplierStones\r\n || (feature.stonePricingId && feature.stonePricingId.length > 0 ? __stoneSupplierStones = feature.stonePricingId.map(_ => stonePricing[_]) : null);\r\n\r\n if (feature.stonePricingId && feature.stonePricingId.length > 0 && feature.stonePricingId[0]) {\r\n feature.stonePricingId.forEach(id => {\r\n let materialPrice = -1;\r\n const stoneSupplierStone = stonePricing[id]; // stone supplier stone\r\n if (quotePricing && quotePricing.hasPricingProfileAssigned(stoneSupplierStone, fabricatorSettings)) {\r\n const fabPrice = quotePricing.calculatePrice(\r\n stoneSupplierStone.pricingPreset_id,\r\n quantity,\r\n null,\r\n useSlabSqftPricing,\r\n getSingleSlabArea(),\r\n feature,\r\n fabricatorSettings\r\n );\r\n if (materialPrice === -1 || fabPrice < materialPrice) {\r\n materialPrice = fabPrice;\r\n }\r\n if (minPrice === -1 || minPrice > materialPrice) {\r\n minPrice = materialPrice;\r\n }\r\n } else if (stoneSupplierStone) {\r\n let price = stoneSupplierStone.price;\r\n if (stoneSupplierStone.pricePlus > 0) {\r\n price = stoneSupplierStone.pricePlus;\r\n }\r\n let material = quantity;\r\n if (stoneSupplierStone.perQuantity > 1) {\r\n material = Math.ceil(material / stoneSupplierStone.perQuantity);\r\n }\r\n let materialPrice = price * parseFloat(material);\r\n\r\n let baseQuantity;\r\n if (stoneSupplierStone.comparisonType === \"gte+\") {\r\n baseQuantity = parseInt(stoneSupplierStone.baseQuantity) - 1;\r\n if (material > baseQuantity) {\r\n let perUnit = parseFloat(stoneSupplierStone.maxQuantity);\r\n const margin = stoneSupplier.margin;\r\n perUnit = calcPriceWithMargin(perUnit, margin);\r\n materialPrice = baseQuantity * price;\r\n forEach(stoneSupplierStones, function (stoneSupplierStoneInner) {\r\n if (stoneSupplierStoneInner.comparisonType === \"between\" &&\r\n material >= stoneSupplierStoneInner.baseQuantity) {\r\n materialPrice = stoneSupplierStoneInner.price;\r\n for (let n = stoneSupplierStoneInner.maxQuantity + 1; n <= baseQuantity; n++) {\r\n materialPrice += price;\r\n }\r\n }\r\n });\r\n for (let i = baseQuantity + 1; i <= material; i++) {\r\n materialPrice += perUnit;\r\n }\r\n }\r\n } else if (stoneSupplierStone.comparisonType === \"min\") {\r\n if (parseFloat(material) < stoneSupplierStone.baseQuantity) {\r\n materialPrice = price * parseFloat(stoneSupplierStone.baseQuantity);\r\n }\r\n } else if (stoneSupplierStone.comparisonType === \"lte\") {\r\n baseQuantity = parseInt(stoneSupplierStone.baseQuantity);\r\n if (material <= baseQuantity) {\r\n let bFoundOther = false;\r\n forEach(stoneSupplierStones, function (stoneSupplierStoneInner) {\r\n if (stoneSupplierStoneInner.comparisonType === \"lte\" &&\r\n material <= stoneSupplierStoneInner.baseQuantity\r\n && stoneSupplierStoneInner.baseQuantity < baseQuantity) {\r\n bFoundOther = true;\r\n }\r\n });\r\n if (bFoundOther) {\r\n return;\r\n }\r\n }\r\n } else if (stoneSupplierStone.comparisonType === \"between\") {\r\n materialPrice = stoneSupplierStone.price;\r\n }\r\n\r\n if (validStoneSupplierStonePrice(stoneSupplierStone, material)) {\r\n if (minPrice === -1 || minPrice > materialPrice) {\r\n minPrice = materialPrice;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n if (cartState.markUpLogic) {\r\n minPrice = updatePriceWithMarkUp(minPrice, cartState.markUpLogic, fabricatorSettings);\r\n }\r\n\r\n return Math.trunc(minPrice * 100) / 100;\r\n}\r\n\r\nfunction calcPriceWithMargin(price, margin) {\r\n const total = parseFloat(price);\r\n return (total + (margin * total));\r\n}\r\n\r\n// function calcPriceWithTax(price, tax) {\r\n// const total = parseFloat(price);\r\n// return (total + (tax / 100.0 * total));\r\n// }\r\n\r\nfunction validStoneSupplierStonePrice(stoneSupplierStone, quantity) {\r\n let ret = false;\r\n let material = quantity;\r\n if (stoneSupplierStone.perQuantity > 1) {\r\n material = Math.ceil(material / stoneSupplierStone.perQuantity);\r\n }\r\n switch (stoneSupplierStone.comparisonType) {\r\n case \"lte\":\r\n if (material <= stoneSupplierStone.baseQuantity) {\r\n ret = true;\r\n }\r\n break;\r\n case \"between\":\r\n if (material >= stoneSupplierStone.baseQuantity\r\n && material <= stoneSupplierStone.maxQuantity) {\r\n ret = true;\r\n }\r\n break;\r\n case \"gte\":\r\n case \"gte+\":\r\n if (material >= stoneSupplierStone.baseQuantity) {\r\n ret = true;\r\n }\r\n break;\r\n default:\r\n ret = true;\r\n }\r\n return ret;\r\n}\r\n\r\nfunction validateFeaturePrice(feature, quantity, measureUnit) {\r\n let ret = false;\r\n switch (feature.comparisonType) {\r\n case \"lte\":\r\n if (quantity <= feature.baseQuantity) {\r\n ret = true;\r\n }\r\n break;\r\n case \"between\":\r\n if (quantity >= feature.baseQuantity && quantity <= feature.maxQuantity) {\r\n ret = true;\r\n }\r\n break;\r\n case \"gte\":\r\n case \"gte+\":\r\n if ((quantity >= feature.baseQuantity) || ((measureUnit === \"Metric\") && (quantity > 0) && (feature.baseQuantity === 1))) {\r\n ret = true;\r\n }\r\n break;\r\n default:\r\n ret = true;\r\n }\r\n\r\n return ret;\r\n}\r\n\r\nexport function parseQuery(queryString = null) {\r\n queryString = queryString || window.location.search;\r\n const query = {};\r\n const pairs = (queryString[0] === '?' ? queryString.substr(1) : queryString).split('&');\r\n for (let i = 0; i < pairs.length; i++) {\r\n let pair = pairs[i].split('=');\r\n query[decodeURIComponent(pair[0]).toLowerCase()] = decodeURIComponent(pair[1] || '');\r\n }\r\n return query;\r\n}\r\nexport function metaDataToCamelCase(metaData) {\r\n if (!metaData) {\r\n metaData = {}; // it could be null, so default parameter is not working\r\n }\r\n Object.keys(metaData).forEach(key => { // make all metadata keys CamelCased (dashboard saving issue)\r\n if (key[0] !== key[0].toUpperCase()) {\r\n const value = metaData[key];\r\n const camelCased = key.charAt(0).toUpperCase() + key.slice(1);\r\n metaData[camelCased] = value;\r\n delete metaData[key]; // we don't need lowerCased key anymore\r\n }\r\n });\r\n return metaData;\r\n}\r\n\r\nexport const capitalizeFirstLetters = (str) => {\r\n if (!str) {\r\n return \"\"\r\n }\r\n return str.split(\" \").map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(\" \")\r\n}\r\n\r\n// export const getObjectWithLowerCasedKeys = (obj) => {\r\n// let\r\n// key,\r\n// keys = Object.keys(obj),\r\n// n = keys.length,\r\n// newObj={};\r\n// while (n--) {\r\n// key = keys[n];\r\n// newObj[key.toLowerCase()] = obj[key];\r\n// }\r\n// return newObj\r\n// };\r\n\r\nexport const getCurrencySign = (currencyName, fabricatorSettings) => {\r\n switch (currencyName) {\r\n case \"USD\":\r\n default:\r\n return fabricatorSettings.useDifferentCurrencies ? \"USD\" : \"$\";\r\n case \"SPN\":\r\n case \"EUR\":\r\n return \"€\";\r\n case \"GBP\":\r\n return \"£\";\r\n case \"PAB\":\r\n return \"B/.\";\r\n case \"PLN\":\r\n return \"zł\";\r\n case \"ARS\":\r\n return \"$\";\r\n }\r\n};\r\n\r\nexport const getCurrencyPosition = (currencyName) => {\r\n switch (currencyName) {\r\n case \"USD\":\r\n case \"SPN\":\r\n case \"EUR\":\r\n case \"GBP\":\r\n case \"PAB\":\r\n case \"ARS\":\r\n default:\r\n return \"left\";\r\n case \"PLN\":\r\n return \"right\";\r\n }\r\n};\r\n\r\n/**\r\n *\r\n * @param fabricatorSettings {object} fabricatorSettings\r\n * @param price {string|number}\r\n * @param feature {featureInterface}\r\n * @param withSpace {boolean}\r\n * @param alwaysRound {boolean} // returns $10 -> $10.00\r\n * @return {string}\r\n */\r\nexport const getPriceWithCurrency = (fabricatorSettings, price, feature = null, withSpace = false, alwaysRound = false) => {\r\n if (fabricatorSettings.currencyPosition === \"right\") {\r\n return price + fabricatorSettings.currencySign\r\n }\r\n let currencySign = fabricatorSettings.currencySign;\r\n if (fabricatorSettings.useDifferentCurrencies && feature && feature.getFeatureCurrency) {\r\n const separateCurrency = feature.getFeatureCurrency();\r\n if (separateCurrency) {\r\n currencySign = getCurrencySign(separateCurrency, fabricatorSettings);\r\n }\r\n }\r\n if (fabricatorSettings.useDifferentCurrencies) {\r\n if (currencySign === \"USD\") {\r\n withSpace = true;\r\n }\r\n price = numberWithCommas(price);\r\n }\r\n if (currencySign === \"$\") {\r\n const amount = typeof price === \"string\" ? +(price.replace(\",\", \"\")) : price;\r\n const isExact = !alwaysRound && (Number.isInteger(amount) || amount % 1 === 0);\r\n // Create the formatter\r\n const formatter = new Intl.NumberFormat('en-US', {\r\n style: 'currency',\r\n currency: 'USD',\r\n minimumFractionDigits: isExact ? 0 : 2,\r\n maximumFractionDigits: isExact ? 0 : 2,\r\n });\r\n return formatter.format(amount);\r\n }\r\n return withSpace ? currencySign + \" \" + price : currencySign + price\r\n};\r\n\r\nexport const getFeatureIsLocked = (feature, ignoreLocked = false) => {\r\n if (!feature) {\r\n return false\r\n }\r\n const leadCaptureProperty = isVisualizerRoute() || IS_LIXIL_UI ? \"leadCapture\" : \"leadCaptureOnQuote\";\r\n const {fabricatorState, userState, filterState} = store.getState();\r\n\r\n const fabricatorSettings = fabricatorState.settings;\r\n const {isBackend, jobId, canSaveQuote, visualizerManagement} = document.kvConfig;\r\n const isPhoneNumberValidated = userState.isPhoneNumberValidated;\r\n\r\n if (fabricatorSettings.leadCaptureShoppingCart) {\r\n if (IS_LIXIL_UI && (window.location.hash.includes(ROUTES.cart) || window.location.hash.includes(ROUTES.list))) {\r\n return !isPhoneNumberValidated;\r\n } else {\r\n if (window.location.hash.includes(\"materials\")) {\r\n return false\r\n } else if (window.location.hash.includes(\"shoppingcart\")) {\r\n return !isPhoneNumberValidated;\r\n }\r\n }\r\n }\r\n\r\n let featureIsLocked = !(\r\n ignoreLocked\r\n || !fabricatorSettings[leadCaptureProperty]\r\n || (fabricatorSettings[leadCaptureProperty] && visualizerManagement)\r\n || (fabricatorSettings[leadCaptureProperty] && isPhoneNumberValidated)\r\n || (fabricatorSettings[leadCaptureProperty] && (isBackend && jobId && canSaveQuote)));\r\n if (featureIsLocked) {\r\n featureIsLocked = !((feature.dbFeature && feature.dbFeature.unlocked) || isPhoneNumberValidated);\r\n if (!featureIsLocked && !IS_LIXIL_UI) { // search for locked filters // temporary removed from bvLook\r\n const filterValues = feature.dbFeature && feature.dbFeature.filterValueIDs;\r\n if (filterValues) {\r\n featureIsLocked = Object.keys(filterValues).some((filterKey) => {\r\n const filterGroup = filterState.filterGroups.find(group => group.id === +filterKey);\r\n const filterValue = filterGroup && filterGroup.values && filterGroup.values.find(value => value.id === filterValues[filterKey][0]);\r\n return filterValue && filterValue.lockedInWizard\r\n });\r\n }\r\n }\r\n }\r\n return featureIsLocked\r\n};\r\n\r\nexport const sortByOrder = (array) => {\r\n return array.sort((a, b) => a.order !== b.order ? a.order < b.order ? -1 : 1 : 0); // sort by order property\r\n};\r\n\r\nexport const objectWithoutProperties = (obj, keys) => {\r\n let target = {};\r\n for (let i in obj) {\r\n if (keys.indexOf(i) >= 0) continue;\r\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\r\n target[i] = obj[i];\r\n }\r\n return target;\r\n}\r\n\r\n/**\r\n * returns array of Ids, etc. [2313743, 2313335, 2320458]\r\n * @param bvState {object}\r\n * @param checkDifferentVisualizers {boolean}\r\n * @return {[number]}\r\n */\r\nexport const getArrayOfIdsFromBvState = (bvState, checkDifferentVisualizers = false) => {\r\n let arrayOfIds = [];\r\n if (bvState) {\r\n Object.keys(bvState).forEach((key) => {\r\n const bvStateValue = bvState[key];\r\n if (Number.isInteger(bvStateValue) && bvStateValue > 50) { // check for layout_type\r\n if (key === \"presetPrice\") { // it is a number and it is more than 12\r\n return\r\n }\r\n arrayOfIds.push(bvStateValue)\r\n } else if (Array.isArray(bvStateValue)) {\r\n bvStateValue.forEach((bvStateValueArrayItem) => {\r\n if (Number.isInteger(bvStateValueArrayItem)) {\r\n arrayOfIds.push(bvStateValueArrayItem)\r\n }\r\n })\r\n } else if (typeof bvStateValue === 'object' && bvStateValue !== null) {\r\n [\"cartItems\", \"displayLogicCartItems\"].forEach((property) => {\r\n if (bvStateValue[property] && bvStateValue[property].length) {\r\n bvStateValue[property].forEach((cartItem) => {\r\n if (checkDifferentVisualizers && (cartItem.fromVisualizerType !== bvState.visualizerType)) {\r\n return // load only current visualizer features\r\n }\r\n if (cartItem.cartFeature && cartItem.cartFeature.dbFeatureId) {\r\n arrayOfIds.push(cartItem.cartFeature.dbFeatureId)\r\n } else if (cartItem.cartFeature && cartItem.fabFeatId) { // support for old logic\r\n arrayOfIds.push(cartItem.fabFeatId)\r\n }\r\n });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n return uniq(arrayOfIds)\r\n}\r\n\r\nexport const getShareUrl = (jobId) => {\r\n const url = new URL(window.location.href);\r\n console.log(\"url\", url);\r\n let searchParams = new URLSearchParams(decodeURIComponent(url.search || \"\").replace(/amp;/gi, \"\"));\r\n [\"show\", \"jobId\", \"mode\", \"saveQuote\", ...LIXIL_USER_QUERY_PARAMS].forEach(param => {\r\n searchParams.delete(param);\r\n });\r\n searchParams.set(\"design\", jobId);\r\n // const shareUrl = url.href\r\n // .replace(/&show=?\\w*?&/, \"&\")\r\n // .replace(/&jobId=\\d*/gi, \"\")\r\n // .replace(/&mode=\\w*/gi, \"\")\r\n // .replace(/&saveQuote=\\w*/gi, \"\")\r\n // .split(\"#/\")[0]\r\n\r\n let baseHref = url.origin + url.pathname;\r\n if (baseHref[baseHref.length - 1] === \"/\") {\r\n baseHref.slice(0, -1);\r\n }\r\n\r\n // const shareUrl = baseHref + \"?\" + searchParams.toString() + url.hash;\r\n const shareUrl = baseHref + \"?\" + searchParams.toString();\r\n // console.log(\"shareUrl\", shareUrl);\r\n return shareUrl\r\n};\r\n\r\nexport const getDefaultRoomName = (messages, quoteRoomType = \"\") => {\r\n switch (quoteRoomType || document.kvConfig.visualizerType) {\r\n case \"Bathroom\":\r\n case \"BV\":\r\n case \"bvScene\":\r\n case \"bvLook\":\r\n return messages[\"rooms.Bathroom\"]\r\n case \"Kitchen\":\r\n case \"KV\":\r\n case \"kvMaster\":\r\n case \"kvScene\":\r\n return messages[\"rooms.Kitchen\"]\r\n default:\r\n return quoteRoomType || document.kvConfig.visualizerType || \"\"\r\n }\r\n}\r\n\r\n/**\r\n * @param feature {featureInterface}\r\n * @param messages {object}\r\n * @param locale {string}\r\n * @param fabricatorData {object}\r\n * @param filterGroups {array}\r\n * @param useCollectionName {boolean}\r\n * @return {string}\r\n */\r\nexport const getStringFeatureName = (feature,\r\n messages,\r\n locale,\r\n fabricatorData,\r\n filterGroups,\r\n useCollectionName = false) => {\r\n if (!feature) {\r\n return \"\"\r\n }\r\n\r\n if ((fabricatorData.isLowes || fabricatorData.isCaesarStone) && messages) {\r\n if (locale === \"fr-FR\" && messages[\"transDoc.customDisplayName_FR.\" + feature.dbFeature.sharedFeatureName]) {\r\n return messages[\"transDoc.customDisplayName_FR.\" + feature.dbFeature.sharedFeatureName]\r\n } else if (locale === \"pl-PL\" && messages[\"transDoc.customTranslateName_PL.\" + feature.dbFeature.sharedFeatureName]) {\r\n return messages[\"transDoc.customTranslateName_PL.\" + feature.dbFeature.sharedFeatureName]\r\n }\r\n }\r\n\r\n if ((feature.dbFeature.sharedFeatureName === \"additionalCartItem.minimumCharge\")) {\r\n if (fabricatorData.isCaesarStone) {\r\n return `${messages[feature.dbFeature.sharedFeatureName]} (${feature.fromFeatureName})`\r\n }\r\n return messages[feature.dbFeature.sharedFeatureName]\r\n }\r\n\r\n if (!feature.getFeatureName) {\r\n return feature._customDisplayName || feature.customDisplayName || \"\"\r\n }\r\n\r\n return (useCollectionName && !fabricatorData.isEncore)\r\n ? feature.getCollectionName(filterGroups) || feature.getFeatureName()\r\n : feature.getFeatureName()\r\n}\r\n\r\n/**\r\n * @param quoteIndex {number|string}\r\n * @param cartItems {array}\r\n * @param quotes {array}\r\n * @param messages {object}\r\n * @param locale {string}\r\n * @param fabricatorData {object}\r\n * @return {string}\r\n */\r\nexport const getRoomName = (quoteIndex, cartItems = [], quotes = [], messages, locale, fabricatorData) => {\r\n\r\n quoteIndex = +quoteIndex;\r\n\r\n const getCurentQuoteRoomItem = (quoteIndexToFind) => {\r\n return cartItems.find(cItem => (cItem.currentQuote === quoteIndexToFind) && (cItem.partId === \"room\"))\r\n };\r\n\r\n const quoteRoomNameToCompare = (currentQuoteIndex) => {\r\n const roomCartItem = getCurentQuoteRoomItem(currentQuoteIndex);\r\n if (roomCartItem && roomCartItem.cartFeature && roomCartItem.cartFeature.getLowerCasedCustomDisplayName) {\r\n return roomCartItem.cartFeature.getLowerCasedCustomDisplayName()\r\n }\r\n const quoteRoomType = quotes[currentQuoteIndex] && quotes[currentQuoteIndex].room ? quotes[currentQuoteIndex].room : \"\";\r\n return (getDefaultRoomName(messages, quoteRoomType) || \"\").toLowerCase();\r\n };\r\n\r\n const upperCaseAlp = [\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\"];\r\n const currentRoomName = quoteRoomNameToCompare(quoteIndex);\r\n const quoteRoomType = quotes[quoteIndex] && quotes[quoteIndex].room ? quotes[quoteIndex].room : \"\";\r\n const roomItem = getCurentQuoteRoomItem(quoteIndex);\r\n const baseRoomName = roomItem && roomItem.cartFeature\r\n ? getStringFeatureName(roomItem.cartFeature, messages, locale, fabricatorData)\r\n : getDefaultRoomName(messages, quoteRoomType);\r\n\r\n if (quotes.some((quote, currentQuoteIndex) => {\r\n return (quoteIndex !== currentQuoteIndex) && (quoteRoomNameToCompare(currentQuoteIndex) === currentRoomName)\r\n })) {\r\n let letterIndex = 0;\r\n for (let i = 0; i <= quotes.length; i++) {\r\n if ((i < quoteIndex) && (quoteRoomNameToCompare(i) === currentRoomName)) {\r\n letterIndex++\r\n }\r\n }\r\n return baseRoomName + upperCaseAlp[letterIndex] || \"\"\r\n }\r\n return baseRoomName || \"\"\r\n};\r\n\r\n/**\r\n * @param quoteIndex {number|string}\r\n * @param cartItems {array}\r\n * @param quotes {array}\r\n * @param messages {object}\r\n * @param locale {string}\r\n * @param fabricatorData {object}\r\n * @return {string}\r\n */\r\nexport const getBaseRoomName = (quoteIndex, cartItems = [], quotes = [], messages, locale, fabricatorData) => {\r\n\r\n quoteIndex = +quoteIndex;\r\n\r\n const getCurentQuoteRoomItem = (quoteIndexToFind) => {\r\n return cartItems.find(cItem => (cItem.currentQuote === quoteIndexToFind) && (cItem.partId === \"room\"))\r\n };\r\n\r\n const quoteRoomType = quotes[quoteIndex] && quotes[quoteIndex].room ? quotes[quoteIndex].room : \"\";\r\n const roomItem = getCurentQuoteRoomItem(quoteIndex);\r\n const baseRoomName = roomItem && roomItem.cartFeature\r\n ? getStringFeatureName(roomItem.cartFeature, messages, locale, fabricatorData)\r\n : getDefaultRoomName(messages, quoteRoomType);\r\n\r\n return baseRoomName || \"\"\r\n};\r\n\r\nexport const getEventPosition = (e) => {\r\n const eventX = e.clientX ? e.clientX : (e.touches[0] ? e.touches[0].clientX : e.changedTouches[0].clientX);\r\n const eventY = e.clientY ? e.clientY : (e.touches[0] ? e.touches[0].clientY : e.changedTouches[0].clientY);\r\n return {\r\n x: parseFloat(eventX).toFixed(2),\r\n y: parseFloat(eventY).toFixed(2)\r\n }\r\n};\r\n\r\nexport const getUrlParam = (queryParam) => {\r\n const urlParams = new URLSearchParams(window.location.search);\r\n return urlParams.get(queryParam);\r\n}\r\n\r\n/**\r\n *\r\n * @param feature {object} feature\r\n * @param intl {object} translates provider\r\n * @param fabricatorData {object} fabricator state\r\n * @param quantity {number}\r\n * @return {string}\r\n */\r\nexport const getFeatureUnit = (feature, intl, fabricatorData, quantity) => {\r\n const dbFeature = feature.dbFeature;\r\n if ((fabricatorData.isLowes || fabricatorData.isCaesarStone) && intl.locale === \"fr-FR\" && intl.messages && intl.messages[\"transDoc.units_FR.\" + dbFeature.sharedFeatureName]) {\r\n if ((intl.formatMessage({id: \"transDoc.units_FR.\" + dbFeature.sharedFeatureName}) === \"pieds carrés\") && dbFeature.unit === \"Each\") {\r\n return quantity === 1 ? \"unité\" : \"nombre unites\"\r\n }\r\n return intl.formatMessage({id: \"transDoc.units_FR.\" + dbFeature.sharedFeatureName})\r\n }\r\n if (dbFeature.unit) {\r\n let lowercasedUnit = dbFeature.unit.toLowerCase();\r\n return lowercasedUnit === \"each\" || lowercasedUnit === \"unit\"\r\n ? quantity <= 1\r\n ? intl.formatMessage({id: \"quotingTool.featureInfo.defaultQuantity\"})\r\n : intl.formatMessage({id: \"quotingTool.featureInfo.defaultQuantityMultiple\"})\r\n : dbFeature.unit\r\n }\r\n if (feature.isStoneFeature) {\r\n return intl.formatMessage({id: \"shoppingCart.fetureInCartDefaultQuantitySQFT\"})\r\n }\r\n return intl.formatMessage({id: \"shoppingCart.fetureInCartDefaultQuantity\"})\r\n};\r\n\r\n/**\r\n *\r\n * @param cartItem {object}\r\n * @param intl {object} translates provider\r\n * @return {string}\r\n */\r\nexport const getCartItemUnit = (cartItem, intl) => {\r\n return cartItem.displayFakeFeatureGroupName === \"slabs\"\r\n ? getSlabUnit(cartItem.displayFakeQuantity, intl)\r\n : null\r\n};\r\n\r\n/**\r\n *\r\n * @param totalCount {int}\r\n * @param intl {object} translates provider\r\n * @return {string}\r\n */\r\nexport const getSlabUnit = (totalCount, intl) => {\r\n return totalCount === 1\r\n ? intl.formatMessage({id: \"sqftFeaturesPopup.unit.slab\"})\r\n : intl.formatMessage({id: \"sqftFeaturesPopup.unit.slabs\"})\r\n};\r\n\r\n/**\r\n * @returns {DesignNavigationItem}\r\n */\r\nexport const getSlabsFeatureGroup = (layout = getCurrentLayout()) => {\r\n\r\n const countertopFeatureGroup = getCountertopFeatureGroup(layout);\r\n\r\n // create new featureGroup and add it to qtCategories\r\n let slabsFeatureGroup = layout.addNonVisualizerSubPart(\"Slabs\");\r\n if (countertopFeatureGroup) {\r\n slabsFeatureGroup.part.featuresList = countertopFeatureGroup.featuresList;\r\n slabsFeatureGroup.part.translateId = 'visualizer.kitchen.slabs';\r\n slabsFeatureGroup.part.wasCreatedFromGroupName = countertopFeatureGroup.dbName || countertopFeatureGroup.partName;\r\n }\r\n\r\n return slabsFeatureGroup\r\n}\r\n\r\n/**\r\n * todo: this will add slab featureGroup to each category, we need to check what if qtCategories doesn't match room name\r\n * add Slabs FeatureGroup To First qtCategory\r\n * @returns {DesignNavigationItem}\r\n */\r\nexport const getQtCategoriesWithSlabFeatureGroup = (qtCategories) => {\r\n const state = store.getState();\r\n const fabricatorSettings = state.fabricatorState.settings;\r\n if (qtCategories && fabricatorSettings.showSlabMode) {\r\n const cartItems = state.cartState.cartItems;\r\n const activeQuoteIndex = state.quotesState.activeQuoteIndex;\r\n const selectedQuoteRoomCartItem = getCurrentQuoteRoomCartItem(cartItems, activeQuoteIndex);\r\n const selectedQuoteRoomFeature = selectedQuoteRoomCartItem ? selectedQuoteRoomCartItem.cartFeature : null;\r\n const activeCategory = qtCategories.find(qtCategory => featureIsMatchingQtCatName(selectedQuoteRoomFeature, qtCategory.name, true));\r\n let categoryToSearch = activeCategory ? activeCategory : qtCategories[0];\r\n if (categoryToSearch && !categoryToSearch.subParts.some(subPart => subPart.part.partId === 'slabs')) {\r\n let subParts = [...categoryToSearch.subParts];\r\n let slabsFeatureGroup = getSlabsFeatureGroup();\r\n subParts.push(slabsFeatureGroup);\r\n qtCategories[qtCategories.findIndex(qtCategory => qtCategory === categoryToSearch)].subParts = subParts;\r\n }\r\n }\r\n\r\n return qtCategories\r\n}\r\n\r\n/**\r\n *\r\n * @param featureGroup {object} featureGroup\r\n * @param intl {object} translates provider\r\n * @param fabricatorData {object} fabricator state\r\n * @return {string}\r\n */\r\nexport const getFeatureGroupName = (featureGroup, intl, fabricatorData) => {\r\n if (!featureGroup || !intl || !fabricatorData) {\r\n return \"\"\r\n }\r\n const lowerCasedName = featureGroup.partName.toLowerCase();\r\n if ((fabricatorData.isLowes || fabricatorData.isCaesarStone) && intl.messages) {\r\n if (intl.locale === \"fr-FR\" && intl.messages[\"transDoc.customDisplayName_FR.\" + lowerCasedName]) {\r\n return intl.formatMessage({id: \"transDoc.customDisplayName_FR.\" + lowerCasedName})\r\n } else if (intl.locale === \"pl-PL\" && intl.messages[\"transDoc.customTranslateName_PL.\" + lowerCasedName]) {\r\n return intl.formatMessage({id: \"transDoc.customTranslateName_PL.\" + lowerCasedName})\r\n }\r\n }\r\n if ((intl.locale === \"en-US\" || fabricatorData.isDeStefano) && featureGroup.customGroupDisplayName) {\r\n return featureGroup.customGroupDisplayName\r\n }\r\n if (featureGroup.partName === \"Room\") {\r\n return intl.messages[\"shoppingCart.roomTitle\"]\r\n }\r\n\r\n return intl.messages[featureGroup.translateId] || featureGroup.partName\r\n};\r\n\r\n/**\r\n * Each dbFeature should go through this fixes!\r\n * @param dbFeature {object}\r\n * @return dbFeature {object}\r\n */\r\nexport const fixDbFeatureProperties = (dbFeature) => {\r\n dbFeature.metaData = metaDataToCamelCase(dbFeature.metaData); // make all metadata keys CamelCased(dashboard saving issue)\r\n if (!dbFeature.filterValueIDs) {\r\n dbFeature.filterValueIDs = {}\r\n }\r\n if (!dbFeature.fabFilterValueIDs) {\r\n dbFeature.fabFilterValueIDs = {}\r\n }\r\n if (dbFeature.sharedFeatureName) {\r\n dbFeature.sharedFeatureName = dbFeature.sharedFeatureName.trim();\r\n // if (!dbFeature.sku) {\r\n // dbFeature.sku = dbFeature.sharedFeatureName // bvLook visualizer only has shared feature names, not the sku :(\r\n // }\r\n }\r\n return dbFeature\r\n}\r\n\r\n/**\r\n * @param forFeature {featureInterface}\r\n * @param fabricatorSettings {object}\r\n * @param checkArray {array}\r\n * @return {boolean}\r\n */\r\nexport const canShowSqftButtonForFeature = (forFeature, fabricatorSettings, checkArray = null) => {\r\n if (!checkArray) {\r\n checkArray = [...Object.keys({...COUNTERTOP_LABELS, ...EDGE_LABELS, ...BACKSPLASH_LABELS, ...CORNER_LABELS}), ...LOOK_WALLS_ONLY];\r\n }\r\n const canShowForCommonIds = checkArray.includes(forFeature.partId) || (\r\n forFeature.dbFeature && (forFeature.dbFeature.sharedFeatureName === \"Xtone Underlayment\") // porcelanosa hardcode, but can be used for all\r\n && checkArray.some(key => key === \"center_island_countertop\") // show it only once, cabinets check\r\n )\r\n switch (getCommonVisualizerType()) {\r\n case \"bathroom\": {\r\n if (fabricatorSettings.enableSqFt) { // fabricatorSettings.enableSqFt - is actually disable\r\n return false\r\n }\r\n return canShowForCommonIds\r\n }\r\n case \"fireplace\": { // enableSqFt doesn't work on the fireplace profile omg\r\n return canShowForCommonIds\r\n }\r\n case \"kitchen\":\r\n default: { // remove default as we have fireplace or other visualizer ready\r\n if (fabricatorSettings.enableSqFt) { // fabricatorSettings.enableSqFt - is actually disable\r\n return false\r\n }\r\n return canShowForCommonIds\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * @param forFeature {featureInterface}\r\n * @param fabricatorSettings {object}\r\n * @return {boolean}\r\n */\r\nexport const canShowSqftCabinetButtonForFeature = (forFeature, fabricatorSettings) => {\r\n return isCabinetsFabricator()\r\n || canShowSqftButtonForFeature(forFeature, fabricatorSettings, Object.keys({...CABINET_LABELS}))\r\n}\r\n\r\n/**\r\n * @return {boolean}\r\n */\r\nexport const canShowSqftButton = () => {\r\n const fabricatorSettings = store.getState().fabricatorState.settings;\r\n\r\n if (document.kvConfig.userId === 238280) { // solid surface\r\n return true\r\n }\r\n\r\n return (document.kvConfig.visualizerType === \"Kitchen\" || document.kvConfig.visualizerType === \"KV\" || fabricatorSettings.useCategorySwitching)\r\n && !fabricatorSettings.enableSqFt; // fabricatorSettings.enableSqFt - is actually disable\r\n}\r\n\r\n/**\r\n *\r\n * @param fromFeature {featureInterface}\r\n * @param newQuantity {number}\r\n * @param qtActiveCategory {string}\r\n * @return {cartItemInterface}\r\n */\r\nexport const getCartItemObject = (fromFeature, newQuantity, qtActiveCategory) => {\r\n const subPart = fromFeature.getParent();\r\n const parentName = subPart.getParent ? subPart.getParent().partName : subPart.partName\r\n const cartItemObject = {\r\n selectionGroup: parentName,\r\n quantity: newQuantity,\r\n partId: fromFeature.partId,\r\n cartFeature: fromFeature,\r\n }\r\n // if (fromFeature.inCatProperties) { // added always, to properly switch to feature group and category from cart\r\n cartItemObject.fromQtCategory = qtActiveCategory\r\n // }\r\n return cartItemObject\r\n}\r\n\r\n/**\r\n *\r\n * @param relatedFeatures {array} feature relatedFeatures array\r\n * @param currentFeature {object} feature\r\n * @param searchInputValue\r\n * @return {object}\r\n */\r\nexport const getRelatedFeaturesFromLayout = (relatedFeatures, currentFeature, searchInputValue = \"\", selectedFilters = []) => {\r\n const layout = getCurrentLayout();\r\n const parentParts = Object.values(layout.parts);\r\n let relatedFeaturesFound = [];\r\n let noFeaturesFound = [];\r\n if (!Array.isArray(relatedFeatures)) {\r\n return {noFeaturesFound, relatedFeaturesFound}\r\n }\r\n relatedFeatures.forEach(relatedFeature => {\r\n let featureIsFound = false;\r\n let groupName = relatedFeature.groupName;\r\n if (!groupName) {\r\n groupName = splitFeatureName(relatedFeature.displayName).groupName;\r\n }\r\n groupName = groupName.toLowerCase().trim();\r\n parentParts.forEach(parentPart => {\r\n parentPart.relatedItems.forEach(relItem => {\r\n let edgeCondition = true;\r\n const dbName = (relItem.dbName || relItem.partName).toLowerCase().trim();\r\n // 157699 - hardcode for stone_industries_pan.quotekitchenandbath.com/kitchen - they have back countertop & center island edge\r\n if (groupName === \"edge profile\" && (document.kvConfig.userId !== 157699) && (relItem.partId !== currentFeature.partId)) {\r\n edgeCondition = false; // take edge only for countertop || center_island_countertop\r\n }\r\n if ((dbName === groupName) && edgeCondition) {\r\n let feature = null;\r\n Object.keys(relItem.featuresList).forEach(layoutType => {\r\n feature = feature || relItem.featuresList[layoutType].find(feature => {\r\n return feature.dbFeature.id === relatedFeature.id;\r\n })\r\n });\r\n if (feature) {\r\n if (searchInputValue !== \"\") {\r\n if (feature.getFeatureName().toLowerCase().includes(searchInputValue.trim().toLowerCase())\r\n || (feature.dbFeature && feature.dbFeature.description && feature.dbFeature.description.toLowerCase().includes(searchInputValue.trim().toLowerCase()))\r\n ) {\r\n relatedFeaturesFound.push(feature);\r\n featureIsFound = true;\r\n }\r\n } else {\r\n relatedFeaturesFound.push(feature);\r\n featureIsFound = true;\r\n }\r\n }\r\n }\r\n })\r\n });\r\n if (!featureIsFound) {\r\n noFeaturesFound.push(relatedFeature.id)\r\n }\r\n relatedFeaturesFound = filterFeaturesByValues(relatedFeaturesFound, selectedFilters);\r\n });\r\n return {noFeaturesFound, relatedFeaturesFound}\r\n}\r\n\r\nexport const getFilteredRelatedFeatures = (relatedFeaturesToCheck) => {\r\n // console.log(\"relatedFeaturesToCheck\", relatedFeaturesToCheck);\r\n let relatedFeatures = [];\r\n relatedFeaturesToCheck.forEach((relFeature) => {\r\n const featureAlreadyExistIndex = relatedFeatures.findIndex(currentFeature => {\r\n return currentFeature.getSplittedFeatureName() === relFeature.getSplittedFeatureName()\r\n })\r\n if (featureAlreadyExistIndex > -1) {\r\n if (relFeature.getParent().navigationSubItems().some(navItem => {\r\n return navItem.part.dbFeature.id === relFeature.dbFeature.id\r\n })) {\r\n relatedFeatures.splice(featureAlreadyExistIndex, 1, relFeature)\r\n }\r\n } else {\r\n relatedFeatures.push(relFeature);\r\n }\r\n });\r\n // console.log(\"relatedFeatures\", relatedFeatures);\r\n return relatedFeatures\r\n};\r\n\r\n/**\r\n *\r\n * @param relatedFeatures {array} feature relatedFeatures array\r\n * @param cartItems {array} cartItems array\r\n * @param quoteIndex {number} quoteIndex\r\n * @param intl {object} react-intl instance\r\n * @param fabricatorData {object}\r\n * @return {array}\r\n */\r\nexport const createRelatedGroups = (relatedFeatures, cartItems, quoteIndex, intl, fabricatorData) => {\r\n const relatedGroups = [];\r\n relatedFeatures.forEach(relatedFeature => {\r\n const addedCartItem = cartItems.find(cartItem => {\r\n return cartItem.cartFeature && (cartItem.cartFeature.dbFeature.id === relatedFeature.dbFeature.id)\r\n && cartItem.currentQuote === quoteIndex\r\n })\r\n relatedFeature.cartQuantity = addedCartItem ? addedCartItem.quantity : 0;\r\n const relatedFeatureGroupName = getFeatureGroupName(relatedFeature.getParent(), intl, fabricatorData);\r\n const featureGroup = relatedGroups.find(group => group.name === relatedFeatureGroupName);\r\n if (!featureGroup) {\r\n const name = relatedFeature.getParent\r\n ? relatedFeatureGroupName\r\n : relatedFeature.dbFeature.groupName\r\n relatedGroups.push({\r\n name,\r\n relatedFeatures: [relatedFeature]\r\n })\r\n } else {\r\n featureGroup.relatedFeatures.push(relatedFeature);\r\n }\r\n });\r\n return relatedGroups\r\n}\r\n\r\n/**\r\n *\r\n * @param filterGroup {object}\r\n * @return {array}\r\n */\r\nexport const getAllFilterGroupValuesFromGroup = (filterGroup) => {\r\n const fValues = [];\r\n if (!filterGroup || !filterGroup.values) {\r\n return []\r\n }\r\n filterGroup.values.forEach(fValue => {\r\n fValues.push(fValue);\r\n if (Array.isArray(fValue.items) && fValue.items.length) {\r\n fValue.items.forEach(childValue => {\r\n fValues.push(childValue);\r\n });\r\n }\r\n });\r\n return fValues\r\n};\r\n\r\n/**\r\n *\r\n * @param websiteUrl {string}\r\n */\r\nexport const goToFabricatorUrl = (websiteUrl) => {\r\n websiteUrl = websiteUrl.includes(\"http\") ? websiteUrl : \"//\" + websiteUrl;\r\n if (isIframe()) {\r\n window.parent.location.href = websiteUrl;\r\n } else {\r\n window.location.href = websiteUrl;\r\n }\r\n}\r\n","import * as types from './actionTypes';\r\nimport store from './../store';\r\nimport {loaderEnable} from \"../bvcomponents/ui/loaderView\";\r\nimport * as uuid from \"uuid\";\r\nimport {hashHistory} from \"react-router\";\r\n\r\nimport {showOrderCompletePopup} from \"./shoppingCartFunctions\";\r\nimport {CART_ITEM_ADDED_BY} from \"../bvcomponents/shoppingCart/cartItemInterface\";\r\nimport {\r\n getAvailableSteps, getCorrectedWizardGroupForFeature,\r\n} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {\r\n getWizardStepFromCartItemFeature\r\n} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\nimport {USE_FAB_FILTERS_ONLY} from \"../config\";\r\nimport {getBundledFeatures} from \"../bvcomponents/look/lookNavigation/lookFunctions2\";\r\nimport {IS_QKB_UI} from \"../config\";\r\n// import {showContractSigning} from \"./contractsActions\";\r\nimport {shouldUseContractSigning} from \"../bvcomponents/popups/contractSign/contractsFunctions\";\r\nimport {ROUTES} from \"../routes\";\r\n\r\n//****** SERVER & GLOBAL ******//\r\nexport const setWindowWidth = (windowWidth) => ({\r\n type: types.SET_WINDOW_WIDTH,\r\n payload: {\r\n windowWidth\r\n }\r\n});\r\nexport const setJavascriptErrors = (javascriptError) => ({\r\n type: types.SET_JAVASCRIPT_ERRORS,\r\n payload: {javascriptError}\r\n});\r\nexport const setWindowHeight = (windowHeight) => ({\r\n type: types.SET_WINDOW_HEIGHT,\r\n payload: {\r\n windowHeight\r\n }\r\n});\r\nexport const setStonePricing = (stonePricing) => ({\r\n type: types.SET_STONE_PRICING,\r\n payload: {\r\n stonePricing\r\n }\r\n});\r\nexport const setCookieAccepted = (cookieAccepted) => ({\r\n type: types.SET_COOKIE_ACCEPTED,\r\n payload: {\r\n cookieAccepted\r\n }\r\n});\r\nexport const addVisualizersLoaded = (newLoadedVisualizer) => ({\r\n type: types.ADD_VISUALIZERS_LOADED,\r\n payload: {\r\n newLoadedVisualizer\r\n }\r\n});\r\nexport const showSuccessNotification = (successNotification) => ({\r\n type: types.SHOW_SUCCESS_NOTIFICATION,\r\n payload: successNotification\r\n});\r\nexport const addProjectDocument = (file, description, sqftDiagram = false) => {\r\n\r\n let documents = store.getState().serverState.documents;\r\n const newDocument = {\r\n name: file.name,\r\n uid: uuid.v4(),\r\n text: description,\r\n created: new Date(),\r\n uploaded: false,\r\n file: file // the blob file\r\n };\r\n\r\n if (sqftDiagram) {\r\n const existingCalcDiagramIndex = documents.findIndex(doc => doc.name === file.name);\r\n if (existingCalcDiagramIndex > -1) {\r\n documents.splice(existingCalcDiagramIndex, 1);\r\n }\r\n }\r\n\r\n return {\r\n type: types.ADD_PROJECT_DOCUMENT,\r\n payload: [...documents, newDocument]\r\n }\r\n};\r\nexport const setProjectDocumentsIds = (documents) => {\r\n\r\n let oldDocuments = store.getState().serverState.documents;\r\n oldDocuments = oldDocuments.map(oldDoc => {\r\n const responseDoc = documents.find(doc => doc.name === oldDoc);\r\n if (responseDoc) {\r\n oldDoc.uploaded = true;\r\n oldDoc.documentId = responseDoc.documentId;\r\n }\r\n return oldDoc\r\n });\r\n\r\n return {\r\n type: types.SET_PROJECT_DOCUMENTS_IDS,\r\n payload: [...oldDocuments]\r\n }\r\n};\r\n\r\n/**\r\n * @param jobId {int}\r\n */\r\nexport const setJobId = (jobId) => ({type: types.SET_JOB_ID, payload: {jobId}});\r\n\r\n//****** STEPS ******//\r\nexport const setStep = (activeStep) => ({\r\n type: types.SET_STEP,\r\n payload: {\r\n activeStep\r\n }\r\n});\r\nexport const setLayoutDataParts = (layoutParts) => ({\r\n type: types.SET_LAYOUT_DATA_PARTS,\r\n payload: {\r\n layoutParts\r\n }\r\n});\r\nexport const setStepSwitching = (isSwitching) => ({\r\n type: types.SET_STEP_SWITCHING,\r\n payload: {\r\n isSwitching\r\n }\r\n});\r\n\r\n//****** SELECTION ******//\r\nexport const toggleSelectionWindow = (selectionOpened, selectionGroup) => {\r\n\r\n const {filterState} = store.getState();\r\n if (filterState.showFilters) {\r\n store.dispatch(showFilters(false));\r\n }\r\n\r\n return {\r\n type: types.TOGGLE_SELECTION_WINDOW,\r\n payload: {\r\n selectionOpened,\r\n selectionGroup\r\n }\r\n };\r\n};\r\nexport const setDefaultSelectionGroup = (selectionGroup) => ({\r\n type: types.SET_DEFAULT_SELECTION_GROUP,\r\n payload: {selectionGroup}\r\n});\r\nexport const setSelectionWindowView = (selectionWindowView) => ({\r\n type: types.SET_SELECTION_WINDOW_VIEW,\r\n payload: {selectionWindowView}\r\n});\r\nexport const toggleSelectionFeatureInfo = (selectionFeatureInfo) => ({\r\n type: types.TOGGLE_SELECTION_INFO,\r\n payload: {selectionFeatureInfo}\r\n});\r\nexport const updateFeatureInfoCount = () => ({\r\n type: types.UPDATE_FEATURE_INFO_COUNT,\r\n});\r\nexport const setVanityType = (vanityTypeSelected) => ({\r\n type: types.SET_VANITY_TYPE,\r\n payload: {vanityTypeSelected}\r\n});\r\nexport const setShowerType = (showerTypeSelected) => ({\r\n type: types.SET_SHOWER_TYPE,\r\n payload: {showerTypeSelected}\r\n});\r\nexport const changeSelectionInfoQuantity = (selectionInfoQuantity) => ({\r\n type: types.CHANGE_SELECTION_INFO_QUANTITY,\r\n payload: {selectionInfoQuantity}\r\n});\r\nexport const togglePulseFeatureInfoQuantity = (pulseFeatureInfoQuantity) => ({\r\n type: types.TOGGLE_PULSE_FEATURE_INFO_QUANTITY,\r\n payload: {pulseFeatureInfoQuantity}\r\n});\r\nexport const changeMaterialsInfoFeatureModules = (materialsInfoFeatureModules) => ({\r\n type: types.CHANGE_MATERIALS_INFO_FEATURE_MODULES,\r\n payload: {materialsInfoFeatureModules}\r\n});\r\nexport const changeActivePartRelatedItemIndex = (newActivePartRelatedItemIndex) => {\r\n return (dispatch, getState) => {\r\n const store = getState();\r\n const {activePartRelatedItemIndex} = store.selectionState;\r\n dispatch({\r\n type: types.CHANGE_SELECTION_ACTIVE_PART_RELATED_INDEX,\r\n payload: {\r\n activePartRelatedItemIndex: newActivePartRelatedItemIndex,\r\n isSameStep: newActivePartRelatedItemIndex === activePartRelatedItemIndex\r\n }\r\n });\r\n }\r\n}\r\nexport const setActiveFeature = (activeFeature) => ({\r\n type: types.SET_ACTIVE_FEATURE,\r\n payload: {activeFeature}\r\n});\r\nexport const toggleShowDescriptionCover = (showDescriptionCover) => ({\r\n type: types.TOGGLE_SHOW_DESCRIPTION_COVER,\r\n payload: {showDescriptionCover}\r\n});\r\n\r\n//****** BATHROOM VISUALIZER COMMANDS ******//\r\nexport const toggleBathroomVisualizerOpen = (bvOpened) => {\r\n const {filterState, bathroomVisualizerState} = store.getState();\r\n if (filterState.showFilters) {\r\n store.dispatch(showFilters(false));\r\n }\r\n if (bvOpened && !bathroomVisualizerState.bvVisited) {\r\n loaderEnable();\r\n }\r\n return {\r\n type: types.TOGGLE_BATHROOM_VISUALIZER_OPEN,\r\n payload: {\r\n bvOpened\r\n }\r\n };\r\n};\r\nexport const setBathroomVisualizerVisited = () => {\r\n return {\r\n type: types.SET_BATHROOM_VISUALIZER_VISITED,\r\n payload: {\r\n bvVisited: true\r\n }\r\n };\r\n};\r\nexport const setBathroomVisualizerFeatures = (bvFeatures) => ({\r\n type: types.SET_BV_FEATURES,\r\n payload: {bvFeatures}\r\n});\r\nexport const setBathroomVisualizerPresets = (bvPresets, visualizerType = document.kvConfig.visualizerType) => ({\r\n type: types.SET_BV_PRESETS,\r\n payload: {bvPresets, visualizerType}\r\n});\r\nexport const setActivePreset = (activePreset = 0) => ({\r\n type: types.SET_ACTIVE_PRESET,\r\n payload: {activePreset}\r\n});\r\nexport const setCanvasId = (id) => ({type: types.SET_BV_CANVAS_ID, payload: {id}});\r\nexport const toggleShowRestorePopup = (showRestorePopup) => ({\r\n type: types.TOGGLE_SHOW_RESTORE_POPUP,\r\n payload: {showRestorePopup}\r\n});\r\nexport const setCanvasDimensions = (canvasDimensions = null) => ({\r\n type: types.SET_CANVAS_DIMENSIONS,\r\n payload: {canvasDimensions}\r\n});\r\nexport const setCanvasScale = (canvasScale = 1) => ({\r\n type: types.SET_CANVAS_SCALE,\r\n payload: {canvasScale}\r\n});\r\nexport const setLoadedPresets = (loadedPresets = []) => ({\r\n type: types.SET_LOADED_PRESETS,\r\n payload: {loadedPresets}\r\n});\r\n\r\n//****** LOADER ******//\r\nexport const toggleLoader = (loaderOpened, loaderText = \"loader.defaultText\", loaderTitle = \"loader.defaultTitle\", loaderFullScreen = false) => ({\r\n type: types.TOGGLE_LOADER,\r\n payload: {\r\n loaderOpened,\r\n loaderTitle,\r\n loaderText,\r\n loaderFullScreen,\r\n }\r\n});\r\nexport const setMultiLoader = (multiLoader) => ({\r\n type: types.SET_MULTI_LOADER,\r\n payload: multiLoader\r\n})\r\n\r\n//****** USER COMMANDS ******//\r\nexport const toggleUserPopup = (userPopupState) => ({\r\n type: types.TOGGLE_USER_POPUP,\r\n payload: {\r\n ...userPopupState\r\n }\r\n});\r\nexport const changeUserInfo = (userInfo) => ({\r\n type: types.CHANGE_USER_INFO,\r\n payload: {userInfo}\r\n});\r\nexport const changeUserInfoErrors = (userInfoErrors) => ({\r\n type: types.CHANGE_USER_INFO_ERRORS,\r\n payload: {userInfoErrors}\r\n});\r\nexport const toggleAdditionalFields = (showAdditionalFields) => ({\r\n type: types.TOGGLE_ADDITIONAL_FIELDS,\r\n payload: {showAdditionalFields}\r\n});\r\nexport const setUserPhoneNumberValidated = (validated) => ({\r\n type: types.SET_USER_PHONE_NUMBER_VALIDATED,\r\n payload: {\r\n isPhoneNumberValidated: validated\r\n }\r\n});\r\nexport const unlockPricing = () => {\r\n return (dispatch, getState) => {\r\n const {userState} = getState();\r\n const {userIsLoggedIn, isPhoneNumberValidated} = userState;\r\n if (!userIsLoggedIn || !isPhoneNumberValidated) {\r\n dispatch(toggleUserPopup({\r\n userPopupOpened: true\r\n }));\r\n }\r\n }\r\n};\r\n\r\n//****** CART COMMANDS ******//\r\nexport const addToCart = (cartItems) => {\r\n return (dispatch, getState) => {\r\n const {quotesState, fabricatorState, wizardState, sqftState, cartState} = getState();\r\n\r\n const {wizardIsActive, wizardActiveItem, wizardActiveStep, wizardSelectedValues, allWizardsValues} = wizardState;\r\n let fromWizardId = null;\r\n let fromWizardGroup = null;\r\n let fromWizardStep = null;\r\n let wizardSteps = null;\r\n if (wizardIsActive && wizardActiveItem) {\r\n fromWizardId = wizardState.wizardActiveItem.id;\r\n fromWizardStep = wizardActiveStep;\r\n fromWizardGroup = wizardSelectedValues[wizardActiveStep] && wizardSelectedValues[wizardActiveStep].wizardGroup\r\n ? wizardSelectedValues[wizardActiveStep].wizardGroup : null;\r\n if (sqftState.isSquareFootageEnabled) {\r\n wizardSteps = getAvailableSteps(wizardActiveItem, wizardSelectedValues, true)\r\n }\r\n }\r\n\r\n let newCartItems = cartItems\r\n .map(cartItem => {\r\n cartItem.id = uuid.v4();\r\n cartItem.currentQuote = Number.isInteger(cartItem.currentQuote) ? cartItem.currentQuote : quotesState.activeQuoteIndex;\r\n cartItem.addedBy = cartItem.addedBy || CART_ITEM_ADDED_BY.user;\r\n cartItem.fromVisualizerType = cartItem.fromVisualizerType || document.kvConfig.visualizerType;\r\n if (!cartItem.noteText && cartItem.cartFeature && cartItem.cartFeature.notesList && cartItem.cartFeature.notesList[cartItem.currentQuote]) {\r\n cartItem.noteText = cartItem.cartFeature.notesList[cartItem.currentQuote];\r\n }\r\n if (wizardIsActive && !cartItem.fromWizardId) { // if it is not passed - add it\r\n if (sqftState.isSquareFootageEnabled && wizardSteps) {\r\n const foundStep = getWizardStepFromCartItemFeature(wizardSteps, cartItem);\r\n if (foundStep) {\r\n cartItem.fromWizardId = fromWizardId;\r\n cartItem.fromWizardStep = foundStep.stepIndex;\r\n cartItem.fromWizardGroupId = fromWizardGroup ? getCorrectedWizardGroupForFeature(foundStep.stepGroups[0], cartItem.cartFeature).id : \"\";\r\n } else {\r\n cartItem.fromWizardId = fromWizardId;\r\n cartItem.fromWizardStep = fromWizardStep;\r\n cartItem.fromWizardGroupId = fromWizardGroup ? getCorrectedWizardGroupForFeature(fromWizardGroup, cartItem.cartFeature).id : \"\";\r\n }\r\n } else {\r\n cartItem.fromWizardId = fromWizardId;\r\n cartItem.fromWizardStep = fromWizardStep;\r\n cartItem.fromWizardGroupId = fromWizardGroup ? getCorrectedWizardGroupForFeature(fromWizardGroup, cartItem.cartFeature).id : \"\";\r\n }\r\n }\r\n return cartItem\r\n })\r\n .filter(newCartItem => {\r\n if (newCartItem.partId === \"room\" && newCartItem.cartFeature && cartState.cartItems.some(oldCartItem => {\r\n return oldCartItem.cartFeature && (oldCartItem.cartFeature.dbFeature.id === newCartItem.cartFeature.dbFeature.id)\r\n && oldCartItem.currentQuote === newCartItem.currentQuote\r\n })) {\r\n return false // do not add duplicate room\r\n }\r\n return !cartState.cartItems.some(oldCartItem => oldCartItem.id === newCartItem.id)\r\n && (newCartItem.quantity > 0 || newCartItem.displayFakeQuantity > 0)\r\n });\r\n\r\n if (IS_QKB_UI) { // on look & product journeys we have another method and relatedProductParent property for bundled features\r\n newCartItems.forEach(newCartItem => {\r\n const bundleFeatures = getBundledFeatures(newCartItem.cartFeature);\r\n if (Array.isArray(bundleFeatures) && bundleFeatures.length) {\r\n bundleFeatures.forEach((bundleFeature) => {\r\n const quantity = newCartItem.cartFeature.dbFeature.bundledFeatureQuantities\r\n ? newCartItem.cartFeature.dbFeature.bundledFeatureQuantities[bundleFeature.dbFeature.id] || 1\r\n : 1;\r\n const cartItem = Object.assign({}, newCartItem, {\r\n id: uuid.v4(),\r\n cartFeature: bundleFeature,\r\n partId: bundleFeature.partId,\r\n noteText: \"\",\r\n bundleParentId: newCartItem.id,\r\n quantity: quantity * newCartItem.quantity,\r\n });\r\n // console.log(\"parent cartItem\", newCartItem);\r\n // console.log(\"bundle cartItem\", cartItem);\r\n newCartItems.push(cartItem);\r\n })\r\n }\r\n });\r\n }\r\n\r\n dispatch({\r\n type: types.ADD_TO_CART,\r\n payload: {\r\n cartItems: newCartItems,\r\n fabricatorState,\r\n allWizardsValues,\r\n }\r\n });\r\n }\r\n};\r\nexport const addDisplayLogicCartItem = (cartItem, fromVisualizerType = document.kvConfig.visualizerType) => ({\r\n type: types.ADD_DISPLAY_LOGIC_CART_ITEM,\r\n payload: {\r\n cartItem: Object.assign({}, cartItem, {\r\n id: uuid.v4(),\r\n isAddedFromDisplayLogic: true,\r\n addedBy: CART_ITEM_ADDED_BY.user,\r\n fromVisualizerType,\r\n })\r\n }\r\n});\r\nexport const changeCartItemQuantity = (cartItem, quantity, removeFakeQuantity = false) => {\r\n return (dispatch, getState) => {\r\n const {fabricatorState, wizardState} = getState();\r\n dispatch({\r\n type: types.CHANGE_CART_QUANTITY,\r\n payload: { cartItem, quantity, fabricatorState, removeFakeQuantity, allWizardsValues: wizardState.allWizardsValues }\r\n });\r\n }\r\n};\r\nexport const removeFromCart = (cartItem) => {\r\n return (dispatch, getState) => {\r\n const {fabricatorState, wizardState} = getState();\r\n dispatch({\r\n type: types.REMOVE_FROM_CART,\r\n payload: { cartItem, fabricatorState, allWizardsValues: wizardState.allWizardsValues }\r\n });\r\n }\r\n};\r\nexport const changeCartFeature = (cartItem, skipOtherRules = false) => {\r\n return (dispatch, getState) => {\r\n const {fabricatorState} = getState();\r\n dispatch({\r\n type: types.CHANGE_CART_FEATURE,\r\n payload: {cartItem, fabricatorState, skipOtherRules}\r\n });\r\n }\r\n};\r\nexport const removeInstallationServiceFromCart = installationService => ({\r\n type: types.REMOVE_INSTALLATION_SERVICE_FROM_CART,\r\n payload: {\r\n installationService\r\n }\r\n});\r\nexport const clearCart = () => ({\r\n type: types.CLEAR_CART\r\n});\r\nexport const toggleApplyPopup = (applyPopupOpened, activeApplyPopupItems = []) => ({\r\n type: types.TOGGLE_APPLY_POPUP,\r\n payload: {\r\n applyPopupOpened,\r\n activeApplyPopupItems\r\n }\r\n});\r\nexport const clickQuestionNo = (questionNoClicked) => ({\r\n type: types.CLICK_QUESTION_NO,\r\n payload: {\r\n questionNoClicked\r\n }\r\n});\r\nexport const setCameFromPage = (cameFromPage) => ({\r\n type: types.CAME_FROM_PAGE,\r\n payload: {\r\n cameFromPage\r\n }\r\n});\r\nexport const addToRecentlyViewed = (feature) => ({\r\n type: types.ADD_TO_RECENTLY_VIEWED,\r\n payload: {\r\n feature\r\n }\r\n});\r\nexport const showCheckoutPopup = (show) => ({\r\n type: types.SHOW_CHECKOUT_POPUP,\r\n payload: {\r\n show\r\n }\r\n});\r\nexport const restoreCart = (cartState) => {\r\n return (dispatch, getState) => {\r\n const {fabricatorState, quotesState, wizardState} = getState();\r\n if (cartState && cartState.cartItems) {\r\n cartState.cartItems = cartState.cartItems.map(cartItem => {\r\n cartItem.id = cartItem.id || uuid.v4();\r\n cartItem.currentQuote = Number.isInteger(cartItem.currentQuote) ? cartItem.currentQuote : quotesState.activeQuoteIndex;\r\n cartItem.addedBy = cartItem.addedBy || CART_ITEM_ADDED_BY.user;\r\n return cartItem\r\n })\r\n }\r\n dispatch({\r\n type: types.RESTORE_CART,\r\n payload: { cartState, fabricatorState, allWizardsValues: wizardState.allWizardsValues }\r\n });\r\n }\r\n};\r\n\r\n//****** INSTALLATION COMMANDS ******//\r\nexport const toggleInstOpened = (instOpened) => ({\r\n type: types.TOGGLE_INST_OPENED,\r\n payload: {\r\n instOpened\r\n }\r\n});\r\nexport const setInstList = (instList) => ({\r\n type: types.SET_INST_LIST,\r\n payload: {\r\n instList\r\n }\r\n});\r\nexport const setDefaultInstallations = (defaultInstallations) => ({\r\n type: types.SET_DEFAULT_INST_LIST,\r\n payload: {defaultInstallations}\r\n});\r\n\r\n//****** TOOL STATE ***************//\r\nexport const changeStateToQuote = () => ({\r\n type: types.SET_STATE_TO_QUOTE\r\n});\r\n\r\n//****** FABRICATOR COMMANDS ******//\r\nexport const setFabricatorData = (fabricatorData) => ({\r\n type: types.SET_FABRICATOR_DATA,\r\n payload: {\r\n ...fabricatorData\r\n }\r\n});\r\nexport const setFabricatorTaxes = (fabricatorTaxes) => ({\r\n type: types.SET_FABRICATOR_TAXES,\r\n payload: {fabricatorTaxes}\r\n});\r\n\r\nexport const updateFabricatorSettings = () => ({\r\n type: types.UPDATE_FABRICATOR_SETTINGS,\r\n});\r\n\r\nexport const toggleHideItemsSwitcher = () => ({\r\n type: types.TOGGLE_HIDE_ITEMS_PRICES,\r\n});\r\n\r\nexport const toggleUseFabricatorCostPrices = (useFabricatorCostPrices) => ({\r\n type: types.TOGGLE_USE_FABRICATOR_COST_PRICES,\r\n payload: {useFabricatorCostPrices}\r\n});\r\n\r\n//****** MESSAGEBOX COMMANDS ******//\r\nexport const changeMessageBoxState = (messageBoxState) => ({\r\n type: types.CHANGE_MESSAGE_BOX,\r\n payload: {\r\n ...messageBoxState\r\n }\r\n});\r\n\r\n//******** FILTER COMMANDS **********//\r\nexport const setSelectedFilters = (selectedFilters) => ({\r\n type: types.SET_SELECTED_FILTERS,\r\n payload: [...selectedFilters]\r\n});\r\n\r\nexport const loadFilters = (filterGroups) => {\r\n\r\n if (USE_FAB_FILTERS_ONLY) {\r\n// console.log(\"fabricator only filterGroups\", filterGroups.map(fg => {\r\n// return Object.assign ({}, fg, {\r\n// values: fg.values.filter(fgValue => fgValue.isFabricatorCustomFilter)\r\n// })\r\n// }).filter(fg => fg.values.length));\r\n filterGroups = filterGroups.filter(fg => {\r\n if (!Array.isArray(fg.values) || !fg.values.length) {\r\n return false\r\n }\r\n fg.values = fg.values.filter(fgValue => fgValue.isFabricatorCustomFilter);\r\n return fg.values.length\r\n })\r\n console.log(\"fabricator only filterGroups\", filterGroups);\r\n }\r\n return {\r\n type: types.LOAD_FILTERS,\r\n payload: filterGroups\r\n }\r\n};\r\n\r\nexport const setExpandedFilters = (expandedFilters) => ({\r\n type: types.SET_EXPANDED_FILTERS,\r\n payload: expandedFilters\r\n});\r\n\r\nexport const showFilters = (show = false, filterId = \"\") => ({\r\n type: types.SHOW_FILTERS,\r\n payload: {show, filterId}\r\n});\r\n\r\nexport const showFiltersIfHidden = (filterId = \"\") => ({\r\n type: types.SHOW_FILTERS_IF_NOT_VISIBLE,\r\n payload: filterId\r\n});\r\n\r\nexport const setFilterVisible = (filter) => ({\r\n type: types.SET_FILTER_VISIBLE,\r\n payload: filter\r\n});\r\n\r\n\r\n//********* MOBILE NAVIGATION COMMANDS *********/\r\nexport const loadMobileNav = (data) => ({\r\n type: types.LOAD_MOBILE_NAV,\r\n payload: data\r\n});\r\n\r\nexport const hideUserPopup = () => ({\r\n type: types.CHANGE_MESSAGE_BOX,\r\n payload: {\r\n visible: false,\r\n inline: false\r\n }\r\n});\r\n\r\nexport const showSchedulerPopup = show => {\r\n return {\r\n type: types.SHOW_SCHEDULER,\r\n payload: {show}\r\n }\r\n};\r\nexport const toggleConfirmPopup = (confirmPopupOpened, confirmPopupType) => ({\r\n type: types.TOGGLE_CONFIRM_POPUP,\r\n payload: {confirmPopupOpened, confirmPopupType}\r\n});\r\n\r\n//********* DOCU SIGN *********/\r\nexport const showDocuSign = (show, callback = null) => ({\r\n type: types.SHOW_DOCUSIGN,\r\n payload: {show, callback}\r\n});\r\n\r\nexport const showDeposit = (show, callback = null) => ({\r\n type: types.SHOW_DEPOSIT,\r\n payload: {show, callback}\r\n});\r\n\r\nconst _showCheckoutPopup = (fabricatorSettings) => {\r\n return new Promise((resolve) => {\r\n if (fabricatorSettings.checkout && fabricatorSettings.hasPaymentGateway) {\r\n store.dispatch(showCheckoutPopup(true));\r\n store.dispatch(showDocuSign(false, resolve)); // we need only callback from here\r\n } else {\r\n resolve();\r\n }\r\n });\r\n}\r\n\r\nconst _showDeposit = (fabricatorSettings) => {\r\n return new Promise((resolve) => {\r\n const state = store.getState();\r\n console.log(\"state__state\", state);\r\n if (fabricatorSettings.enableDeposit && (!fabricatorSettings.leadCaptureShoppingCart || state.unlockCalculationsState.unlockCalculationsTutorialIsFinished)) {\r\n store.dispatch(showDeposit(true, resolve))\r\n } else {\r\n resolve();\r\n }\r\n });\r\n}\r\n\r\nconst _showDocuSign = (fabricatorSettings) => {\r\n return new Promise((resolve) => {\r\n if (fabricatorSettings.enableDocuSign) {\r\n store.dispatch(showDocuSign(true, resolve))\r\n } else {\r\n resolve();\r\n }\r\n });\r\n}\r\n\r\nconst _showContractSigning = (fabricatorSettings) => {\r\n return new Promise((resolve) => {\r\n if (shouldUseContractSigning(fabricatorSettings)) {\r\n // store.dispatch(showContractSigning(true, resolve))\r\n hashHistory.push(ROUTES.contract);\r\n } else {\r\n resolve();\r\n }\r\n });\r\n};\r\n\r\nexport const checkForOrderCompletePopup = (fabricatorSettings) => {\r\n return new Promise((resolve) => {\r\n if (fabricatorSettings.checkout && (!fabricatorSettings.hasPaymentGateway || window.checkoutSuccess)) {\r\n store.dispatch(showOrderCompletePopup(true));\r\n }\r\n resolve();\r\n });\r\n}\r\n\r\nexport const showCheckoutLayout = (fabricatorSettings) => {\r\n let p = _showDeposit(fabricatorSettings)\r\n .then(() => _showDocuSign(fabricatorSettings))\r\n .then(() => _showCheckoutPopup(fabricatorSettings))\r\n .then(() => _showContractSigning(fabricatorSettings))\r\n .then(() => checkForOrderCompletePopup(fabricatorSettings));\r\n // .then(() => printReceipt(fabricatorSettings));\r\n return p.catch(console.error);\r\n}\r\n\r\n//********* QUOTING TOOL COMMANDS *********/\r\nexport const setQtCategoriesRequested = (qtCategoriesRequested) => ({\r\n type: types.SET_QT_CATEGORIES_REQUESTED,\r\n payload: {\r\n qtCategoriesRequested\r\n }\r\n});\r\nexport const setQtCategoriesLoaded = (qtCategoriesLoaded) => ({\r\n type: types.SET_QT_CATEGORIES_LOADED,\r\n payload: {\r\n qtCategoriesLoaded\r\n }\r\n});\r\nexport const setQtActiveCategory = (qtActiveCategory) => ({\r\n type: types.SET_QT_ACTIVE_CATEGORY,\r\n payload: {\r\n qtActiveCategory\r\n }\r\n});\r\n\r\nexport const setIntroVideo = (introVideo) => ({\r\n type: types.SET_INTRO_VIDEO,\r\n payload: introVideo\r\n})\r\n\r\nexport const updateCanvasCount = () => ({\r\n type: types.UPDATE_CANVAS_COUNT\r\n})\r\n\r\nexport const setPresetWasChangedByUser = (presetWasChangedByUser) => ({\r\n type: types.SET_PRESET_WAS_CHANGED_BY_USER,\r\n payload: {presetWasChangedByUser}\r\n})\r\n\r\nexport const setFirstLoadedPreset = (firstLoadedPreset) => ({\r\n type: types.SET_FIRST_LOADED_PRESET,\r\n payload: {firstLoadedPreset}\r\n})\r\n\r\nexport const addLayoutHistory = (layoutState) => ({\r\n type: types.ADD_LAYOUT_HISTORY,\r\n payload: {\r\n layoutState\r\n }\r\n});\r\n\r\nexport const setLayoutHistory = (layoutHistory) => ({\r\n type: types.SET_LAYOUT_HISTORY,\r\n payload: {\r\n layoutHistory\r\n }\r\n});\r\n","import {layout as bvLayout} from \"../bvcomponents/bvComponent/bathroomVisualizer\";\r\nimport {layout as kvLayout} from \"../bvcomponents/kvComponent/kitchenVisualizer\";\r\n// import {layout as kvMasterLayout} from \"../bvcomponents/kvMasterComponent/kvMasterVisualizer\";\r\nimport {layout as kvSceneLayout} from \"../bvcomponents/kvSceneComponent/kvSceneVisualizer\";\r\nimport {layout as bvSceneLayout} from \"../bvcomponents/bvSceneComponent/bvSceneVisualizer\";\r\nimport {layout as bvLookLayout} from \"../bvcomponents/look/lookVisualizer\";\r\nimport {layout as fireplaceLayout} from \"../bvcomponents/fireplace/fireplaceVisualizer\";\r\nimport laundryRoomLayout from \"../bvcomponents/commonVisualizer/core/laundryRoomLayout\";\r\n\r\nimport {Layout as bvLayoutInstance} from \"../bvcomponents/bvComponent/core/layout\";\r\nimport {Layout as kvLayoutInstance} from \"../bvcomponents/kvComponent/core/layout\";\r\n// import {Layout as kvMasterLayoutInstance} from \"../bvcomponents/kvMasterComponent/core/layout\";\r\nimport {Layout as kvSceneLayoutInstance} from \"../bvcomponents/kvSceneComponent/core/layout\";\r\nimport {Layout as bvSceneLayoutInstance} from \"../bvcomponents/bvSceneComponent/core/layout\";\r\nimport {Layout as bvLookLayoutInstance} from \"../bvcomponents/look/core/layout\";\r\nimport {Layout as fireplaceLayoutInstance} from \"../bvcomponents/fireplace/core/layout\";\r\nimport {LaundryRoomLayout as laundryRoomLayoutInstance} from \"../bvcomponents/commonVisualizer/core/laundryRoomLayout\";\r\n\r\nimport ImageCanvasCommon from \"./visComponents/imageCanvasCommon\";\r\nimport ImageCanvasCommonNew from \"./visComponents/imageCanvasCommonNew\";\r\n\r\nimport bvZIndexes from \"../bvcomponents/bvComponent/core/parts/zIndex\";\r\nimport kvZIndexes from \"../bvcomponents/kvComponent/core/zIndex\";\r\n// import kvMasterZIndexes from \"../bvcomponents/kvMasterComponent/core/zIndex\";\r\nimport kvSceneZIndexes from \"../bvcomponents/kvSceneComponent/core/zIndex\";\r\nimport bvSceneZIndexes from \"../bvcomponents/bvSceneComponent/core/zIndex\";\r\nimport bvLookZIndexes from \"../bvcomponents/look/core/zIndex\";\r\nimport fireplaceZIndexes from \"../bvcomponents/fireplace/core/zIndex\";\r\n\r\nimport {AVAILABLE_VISUALIZER_TYPES, getCommonVisualizerType} from \"../config\";\r\nimport {LOOK_ROOM_TYPES} from \"./look/core/constants\";\r\nimport {COUNTERTOP_LABELS} from \"./sqft/constants\";\r\n\r\nexport const getCurrentLayout = (visualizerType = document.kvConfig.visualizerType) => { // layout should be dynamic (could be switched)\r\n switch (visualizerType) {\r\n case \"Kitchen\":\r\n case \"KV\":\r\n return kvLayout;\r\n case \"Bathroom\":\r\n case \"BV\":\r\n return bvLayout;\r\n // case \"kvMaster\":\r\n // return kvMasterLayout;\r\n case \"kvScene\":\r\n case \"KitchenV5\":\r\n return kvSceneLayout;\r\n case \"bvScene\":\r\n case \"BathroomV5\":\r\n return bvSceneLayout;\r\n case \"bvLook\":\r\n case \"BathroomV6\":\r\n return bvLookLayout;\r\n case \"Fireplace\":\r\n return fireplaceLayout;\r\n case \"LaundryRoom\":\r\n return laundryRoomLayout;\r\n default:\r\n // console.trace(\"Incorrect layout selected (document.kvConfig.visualizerType)\");\r\n return null\r\n }\r\n};\r\n\r\nexport const getCurrentLayoutInstance = (visualizerType = document.kvConfig.visualizerType) => { // is used for creating fake layouts (to show layouts, scenes, etc.), to show thumbnails\r\n switch (visualizerType) {\r\n case \"Kitchen\":\r\n case \"KV\":\r\n return kvLayoutInstance;\r\n case \"Bathroom\":\r\n case \"BV\":\r\n return bvLayoutInstance;\r\n // case \"kvMaster\":\r\n // return kvMasterLayoutInstance;\r\n case \"kvScene\":\r\n return kvSceneLayoutInstance;\r\n case \"bvScene\":\r\n return bvSceneLayoutInstance;\r\n case \"bvLook\":\r\n return bvLookLayoutInstance;\r\n case \"Fireplace\":\r\n return fireplaceLayoutInstance;\r\n case \"LaundryRoom\":\r\n return laundryRoomLayoutInstance;\r\n default:\r\n // console.trace(\"Incorrect layout selected (document.kvConfig.visualizerType)\");\r\n return null\r\n }\r\n};\r\n\r\nexport const getCurrentCanvas = (visualizerType = document.kvConfig.visualizerType) => { // layout should be dynamic (could be switched)\r\n switch (visualizerType) {\r\n case \"Kitchen\":\r\n case \"KV\":\r\n case \"kvMaster\":\r\n case \"Bathroom\":\r\n case \"BV\":\r\n case \"bvScene\":\r\n return ImageCanvasCommon;\r\n case \"bvLook\":\r\n case \"kvScene\":\r\n case \"Fireplace\":\r\n case \"LaundryRoom\":\r\n default:\r\n return ImageCanvasCommonNew;\r\n }\r\n};\r\n\r\n\r\nexport const getCurrentZIndexes = (visualizerType = document.kvConfig.visualizerType) => {\r\n switch (visualizerType) {\r\n case \"Kitchen\":\r\n case \"KV\":\r\n return kvZIndexes;\r\n case \"Bathroom\":\r\n case \"BV\":\r\n return bvZIndexes;\r\n // case \"kvMaster\":\r\n // return kvMasterZIndexes;\r\n case \"kvScene\":\r\n return kvSceneZIndexes;\r\n case \"bvScene\":\r\n return bvSceneZIndexes;\r\n case \"bvLook\":\r\n return bvLookZIndexes;\r\n case \"Fireplace\":\r\n case \"LaundryRoom\":\r\n return fireplaceZIndexes;\r\n default:\r\n // console.trace(\"Incorrect layout selected (document.kvConfig.visualizerType)\");\r\n return null\r\n }\r\n};\r\n\r\n/**\r\n * Returns the fake created layout,\r\n * @param asLayout {object}\r\n * @param type {number} to filter features for this specific layout\r\n * @param scene {string} to filter features for this specific scene\r\n * @returns {object}\r\n */\r\nexport const createFakeLayout = (asLayout = getCurrentLayout(), type, scene) => {\r\n const LayoutInstance = getCurrentLayoutInstance(asLayout.visualizerType);\r\n const fakeLayout = new LayoutInstance();\r\n fakeLayout.isFakeLayout = true;\r\n const parentGroups = fakeLayout.getFeatures(true);\r\n let needToLoadFeatures = type || scene\r\n ? asLayout.allDbFeatures.filter(dbFeature => {\r\n if (!dbFeature.s3Bindings || !dbFeature.metaData) {\r\n return false\r\n }\r\n if (type && !dbFeature.metaData.RoomLayout || !dbFeature.metaData.RoomLayout.includes(type)) {\r\n return false\r\n }\r\n if (asLayout.isNewLayout && scene && !dbFeature.metaData.RoomScene || !dbFeature.metaData.RoomScene.includes(scene)) {\r\n return false\r\n }\r\n return true\r\n })\r\n : asLayout.allDbFeatures;\r\n // console.log(\"asLayout.allDbFeatures\", asLayout.allDbFeatures);\r\n // console.log(\"needToLoadFeatures\", needToLoadFeatures);\r\n for (let i = 0; i < needToLoadFeatures.length; i++) {\r\n fakeLayout.loadDbFeature(needToLoadFeatures[i], parentGroups)\r\n }\r\n fakeLayout.createCustomConfigurations(); // set shower body first\r\n fakeLayout.setDefaultFeatures();\r\n fakeLayout.initialized = true;\r\n return fakeLayout\r\n};\r\n\r\n/**\r\n * Returns the visualizer type from saved quote\r\n * @param bvScene {object} main object that passed between backend and frontend\r\n // * @param quoteObject {object} not required // main parent quote(room) object that passed between backend and frontend\r\n * @returns {string}\r\n */\r\nexport const getVisualizerTypeFromBvScene = (bvScene) => {\r\n if (bvScene.visualizerType) {\r\n return bvScene.visualizerType // this should be the most common case, but we still need to support old quotes :(\r\n }\r\n if (bvScene.bathroom_floor || bvScene.shower_body) {\r\n switch (document.kvConfig.toolVersion) {\r\n case 6:\r\n return AVAILABLE_VISUALIZER_TYPES.bvLook\r\n case 5:\r\n return AVAILABLE_VISUALIZER_TYPES.bvScene\r\n case 4:\r\n default:\r\n return AVAILABLE_VISUALIZER_TYPES.Bathroom\r\n }\r\n }\r\n if (bvScene.kitchen_floor) {\r\n return document.kvConfig.toolVersion === 5 ? AVAILABLE_VISUALIZER_TYPES.kvScene : AVAILABLE_VISUALIZER_TYPES.Kitchen\r\n }\r\n // return quoteObject ? quoteObject.room : \"\"\r\n return document.kvConfig.visualizerType\r\n};\r\n\r\n/**\r\n * @param layout {object}\r\n */\r\nexport const getCurrentRoomType = (layout = getCurrentLayout()) => {\r\n if (layout.type >= 10) {\r\n return LOOK_ROOM_TYPES.as\r\n }\r\n return LOOK_ROOM_TYPES.grohe\r\n // return IS_AS_BATHROOM ? LOOK_ROOM_TYPES.as : LOOK_ROOM_TYPES.grohe\r\n};\r\n\r\n\r\n/**\r\n * @param layout {object}\r\n * @returns featureGroup {featureGroupInterface}\r\n */\r\nexport const getCountertopFeatureGroup = (layout = getCurrentLayout(), ) => {\r\n let mainNeeded, oppositeNeeded;\r\n switch (getCommonVisualizerType(layout.visualizerType)) {\r\n case \"kitchen\":\r\n mainNeeded = \"center_island_countertop\";\r\n oppositeNeeded = \"countertop\";\r\n break;\r\n case \"bathroom\":\r\n mainNeeded = COUNTERTOP_LABELS.shower_wall;\r\n oppositeNeeded = \"vanity_countertop\";\r\n break;\r\n case \"fireplace\":\r\n mainNeeded = \"front_wall\";\r\n break;\r\n default:\r\n mainNeeded = \"countertop\";\r\n break;\r\n }\r\n let featureGroupCountertop = layout.getSubPartFromQtCategories(mainNeeded);\r\n if (!featureGroupCountertop && oppositeNeeded) {\r\n featureGroupCountertop = layout.getSubPartFromQtCategories(oppositeNeeded);\r\n }\r\n if (featureGroupCountertop) {\r\n return featureGroupCountertop.part\r\n }\r\n\r\n return layout.getFeatureGroupByPartId(mainNeeded) || (oppositeNeeded ? layout.getFeatureGroupByPartId(oppositeNeeded) : null)\r\n}\r\n","import {ROUTES} from \"../../../routes\";\r\n\r\nexport const LayoutType = {\r\n Layout1: 1,\r\n Layout2: 2,\r\n Layout3: 3,\r\n Layout4: 4,\r\n Layout5: 5,\r\n Layout6: 6,\r\n Layout7: 7,\r\n Layout8: 8,\r\n Layout9: 9,\r\n Layout10: 10,\r\n Layout11: 11,\r\n Layout12: 12,\r\n Layout13: 13,\r\n Layout14: 14,\r\n Layout15: 15,\r\n Layout16: 16,\r\n Layout17: 17,\r\n Layout18: 18,\r\n Layout19: 19,\r\n Layout20: 20,\r\n};\r\n\r\nexport const LayoutAbbreviation = {\r\n All: \"ALL\",\r\n Layout1: \"Layout1\",\r\n Layout2: \"Layout2\",\r\n Layout3: \"Layout3\",\r\n Layout4: \"Layout4\",\r\n Layout5: \"Layout5\",\r\n Layout6: \"Layout6\",\r\n Layout7: \"Layout7\",\r\n Layout8: \"Layout8\",\r\n Layout9: \"Layout9\",\r\n Layout10: \"Layout10\",\r\n Layout11: \"Layout11\",\r\n Layout12: \"Layout12\",\r\n Layout13: \"Layout13\",\r\n Layout14: \"Layout14\",\r\n Layout15: \"Layout15\",\r\n Layout16: \"Layout16\",\r\n Layout17: \"Layout17\",\r\n Layout18: \"Layout18\",\r\n Layout19: \"Layout19\",\r\n Layout20: \"Layout20\",\r\n};\r\n\r\nexport const LayoutAbbreviations = [\r\n \"Layout1\",\r\n \"Layout2\",\r\n \"Layout3\",\r\n \"Layout4\",\r\n \"Layout5\",\r\n \"Layout6\",\r\n \"Layout7\",\r\n \"Layout8\",\r\n \"Layout9\",\r\n \"Layout10\",\r\n \"Layout11\",\r\n \"Layout12\",\r\n \"Layout13\",\r\n \"Layout14\",\r\n \"Layout15\",\r\n \"Layout16\",\r\n \"Layout17\",\r\n \"Layout18\",\r\n \"Layout19\",\r\n \"Layout20\",\r\n];\r\nexport const LayoutAbbreviationsToRemove = [\r\n \"Layout20\",\r\n \"Layout19\",\r\n \"Layout18\",\r\n \"Layout17\",\r\n \"Layout16\",\r\n \"Layout15\",\r\n \"Layout14\",\r\n \"Layout13\",\r\n \"Layout12\",\r\n \"Layout11\",\r\n \"Layout10\",\r\n \"Layout9\",\r\n \"Layout8\",\r\n \"Layout7\",\r\n \"Layout6\",\r\n \"Layout5\",\r\n \"Layout4\",\r\n \"Layout3\",\r\n \"Layout2\",\r\n \"Layout1\",\r\n];\r\n\r\nexport const METADATA = {\r\n ALL: \"ALL\",\r\n NO: \"NO\",\r\n LeftSide: \"L\", // used as side for shower grab bars\r\n RightSide: \"R\", // used as side for shower grab bars\r\n Center: \"C\", // used as side for shower doors and others\r\n Inner: \"T\", // used for sinks & faucets\r\n Outer: \"S\", // used for sinks & faucets,\r\n StandAlone: \"ST\", // used for sinks & faucets,\r\n SingleHole: \"Single Hole Faucets\", // used for sinks & faucets,\r\n WallHungSinks: \"Wall Hung Sinks\", // used for sinks & faucets,\r\n WidespreadFaucets: \"Widespread Faucets\", // used for sinks & faucets,\r\n BathtubWithEnclosures: \"Drop-in\", // used for bathtubs & enclosures,\r\n BathtubWithoutEnclosures: \"StandAlone\", // used for bathtubs & enclosures,\r\n};\r\n\r\nexport const ShowerComboTubType = {\r\n bathtub_liner: \"bathtub_liner\",\r\n replacement_tub: \"replacement_tub\",\r\n walk_in_tub: \"walk_in_tub\",\r\n jetted_tub: \"jetted_tub\",\r\n};\r\n\r\nexport const CountsType = {\r\n allLayoutFeaturesCount: \"All\", // not used\r\n largeLayoutFeaturesCount: \"Large\",\r\n smallLayoutFeaturesCount: \"Small\",\r\n totalFeaturesCount: \"Total\" // not used\r\n};\r\n\r\nexport const BathTubType = {\r\n Custom60in: 'Custom60in',\r\n FreeStanding: 'BathTubFreeStanding'\r\n};\r\n\r\nexport const VanityTypes = {\r\n Complete: 'Complete',\r\n Custom: 'Custom'\r\n};\r\n\r\nexport const ShowerBodyType = {\r\n Glass: 0,\r\n Door: 1\r\n};\r\n\r\nexport const PartMenuType = {\r\n Simple: 0, // i.e. Toilet - doesn't have any sub-items\r\n Complex: 1, // i.e. Vanity - has sub-menu items, Sink, Faucet Mirror\r\n};\r\n\r\nexport const ShowerHeadTypes = { // todo we might will change it soon, tbd\r\n shower_arm: \"shower_arm\", // old\r\n shower_head_bundle: \"shower_head_bundle\", // old\r\n shower_trim_kit: \"shower_trim_kit\", // new\r\n shower_fixture: \"shower_fixture\", // new\r\n shower_system: \"shower_system\", // new\r\n};\r\n\r\nexport const ShowerHandTypes = { // https://qc-cdn.s3.amazonaws.com/lixil/shower_hand_logic.png\r\n hand_shower_kit: \"hand_shower_kit\",\r\n hand_shower_holder: \"hand_shower_holder\",\r\n};\r\n\r\nexport const VANITY_TYPES = {\r\n // standAlone: \"standAlone\", // ST\r\n vanity_cabinet: \"vanity_cabinet\", // S, W, A, U\r\n vanity_console: \"vanity_console\", // T\r\n vanity_washstand: \"vanity_washstand\", // T, S, W, A, U\r\n};\r\n\r\nexport const useNewNavLogicPartIds = [\"vanity_sink\", ...Object.keys(VANITY_TYPES)];\r\n\r\nexport function bathTubTypeToString(bathTypeType) {\r\n switch (bathTypeType) {\r\n case BathTubType.Custom60in:\r\n return 'Custom';\r\n case BathTubType.FreeStanding:\r\n return 'Complete';\r\n }\r\n}\r\nexport function bathTubStringToType(bathtubString) {\r\n switch (bathtubString) {\r\n case 'custom':\r\n return BathTubType.Custom60in;\r\n case 'complete':\r\n return BathTubType.FreeStanding;\r\n }\r\n}\r\n\r\nexport const vanityWizardFilters = [\"Size\", \"DoorStyle\", \"Material\", \"Color\"];\r\n\r\nexport const showerWizardFilters = [\"Material\", \"DuraBathColor\", \"SlabColor\", \"TileColor\", \"TilePattern\", \"AcrylicPattern\", \"AcrylicColor\"];\r\n\r\nexport const NotQCVanityDoorStylesFilters = [\"Centennial\", \"Hudson\", \"Northbrook\", \"Osage\", \"Quebec\", \"Riverside\", \"Villager\", \"Zurich\"];\r\n\r\nexport const COUNTERTOP_GROUP_BATHROOM = [\"vanity_countertop\", \"vanity_backsplash\"];\r\n\r\nexport const CABINET_GROUP_BATHROOM = [\"vanity_cabinet\", \"vanity_mirror\"];\r\n\r\nexport const CORNER_SHELVES_POSITIONS = [\"L1\",\"L2\",\"L3\",\"R1\",\"R2\",\"R3\"];\r\n\r\nexport const SIDE_POSITIONS = [\"L\",\"R\", \"C\"];\r\nexport const createParentPositions = (object) => {\r\n if (!object.layerPositions) {\r\n object.layerPositions = {};\r\n }\r\n SIDE_POSITIONS.forEach(position => {\r\n object.layerPositions[position] = null;\r\n })\r\n}\r\nexport const createPageToLoadArray = (object) => {\r\n object.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n object.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n}\r\n\r\nexport const PAN_POSITIONS = [\"L\",\"C\",\"R\"];\r\n\r\nexport const VANITY_POSITIONS = [\"L\",\"0\",\"R\"];\r\n\r\nexport const LOOK_OPENED_TYPES = {\r\n edit: \"edit\",\r\n featureZoom: \"featureZoom\"\r\n}\r\n\r\nexport const LOOK_FEATURE_CONTENT = {\r\n info: \"info\",\r\n threeD: \"threeD\",\r\n aug: \"aug\",\r\n gallery: \"gallery\", //todo\r\n}\r\n\r\nexport const LOOK_OVERLAYS = {\r\n exit: \"exit\",\r\n intro: \"intro\",\r\n print: \"print\",\r\n reset: \"reset\",\r\n loadingCart: \"loadingCart\",\r\n questionLogin: \"questionLogin\",\r\n questionShare: \"questionShare\",\r\n questionView: \"questionView\",\r\n questionViewUpdated: \"questionViewUpdated\",\r\n questionRemove: \"questionRemove\",\r\n saveSucess: \"saveSucess\",\r\n stylePairing: \"stylePairing\",\r\n styleColor: \"styleColor\",\r\n styleRemove: \"styleRemove\",\r\n styleRemoveBack: \"styleRemoveBack\",\r\n styleRemoveFeature: \"styleRemoveFeature\",\r\n notCompatiblePopup: \"notCompatiblePopup\",\r\n leadCapture: \"leadCapture\",\r\n}\r\n\r\nexport const LOCAL_STORAGE_KEYS = {\r\n introVisited: \"introVisited\",\r\n saveQuoteRequired: \"saveQuoteRequired\", // not used anymore\r\n requiredShareButton: \"requiredShareButton\" // not used anymore\r\n}\r\n\r\nexport const LOOK_INTRO_STEPS = {\r\n welcome: 0,\r\n // edit: 1,\r\n layoutsAndRooms: 1,\r\n wallsAndFloor: 2,\r\n saveAndMore: 3,\r\n review: 4,\r\n}\r\n\r\nexport const LOOK_INTRO_STEPS_MOBILE = {\r\n welcome: 0,\r\n wallsAndFloor: 1,\r\n layouts: 2,\r\n saveAndMore: 3,\r\n rooms: 4,\r\n review: 5,\r\n}\r\n\r\nexport const CONTEXT_MENU_VANITY_ONLY = [...Object.keys(VANITY_TYPES), \"vanity_legs\"];\r\nexport const CONTEXT_MENU_VANITY_BUTTONS = [\"vanity_faucet\", \"vanity_sink\", \"vanity_countertop\", \"vanity_backsplash\", ...CONTEXT_MENU_VANITY_ONLY];\r\nexport const CONTEXT_MENU_BATHTUB_BUTTONS = [\"bathtub_body\", \"bathtub_fixture\"];\r\nexport const CONTEXT_MENU_SPLIT_WALL = [\"split_wall\", \"shower_screen\"];\r\nexport const CONTEXT_MENU_SHOWER_ALL = [\"shower_fixture\", \"shower_arm\", \"shower_head\", \"shower_head_bundle\",\r\n \"hand_shower_kit\", \"shower_wall\", \"shower_door\", \"shower_pan_combo\", \"replacement_tub\"];\r\nexport const CONTEXT_MENU_SHOWER_OTHER = [\"valve_trim\", \"body_spray\", \"wall_union\", \"shower_hose\", \"hand_shower_holder\",\r\n \"hand_shower_only\", \"hand_shower\", \"diverter_trim\"];\r\nexport const CONTEXT_MENU_SHOWER_ACCESSORIES = [\"shower_pod\", \"grab_bar\", \"corner_shelf\", \"large_corner_seat\",\r\n \"shower_seats\", \"soap_dish\", \"shower_rod\"];\r\n\r\nexport const CONTEXT_MENU_KITCHEN_COUNTERTOPS = [\"countertop\", \"faucet\", \"sink\", \"edge_profile\"];\r\nexport const CONTEXT_MENU_KITCHEN_CENTER_ISLAND = [\"center_island_sink\", \"center_island_faucet\", \"center_island_countertop\",\r\n \"center_island_stovetop\", \"center_island_range\", \"center_island_edge\"];\r\n\r\nexport const ALL_CONTEXT_MENU = [\r\n ...CONTEXT_MENU_VANITY_BUTTONS,\r\n ...CONTEXT_MENU_BATHTUB_BUTTONS,\r\n ...CONTEXT_MENU_SPLIT_WALL,\r\n ...CONTEXT_MENU_SHOWER_ALL,\r\n ...CONTEXT_MENU_SHOWER_OTHER,\r\n ...CONTEXT_MENU_SHOWER_ACCESSORIES,\r\n];\r\n\r\nexport const ALL_CONTEXT_MENU_KITCHEN = [\r\n ...CONTEXT_MENU_KITCHEN_CENTER_ISLAND,\r\n ...CONTEXT_MENU_KITCHEN_COUNTERTOPS,\r\n];\r\n\r\nexport const DECORS_MAX = 100;\r\n\r\nexport let LOOK_WALLS = [\"left_wall\", \"right_wall\", \"front_wall\", \"back_wall\", \"split_wall\", \"left_wall_splitter\", \"shower_wall\", \"bathroom_floor\"];\r\nfor (let i = 1; i <= DECORS_MAX; i++) {\r\n LOOK_WALLS.push(\"decor_\" + i);\r\n}\r\n\r\nexport const LOOK_WALLS_ONLY = [\"left_wall\", \"right_wall\", \"front_wall\", \"back_wall\", \"split_wall\", \"left_wall_splitter\",\r\n \"shower_wall\", \"wainscoting\", \"enclosure_top\", \"enclosure_bottom\", \"center_wall\", \"shower_floor\", \"shower_curb\", \"pony_wall\"];\r\n\r\nexport const POSSIBLE_ONE_POSITION = [\"towel_bar\", \"robe_hook\"];\r\n\r\nexport const WHITE_PAGE_ROUTES = [ROUTES.view, ROUTES.list, ROUTES.login, ROUTES.register, ROUTES.rooms];\r\n\r\nexport const AVAILABLE_FILTERS = [\"Color\", \"Material\", \"Collection\", \"Size\"];\r\n\r\nexport const WIZARD_STEP_WIDTH = 184; // 176 + 8\r\nexport const WIZARD_STEP_MOBILE_WIDTH = 96; // 88 + 8\r\nexport const WIZARD_STEP_PRODUCT_JOURNEY = 88; // 80 + 8\r\n\r\nexport const LOOK_NAVIGATION_LIST_TYPES = {\r\n regular: \"regular\",\r\n designRec: \"designRec\",\r\n notMatchingMeta: \"notMatchingMeta\"\r\n}\r\n\r\nexport const LOOK_ROOM_TYPES = {\r\n as: \"americanstandard\",\r\n grohe: \"grohe\",\r\n}\r\n","import store from \"./store\";\r\nimport {IS_LIXIL_PRODUCTION} from \"./config\";\r\nimport {isIframe} from \"./misc/helpers\";\r\n\r\nfunction isAnalytics() {\r\n return (typeof window.ga !== 'undefined');\r\n}\r\n\r\nfunction isMixPanel() {\r\n return (typeof window.mixpanel !== 'undefined');\r\n}\r\n\r\nfunction isGtag() {\r\n return (typeof window.gtag !== 'undefined')\r\n}\r\n\r\nconst Analytics = {\r\n sendEvent: function(action, label, data) {\r\n if(window.analyticsDebugging)\r\n console.log('analytics tracking', action, label, data);\r\n if(isAnalytics()) {\r\n ga('send', 'event', 'bathroom-visualizer', action, label);\r\n }\r\n if(isGtag()) {\r\n gtag('event', action, {\r\n 'event_category': 'visualizer',\r\n 'event_label': label\r\n });\r\n }\r\n if(isMixPanel()) {\r\n mixpanel.track(action, {\r\n source: 'bathroom-visualizer',\r\n label: label,\r\n shareUrl: window.shareUrl,\r\n domain: window.location.host,\r\n ...data\r\n });\r\n }\r\n return true;\r\n },\r\n sendPageEvent: function(label, data) {\r\n return this.sendEvent('page-change-to', label, data);\r\n },\r\n sendDataEnteredEvent: function(label, data) {\r\n return this.sendEvent('data-entered', label, data);\r\n },\r\n sendClickEvent: function(label, data) {\r\n const {isMobile} = store.getState().serverState;\r\n if (isMobile) {\r\n label = `mobile-${label}`;\r\n }\r\n console.log(\"label\", label);\r\n return this.sendEvent('clicked-on', label, data);\r\n },\r\n sendEcommerceEvent: function(action, data) {\r\n if (!IS_LIXIL_PRODUCTION) {\r\n return false\r\n }\r\n console.log(\"analytics ecommerce event:\", action, data);\r\n if (window.gtag) {\r\n window.gtag('event', action, data); // https://support.google.com/analytics/answer/9267735#online-sales\r\n }\r\n return true;\r\n },\r\n setUserId: function(userId) {\r\n if(isAnalytics()) {\r\n ga('set', 'userId', userId);\r\n }\r\n },\r\n setMixPanelPerson: function(email, name, phone) {\r\n if(isMixPanel()) {\r\n if(window.analyticsDebugging)\r\n console.log('set mixpanel identity', email, name, phone);\r\n mixpanel.alias(email);\r\n mixpanel.identify(email);\r\n mixpanel.people.set({'$email': email, '$created': new Date(),'$name': name, '$phone':phone});\r\n }\r\n },\r\n setExistingMixPanelPerson: function(email) {\r\n if(isMixPanel()) {\r\n if(window.analyticsDebugging)\r\n console.log(\"set existing mixpanel identity\");\r\n mixpanel.identify(email);\r\n }\r\n },\r\n logOutMixPanel: function() {\r\n if(window.analyticsDebugging)\r\n console.log('reset mixpanel identity', email, name, phone);\r\n if(isMixPanel()) {\r\n mixpanel.reset();\r\n }\r\n },\r\n sendParentPostMessage: function (action) {\r\n if (!isIframe() || !window.parent) {\r\n return\r\n }\r\n const {country, email, firstName, phoneNumber, postal} = store.getState().userState.userInfo;\r\n window.parent.postMessage({\r\n action,\r\n payload: {country, email, firstName, phoneNumber, postal},\r\n }, \"*\");\r\n },\r\n getSkuForAnalytics: function(feature, withPartId = true) {\r\n const sku = feature.dbFeature.sku || feature.dbFeature.sharedFeatureName;\r\n return withPartId\r\n ? feature.partId + \"-\" + sku.replace(/ /gi, \"_\")\r\n : sku.replace(/ /gi, \"_\")\r\n },\r\n getStringForAnalytics: function(string = \"\") {\r\n return string.replace(/ /gi, \"_\")\r\n },\r\n}\r\n\r\nexport const QKB_ANALYTIC_EVENTS = {\r\n quotingToolWizardSwitch: \"quotingtool-wizard-switch-\",\r\n}\r\n\r\nexport const LOOK_JOURNEY_ANALYTIC_EVENTS = {\r\n lookExit: \"look-exit\",\r\n lookCartButton: \"look-cart-button\",\r\n lookSidebarHome: \"look-sidebar-home\",\r\n lookSidebarFilters: \"look-sidebar-filters\",\r\n lookSidebarEdit: \"look-sidebar-edit\",\r\n lookSidebarRooms: \"look-sidebar-rooms\",\r\n lookSidebarPingPilot: \"look-sidebar-ping-pilot\",\r\n lookSidebarSave: \"look-sidebar-save\",\r\n lookSidebarMore: \"look-sidebar-more\",\r\n lookSidebarShare: \"look-sidebar-share\",\r\n lookSidebarReset: \"look-sidebar-reset\",\r\n lookSidebarFacebook: \"look-sidebar-facebook\",\r\n lookSidebarTwitter: \"look-sidebar-twitter\",\r\n lookSidebarPinterest: \"look-sidebar-pinterest\",\r\n lookSidebarFeatureGroup: \"look-sidebar-feature-group-\",\r\n lookFooterExpandMenu: \"look-footer-expand-menu\",\r\n lookFooterCloseMenu: \"look-footer-close-menu\",\r\n lookMenuHeaderClose: \"look-menu-header-close\",\r\n lookMenuHeaderBack: \"look-menu-header-back\",\r\n lookMenuHeaderViewType: \"look-menu-header-view-type-\",\r\n lookFooterList: \"look-footer-your-list\",\r\n lookZoomPlus: \"look-zoom-plus\",\r\n lookZoomMinus: \"look-zoom-minus\",\r\n lookCanvasLayer: \"look-canvas-layer-\",\r\n lookCanvasContextMenu: \"look-canvas-context-menu-\",\r\n lookCanvasContextMenuItem: \"look-canvas-context-menu-item-\",\r\n lookCanvasDemoPoint: \"look-canvas-demo-point-\",\r\n lookFeatureImageChangeLeft: \"look-feature-image-change-left\",\r\n lookFeatureImageChangeRight: \"look-feature-image-change-right\",\r\n lookFeature3dAndArOpen: \"look-feature-3d-and-ar-open\",\r\n lookFeature3dAndArClose: \"look-feature-3d-and-ar-close\",\r\n lookFeatureMoreInfoOpen: \"look-feature-more-info-open\",\r\n lookFeatureMoreInfoClose: \"look-feature-more-info-close\",\r\n lookFeatureInfoContentHeaderClose: \"look-feature-info-content-header-close\",\r\n lookFeatureInfoContent3dAr: \"look-feature-info-content-3d-ar\",\r\n lookFeatureInfoContentSwitch: \"look-feature-info-content-switch-\",\r\n lookFeatureInfoContentFeatureLink: \"look-feature-info-content-feature-link-\",\r\n lookFeatureInfoContentAccordionOpen: \"look-feature-info-content-accordion-open-\",\r\n lookFeatureInfoContentAccordionClose: \"look-feature-info-content-accordion-close-\",\r\n lookFeatureChange: \"look-feature-change\",\r\n lookFeatureUnlock: \"look-feature-unlock\",\r\n lookFeatureRemove: \"look-feature-remove-\",\r\n lookFeatureEnable: \"look-feature-enable-\",\r\n lookFeatureConfirmChange: \"look-feature-confirm-change\",\r\n lookFeatureOptions: \"look-feature-options-\",\r\n lookFeatureMatchColorsCheckbox: \"look-feature-match-colors-checkbox-\",\r\n lookFeatureMobile3dButton: \"look-feature-mobile-3d-button\",\r\n lookFeaturesListDesignRecommended: \"look-features-list-design-recommended-\",\r\n lookFeaturesList: \"look-features-list-\",\r\n lookFeaturesFiltersClose: \"look-features-filters-close\",\r\n lookFeaturesFiltersReset: \"look-features-filters-reset\",\r\n lookFeaturesFiltersAccordionOpen: \"look-features-filters-filter-group-open-\",\r\n lookFeaturesFiltersAccordionClose: \"look-features-filters-filter-group-close-\",\r\n lookFeaturesFiltersValueChecked: \"look-features-filters-filter-value-checked-\",\r\n lookFeaturesFiltersValuerUnChecked: \"look-features-filters-filter-value-unchecked-\",\r\n lookOverlayLeave: \"look-overlay-leave\",\r\n lookOverlaySave: \"look-overlay-save\",\r\n lookPopupLogin: \"look-popup-login\",\r\n lookRoom: \"look-room-\",\r\n lookLeadCapturePopupLogin: \"look-lead-capture-popup-login\",\r\n lookLeadCapturePopupRegister: \"look-lead-capture-popup-register\",\r\n lookLeadCapturePopupForgotPassword: \"look-lead-capture-popup-forgot-password\",\r\n lookLeadCapturePopupTwoFAResendCode: \"look-lead-capture-popup-two-fa-resend-code\",\r\n lookLeadCapturePopupTwoFAReceiveCall: \"look-lead-capture-popup-two-fa-receive-call\",\r\n lookLeadCapturePopupTwoFAUpdatePhone: \"look-lead-capture-popup-two-fa-update-phone\",\r\n lookMobileActiveFeatureButton: \"look-mobile-active-feature-button\",\r\n lookMobileListClose: \"look-mobile-list-close\",\r\n lookIntroLearnToUse: \"look-intro-learn-to-use\",\r\n lookIntroStartDesign: \"look-intro-start-design\",\r\n lookIntroSkip: \"look-intro-skip-on-step-\",\r\n lookIntroFinalStepStartDesign: \"look-intro-final-step-start-design\",\r\n lookIntroPagination: \"look-intro-pagination-\",\r\n lookIntroNextStep: \"look-intro-next-step-\",\r\n lookRoomIdeasOnIntro: \"look-room-ideas-on-intro\",\r\n lookRoomIdeasOpen: \"look-room-ideas-open\",\r\n lookRoomIdeasClose: \"look-room-ideas-close\",\r\n lookRoomIdeasPreset: \"look-room-ideas-preset-\",\r\n lookMainCategory: \"look-main-category-\",\r\n lookCanvasPolicyLinks: \"look-canvas-policy-links-\",\r\n lookListPolicyLinks: \"look-list-policy-links-\",\r\n lookListHeaderSave: \"look-list-header-save\",\r\n lookListBackToCustomize: \"look-list-back-to-customize\",\r\n lookListAddToCart: \"look-list-add-to-cart\",\r\n lookListOpenMiniCart: \"look-list-open-mini-cart\",\r\n lookListSelectAllItems: \"look-list-select-all-items-\",\r\n lookListCartItemSelect: \"look-list-cart-item-\",\r\n lookListCartItemQuantityChange: \"look-list-cart-item-quantity-\",\r\n lookListCartItemRemove: \"look-list-cart-item-remove-\",\r\n lookListCartItemMoreDropdown: \"look-list-cart-item-more-dropdown-\",\r\n lookListCartItemMoreDropdownWishlist: \"look-list-cart-item-more-dropdown-wishlist-\",\r\n lookListCartItemMoreDropdownChange: \"look-list-cart-item-more-dropdown-change-\",\r\n lookStylePopupConfirmRemove: \"look-style-popup-confirm-remove\",\r\n lookStylePopupRemoveBackContinue: \"look-style-popup-remove-back-continue\",\r\n lookStylePopupRemoveBack: \"look-style-popup-remove-back\",\r\n lookStylePopupConfirm: \"look-style-popup-confirm\",\r\n lookPopupSaveSuccessSubmit: \"look-popup-save-success-submit\",\r\n lookPopupSaveResetSubmit: \"look-popup-reset-submit\",\r\n lookPopupChangeViewSubmit: \"look-popup-change-view-submit\",\r\n lookMenuWizard: \"look-menu-wizard-\",\r\n lookWizardParent: \"look-wizard-parent-\",\r\n lookWizardListFeature: \"look-wizard-list-feature-\",\r\n lookWizardListFilter: \"look-wizard-list-filter-\",\r\n lookWizardMatchAll: \"look-wizard-match-all-\",\r\n lookWizardCompletedClose: \"look-wizard-completed-close\",\r\n lookShowCompatabilityAlert: \"look-show-compatability-alert\",\r\n lookCloseCompatabilityAlert: \"look-close-compatability-alert\",\r\n lookCloseAndApplyCompatabilityAlert: \"look-close-and-apply-compatability-alert\",\r\n lookLockedButton: \"look-locked-button\",\r\n lookSidebarRevertCtrlZ: \"look-sidebar-revert-or-ctrl-z\",\r\n}\r\n\r\nexport const PRODUCT_JOURNEY_ANALYTIC_EVENTS = {\r\n productTopButtonsShop: \"product-top-buttons-shop\",\r\n productTopButtonsExit: \"product-top-buttons-exit\",\r\n productTopButtonsMenu: \"product-top-buttons-menu\",\r\n productTopButtonsShare: \"product-top-buttons-share-\",\r\n productTopButtonsPingPilot: \"product-top-buttons-ping-pilot\",\r\n productTopButtonsShareFacebook: \"product-top-buttons-share-facebook\",\r\n productTopButtonsShareTwitter: \"product-top-buttons-share-twitter\",\r\n productTopButtonsSharePinterest: \"product-top-buttons-share-pinterest\",\r\n productTopButtonsSave: \"product-top-buttons-save\",\r\n productCanvasLayer: \"product-canvas-layer-\",\r\n productCanvasContextMenu: \"product-canvas-context-menu-\",\r\n productCanvasContextMenuItem: \"product-canvas-context-menu-item-\",\r\n productCanvasDemoPoint: \"product-canvas-demo-point-\",\r\n productSidebarHeaderAllProducts: \"product-sidebar-header-all-products\",\r\n productSidebarHeaderRoomLayouts: \"product-sidebar-header-room-layouts\",\r\n productSidebarHeaderCart: \"product-sidebar-header-cart\",\r\n productSidebarCategory: \"product-sidebar-category-\",\r\n productFeatureChange: \"product-feature-change\",\r\n productFeatureImageChangeLeft: \"product-feature-image-change-left\",\r\n productFeatureImageChangeRight: \"product-feature-image-change-right\",\r\n productFeatureMoreInfoOpen: \"product-feature-more-info-open\",\r\n productFeatureMoreInfoClose: \"product-feature-more-info-close\",\r\n productFeatureInfoContentAccordionOpen: \"product-feature-info-content-accordion-open-\",\r\n productFeatureInfoContentAccordionClose: \"product-feature-info-content-accordion-close-\",\r\n productFeatureQuantityChange: \"product-feature-quantity-change\",\r\n productFeatureRemove: \"product-feature-remove-\",\r\n productFeatureEnable: \"product-feature-enable-\",\r\n productFeature3dAndArOpen: \"product-feature-3d-and-ar-open\",\r\n productFeature3dAndArClose: \"product-feature-3d-and-ar-close\",\r\n productFeatureInfoContentHeaderClose: \"product-feature-info-content-header-close\",\r\n productFeatureInfoContent3dAr: \"product-feature-info-content-3d-ar\",\r\n productFeatureInfoContentSwitch: \"product-feature-info-content-switch-\",\r\n productFeatureInfoContentFeatureLink: \"product-feature-info-content-feature-link-\",\r\n productFeatureUnlockNow: \"product-feature-unlock-now\",\r\n productFeatureLockedBadge: \"product-feature-locked-badge\",\r\n productFeatureLocked3DButton: \"product-feature-locked-3d-button\",\r\n productFeatureSQFT: \"product-feature-sqft\",\r\n productFeatureAddToCart: \"product-feature-add-to-cart-\",\r\n productFeatureContinueShopping: \"product-feature-continue-shopping\",\r\n productFeatureCloseProductsList: \"product-feature-close-features-list\",\r\n productFeatureOptions: \"product-feature-options-\",\r\n productFeatureMobile3dButton: \"product-feature-mobile-3d-button\",\r\n productFeaturesNext: \"product-features-next-\",\r\n productFeaturesList: \"product-features-list-\",\r\n productFeaturesListViewType: \"product-features-list-view-type-\",\r\n productFeaturesFiltersClose: \"product-features-filters-close\",\r\n productFeaturesFiltersReset: \"product-features-filters-reset\",\r\n productFeaturesFiltersAccordionOpen: \"product-features-filters-filter-group-open-\",\r\n productFeaturesFiltersAccordionClose: \"product-features-filters-filter-group-close-\",\r\n productFeaturesFiltersValueChecked: \"product-features-filters-filter-value-checked-\",\r\n productFeaturesFiltersValuerUnChecked: \"product-features-filters-filter-value-unchecked-\",\r\n productSimilarListClose: \"product-similar-list-close\",\r\n productSimilarListTitle: \"product-similar-list-title\",\r\n productSimilarListFeature: \"product-similar-list-feature-\",\r\n productSimilarListFeatureAddToCart: \"product-similar-list-feature-add-to-cart-\",\r\n productOverlayLeave: \"product-overlay-leave\",\r\n productOverlaySave: \"product-overlay-save\",\r\n productPopupLogin: \"product-popup-login\",\r\n productMatchColorsVisualizeAllCheckbox: \"product-match-colors-visualize-all-checkbox-\",\r\n productRoom: \"product-room-\",\r\n productRoomLayouts: \"product-room-layouts\",\r\n productRoomIdeas: \"product-room-ideas\",\r\n productRoomIdeasPreset: \"product-room-ideas-preset-\",\r\n productFiltersOpen: \"product-filters-open\",\r\n productMenuFooterButton: \"product-menu-footer-button\",\r\n productPopupSaveSuccessSubmit: \"product-popup-save-success-submit\",\r\n productPopupResetSubmit: \"product-popup-reset-submit\",\r\n productPopupChangeViewSubmit: \"product-popup-change-view-submit\",\r\n roomsRoomLayouts: \"rooms-room-layouts\",\r\n roomsRoomIdeas: \"rooms-room-ideas\",\r\n cartCheckoutLogin: \"cart-checkout-login\",\r\n cartCheckoutRegister: \"cart-checkout-register\",\r\n cartCheckoutSuccessContinueShopping: \"cart-checkout-success-continue-shopping\",\r\n cartCheckoutSuccessViewAll: \"cart-checkout-success-view-all-\",\r\n cartCheckoutSuccessFeature: \"cart-checkout-success-feature-\",\r\n cartTermsAccept: \"cart-terms-accept\",\r\n cartTwoFANext: \"cart-two-fa-next\",\r\n cartTwoFAUpdatePhone: \"cart-two-fa-update-phone\",\r\n cartTwoFAResendCode: \"cart-two-fa-resend-code\",\r\n cartTwoFAReceiveCall: \"cart-two-fa-receive-call\",\r\n leadCapturePopupLogin: \"lead-capture-popup-login\",\r\n leadCapturePopupRegister: \"lead-capture-popup-register\",\r\n leadCapturePopupForgotPassword: \"lead-capture-popup-forgot-password\",\r\n leadCapturePopupTwoFAResendCode: \"lead-capture-popup-two-fa-resend-code\",\r\n leadCapturePopupTwoFAReceiveCall: \"lead-capture-popup-two-fa-receive-call\",\r\n leadCapturePopupTwoFAUpdatePhone: \"lead-capture-popup-two-fa-update-phone\",\r\n productLockedButton: \"product-locked-button\",\r\n shopFeaturesList: \"shop-features-list-\",\r\n shopFeaturesListOptions: \"shop-features-list-options-\",\r\n shopFeatureOptions: \"shop-feature-options-\",\r\n shopFeatureAddToCart: \"shop-feature-add-to-cart-\",\r\n shopHelpChat: \"shop-help-chat\",\r\n shopSQFTButton: \"shop-feature-sqft\",\r\n}\r\n\r\nexport default Analytics\r\n","import {\r\n hardCodeIsCaesarStone,\r\n hardCodeIsLowes,\r\n hardCodeIsMcDermott,\r\n hardCodeIsModerno,\r\n hardCodeIsPorcelanosa,\r\n isProd\r\n} from \"../../misc/fabricatorHardcode\";\r\n\r\nexport const isDevMode = () => {\r\n return window.location.href.includes(\"dev=1\") || document.kvConfig.devMode\r\n};\r\n\r\nexport const SQFT_POST_MESSAGE_ACTIONS = {\r\n initialLoad: \"initialLoad\",\r\n setQTData: \"setQTData\",\r\n closeSqFtCalc: \"closeSqFtCalc\",\r\n callResetDataPopup: \"callResetDataPopup\",\r\n callChangeLayoutDataPopup: \"callChangeLayoutDataPopup\",\r\n userIdleResetCounter: \"userIdleResetCounter\",\r\n resetHistory: \"resetHistory\",\r\n saveHistory: \"saveHistory\",\r\n setNewLayoutOnSqft: \"setNewLayoutOnSqft\",\r\n setCanvasCenter: \"setCanvasCenter\",\r\n stopRender: \"stopRender\",\r\n startRender: \"startRender\",\r\n};\r\n\r\nexport const MEASURE_UNITS = {\r\n Metric: \"Metric\",\r\n Imperial: \"Imperial\",\r\n};\r\n\r\n/**\r\n *\r\n * This is used only to take shape part id\r\n * @type {{top_cabinet: string, bottom_cabinet: string, center_island_countertop: string, slabPlaceHolder: string, seamPiece: string, countertop: string, spacer: string, vanity_countertop: string, backsplashPiece: string}}\r\n */\r\nexport const SHAPE_PART_ID = {\r\n edge: 'edge',\r\n seamPiece: 'seamPiece',\r\n backsplashPiece: 'backsplashPiece',\r\n waterfallPiece: 'waterfallPiece',\r\n slabPlaceHolder: 'slabPlaceHolder',\r\n top_cabinet: 'top_cabinet',//\r\n bottom_cabinet: 'bottom_cabinet',//\r\n tall_cabinet: 'tall_cabinet', //\r\n lower_cabinet_boxes: 'lower_cabinet_boxes',\r\n upper_cabinet_boxes: 'upper_cabinet_boxes',\r\n tall_cabinet_boxes: 'tall_cabinet_boxes',\r\n countertop: 'countertop',\r\n spacer: 'spacer',\r\n vanity_countertop: 'vanity_countertop',\r\n center_island_countertop: 'center_island_countertop',\r\n front_wall: 'front_wall',\r\n\r\n //appliances\r\n dishwasher: \"dishwasher\",\r\n hood: \"hood\",\r\n fridge: \"fridge\",\r\n stove: \"stove\",\r\n};\r\n\r\nexport const FEATUREGROUP_PART_ID = {\r\n specialty_cut_and_designs: 'specialty_cut_and_designs'\r\n}\r\n\r\nexport const SHAPE_ROTATE_DIRECTION = {\r\n right: 0,\r\n left: 1,\r\n};\r\n\r\nexport const ALIGN = {\r\n right: 'right',\r\n left: 'left',\r\n center: 'center',\r\n};\r\n\r\nexport const SHAPE_TYPE = {\r\n polygon: \"polygon\",\r\n square: \"square\",\r\n wideangle: \"wideangle\",\r\n horseshoe: \"horseshoe\",\r\n appliances: \"appliances\",\r\n};\r\n\r\nexport const RENDER_TEMPLATES = {\r\n default: \"default\",\r\n linesOnly: \"linesOnly\",\r\n filledPrimary: \"filledPrimary\",\r\n accordingToFeature: \"accordingToFeature\",\r\n filledActive: \"filledActive\",\r\n};\r\n\r\n/**\r\n * NAVIGATION\r\n */\r\nexport const SIDEBAR2_BUTTONS = [\r\n {\r\n menu: \"summary\",\r\n classNames: \"button--parent button--summary\",\r\n text: \"mobile.summary\",\r\n hasMenu: true\r\n },\r\n // {\r\n // menu: \"settings\",\r\n // classNames: \"button--parent button--settings\",\r\n // text: \"settings\",\r\n // hasMenu: true\r\n // }\r\n];\r\n\r\nexport const SIDEBAR_BUTTONS_MENU = {\r\n move: \"move\",\r\n shapes: \"shapes\",\r\n layouts: \"layouts\",\r\n summary: \"summary\",\r\n delete: \"delete\",\r\n cabinetset: \"cabinetset\"\r\n}\r\n\r\nexport const SIDEBAR_SLAB_BUTTONS = {\r\n move: \"move\",\r\n //moveSlab: \"moveSlab\",\r\n rotate: \"rotate\",\r\n loadSlab: \"loadSlab\",\r\n seam: \"seam\",\r\n duplicate: \"duplicate\",\r\n delete: \"delete\",\r\n};\r\n\r\nexport const MOVABLE_IMAGE_TYPES = {\r\n slabImage: \"slabImage\",\r\n};\r\n\r\nexport const SIDEBAR_SLAB_SEAM_BUTTONS = {\r\n //addFreeSeam: \"addFreeSeam\", //todo enable when ready\r\n addSeamHorizontal: \"addSeamHorizontal\",\r\n addSeamVertical: \"addSeamVertical\",\r\n undoSeam: \"undoSeam\",\r\n resetSeams: \"resetSeams\",\r\n};\r\n\r\n/**\r\n * remember to update SIDEBAR_HIDDEN_BUTTONS (names should be the same)\r\n */\r\nexport const SIDEBAR_NAVIGATION_BUTTONS = {\r\n move: \"move\",\r\n freeDraw: \"freeDraw\",\r\n resize: \"resize\",\r\n rotate: \"rotate\",\r\n corners: \"corners\",\r\n radius: \"radius\",\r\n edge: \"edge\",\r\n backsplash: \"backsplash\",\r\n end_cap: \"end_cap\",\r\n appliances: \"appliances\", // disable appliances for caes\r\n angle: \"angle\",\r\n bumpout: \"bumpout\",\r\n label: \"label\", // disable appliances for caes\r\n text: \"text\",\r\n ...((!hardCodeIsLowes()) && { mitered: \"mitered\" }),\r\n ...((!hardCodeIsMcDermott() && !hardCodeIsLowes()) && { toolWaterfall: \"toolWaterfall\" }),\r\n ...((!isProd && (hardCodeIsModerno() || hardCodeIsPorcelanosa() || isDevMode())) && { toolUnderlayment: \"toolUnderlayment\" }),\r\n duplicate: \"duplicate\",\r\n};\r\n\r\nexport const SIDEBAR_TYPE_AREA_NAVIGATION_BUTTONS = {\r\n move: \"move\",\r\n freeDraw: \"freeDraw\",\r\n resize: \"resize\",\r\n rotate: \"rotate\",\r\n corners: \"corners\",\r\n edge: \"edge\",\r\n bumpout: \"bumpout\",\r\n mitered: \"mitered\",\r\n ...((hardCodeIsModerno() || hardCodeIsPorcelanosa() || isDevMode()) && {toolWaterfall: \"toolWaterfall\"}),\r\n label: \"label\", // disable appliances for caes\r\n text: \"text\",\r\n duplicate: \"duplicate\",\r\n};\r\n\r\nexport const SIDEBAR_NAVIGATION_CABINET_BUTTONS = {\r\n move: \"move\",\r\n resize: \"resize\",\r\n rotate: \"rotate\",\r\n lower: \"lower\",\r\n upper: \"upper\",\r\n tall: \"tall\",\r\n centerIsland: \"centerIsland\",\r\n spacer: \"spacer\",\r\n //style: \"style\",\r\n wall: \"wall\",\r\n crown: \"crown\",\r\n top_handle: \"top_handle\",\r\n bottom_handle: \"bottom_handle\",\r\n end_panel: \"end_panel\",\r\n appliances: \"appliances\", // disable appliances for caes\r\n text: \"text\",\r\n};\r\n\r\nexport const SIDEBAR_NAVIGATION_BUTTONS_LEVEL3 = {\r\n filters: \"filters\",\r\n};\r\n\r\nexport const SIDEBAR_BUTTONS = [\r\n {\r\n menu: \"move\",\r\n message: \"sqft.navigation.menu.tools\",\r\n shouldHardcodeMessage: true,\r\n hasMenu: true,\r\n subMenu: SIDEBAR_NAVIGATION_BUTTONS\r\n }, {\r\n menu: \"shapes\",\r\n message: \"sqft.navigation.menu.shapes\",\r\n hasMenu: true\r\n }, {\r\n menu: \"layouts\",\r\n message: \"sqft.navigation.menu.layouts\",\r\n hasMenu: true\r\n }, { // disable summary for caes\r\n menu: \"summary\",\r\n message: \"sqft.navigation.menu.summary\",\r\n hasMenu: true\r\n }, {\r\n menu: \"delete\",\r\n message: \"sqft.navigation.menu.delete\",\r\n title: \"Remove an object from the workspace\", //todo translation\r\n additionalClassNames: \"dot-delete\"\r\n },\r\n // {\r\n // menu: \"settings\",\r\n // message: \"sqft.navigation.menu.settings\"\r\n // },\r\n];\r\n\r\nexport const SIDEBAR_TYPE_AREA_BUTTONS = [\r\n {\r\n menu: \"move\",\r\n message: \"sqft.navigation.menu.move\",\r\n hasMenu: true,\r\n subMenu: SIDEBAR_NAVIGATION_BUTTONS\r\n }, {\r\n menu: \"shapes\",\r\n message: \"sqft.navigation.menu.shapes\",\r\n hasMenu: true\r\n }, { // disable summary for caes\r\n menu: \"summary\",\r\n message: \"sqft.navigation.menu.summary\",\r\n hasMenu: true\r\n }, {\r\n menu: \"delete\",\r\n message: \"sqft.navigation.menu.delete\",\r\n title: \"Remove an object from the workspace\", //todo translation\r\n additionalClassNames: \"dot-delete\"\r\n },\r\n];\r\n\r\nexport const SIDEBAR_CABINET_BUTTONS = [\r\n {\r\n menu: \"move\",\r\n message: \"sqft.navigation.menu.move\",\r\n hasMenu: true,\r\n subMenu: SIDEBAR_NAVIGATION_CABINET_BUTTONS\r\n }, { // disable summary for caes\r\n menu: \"summary\",\r\n message: \"sqft.navigation.menu.summary\",\r\n hasMenu: true\r\n }, {\r\n menu: \"delete\",\r\n message: \"sqft.navigation.menu.delete\",\r\n title: \"Remove an object from the workspace\", //todo translation\r\n additionalClassNames: \"dot-delete\"\r\n },...(isDevMode() ? [{\r\n menu: \"cabinetset\",\r\n message: \"Cabinet Set\",\r\n }] : []),\r\n // {\r\n // menu: \"settings\",\r\n // message: \"sqft.navigation.menu.settings\"\r\n // },\r\n];\r\n\r\nexport const SIDEBAR_WITH_FEATURES_SUBMENU = [\r\n SIDEBAR_NAVIGATION_BUTTONS.end_cap,\r\n SIDEBAR_NAVIGATION_CABINET_BUTTONS.end_panel,\r\n SIDEBAR_NAVIGATION_CABINET_BUTTONS.centerIsland,\r\n SIDEBAR_NAVIGATION_CABINET_BUTTONS.wall\r\n];\r\n\r\nexport const SIDEBAR_HIDDEN_BUTTONS = {\r\n mitered: \"mitered\",\r\n toolWaterfall: \"toolWaterfall\",\r\n toolUnderlayment: \"toolUnderlayment\",\r\n buttonMitered: \"buttonMitered\",\r\n buttonCustomBacksplash: \"buttonCustomBacksplash\",\r\n edgePeninsulaUnderwrap: \"edgePeninsulaUnderwrap\",\r\n};\r\n\r\nexport const SIDEBAR_SHAPE_BUTTONS = {\r\n square: \"square\",\r\n lshape: \"lshape\",\r\n wideangle: \"wideangle\",\r\n rectangle: \"rectangle\",\r\n dot: \"dot\",\r\n freeDraw: \"freeDraw\",\r\n};\r\n\r\n/*\r\n* Hide shapes after removing them in popup window\r\n*/\r\nexport const isDisabledInPopupShouldBeHidden = () => {\r\n return hardCodeIsCaesarStone() //enabled only for caesarstone\r\n}\r\n\r\nexport const SIDEBAR_LAYOUTS_BUTTONS = [\r\n \"S\", \"SP\", \"SI\", \"SPI\", \"SN\", \"SPN\", \"SNI\", \"SPNI\", \"L\", \"LI\", \"LN\", \"LNI\"\r\n];\r\n\r\nexport const SQFT_APPLIANCES = {\r\n hood: \"hood\",\r\n refrigerator: \"refrigerator\",\r\n range: \"range\",\r\n sink: \"sink\",\r\n doubleSink: \"doubleSink\",\r\n dishwasher: \"dishwasher\",\r\n iceMachine: \"ice machine\",\r\n oven: \"oven\",\r\n stovetop: \"stovetop\",\r\n trashCompactor: \"trash compactor\",\r\n wineFridge: \"wine fridge\"\r\n};\r\n\r\nexport const SQFT_APPLIANCES_CAES = {\r\n hood: \"hood\",\r\n sink: \"sink\",\r\n stovetop: \"stovetop\",\r\n};\r\n\r\nexport const CABINET_LABELS = {\r\n top_cabinet: 'top_cabinet',\r\n bottom_cabinet: 'bottom_cabinet',\r\n tall_cabinet: 'tall_cabinet',\r\n crown_molding: 'crown_molding',\r\n tall_cabinet_boxes: 'tall_cabinet_boxes',\r\n lower_cabinet_boxes: 'lower_cabinet_boxes',\r\n upper_cabinet_boxes: 'upper_cabinet_boxes',\r\n handle: 'handle',\r\n};\r\n\r\nexport const CABINET_BOXES = [\r\n SHAPE_PART_ID.lower_cabinet_boxes,\r\n SHAPE_PART_ID.upper_cabinet_boxes,\r\n SHAPE_PART_ID.tall_cabinet_boxes,\r\n];\r\n\r\nexport const SQFT_CABINET_APPLIANCES = {\r\n //hood: \"hood\",\r\n //microwave: \"microwave\",\r\n};\r\n\r\nexport const SQFT_APPLIANCES_WITH_SUBMENU = [\r\n SQFT_APPLIANCES.oven,\r\n SQFT_APPLIANCES.hood,\r\n SQFT_APPLIANCES.dishwasher,\r\n SQFT_APPLIANCES.stovetop,\r\n SQFT_APPLIANCES.refrigerator,\r\n SQFT_APPLIANCES.range,\r\n SQFT_CABINET_APPLIANCES.microwave,\r\n //partIds which names are mismatched\r\n SHAPE_PART_ID.stove,\r\n SHAPE_PART_ID.fridge,\r\n]\r\n\r\nexport const SQFT_SHAPES_THAT_ADD_OVERHANG = [\r\n SQFT_APPLIANCES.oven,\r\n SQFT_APPLIANCES.range,\r\n SQFT_APPLIANCES.hood,\r\n SQFT_APPLIANCES.dishwasher,\r\n SQFT_APPLIANCES.stovetop,\r\n SQFT_APPLIANCES.refrigerator,\r\n CABINET_LABELS.tall_cabinet_boxes,\r\n CABINET_LABELS.lower_cabinet_boxes,\r\n //partIds which names are mismatched\r\n SHAPE_PART_ID.stove,\r\n SHAPE_PART_ID.fridge,\r\n]\r\n\r\nexport const SQFT_MODE = {\r\n regular: \"regular\",\r\n slab: \"slab\",\r\n};\r\n\r\nexport const SQFT_VIEW_MODE = {\r\n twoDMode: \"2d Mode\",\r\n threeDMode: \"3d Mode\",\r\n threeDModeDoors: \"3d Mode Doors\",\r\n threeDModeFramed: \"Framed\",\r\n threeDModeFrameless: \"Frameless\",\r\n augmentedReality: \"Augmented Reality\",\r\n augmentedRealityCabinet: \"Augmented Reality Cabinet\",\r\n augmentedRealityDoorsOnly: \"Augmented Reality Doors Only\"\r\n}\r\nexport const SQFT_VIEW_AR_MODES = [\r\n SQFT_VIEW_MODE.augmentedReality,\r\n SQFT_VIEW_MODE.augmentedRealityCabinet,\r\n SQFT_VIEW_MODE.augmentedRealityDoorsOnly,\r\n]\r\n\r\nexport const MANUAL_CALCULATION_ROW_TYPES = {\r\n countertopRows: \"countertopRows\",\r\n backsplashRows: \"backsplashRows\",\r\n edgeRows: \"edgeRows\",\r\n};\r\n\r\nexport const DIRECTION = {\r\n north: \"north\",\r\n east: \"east\",\r\n south: \"south\",\r\n west: \"west\",\r\n};\r\n\r\nexport const MANUAL_CALCULATION_MEASURE = {\r\n length: \"length\",\r\n height: \"height\",\r\n width: \"width\",\r\n selectedFeature: \"selectedFeature\",\r\n};\r\n\r\nexport const SQFT_BACKSPLASH_TYPES = [\"4\", \"6\", \"18\"];\r\nexport const SQFT_BACKSPLASH_TYPES_METRIC = [\"100\", \"150\", \"600\"];\r\nexport const SQFT_WALL_TYPES = [\"wall\"];\r\nexport const SQFT_MEASURE_UNIT = {\r\n imperial: \"Imperial\",\r\n metric: \"Metric\",\r\n};\r\nexport const FREE_DRAW_TYPE = {\r\n shape: \"shape\",\r\n wall: \"wall\",\r\n};\r\n\r\nexport const CONTEXT_MENU_TYPE = {\r\n list: \"list\",\r\n buttons: \"buttons\",\r\n};\r\n\r\nexport const SQFT_FEATURES = {\r\n bumpouts: 'bumpouts',\r\n countertop: 'countertop',\r\n center_island_countertop: 'center_island_countertop',\r\n slabs: 'slabs',\r\n backsplashes: 'backsplashes',\r\n edges: 'edges',\r\n radius: 'radius',\r\n corners: 'corners',\r\n shower_wall: 'shower_wall',\r\n shower_floor: 'shower_floor',\r\n kitchen_floor: 'kitchen_floor',\r\n vanity_accent: 'vanity_accent',\r\n vanity_countertop: 'vanity_countertop',\r\n vanity_backsplash: 'vanity_backsplash',\r\n shower_interior_wall: 'shower_interior_wall',\r\n shower_interior_wall_accent: 'shower_interior_wall_accent',\r\n shower_wall_accent: 'shower_wall_accent',\r\n accent_wall: 'accent_wall',\r\n bathroom_floor: 'bathroom_floor',\r\n wall_a: 'wall_a',\r\n wall_b: 'wall_b',\r\n wall_c: 'wall_c',\r\n front_wall: 'front_wall',\r\n top_cabinet: 'top_cabinet',\r\n bottom_cabinet: 'bottom_cabinet',\r\n lower_cabinet_boxes: 'lower_cabinet_boxes',\r\n upper_cabinet_boxes: 'upper_cabinet_boxes',\r\n tall_cabinet_boxes: 'tall_cabinet_boxes',\r\n crown_molding: 'crown_molding',\r\n handle: 'handle',\r\n top_handle: 'top_handle',\r\n bottom_handle: 'bottom_handle',\r\n underlayment: 'underlayment',\r\n wall_door_end_accessory: 'wall_door_end_accessory',\r\n base_door: 'base_door',\r\n island_panel: 'island_panel',\r\n refridgerator_panel: 'refridgerator_panel',\r\n end_cap: 'end_cap',\r\n hinge: 'hinge',\r\n};\r\n\r\nexport const PARENT_KEYS_WITH_COMBINED_FEATURES_IN_CART = [\r\n 'edges',\r\n 'backsplashes',\r\n 'countertop',\r\n 'center_island_countertop',\r\n 'radius',\r\n 'corners',\r\n 'slabs',\r\n 'vanity_countertop',\r\n 'vanity_backsplash',\r\n 'shower_wall',\r\n 'shower_interior_wall',\r\n 'shower_interior_wall_accent',\r\n 'accent_wall',\r\n 'shower_floor',\r\n 'bathroom_floor',\r\n 'kitchen_floor',\r\n 'wall_a',\r\n 'wall_b',\r\n 'wall_c',\r\n 'front_wall',\r\n];\r\n\r\nexport const END_CAP_CABINETS_PART_IDS = [\r\n SQFT_FEATURES.wall_door_end_accessory,\r\n SQFT_FEATURES.base_door,\r\n SQFT_FEATURES.island_panel,\r\n SQFT_FEATURES.refridgerator_panel,\r\n];\r\n\r\nexport const END_CAP_AREA_PART_IDS = [\r\n SQFT_FEATURES.end_cap,\r\n];\r\n\r\nexport const END_CAP_PART_IDS = [\r\n ...END_CAP_CABINETS_PART_IDS,\r\n ...END_CAP_AREA_PART_IDS,\r\n];\r\n\r\nexport const SQFT_PARENT_FEATURE_GROUP_PART_IDS = {\r\n upper_cabinet_boxes: 'top_cabinet',\r\n tall_cabinet_boxes: 'tall_cabinet',\r\n lower_cabinet_boxes: 'bottom_cabinet',\r\n}\r\n\r\nexport const SQFT_CHILD_FEATURE_GROUP_PART_IDS = {\r\n top_cabinet: 'upper_cabinet_boxes',\r\n tall_cabinet: 'tall_cabinet_boxes',\r\n bottom_cabinet: 'lower_cabinet_boxes',\r\n}\r\n\r\nexport const SQFT_AREA_TYPE_PART_IDS = {\r\n shower_wall: 'shower_wall',\r\n shower_floor: 'shower_floor',\r\n kitchen_floor: 'kitchen_floor',\r\n shower_interior_wall: 'shower_interior_wall',\r\n shower_interior_wall_accent: 'shower_interior_wall_accent',\r\n shower_wall_accent: 'shower_wall_accent',\r\n accent_wall: 'accent_wall',\r\n bathroom_floor: 'bathroom_floor',\r\n wall_a: 'wall_a',\r\n wall_b: 'wall_b',\r\n wall_c: 'wall_c',\r\n};\r\n\r\nexport const COUNTERTOP_LABELS = {\r\n center_island_countertop: 'center_island_countertop',\r\n countertop: 'countertop',\r\n vanity_countertop: 'vanity_countertop',\r\n vanity_accent: 'vanity_accent',\r\n shower_wall: 'shower_wall',\r\n shower_wall_accent: 'shower_wall_accent',\r\n shower_interior_wall: 'shower_interior_wall',\r\n shower_interior_wall_accent: 'shower_interior_wall_accent',\r\n accent_wall: 'accent_wall',\r\n shower_floor: 'shower_floor',\r\n bathroom_floor: 'bathroom_floor',\r\n kitchen_floor: 'kitchen_floor',\r\n wall_a: 'wall_a',\r\n wall_b: 'wall_b',\r\n wall_c: 'wall_c',\r\n front_wall: 'front_wall',\r\n};\r\n\r\nexport const HANDLE_TO_CABINETS = {\r\n [SQFT_FEATURES.top_handle]: [SQFT_FEATURES.upper_cabinet_boxes],\r\n [SQFT_FEATURES.bottom_handle]: [SQFT_FEATURES.lower_cabinet_boxes],\r\n [SQFT_FEATURES.handle]: [SQFT_FEATURES.upper_cabinet_boxes, SQFT_FEATURES.lower_cabinet_boxes],\r\n};\r\n\r\nexport const CABINETS_TO_HANDLE = {\r\n [SQFT_FEATURES.upper_cabinet_boxes]: SQFT_FEATURES.top_handle,\r\n [SQFT_FEATURES.lower_cabinet_boxes]: SQFT_FEATURES.bottom_handle,\r\n};\r\n\r\nexport const CABINET_COMMON_COLOR_PART_IDS = [\r\n SHAPE_PART_ID.top_cabinet,\r\n SHAPE_PART_ID.bottom_cabinet,\r\n SHAPE_PART_ID.tall_cabinet,\r\n SHAPE_PART_ID.tall_cabinet_boxes,\r\n SHAPE_PART_ID.upper_cabinet_boxes,\r\n SHAPE_PART_ID.lower_cabinet_boxes,\r\n];\r\n\r\nexport const FEATURE_QUANTITY_UNITS = [\r\n SHAPE_PART_ID.upper_cabinet_boxes,\r\n SHAPE_PART_ID.lower_cabinet_boxes,\r\n SHAPE_PART_ID.tall_cabinet_boxes\r\n];\r\n\r\nexport const BACKSPLASH_LABELS = {\r\n backsplash: 'backsplash',\r\n backsplashes: 'backsplashes',\r\n vanity_backsplash: 'vanity_backsplash',\r\n};\r\n\r\nexport const EDGE_LABELS = {\r\n edge: 'edge',\r\n edge_profile: 'edge_profile',\r\n center_island_edge: 'center_island_edge',\r\n};\r\n\r\nexport const CORNER_LABELS = {\r\n radius: 'radius',\r\n corner: 'corner',\r\n};\r\n\r\n// export const FEATURES_WITH_0_VALUE_FOR_THE_SLABS = [\r\n// SQFT_FEATURES.backsplashes,\r\n// SQFT_FEATURES.countertop,\r\n// SQFT_FEATURES.center_island_countertop,\r\n// SQFT_FEATURES.shower_wall,\r\n// SQFT_FEATURES.shower_floor,\r\n// SQFT_FEATURES.kitchen_floor,\r\n// SQFT_FEATURES.vanity_countertop,\r\n// SQFT_FEATURES.vanity_backsplash,\r\n// SQFT_FEATURES.shower_interior_wall,\r\n// SQFT_FEATURES.shower_interior_wall_accent,\r\n// SQFT_FEATURES.bathroom_floor,\r\n// SQFT_FEATURES.wall_a,\r\n// SQFT_FEATURES.wall_b,\r\n// SQFT_FEATURES.wall_c\r\n// ];\r\n\r\nexport const SHAPE_PART_IDS_USING_SAME_COLOR = {\r\n ...COUNTERTOP_LABELS,\r\n ...BACKSPLASH_LABELS,\r\n waterfallPiece: SHAPE_PART_ID.waterfallPiece,\r\n backsplashPiece: SHAPE_PART_ID.backsplashPiece,\r\n seamPiece: SHAPE_PART_ID.seamPiece,\r\n}\r\n\r\nexport const FEATURES_WITH_0_VALUE_FOR_THE_SLABS = {\r\n ...COUNTERTOP_LABELS,\r\n ...BACKSPLASH_LABELS,\r\n}\r\n\r\nexport const ALLOWED_LABEL_NAV_ITEMS = {\r\n ...COUNTERTOP_LABELS,\r\n ...BACKSPLASH_LABELS,\r\n ...CABINET_LABELS,\r\n ...SQFT_AREA_TYPE_PART_IDS,\r\n ...END_CAP_PART_IDS\r\n}\r\n\r\nexport const POINT_PROPERTY = {\r\n angle: 'angle', // 45 degCorner\r\n arcLength: 'arcLength', // Radius\r\n}\r\n\r\nexport const RESOURCE_TYPE = {\r\n attachedToLine: 'attachedToLine',\r\n waterfallSectionsData: 'waterfallSectionsData',\r\n underlaymentSections: 'underlaymentSections',\r\n selectedFeature: null\r\n}\r\n\r\nexport const RESOURCE_ATTACHED_TO_TYPE = {\r\n edge: 'edge',\r\n backsplash: 'backsplash',\r\n wall: 'wall',\r\n mitered: 'mitered',\r\n underlayment: 'underlayment',\r\n bumpout: 'bumpout',\r\n waterfall: 'waterfall',\r\n crown_molding: 'crown_molding',\r\n end_cap: 'end_cap',\r\n}\r\n\r\nexport const RESOURCE_ATTACHED_TO_NAME = {\r\n waterfall: 'Waterfall',\r\n}\r\n\r\nexport const WORKSPACE_RESOURCES = {\r\n spacers: 'spacers',\r\n handles: 'handles',\r\n hinge: 'hinge',\r\n crownMolding: 'crownMolding',\r\n walls: 'walls',\r\n shapeColors: 'shapeColors',\r\n waterfall: 'waterfall',\r\n removedFeatures: 'removedFeatures',\r\n snappedShapeGroups: 'snappedShapeGroups',\r\n selectedShapes: 'selectedShapes',\r\n images3d: 'images3d',\r\n}\r\n\r\n/**\r\n * Should be unique\r\n * @type {{peninsulaUnderwrap: string, underlayment: string, waterfall: string, cabinetReturn: string, overhangReturn: string}}\r\n */\r\nexport const WATERFALL_SHAPES_KEY = {\r\n cabinetReturn: 'Cabinet Return',\r\n waterfall: 'Waterfall Panel',\r\n overhangReturn: 'Overhang Return',\r\n underlayment: 'Underlayment',\r\n peninsulaUnderwrap: 'Ppeninsula Underwrap',\r\n}\r\n\r\nexport const WATERFALL_SHAPES_NAME = {\r\n cabinetReturn: 'Cabinet Return',\r\n waterfall: 'Waterfall Panel',\r\n overhangReturn: 'Overhang Return',\r\n underlayment: 'Underlayment',\r\n peninsulaUnderwrap: 'Underlayment',\r\n}\r\n\r\nexport const SQFT_GROUP = {\r\n area: 'area',\r\n cabinets: 'cabinets',\r\n default: 'default',\r\n}\r\n\r\nexport const SQFT_AR3D_POPUP_CONTENT_TYPE = {\r\n ar: 'ar',\r\n threeD: 'threeD',\r\n}\r\n\r\nexport const SQFT_AR3D_GLB_VIEWER = {\r\n singleModel: 'singleModel',\r\n separateModels: 'separateModels',\r\n}\r\n\r\nexport const MITER_UNDERWRAP_EDGE_NAMES = [\r\n \"miter underwrap\"\r\n];\r\n\r\nexport const MITER_EDGE_NAMES = [\r\n 'Miter 1 1/2\"',\r\n 'Miter 2\"-3\"',\r\n 'Miter 4\"-6\"',\r\n 'Miter Edge',\r\n 'Mitered Edge',\r\n 'Rimrock - 981',\r\n 'Ingletado',\r\n 'Inglete',\r\n 'Inglete.',\r\n]\r\n\r\nexport const WATERFALL_OVERLAY_TYPE = {\r\n waterfall: 'waterfall',\r\n peninsulaUnderwrap: 'peninsulaUnderwrap',\r\n}\r\n\r\nexport const MITERED_OVERLAY_TYPE = {\r\n mitered: \"mitered\",\r\n underlayment: \"underlayment\",\r\n}\r\n\r\nexport const APPLIANCES_THAT_SHOULD_RENDER_MEASUREMENTS_INSIDE_THE_SHAPE = [\r\n SQFT_APPLIANCES.sink,\r\n SQFT_APPLIANCES.doubleSink,\r\n SQFT_APPLIANCES.stovetop\r\n]\r\n\r\nexport const CABINET_FILTER_NAMES = {\r\n knobs: 'Number_of_Knobs',\r\n hinges: 'Number_of_Hinges',\r\n slideSets: 'Numbe_of_Slide_Sets',\r\n doors: 'Number_of_Doors',\r\n drawers: 'Number_of_Drawers',\r\n}\r\n\r\nexport const CABINET_SET2 = {\r\n}\r\n","export const ContentType = {\r\n None: 0,\r\n Layout: 1,\r\n Design: 2,\r\n DisplayRoom: 3,\r\n Loading: 4,\r\n QuotedItems: 5,\r\n RoomScene: 6,\r\n};\r\n\r\nexport const ContentTypeName = {\r\n 1: \"Room Layout\",\r\n 2: \"Design\",\r\n 3: \"Room Ideas\",\r\n 6: \"Room Scene\",\r\n};\r\n\r\nexport const ContentTypeNameTranslate = {\r\n 1: \"desktop.nav.roomLayout\",\r\n 2: \"desktop.nav.designButton\",\r\n 3: \"desktop.nav.roomIdeas\",\r\n 6: \"desktop.nav.roomScene\",\r\n};\r\n\r\nexport const PartMenuType = {\r\n Simple: 0,\r\n Complex: 1,\r\n};\r\n\r\nexport const UserPopupTypes = {\r\n Unlock: 1, // simple User Login popup\r\n GetQuote: 2, // Get quote button\r\n NewDesign: 3, // when N clicks happen & Email Design Click\r\n Schedule: 4, // schedule button\r\n};\r\nexport const ConfirmPopupTypes = {\r\n ConsultationRequest: 1,\r\n SqftResetChanges: 2,\r\n SqftUpdateQuestion: 3,\r\n AssignQuoteOnExistingUser: 4,\r\n DeleteCartItemsPopup: 5,\r\n ChangeWizardToPreviousStepSelection: 6,\r\n ReplaceRoomWhenItExistsInCartButWeAddNew: 7,\r\n};\r\n\r\nexport const UserPopupContent = {\r\n register: \"register\",\r\n login: \"login\",\r\n terms: \"terms\",\r\n forgot: \"forgot\",\r\n twoFA: \"twoFA\",\r\n twoFAVerify: \"twoFAVerify\",\r\n};\r\n\r\nexport const QuoteRequestType = {\r\n RequestQuote: 'RequestQuote',\r\n ScheduleAnAppointment: 'ScheduleAnAppointment',\r\n RequestDateTime: 'RequestDateTime',\r\n RegularDesign: 'RegularDesign', //Email Design\r\n RequestConsultation: 'RequestConsultation'\r\n};\r\n\r\nexport const UserAction = {\r\n Login: 1,\r\n Register: 2\r\n};\r\n\r\nexport const SqftUpdateTypes = {\r\n Reset: 1,\r\n UpdateData: 2\r\n};\r\n\r\nexport const dbFeatureRelatedFeaturesProperties = [\"relatedFeatures\", \"bundledFeatures\"];\r\nexport const dbFeatureFilterProperties = [\"fabFilterValueIDs\", \"filterValueIDs\"];\r\nexport const otherMissingProperties = [\"thirdPartyAR3DUrls\", \"thirdPartyAR3DMetaData\",\"lixilAR3DUrls\",\"lixilQRCode\"];\r\n","export default class DesignNavigationItem {\r\n /**\r\n *\r\n * @type {string}\r\n */\r\n text = '';\r\n\r\n /**\r\n *\r\n * @type {featureInterface}\r\n */\r\n part = null;\r\n\r\n /**\r\n *\r\n * @type {boolean}\r\n */\r\n matchesMetaFailed = false;\r\n\r\n /**\r\n *\r\n * @type {[featureInterface]}\r\n */\r\n colorOptions = null;\r\n\r\n constructor(text, feature, colorOptions = null) {\r\n this.text = text;\r\n this.part = feature;\r\n this.matchesMetaFailed = feature.matchesMetaFailed || false;\r\n this.colorOptions = colorOptions;\r\n // this.matchesMetaFailedArray = part.matchesMetaFailedArray || null\r\n }\r\n}\r\n","import COLOR_THEMES from \"./colorThemes\";\r\nimport $ from \"jquery\";\r\nimport {hardCodeIsPorcelanosa, hardCodeIsRenuit} from \"../../../../../misc/fabricatorHardcode\";\r\nimport {SQFT_AR3D_GLB_VIEWER} from \"../../../constants\";\r\n\r\nclass SqftConfig {\r\n constructor() {\r\n // Initialization of properties\r\n this.ctx = null;\r\n this.measureUnit = \"Imperial\";\r\n this.mmDivider = 1000;\r\n this.mm2ToM2Divider = 1000000;\r\n this.millimetersMultiplier = 25.4;\r\n this.inchesToMMultiplier = 1 / 39.37;\r\n this.sqftToMmMultiplier = 92903;\r\n this.sqftToM2Multiplier = 1 / 10.764;\r\n this.lnftToMmMultiplier = 304.8;\r\n this.waterfallImperialHeight = 36;\r\n this.waterfallMetricHeight = 900;\r\n this.miteredEdgeAdditionalImperialArea = hardCodeIsPorcelanosa() ? 1.5 : 0;\r\n this.miteredEdgeAdditionalMetricArea = 0; //40;//38.1;\r\n this.edgeHeightImperial = 1.25;\r\n this.edgeHeightMetric = 30;\r\n this.minApplianceLineLength = 1;\r\n this.maxApplianceLineLength = 150;\r\n this.slab = {\r\n imageWidthMetric: 3200,\r\n imageHeightMetric: 1600,\r\n imageWidthImperial: 120,\r\n imageHeightImperial: 60\r\n };\r\n this.workspace = {\r\n canvas: $('#workspace'),\r\n gridSize: 12,\r\n getScaledGridSize: () => this.getScaledGridSize(this.workspace.gridSize),\r\n getDefaultScaledGridSize: () => this.getScaledGridSize(this.workspace.gridSize, true),\r\n fontSize: $(window).width() <= 1024 ? 14 : 16,\r\n fontSizeMetric: $(window).width() <= 1024 ? 14 : 16,\r\n fontSizeSmallest: $(window).width() <= 1024 ? 11 : 11,\r\n debug: false,\r\n snapToGrid: false,\r\n menuItemActive: null\r\n };\r\n this.defaultScaleExport = 7;\r\n this.zoomSpeed = 5;\r\n this.controls = {\r\n scale: $('#scale-control'),\r\n scaleHoriz: $('#scale-control-horiz'),\r\n snapToGrid: $('#snapToGrid'),\r\n debug: $('#debug'),\r\n delete: $('#delete'),\r\n flipH: $('#flipH'),\r\n flipV: $('#flipV'),\r\n rotateLeft: $('#rotateLeft'),\r\n rotateRight: $('#rotateRight')\r\n };\r\n this.activeClass = 'active';\r\n this.activePalletItemClass = \"pallet-tool-icon-selected\";\r\n this.groups = {\r\n tools: \"tools\"\r\n };\r\n this.filterGroups = [];\r\n this.tutorialIsRunning = false;\r\n this.highlight = {\r\n points: false,\r\n lines: false,\r\n type: '',\r\n id: null,\r\n demoShow: false,\r\n rotateAngle: false,\r\n };\r\n this.activeTheme = Object.keys(COLOR_THEMES)[0];\r\n this.SNAP_OFFSET = 12;\r\n this.activeFontRegular = \"playregular\";\r\n this.activeFontBold = \"playbold\";\r\n this.crownMoldingParams = {\r\n distance: 10\r\n };\r\n this.threeD = {\r\n //glbViewer: SQFT_AR3D_GLB_VIEWER.singleModel,\r\n glbViewer: SQFT_AR3D_GLB_VIEWER.separateModels,\r\n useGoogleModelViewer: false, // this requires singleModel\r\n useStagingDomain: false,\r\n }\r\n this.shouldUseCabinetDoorsSQFT = hardCodeIsRenuit() || true\r\n\r\n // Initialize dependent properties\r\n this.initializeDependentProperties();\r\n\r\n // Add event listeners\r\n document.addEventListener('DOMContentLoaded', this.initialize);\r\n window.addEventListener('resize', this.updateDimensions);\r\n }\r\n\r\n initializeDependentProperties = () => {\r\n this.fieldWidth = this.getMM() * 13;\r\n this.fieldWidthCabinet = 4;\r\n this.updateDimensions();\r\n this.updateDefaultScale();\r\n this.scale = this.defaultScale;\r\n }\r\n\r\n getMM = () => {\r\n const getDPI = () => {\r\n const div = document.createElement('div');\r\n div.style.height = '1in';\r\n const body = document.getElementsByTagName('body')[0];\r\n body.appendChild(div);\r\n const dpi = div.offsetHeight;\r\n body.removeChild(div);\r\n return dpi === 0 ? 96 : dpi;\r\n }\r\n return getDPI() / 25.4;\r\n }\r\n\r\n isKiosk = (() => {\r\n let isKiosk = false;\r\n try {\r\n isKiosk = (parent && parent.parent && parent.parent.window.app && parent.parent.window.app.db);\r\n } catch (e) {\r\n isKiosk = false;\r\n }\r\n return isKiosk;\r\n })();\r\n\r\n kioskApp = (() => {\r\n if (this.isKiosk) {\r\n return parent.parent.window.app;\r\n }\r\n })();\r\n\r\n initialize = () => {\r\n this.updateDimensions();\r\n this.initializeDependentProperties();\r\n }\r\n\r\n updateDimensions = () => {\r\n this.updateDefaultScale();\r\n this.updateWorkspace(window.innerWidth);\r\n }\r\n\r\n updateDefaultScale = () => {\r\n this.defaultScale = window.innerWidth <= 1024 ? 1.5 : 3.75;\r\n };\r\n\r\n updateWorkspace = (windowWidth) => {\r\n this.workspace.fontSize = windowWidth <= 1024 ? 14 : 16;\r\n this.workspace.fontSizeMetric = windowWidth <= 1024 ? 14 : 16;\r\n this.workspace.fontSizeSmallest = windowWidth <= 1024 ? 11 : 11;\r\n }\r\n\r\n getMeasureMultiplier = () => {\r\n switch (this.measureUnit) {\r\n case \"Metric\":\r\n return this.millimetersMultiplier;\r\n case \"Metric-meters\":\r\n return 1 / 39.37;\r\n case \"Imperial\":\r\n default:\r\n return 1;\r\n }\r\n }\r\n\r\n getMeasureUnitPostfix = (shouldAddWhitespace = false) => {\r\n switch (this.measureUnit) {\r\n case \"Metric\":\r\n return shouldAddWhitespace ? \" mm\" : \"mm\";\r\n case \"Imperial\":\r\n default:\r\n return \"\\\"\";\r\n }\r\n }\r\n\r\n isDevMode = () => window.location.href.includes(\"dev=1\");\r\n\r\n isCabinetGroupInURL = () => window.location.href.includes(\"cabinets=1\");\r\n\r\n isSQFTEnabledInURL = () => window.location.hash.includes(\"sqft\");\r\n\r\n getScaledGridSize = (gridSize, isDefault = false) => {\r\n const scale = isDefault ? this.defaultScale : this.scale;\r\n let scaledGridSize = Math.round(gridSize / scale);\r\n let nearest = (12 % scaledGridSize);\r\n return nearest < scaledGridSize / 2 ?\r\n scaledGridSize - nearest :\r\n scaledGridSize + nearest;\r\n }\r\n}\r\n\r\nexport default new SqftConfig();\r\n","import _ from 'lodash';\r\nimport $ from \"jquery\";\r\n\r\nimport Shape from \"./shapes/sqftShape\";\r\nimport MovableImage from \"./shapes/movableImage\";\r\nimport WorkspaceEvents, {clearAllMenusEvents} from \"./workspace/workspaceEvents\";\r\nimport EventManager from \"./../store/sqftEventManager\";\r\nimport RulerOverlay from \"./workspace/ruler\";\r\nimport history from \"./workspaceHistory\";\r\nimport config from \"./../store/sqftConfig\";\r\nimport {\r\n mmToM,\r\n sqInchesToSqFoot,\r\n mm2ToM2,\r\n getEdgeLength,\r\n getBacksplashArea, getEdgeArea, getPointField\r\n} from \"../../../helpers/sqftHelper\";\r\n//todo sqft-react\r\n// import edges from \"./controls/edges\";\r\n// import Edges from \"./controls/edges\";\r\n// import TranslatesProvider from \"./../../../translatesProvider\";\r\nimport ShapeHelper, {getEdgeFeatures} from \"../../../helpers/shapeHelper\";\r\nimport store from \"../../../../../store\";\r\nimport {getBacksplashLength} from \"../../../helpers/sqftHelper\";\r\nimport {\r\n FEATUREGROUP_PART_ID,\r\n MOVABLE_IMAGE_TYPES,\r\n RESOURCE_ATTACHED_TO_TYPE,\r\n SHAPE_PART_ID,\r\n SHAPE_TYPE,\r\n WORKSPACE_RESOURCES\r\n} from \"../../../constants\";\r\nimport ResultImages from \"./workspace/resultImages\";\r\nimport sqftShapeManager from \"../store/sqftShapeManager\";\r\nimport sqftImageManager from \"../store/sqftImageManager\";\r\nimport {deleteCroppedSlabImage, setSqftCroppedSlabImages} from \"../../../../../actions/sqftSlabFunctions\";\r\nimport sqftSlabManager from \"../store/sqftSlabManager\";\r\nimport {updateSQFTCalculations} from \"../../../../../actions/sqftFunctions\";\r\nimport {attachResource, closeSQFTPopup} from \"./controls/resourseCanas\";\r\nimport slabWorkspace from \"./slab/slabWorkspace\";\r\nimport sqftShape from \"./shapes/sqftShape\";\r\nimport {checkShapeForAvailablePartId} from \"./shapes/shapeFunctions\";\r\nimport {getFeatureGroupName} from \"../../../../../misc/helpers\";\r\nimport {getFeatureGroup} from \"../../../helpers/sqftHelperUi\";\r\nimport {getQtCatName} from \"../../../helpers/sqftQuotesHelper\";\r\nimport cabinetWorkspace from \"./cabinet/cabinetWorkspace\";\r\nimport LineCorner from \"./shapes/lineHooks/lineCorner\";\r\nimport TextBoxManager from \"./workspace/textBoxManager\";\r\nimport {\r\n setShapeIdsWithMissingFeature,\r\n setShouldShowChangeShapeFeatureMissingMessage,\r\n setSQFTPopup\r\n} from \"../../../../../actions/sqftMenuFunctions\";\r\nimport {getShapeFeatureId} from \"../../../helpers/featureHelper\";\r\nimport sqftResourcesManager from \"../store/sqftResoursesManager\";\r\nimport {SHAPE_PART_IDS_VISIBLE_ONLY_IN_THE_SLAB_MODE} from \"../../../constantsFeature\";\r\nimport workspaceControllers, {importControllersData} from \"../store/workspaceControllers\";\r\nimport {isSFTCabinetsGroup} from \"../../../helpers/sqftNavigationHelper\";\r\nimport sqftShapeIntersectionsManager from \"../store/sqftShapeIntersectionsManager\";\r\nimport {FeatureObjectDTO} from \"../../../dto/FeatureObjectDTO\";\r\nimport SqftStore from \"../store/sqftStore\";\r\n\r\nconst workspace = function() {\r\n //private variables\r\n var canvas = null;\r\n var self = this;\r\n var state = {\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n allowDragEdge: false,\r\n allowDragBumpoutEdge: false,\r\n allowDragMiteredEdge: false,\r\n lineHighlight: true,\r\n loading: false\r\n };\r\n var objIds = 0;\r\n var pos = { //workspace top-left corner position\r\n x: 0,\r\n y: 0\r\n };\r\n var shapes = [];\r\n var nodes = {\r\n appBody : $('body'),\r\n tools: {\r\n designDefault: $('#design-default')\r\n }\r\n };\r\n //public variables\r\n this.name = 'workspace';\r\n this.isInitialized = false;\r\n this.isEdgeFeatureError = false;\r\n this.dataHasBeenImported = false;\r\n this.isLastParent = true; // used to get {x: 0, y:0} position\r\n this.miteredController = null;\r\n this.underlaymentController = null;\r\n this.resultImages = new ResultImages(this);\r\n this.textBoxManager = new TextBoxManager();\r\n this[WORKSPACE_RESOURCES.spacers] = [];\r\n this[WORKSPACE_RESOURCES.handles] = [];\r\n this[WORKSPACE_RESOURCES.hinge] = [];\r\n this[WORKSPACE_RESOURCES.walls] = [];\r\n this[WORKSPACE_RESOURCES.shapeColors] = [];\r\n this[WORKSPACE_RESOURCES.waterfall] = [];\r\n this[WORKSPACE_RESOURCES.removedFeatures] = [];\r\n this[WORKSPACE_RESOURCES.snappedShapeGroups] = [];\r\n this[WORKSPACE_RESOURCES.selectedShapes] = [];\r\n this[WORKSPACE_RESOURCES.images3d] = [];\r\n\r\n //private functions\r\n function setCanvas(value) {\r\n canvas = value;\r\n }\r\n var moveWorkspace = function(mousePos) {\r\n var xDiff = mousePos.x - state.mouseDownPosition.x;\r\n var yDiff = mousePos.y - state.mouseDownPosition.y;\r\n\r\n pos.x -= xDiff;\r\n state.mouseDownPosition.x = mousePos.x;\r\n\r\n pos.y -= yDiff;\r\n state.mouseDownPosition.y = mousePos.y;\r\n\r\n slabWorkspace.setPos({\r\n x: slabWorkspace.pos.x += xDiff,\r\n y: slabWorkspace.pos.y += yDiff\r\n }\r\n )\r\n };\r\n //private events\r\n var onMouseDown = function(mousePos, e) {\r\n void e;\r\n //debugger // eslint-disable-line no-debugger\r\n if (!window.lineInputFocused) {\r\n EventManager.stealCursor(true, true);\r\n state.mouseDown = true;\r\n state.mouseDownPosition = mousePos;\r\n EventManager.setCursor('grabbing', self, false);\r\n //debugger // eslint-disable-line no-debugger\r\n return true;\r\n }\r\n };\r\n\r\n function onMouseUp(mousePos, e) {\r\n state.mouseDown = false;\r\n state.mouseDownPosition = null;\r\n // var selectedMenu = $('.pallet-tool-icon-selected');\r\n // if (!(selectedMenu && selectedMenu.attr('data-action') === \"rotate-left\" || selectedMenu.attr('data-action') === \"delete\")) {\r\n // EventManager.resetCursor(self);\r\n // config.highlight.type = '';\r\n // $('.steps-scope-config-button').removeClass('active');\r\n // }\r\n //todo this takes too much time to update\r\n sqftShapeIntersectionsManager.updateShapesIntersections();\r\n workspaceControllers.snappedShapeGroups.updateShapesSnappedGroups(false);\r\n\r\n return onMouseMove(mousePos, e);\r\n }\r\n function onMouseMove(mousePos, e) {\r\n //debugger // eslint-disable-line no-debugger\r\n if(e.terminate) {\r\n return false;\r\n }\r\n if(state.mouseDown) {\r\n moveWorkspace(mousePos);\r\n // EventManager.setCursor('grabbing', self);\r\n } else {\r\n EventManager.resetCursor(self);\r\n }\r\n return true;\r\n }\r\n\r\n //public functions\r\n this.getObjIds = function() {\r\n return objIds;\r\n };\r\n this.setObjIds = (value) => {\r\n objIds = value\r\n };\r\n this.stealCursor = function(who) {\r\n EventManager.resetCursor(self);\r\n for(var i = 0; i < shapes.length; i++) {\r\n shapes[i].stealCursor(who);\r\n }\r\n };\r\n this.setAllowEdges = function(allow) {\r\n state.allowDragEdge = allow;\r\n };\r\n this.getAllowEdges = function() {\r\n return state.allowDragEdge\r\n };\r\n this.setAllowBumpoutEdges = function(allow) {\r\n state.allowDragBumpoutEdge = allow;\r\n };\r\n this.getAllowBumpoutEdges = function() {\r\n return state.allowDragBumpoutEdge\r\n };\r\n this.setAllowMiteredEdges = function(allow) {\r\n state.allowDragMiteredEdge = allow;\r\n };\r\n this.getAllowMiteredEdges = function() {\r\n return state.allowDragMiteredEdge\r\n };\r\n this.setAllowLineHighlight = function(allow) {\r\n state.lineHighlight = allow;\r\n };\r\n this.getAllowLineHighlight = function() {\r\n return state.lineHighlight\r\n };\r\n this.getCenter = function() {\r\n return {\r\n x: pos.x * -1,\r\n y: pos.y * -1\r\n }\r\n };\r\n this.setCenter = function(canvasWidth = window.innerWidth, canvasHeight = window.innerHeight) {\r\n pos.x = parseInt(0 - (canvasWidth / 2));\r\n pos.y = parseInt(0 - (canvasHeight / 2));\r\n //console.log(\"pos.x!\", pos.x)\r\n //console.log(\"pos.y!\", pos.y)\r\n };\r\n this.getVisibleCenter = function() {\r\n return {\r\n x: (pos.x + (canvas.width()/2)) / config.scale,\r\n y: (pos.y + (canvas.height()/2)) / config.scale\r\n };\r\n };\r\n this.getAllShapePoints = () => {\r\n let allShapePoints = [];\r\n for (const shape of shapes) {\r\n //allShapePoints.push(...shape.getPointFieldArray());\r\n const shapeCenter = shape.getCenter();\r\n const shapeCenterPointField = getPointField(shapeCenter, shape);\r\n void shapeCenterPointField;\r\n allShapePoints.push(shapeCenter);\r\n }\r\n return allShapePoints\r\n }\r\n this.getShapesCenterPoint = () => {\r\n const allShapePoints = this.getAllShapePoints();\r\n return ShapeHelper.getCenterPoint(allShapePoints);\r\n }\r\n this.getCanvas = function() {\r\n return canvas[0];\r\n };\r\n this.get$Canvas = function() {\r\n return canvas;\r\n };\r\n this.getOffset = function() {\r\n return self.getCenter();\r\n };\r\n this.setPosition = (newPos) => {\r\n slabWorkspace.setPos({\r\n x: slabWorkspace.pos.x += pos.x - newPos.x,\r\n y: slabWorkspace.pos.y += pos.y - newPos.y\r\n }\r\n )\r\n pos = _.clone(newPos);\r\n };\r\n this.getPosition = function() {\r\n return pos;\r\n };\r\n this.getScale = function() {\r\n return config.scale;\r\n };\r\n this.getState = function() {\r\n return state;\r\n };\r\n this.isEmpty = () => {\r\n return this.getShapes().length === 0\r\n }\r\n this.getHoverShape = function() {\r\n for (var i = 0; i < shapes.length; i++) {\r\n var shape = shapes[i];\r\n if (shape.isHovering()) {\r\n return shape;\r\n }\r\n }\r\n };\r\n this.getHoveredSqftShape = function() {\r\n for (let i = 0; i < shapes.length; i++) {\r\n let shape = shapes[i];\r\n if (shape.isHovering() && shape instanceof sqftShape) {\r\n return shape;\r\n }\r\n }\r\n };\r\n this.getMovingShape = () => {\r\n for (let i = 0; i < shapes.length; i++) {\r\n let shape = shapes[i];\r\n if (shape.getState().mouseDown && (shape instanceof sqftShape || shape instanceof MovableImage)) {\r\n return shape;\r\n }\r\n }\r\n };\r\n this.getHoverBumpout = function() {\r\n for (let i = 0; i < shapes.length; i++) {\r\n let shape = shapes[i];\r\n let lines = shape.getLines ? shape.getLines() : null;\r\n if (lines) {\r\n for (let n = 0; n < lines.length; n++) {\r\n if (lines[n].isWithBumpout && lines[n].isWithBumpout() && lines[n].bumpoutOverlay.isHoveringRect()) {\r\n return lines[n];\r\n }\r\n }\r\n }\r\n }\r\n };\r\n this.getLineWithMovingBumpout = function() {\r\n for (let i = 0; i < shapes.length; i++) {\r\n let shape = shapes[i];\r\n let lines = shape.getLines ? shape.getLines() : null;\r\n if (lines) {\r\n for (let n = 0; n < lines.length; n++) {\r\n if (lines[n].isWithBumpout && lines[n].isWithBumpout() && lines[n].bumpoutOverlay.isBumpoutPointMoving()) {\r\n return lines[n];\r\n }\r\n }\r\n }\r\n }\r\n };\r\n this.getHoverPoint = function() {\r\n for(var i = 0; i < shapes.length; i++) {\r\n if(typeof (shapes[i].getHoverPoint) === 'function') {\r\n var point = shapes[i].getHoverPoint();\r\n if(point) {\r\n return point;\r\n }\r\n }\r\n }\r\n };\r\n this.getHoverMiteredPoint = function() {\r\n for(let i = 0; i < shapes.length; i++) {\r\n if(typeof (shapes[i].getHoverPoint) === 'function' && shapes[i].isWithMitered()) {\r\n let point = shapes[i].getHoverMiteredPoint();\r\n if(point) {\r\n return point;\r\n }\r\n }\r\n }\r\n };\r\n this.getHoveredLine = function() {\r\n for (let i = 0; i < shapes.length; i++) {\r\n if (typeof (shapes[i].getHoverSegment) === 'function') {\r\n let hoveredLine = shapes[i].getHoverSegment();\r\n if (hoveredLine) {\r\n return hoveredLine;\r\n }\r\n }\r\n }\r\n };\r\n this.getHoveredLines = (skipShapeIds = []) => {\r\n const iterateShapes = shapes.filter(shp => !skipShapeIds.includes(shp.id));\r\n const hoveredLines = [];\r\n for (let i = 0; i < iterateShapes.length; i++) {\r\n if (typeof (iterateShapes[i].getHoverSegment) === 'function') {\r\n let hoveredLine = iterateShapes[i].getHoverSegmentV2();\r\n if (hoveredLine) {\r\n hoveredLines.push(hoveredLine);\r\n }\r\n }\r\n }\r\n return hoveredLines\r\n };\r\n this.getHoveredLineCorner = function() {\r\n for (let i = 0; i < shapes.length; i++) {\r\n if (typeof (shapes[i].getHoverSegmentOutlineCorner) === 'function') {\r\n let hoveredLine = shapes[i].getHoverSegmentOutlineCorner();\r\n if (hoveredLine) {\r\n return hoveredLine;\r\n }\r\n }\r\n }\r\n };\r\n this.getShapesWithoutAttachedResources = (isWithoutHidden = false) => {\r\n if (isWithoutHidden) {\r\n return shapes.filter(shape => !shape.isHidden);\r\n }\r\n return shapes\r\n }\r\n\r\n this.getShapes = (isWithoutHidden = false) => {\r\n const state = store.getState();\r\n const attachedToLineResources = state.sqftResourceState.attachedToLine;\r\n\r\n if (isWithoutHidden) {\r\n return shapes.concat(attachedToLineResources).filter(shape => !shape.isHidden);\r\n }\r\n\r\n return shapes.concat(attachedToLineResources);\r\n };\r\n this.getShapeIds = function() {\r\n const shapes = this.getShapes();\r\n\r\n return shapes.map(shape => shape.id);\r\n };\r\n this.getShapesByIds = (ids) => {\r\n const shapes = this.getShapes();\r\n\r\n return shapes.filter(shape => ids.includes(shape.id));\r\n };\r\n this.getShapesBySlabModeCoreParentId = (ids) => {\r\n const shapes = this.getShapes();\r\n\r\n return shapes.filter(shape => ids.includes(shape.slabModeCoreParentId));\r\n };\r\n\r\n this.clearWorkspace = () => {\r\n this.removeAllShapes();\r\n objIds = 0;\r\n shapes = [];\r\n this.textBoxManager.removeAllTextBoxes();\r\n sqftImageManager.removeAllSlabImages();\r\n sqftSlabManager.removeAllSlabBacksplashes();\r\n sqftResourcesManager.deleteAllResources();\r\n sqftResourcesManager.deleteAllMiteredSections();\r\n sqftSlabManager.deleteShapeOffset();\r\n }\r\n\r\n this.import = (importData) => {\r\n //todo on cancel click line state.withBumout somehow turns to false\r\n this.clearWorkspace();\r\n clearAllMenusEvents();\r\n SqftStore.edgeFeatures = [];\r\n\r\n console.log(\"importData to SQFT\", importData);\r\n this.dataHasBeenImported = true;\r\n objIds = importData.objIds || 0;\r\n const values = importData.countertops || importData.shapes; // QCDES-1639 \"shapes\" for old compatibility\r\n state.loading = true;\r\n let _images = [];\r\n let _attachedResources = [];\r\n if (values) {\r\n for (let i = values.length - 1; i >= 0; i--) {\r\n let value = values[i];\r\n if (value.lines) {\r\n this.importShape(value);\r\n } else if (Object.keys(RESOURCE_ATTACHED_TO_TYPE).some((key) => key === value.type)) {\r\n _attachedResources.push(value);\r\n } else if (value.image && value.type !== MOVABLE_IMAGE_TYPES.slabImage) {\r\n _images.push(value);\r\n }\r\n }\r\n }\r\n //1) Import additional shapes that are visible only in the slab mode\r\n sqftSlabManager.importSlabBacksplashes(importData.slabAdditionalShapesList || []);\r\n\r\n //2) Add attached resources\r\n //We will skip adding mitered as it was already added when the line was initiated\r\n for (const attachedResource of _attachedResources) {\r\n let lines = this.getLinesAndLineCorners();\r\n lines.forEach((line) => {\r\n if (attachedResource.attachedToId === line.id) {\r\n line.isDisabledInPopup = attachedResource.isDisabledInPopup;\r\n attachResource(line.isLine ? line : null,\r\n line instanceof LineCorner ? line : null,\r\n attachedResource.type,\r\n attachedResource.featureId,\r\n attachedResource.partId,\r\n attachedResource.name,\r\n attachedResource.height ? attachedResource.height : attachedResource.featureId, //support for old quotes, can be removed in future\r\n attachedResource.id,\r\n attachedResource.qtCatName\r\n );\r\n } else if (attachedResource.attachedTo === line.id) {\r\n //old version support\r\n attachResource(line.isLine ? line : null,\r\n line instanceof LineCorner ? line : null,\r\n attachedResource.type,\r\n attachedResource.featureId,\r\n attachedResource.partId,\r\n attachedResource.image.name,\r\n attachedResource.height ? attachedResource.height : attachedResource.featureId, //support for old quotes, can be removed in future\r\n attachedResource.id\r\n );\r\n }\r\n });\r\n }\r\n //Add movable images\r\n\r\n for (let i = 0; i < _images.length; i++) {\r\n this.importImage(_images[i]);\r\n\r\n // if (data.attachedTo) {\r\n // switch(value.type) {\r\n // case \"backsplash\":\r\n // case \"wall\":\r\n // if (value.part === 'lineCorner') {\r\n // data.attachedTo.addBacksplashToCornerLine(value.image.name, value.type, value.image.id);\r\n // } else {\r\n // data.attachedTo.addBacksplashToLine(value.image.name, value.type, value.image.id);\r\n // }\r\n // break;\r\n // case \"edge\":\r\n // if (value.part === 'lineCorner') {\r\n // data.attachedTo.lineCorner.addEdgeToCornerLine(value.image.name, value.image.id);\r\n // } else {\r\n // data.attachedTo.addEdgeToLine(value.image.name, value.image.id);\r\n // }\r\n // break;\r\n // }\r\n // }\r\n }\r\n\r\n this.textBoxManager.setImportedTextBoxes(importData.textBoxes);\r\n sqftImageManager.importSlabImages(importData.slabImages || []);\r\n\r\n const {sqftMenuState} = store.getState();\r\n const {isShapeFeatureMissing} = sqftMenuState;\r\n if (isShapeFeatureMissing) {\r\n this.showChangeShapeColorsMessage();\r\n }\r\n importControllersData(importData.controllers);\r\n\r\n history.rememberShapes();\r\n state.loading = false;\r\n };\r\n this.importImage = (imageData) => {\r\n const image = this.generateImage(imageData.image);\r\n const importedMovableImage = this.addImage(\r\n image,\r\n imageData.size.width,\r\n imageData.size.height,\r\n imageData.attachedTo,\r\n imageData.attachedTo ? imageData.attachedTo.getParent() : null,\r\n imageData.type,\r\n imageData.subtype,\r\n null,\r\n null,\r\n imageData.part,\r\n imageData.id,\r\n imageData.priority,\r\n imageData.featureId\r\n );\r\n // _img.pos.x = imageData.pos.x;\r\n // _img.pos.y = imageData.pos.y;\r\n importedMovableImage.importData(imageData); //import object here\r\n\r\n return importedMovableImage\r\n }\r\n this.generateImage = (imageData) => {\r\n let image = new Image();\r\n for (const imageProperty in imageData) {\r\n if (imageData.hasOwnProperty(imageProperty)) {\r\n image[imageProperty] = imageData[imageProperty];\r\n }\r\n }\r\n return image\r\n };\r\n this.importShape = (shapeData) => {\r\n let shape = new Shape();\r\n shape.import(shapeData);\r\n shapes.push(shape);\r\n\r\n return shape\r\n }\r\n this.showChangeShapeColorsMessage = () => {\r\n const {sqftMenuState} = store.getState();\r\n const {isShapeFeatureMissing, shapeIdsWithMissingFeature} = sqftMenuState;\r\n if (isShapeFeatureMissing) {\r\n store.dispatch(setSQFTPopup(\r\n {\r\n title: this.intl.formatMessage({id: \"sqft.popup.title.systemMessage\"}),\r\n content: this.intl.formatMessage({id: \"sqft.popup.system.shapeFeaturesWasFailed\"}),\r\n isOpened: true,\r\n confirmCallback: () => {\r\n this.removeShapeWithIds(shapeIdsWithMissingFeature);\r\n store.dispatch(setShapeIdsWithMissingFeature([]));\r\n store.dispatch(setShouldShowChangeShapeFeatureMissingMessage(false));\r\n closeSQFTPopup();\r\n },\r\n confirmText: this.intl.formatMessage({id: \"sqft.popup.button.yes\"}),\r\n cancelCallback: () => {\r\n store.dispatch(setShapeIdsWithMissingFeature([]));\r\n store.dispatch(setShouldShowChangeShapeFeatureMissingMessage(false));\r\n closeSQFTPopup();\r\n },\r\n cancelText: this.intl.formatMessage({id: \"sqft.popup.button.no\"}),\r\n }\r\n ));\r\n }\r\n }\r\n this.getPointProperty = (property) => {\r\n let arcLengths = [];\r\n for (let i = 0; i < shapes.length; i++) {\r\n let shape = shapes[i];\r\n if (shape.getLines) {\r\n let lines = shape.getLines();\r\n for (let n = 0; n < lines.length; n++) {\r\n let point = lines[n].from;\r\n if (point[property] > 0) {\r\n arcLengths.push({\r\n id: point.id,\r\n value: point[property],\r\n featureId: point.featureId,\r\n qtCatName: getQtCatName(),\r\n quantity: 1,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n return arcLengths;\r\n };\r\n this.getSink = function() {\r\n var sinks = [];\r\n for(var i = 0; i < shapes.length; i++) {\r\n var shape = shapes[i];\r\n if(shape.getAttachedTo && !shape.getAttachedTo()) { //sink not edging\r\n var img = shape.getImage();\r\n var sinkId = img.dataset.id;\r\n if(sinkId) {\r\n var bExists = false;\r\n for(var n = 0; n < sinks.length; n++) {\r\n if(sinks[n].id === sinkId) {\r\n sinks[n].qty++;\r\n bExists = true;\r\n break;\r\n }\r\n }\r\n if(!bExists) {\r\n sinks.push({\r\n sink: img,\r\n name: img.dataset.name,\r\n id: sinkId,\r\n qty: 1\r\n });\r\n }\r\n }\r\n }\r\n }\r\n return sinks;\r\n };\r\n /**\r\n * get all bumpouts\r\n */\r\n this.getBumpouts = () => {\r\n return shapes\r\n .filter(shape => shape.getLines)\r\n .flatMap(shape =>\r\n shape.getLines()\r\n .filter(line => line.isWithBumpout && line.isWithBumpout())\r\n .map(line => {\r\n const area = config.measureUnit === \"Metric\"\r\n ? line.bumpoutOverlay.getBumpoutTotalArea().millimeters\r\n : line.bumpoutOverlay.getBumpoutTotalArea().inches;\r\n const featureObjectDTO = new FeatureObjectDTO(line.bumpoutOverlay.id, FEATUREGROUP_PART_ID.specialty_cut_and_designs, line.bumpoutOverlay.featureId);\r\n featureObjectDTO.addBumpoutArea(area)\r\n\r\n return featureObjectDTO;\r\n })\r\n );\r\n };\r\n\r\n this.getLines = () => {\r\n let allLines = [];\r\n for (let i = 0; i < shapes.length; i++) {\r\n let shape = shapes[i];\r\n if (shape.getLines && shape instanceof sqftShape) {\r\n allLines = allLines.concat(shape.getLines());\r\n }\r\n }\r\n\r\n return allLines;\r\n };\r\n\r\n this.getLineCorners = () => {\r\n let allLineCorners = [];\r\n for (let i = 0; i < shapes.length; i++) {\r\n let shape = shapes[i];\r\n if (shape.getLineCorners) {\r\n allLineCorners = allLineCorners.concat(shape.getLineCorners());\r\n }\r\n }\r\n\r\n return allLineCorners;\r\n };\r\n\r\n this.getLinesAndLineCorners = () => {\r\n return this.getLines().concat(this.getLineCorners())\r\n }\r\n\r\n this.getLineById = (id) => {\r\n let allLines = this.getLines();\r\n\r\n return allLines.find((line) => line.id === id);\r\n };\r\n\r\n this.getLineCornerById = (id) => {\r\n let allLines = this.getLines();\r\n const line = allLines.find((line) => line.lineCorner !== undefined && line.lineCorner.id === id);\r\n\r\n if (line !== undefined) {\r\n return line.lineCorner\r\n }\r\n };\r\n\r\n this.getLineOrCornerLineById = (id) => {\r\n let lineSegment = this.getLineById(id)\r\n if (lineSegment) {\r\n return lineSegment\r\n }\r\n return this.getLineCornerById(id)\r\n };\r\n\r\n this.getMiteredSections = function() {\r\n // let mitered = [];\r\n // for(let i = 0; i < shapes.length; i++) {\r\n // let shape = shapes[i];\r\n // if(shape.getLines) {\r\n // let lines = shape.getLines();\r\n // for(let n = 0; n < lines.length; n++) {\r\n // if(lines[n].isWithMitered()) {\r\n // mitered.push(lines[n].miteredOverlay);\r\n // }\r\n // }\r\n // }\r\n // }\r\n const reduxState = store.getState();\r\n\r\n return reduxState.sqftMiteredState.miteredSections;\r\n };\r\n\r\n /**\r\n * @deprecated use features from redux store\r\n */\r\n this.getShapeType = (type) => {\r\n let addedEdges = [];\r\n let edgeName;\r\n let isImageShapeType;\r\n let isLabelShapeType;\r\n let backsplashLength = 0;\r\n let area = 0;\r\n let length = 0;\r\n let realLength = 0;\r\n let lineLength = 0;\r\n let unit = null;\r\n const storedShapes = this.getShapes().filter(shp => {\r\n return !SHAPE_PART_IDS_VISIBLE_ONLY_IN_THE_SLAB_MODE.includes(shp.partId)\r\n });\r\n const state = store.getState();\r\n const fabricatorData = state.fabricatorState;\r\n\r\n for (let i = 0; i < storedShapes.length; i++) {\r\n const shape = storedShapes[i];\r\n isImageShapeType = shape.type && shape.type.includes(type);\r\n isLabelShapeType = shape instanceof sqftShape && shape.partId.includes(type);\r\n if (isImageShapeType && !isLabelShapeType) {\r\n const attachedTo = shape.attachedToId\r\n ? this.getLineOrCornerLineById(shape.attachedToId)\r\n : shape.historyProps\r\n ? shape.historyProps.attachedTo\r\n : null; //old quotes support can be removed in future\r\n\r\n let featureId = +shape.featureId;\r\n length = 0;\r\n area = 0;\r\n\r\n if (type === \"backsplash\") {\r\n length = attachedTo ? getBacksplashArea(attachedTo.getBacksplashHeight(), attachedTo) : 0;\r\n backsplashLength = attachedTo ? getBacksplashLength(attachedTo) : 0;\r\n } else if (type === \"wall\") {\r\n length = realLength = getEdgeLength(attachedTo);\r\n } else {\r\n const navItems = getEdgeFeatures();\r\n let edge = navItems.find(edge => edge.part.dbFeature.id === featureId);\r\n if (edge && edge.part) {\r\n let edgeFeature = edge.part.dbFeature;\r\n unit = edgeFeature ? edgeFeature.unit : null;\r\n }\r\n // count only one length for \"each\" units\r\n length = (unit ? unit.toLowerCase() : null) === \"each\" ? 1 : getEdgeLength(attachedTo);\r\n realLength = getEdgeLength(attachedTo);\r\n lineLength = config.measureUnit === \"Imperial\" ? attachedTo.getLineLength() : attachedTo.getLineLengthMm();\r\n area = getEdgeArea(attachedTo, lineLength, featureId);\r\n }\r\n // export all edges (combine them after adding to cart from popup)\r\n\r\n // for (let n = 0; n < addedEdges.length; n++) {\r\n // if(addedEdges[n].id === edgeId) {\r\n // addedEdges[n].length += length;\r\n // addedEdges[n].realLength += realLength;\r\n // addedEdges[n].area += area;\r\n // addedEdges[n].pieces.push(backsplashLength);\r\n // addedEdges[n].segments += 1;\r\n // //bExists = true;\r\n // break;\r\n // }\r\n // }\r\n //if(!bExists) {\r\n //todo sqft-react translate\r\n //edgeName = TranslatesProvider.translate('transDoc.customDisplayName_FR.' + img.dataset.sharedFeatureName, img.dataset.name);\r\n edgeName = shape.name; //intl.formatMessage({id: edgeFeature.dbFeature.sharedFeatureName}); //img.dataset.name;\r\n\r\n addedEdges.push({\r\n parentId: attachedTo ? attachedTo.getParent().id : null,\r\n partId: attachedTo ? attachedTo.getParent().partId : null,\r\n fromWizardGroupId: attachedTo ? attachedTo.getParent().fromWizardGroupId : \"\",\r\n edge: featureId,//img,\r\n name: edgeName,\r\n id: featureId,\r\n segments: 1,\r\n pieces: [backsplashLength],\r\n length,\r\n realLength,\r\n unit,\r\n area\r\n });\r\n //}\r\n } else if (isLabelShapeType && shape.getTotalInches) {\r\n area = config.measureUnit === \"Imperial\" ? sqInchesToSqFoot(shape.getTotalInches()) : mm2ToM2(shape.getTotalMillimeters());\r\n length = config.measureUnit === \"Imperial\" ? sqInchesToSqFoot(shape.getTotalInches()) : mm2ToM2(shape.getTotalMillimeters());\r\n let featureGroup = getFeatureGroup(shape.partId);\r\n if (featureGroup && featureGroup.part) {\r\n let featureGroupName = getFeatureGroupName(featureGroup.part, this.intl, fabricatorData);\r\n addedEdges.push({\r\n partId: shape.partId,\r\n fromWizardGroupId: shape.fromWizardGroupId,\r\n //edge: img,\r\n name: featureGroupName,\r\n //id: edgeId,\r\n segments: 1,\r\n length,\r\n area\r\n });\r\n }\r\n }\r\n }\r\n if (type === \"edge\") {\r\n for (let n = 0; n < addedEdges.length; n++) {\r\n addedEdges[n].length = config.measureUnit === \"Imperial\" ? addedEdges[n].length : mmToM(addedEdges[n].length);\r\n }\r\n }\r\n\r\n return addedEdges;\r\n };\r\n\r\n this.addImage = function(\r\n image,\r\n width,\r\n height,\r\n attachedTo,\r\n hoverShape,\r\n type,\r\n subType, // appliance type\r\n historyCallBack,\r\n historyPosition,\r\n part = null,\r\n objId = null,\r\n priority = null,\r\n featureId = null,\r\n hide = false,\r\n params = {\r\n canSnap: true,\r\n isResizable: true\r\n },\r\n ) {\r\n let vc = self.getVisibleCenter(),\r\n newImage = new MovableImage(objId ? objId : ++objIds, priority, subType, params);\r\n\r\n newImage.onInit = self.onShapeReady;\r\n newImage.attachedToShape = hoverShape;\r\n newImage.type = type;\r\n newImage.part = part;\r\n newImage.featureId = featureId;\r\n newImage.init(\r\n historyPosition || {x: vc.x - (width / 2), y: vc.y - (height/2)},\r\n image,\r\n { width: width, height: height},\r\n attachedTo,\r\n hide\r\n );\r\n attachedTo && (attachedTo.attachedShape = newImage);\r\n newImage.historyProps = {\r\n image: image,\r\n width: width,\r\n height: height,\r\n attachedTo: attachedTo,\r\n attachedToParentId: attachedTo\r\n ? attachedTo.getParent ? attachedTo.getParent().id : null\r\n : null,\r\n hoverShape: hoverShape,\r\n type: type,\r\n subType: subType,\r\n part: part,\r\n historyCallBack: historyCallBack,\r\n featureId: featureId\r\n };\r\n shapes.unshift(newImage);\r\n\r\n return newImage;\r\n };\r\n\r\n this.getAttachedTo = function(attachedTo) {\r\n const state = store.getState();\r\n\r\n return state.sqftResourceState.attachedToLine.find(attachedToLine => attachedToLine.attachedToId === attachedTo.id)\r\n };\r\n this.getAttachedToLineResource = (type) => {\r\n const reduxState = store.getState();\r\n return reduxState.sqftResourceState.attachedToLine.filter(attachedToLine => {\r\n return attachedToLine.type === type\r\n });\r\n };\r\n this.getImagesAttachedTo = function(attachedTo) {\r\n for (var i = 0; i < shapes.length; i++) {\r\n if(shapes[i].getAttachedTo) {\r\n if(shapes[i].getAttachedTo() === attachedTo) {\r\n return shapes[i];\r\n }\r\n }\r\n }\r\n };\r\n this.onShapeReady = function() {\r\n\r\n };\r\n\r\n this.addShape = function(segments, shapeType, historyPosition, partId, fromLayout = null, shapeParams = {}) {\r\n const realPartId = checkShapeForAvailablePartId(partId);\r\n let vc = self.getVisibleCenter(),\r\n mm = sqftShapeManager.getMinMax(segments),\r\n shapeId = ++objIds,\r\n newShape = new Shape(shapeId, shapes.length, shapeType, realPartId, fromLayout, shapeParams),\r\n openedMobileButton = $('.pallet-wrapper--opened');\r\n\r\n newShape.setQtCatName(getQtCatName())\r\n newShape.onHover = self.onShapeHover;\r\n newShape.onInit = self.onShapeReady;\r\n newShape.init(\r\n historyPosition || {x: vc.x - (mm.width/2), y: vc.y - (mm.height/2)}, //position\r\n segments\r\n );\r\n shapes.unshift(newShape);\r\n !nodes.appBody.hasClass('step--shapes--selected') && nodes.appBody.addClass('step--shapes--selected');\r\n (openedMobileButton.length > 0) && openedMobileButton.removeClass('pallet-wrapper--opened');\r\n if (nodes.appBody.hasClass('tutorial--enabled')) {\r\n this.tutorialShape = newShape;\r\n }\r\n newShape.setFeatureId(getShapeFeatureId(realPartId));\r\n\r\n return shapeId\r\n };\r\n\r\n this.removeTutorialShape = function () {\r\n this.tutorialShape && this.removeShape(this.tutorialShape);\r\n };\r\n\r\n this.removeShapeWithIds = (shapeIds) => {\r\n for (let i = shapeIds.length - 1; i >= 0; i--) {\r\n this.removeShapeById(shapeIds[i]);\r\n }\r\n }\r\n\r\n this.removeShapeById = function(id) {\r\n for (let i = shapes.length - 1; i >= 0; i--) {\r\n if (shapes[i] && shapes[i].id === id) {\r\n if (shapes[i] instanceof MovableImage && shapes[i].type === MOVABLE_IMAGE_TYPES.slabImage) {\r\n this.removeSlabImage(shapes[i]);\r\n } else {\r\n this.removeShape(shapes[i])\r\n }\r\n }\r\n }\r\n };\r\n\r\n this.removeSlabImage = (movableImage) => {\r\n const reduxState = store.getState();\r\n const croppedSlabImages = reduxState.sqftSlabState.croppedSlabImages || [];\r\n\r\n if (!Array.isArray(croppedSlabImages)) {\r\n console.error('croppedSlabImages is not a valid array');\r\n return;\r\n }\r\n\r\n store.dispatch(deleteCroppedSlabImage(movableImage.id));\r\n this.removeShape(movableImage);\r\n\r\n if (croppedSlabImages.length === 0) {\r\n slabWorkspace.deregisterEvents();\r\n }\r\n };\r\n\r\n this.getShapeById = (id) => {\r\n const combinedShapes = this.getShapes();\r\n for (let i = combinedShapes.length - 1; i >= 0; i--) {\r\n if (combinedShapes[i].id === id) {\r\n return combinedShapes[i]\r\n }\r\n }\r\n\r\n return null\r\n };\r\n\r\n this.removeShape = (shape) => {\r\n const shapesCopy = [...shapes];\r\n\r\n // Iterate a copy of the shapes array from end to beginning\r\n for (let i = shapesCopy.length - 1; i >= 0; i--) {\r\n const currentShape = shapesCopy[i];\r\n\r\n if (currentShape && currentShape.id === shape.id) {\r\n\r\n if (currentShape.shapeType in SHAPE_TYPE) {\r\n currentShape.getLines().forEach((line) => {\r\n if (line.overlay) {\r\n line.overlay.destroy();\r\n }\r\n line.deleteAttachedItem ? line.deleteAttachedItem() : void null;\r\n line.to.removeAttachedItem ? line.to.removeAttachedItem() : void null;\r\n });\r\n }\r\n\r\n if (currentShape) {\r\n currentShape.destroy();\r\n\r\n // Find current shape index in the original array and delete it\r\n const originalIndex = shapes.indexOf(currentShape);\r\n if (originalIndex !== -1) {\r\n shapes.splice(originalIndex, 1);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (shape.removeShapePieces) {\r\n shape.removeShapePieces();\r\n }\r\n\r\n slabWorkspace.slabAdditionalShapes.removeShapeFromList(shape);\r\n\r\n const reduxState = store.getState();\r\n const updateCalculations = reduxState.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n };\r\n\r\n\r\n this.updateRemovedFeatures = (shape) => {\r\n if (shape.partId === SHAPE_PART_ID.slabPlaceHolder\r\n || shape.type === MOVABLE_IMAGE_TYPES.slabImage\r\n ) {\r\n workspaceControllers.removedFeatures.addResource(shape.id);\r\n }\r\n };\r\n\r\n this.removeAllShapes = function() {\r\n for (let i = shapes.length - 1; i >= 0; i--) {\r\n if (shapes[i]) {\r\n self.removeShape(shapes[i])\r\n }\r\n }\r\n // todo sqft react: lineLength are not equal when going back to sqft\r\n //_.isEqual(sqftEventManager.activeEvents[\"render\"][11].sender, shapes[i].getLines()[3].overlay)\r\n };\r\n this.removeFeatureBySQFTId = (sqftId) => {\r\n //console.log(\"sqftId to remove\", sqftId);\r\n this.removeShapeById(sqftId);\r\n sqftResourcesManager.deleteAttachedItemById(sqftId);\r\n\r\n // sqftImageManager.removeAllSlabImages();\r\n // sqftSlabManager.removeAllSlabBacksplashes();\r\n // sqftResourcesManager.deleteAllResources();\r\n // sqftResourcesManager.deleteAllMiteredSections();\r\n // sqftSlabManager.deleteShapeOffset();\r\n };\r\n this.removeAllBumpouts = function() {\r\n for (let i = shapes.length - 1; i >= 0; i--) {\r\n if (shapes[i] && shapes[i].removeBumpouts) {\r\n shapes[i].removeBumpouts()\r\n }\r\n }\r\n };\r\n this.removeAllSlabImages = () => {\r\n for (let i = shapes.length - 1; i >= 0; i--) {\r\n if (shapes[i] instanceof MovableImage && shapes[i].type === 'slabImage') {\r\n self.removeShape(shapes[i].destroy())\r\n }\r\n }\r\n store.dispatch(setSqftCroppedSlabImages([]));\r\n };\r\n\r\n this.onShapeHover = function() {\r\n };\r\n this.setIntl = (intl) => {\r\n this.intl = intl\r\n };\r\n\r\n this.init = ($canvas = null, intl = null) => {\r\n //set global configuration\r\n this.isInitialized = true;\r\n this.name = config.workspace.name;\r\n setCanvas($canvas);\r\n if (intl) {\r\n this.intl = intl\r\n }\r\n //initialize workspace canvas such that 0x 0y is in the center\r\n pos.x = parseInt(0 - (canvas.width() / 2));\r\n pos.y = parseInt(0 - (canvas.height() / 2));\r\n //connect events\r\n EventManager.init(canvas[0]);\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n onMouseMove,\r\n self,\r\n EventManager.priorities.WORKSPACE\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n onMouseDown,\r\n self,\r\n EventManager.priorities.WORKSPACE\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n onMouseUp,\r\n self,\r\n EventManager.priorities.WORKSPACE\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n self.render,\r\n self,\r\n EventManager.priorities.WORKSPACE\r\n );\r\n\r\n WorkspaceEvents.init();\r\n RulerOverlay.init();\r\n if (isSFTCabinetsGroup()) {\r\n cabinetWorkspace.initCabinetEvents();\r\n }\r\n };\r\n\r\n this.render = (ctx) => {\r\n this.renderGrid(ctx);\r\n Object.values(workspaceControllers).forEach(workspaceController => {\r\n if (workspaceController.render) {\r\n workspaceController.render();\r\n }\r\n });\r\n };\r\n\r\n this.renderGrid = (ctx) => {\r\n let i;\r\n var scale = config.scale;\r\n var gridSize = config.workspace.gridSize * scale;\r\n var start = {\r\n x: ((pos.x % gridSize) * -1),\r\n y: ((pos.y % gridSize) * -1)\r\n };\r\n var canvasWidth = canvas[0].width;\r\n var canvasHeight = canvas[0].height;\r\n var center = self.getCenter();\r\n var scaledGrid = gridSize / Math.round(config.workspace.gridSize / config.workspace.getScaledGridSize());\r\n //render grid background\r\n ctx.lineWidth = 1;\r\n ctx.clearRect(0, 0, canvasWidth, canvasHeight);\r\n // rendering cells\r\n if(scale > 1) {\r\n ctx.beginPath();\r\n for(i = start.x % scaledGrid; i < canvasWidth; i+= scaledGrid) {\r\n ctx.moveTo(i, 0);\r\n ctx.lineTo(i, canvasHeight);\r\n }\r\n for(i = start.y % scaledGrid; i < canvasHeight; i+= scaledGrid) {\r\n ctx.moveTo(0, i);\r\n ctx.lineTo(canvasWidth, i);\r\n }\r\n ctx.strokeStyle = \"#EEEEEE\";\r\n ctx.stroke();\r\n }\r\n //render 12inch grid\r\n ctx.beginPath();\r\n for(i = start.x; i < canvasWidth; i+=gridSize) {\r\n ctx.moveTo(i, 0);\r\n ctx.lineTo(i, canvasHeight);\r\n }\r\n for(i = start.y; i < canvasHeight; i+= gridSize) {\r\n ctx.moveTo(0, i);\r\n ctx.lineTo(canvasWidth, i);\r\n }\r\n ctx.strokeStyle = '#DDDDDD';\r\n ctx.stroke();\r\n //render center lines\r\n ctx.beginPath();\r\n ctx.moveTo(center.x, 0);\r\n ctx.lineTo(center.x, canvasHeight);\r\n ctx.moveTo(0, center.y);\r\n ctx.lineTo(canvasWidth, center.y);\r\n ctx.strokeStyle = '#BBBBBB';\r\n ctx.stroke();\r\n };\r\n};\r\n\r\nexport default new workspace\r\n","//********* NAVIGATION *********//\r\nimport * as types from \"./actionTypes\";\r\nimport {setTrumbleInventoryForFeatures} from \"../api/look-api\";\r\n\r\nexport const setLookOpened = (lookOpened = false) => {\r\n return (dispatch, getState) => {\r\n const store = getState();\r\n const {isMobile} = store.serverState;\r\n dispatch({\r\n type: types.SET_LOOK_OPENED,\r\n payload: {lookOpened, isMobile}\r\n });\r\n }\r\n};\r\n\r\nexport const setLookExpanded = (lookExpanded = false) => ({\r\n type: types.SET_LOOK_OPENED,\r\n payload: {lookExpanded}\r\n});\r\n\r\nexport const setLookParentKeys = (lookParentKeys = []) => ({\r\n type: types.SET_LOOK_PARENT_KEYS,\r\n payload: {lookParentKeys}\r\n});\r\n\r\nexport const setLookViewType = (lookViewType = 1) => ({\r\n type: types.SET_LOOK_VIEW_TYPE,\r\n payload: {lookViewType}\r\n});\r\n\r\nexport const setWishlistPopupOpened = (wishlistPopupOpened = false) => ({\r\n type: types.SET_WISHLIST_POPUP_OPENED,\r\n payload: {wishlistPopupOpened}\r\n});\r\n\r\nexport const setSidebarModalOpened = (sidebarModalOpened = false) => ({\r\n type: types.SET_SIDEBAR_MODAL_OPENED,\r\n payload: {sidebarModalOpened}\r\n});\r\n\r\nexport const setLookActiveFeature = (newLookActiveFeature = null, lookActiveFeaturePositionInList = null) => {\r\n return (dispatch, getState) => {\r\n const store = getState();\r\n const {isMobile} = store.serverState;\r\n dispatch({\r\n type: types.SET_LOOK_ACTIVE_FEATURE,\r\n payload: {lookActiveFeature: newLookActiveFeature, lookActiveFeaturePositionInList, isMobile}\r\n });\r\n\r\n const {settings} = store.fabricatorState;\r\n if (newLookActiveFeature && settings.useTrumbleApi && !newLookActiveFeature.quantityOptions) {\r\n setTrumbleInventoryForFeatures([newLookActiveFeature]).then(() => {\r\n dispatch({\r\n type: types.UPDATE_LOOK_ACTIVE_FEATURE_STOCK_COUNT,\r\n });\r\n })\r\n }\r\n }\r\n};\r\n\r\nexport const setLookActiveCategory = (lookActiveCategory = \"\") => {\r\n return (dispatch, getState) => {\r\n const store = getState();\r\n const {isMobile} = store.serverState;\r\n dispatch({\r\n type: types.SET_LOOK_ACTIVE_CATEGORY,\r\n payload: {lookActiveCategory, isMobile}\r\n });\r\n }\r\n};\r\n\r\nexport const setLookMoreInfoOpened = (moreInfoOpened = \"\", moreInfoContent = \"\") => ({\r\n type: types.SET_LOOK_MORE_INFO_OPENED,\r\n payload: {moreInfoOpened, moreInfoContent}\r\n});\r\n\r\nexport const setLookPageOpened = (lookPageOpened) => ({\r\n type: types.SET_LOOK_PAGE_OPENED,\r\n payload: {lookPageOpened}\r\n});\r\n\r\nexport const setLookOverlayOpened = (lookOverlayOpened, lookOverlayAction = \"\") => ({\r\n type: types.SET_LOOK_OVERLAY_OPENED,\r\n payload: {lookOverlayOpened, lookOverlayAction}\r\n});\r\n\r\nexport const setLookViewChangeOptions = (lookViewChangeOptions) => ({\r\n type: types.SET_LOOK_VIEW_CHANGE_OPTIONS,\r\n payload: {lookViewChangeOptions}\r\n});\r\n\r\nexport const setLookStylePopup = (lookStylePopup) => ({\r\n type: types.SET_LOOK_STYLE_POPUP,\r\n payload: {lookStylePopup}\r\n});\r\n\r\nexport const setLookRemovePopup = (lookRemovePopup) => ({\r\n type: types.SET_LOOK_REMOVE_POPUP,\r\n payload: {lookRemovePopup}\r\n});\r\n\r\nexport const setLookIntroStep = (introStep) => ({\r\n type: types.SET_LOOK_INTRO_STEP,\r\n payload: {introStep}\r\n});\r\n\r\nexport const setLookIntroHidden = (introHidden) => ({\r\n type: types.SET_LOOK_INTRO_HIDDEN,\r\n payload: {introHidden}\r\n});\r\n\r\nexport const setLookContextMenu = (contextMenu) => ({\r\n type: types.SET_LOOK_CONTEXT_MENU,\r\n payload: {contextMenu}\r\n});\r\n\r\nexport const setLookWallsApplyTo = (lookWallsApplyTo) => ({\r\n type: types.SET_LOOK_WALLS_APPLY_TO,\r\n payload: {lookWallsApplyTo}\r\n});\r\n\r\nexport const setLookAllWallsOpened = (lookAllWallsOpened) => ({\r\n type: types.SET_LOOK_ALL_WALLS_OPENED,\r\n payload: {lookAllWallsOpened}\r\n});\r\n\r\nexport const setLookReturnAction = (lookReturnAction) => ({\r\n type: types.SET_LOOK_RETURN_ACTION,\r\n payload: {lookReturnAction}\r\n});\r\n\r\nexport const setLookDemoPointsClicked = (lookDemoPointsClicked) => ({\r\n type: types.SET_LOOK_DEMO_POINTS_CLICKED,\r\n payload: {lookDemoPointsClicked}\r\n});\r\n\r\nexport const updateNavigationCount = () => ({\r\n type: types.UPDATE_LOOK_NAVIGATION_COUNT,\r\n});\r\n\r\n// export const updateFeatureGroupCount = () => ({\r\n// type: types.UPDATE_LOOK_FEATURE_GROUP_COUNT,\r\n// });\r\n\r\nexport const setLookCompatabilityAlert = (lookCompatabilityAlert) => ({\r\n type: types.SET_LOOK_COMPATABILITY_ALERT,\r\n payload: {lookCompatabilityAlert}\r\n});\r\n\r\nexport const setLookRestoreState = (lookRestoreState) => ({\r\n type: types.SET_LOOK_RESTORE_STATE,\r\n payload: {lookRestoreState}\r\n});\r\n\r\nexport const setLookLockedTutorial = (lookLockedTutorial) => ({\r\n type: types.SET_LOOK_LOCK_TUTORIAL,\r\n payload: {lookLockedTutorial}\r\n});\r\n\r\nexport const setLookAllWallsTutorial = (lookAllWallsTutorial) => ({\r\n type: types.SET_LOOK_ALL_WALLS_TUTORIAL,\r\n payload: {lookAllWallsTutorial}\r\n});\r\n","// STEPS\r\nexport const SET_STEP = 'SET_STEP';\r\nexport const SET_STEP_SWITCHING = 'SET_STEP_SWITCHING';\r\n\r\n// SELECTION(MATERIALS PAGE)\r\nexport const SET_DEFAULT_SELECTION_GROUP = 'SET_DEFAULT_SELECTION_GROUP';\r\nexport const TOGGLE_SELECTION_WINDOW = 'TOGGLE_SELECTION_WINDOW';\r\nexport const SET_SELECTION_WINDOW_VIEW = 'SET_SELECTION_WINDOW_VIEW';\r\nexport const TOGGLE_SELECTION_INFO = 'TOGGLE_SELECTION_INFO';\r\nexport const UPDATE_FEATURE_INFO_COUNT = 'UPDATE_FEATURE_INFO_COUNT';\r\nexport const SET_VANITY_TYPE = 'SET_VANITY_TYPE';\r\nexport const SET_SHOWER_TYPE = 'SET_SHOWER_TYPE';\r\nexport const CHANGE_SELECTION_INFO_QUANTITY = 'CHANGE_SELECTION_INFO_QUANTITY';\r\nexport const TOGGLE_PULSE_FEATURE_INFO_QUANTITY = 'TOGGLE_PULSE_FEATURE_INFO_QUANTITY';\r\nexport const CHANGE_MATERIALS_INFO_FEATURE_MODULES = 'CHANGE_MATERIALS_INFO_FEATURE_MODULES';\r\nexport const CHANGE_SELECTION_ACTIVE_PART_RELATED_INDEX = 'CHANGE_SELECTION_ACTIVE_PART_RELATED_INDEX';\r\nexport const SET_ACTIVE_FEATURE = 'SET_ACTIVE_FEATURE';\r\nexport const SET_RELATED_GROUPS = 'SET_RELATED_GROUPS';\r\nexport const SET_RELATED_GROUPS_SEARCH = 'SET_RELATED_GROUPS_SEARCH';\r\nexport const TOGGLE_SHOW_DESCRIPTION_COVER = 'TOGGLE_SHOW_DESCRIPTION_COVER';\r\nexport const TOGGLE_GALLERY_VISIBLE = 'TOGGLE_GALLERY_VISIBLE';\r\nexport const SET_GALLERY_ACTIVE_IMAGE_INDEX = 'SET_GALLERY_ACTIVE_IMAGE_INDEX';\r\nexport const SET_MATERIALS_PAGE_SUB_STEPS = 'SET_MATERIALS_PAGE_SUB_STEPS';\r\nexport const SET_MATERIALS_PAGE_ACTIVE_SUB_STEP = 'SET_MATERIALS_PAGE_ACTIVE_SUB_STEP';\r\nexport const TOGGLE_NOT_COMPATIBLE_VIEW = 'TOGGLE_NOT_COMPATIBLE_VIEW';\r\nexport const TOGGLE_PRODUCT_NOTE_EDITOR_VISIBLE = 'TOGGLE_PRODUCT_NOTE_EDITOR_VISIBLE';\r\nexport const SET_ROW_ITEMS = 'SET_ROW_ITEMS';\r\nexport const SET_MATERIALS_PAGE_CANVAS_CLASS = 'SET_MATERIALS_PAGE_CANVAS_CLASS';\r\n\r\n// SERVER COMMANDS\r\nexport const SET_LAYOUT_DATA_PARTS = 'SET_LAYOUT_DATA_PARTS';\r\nexport const SET_JAVASCRIPT_ERRORS = 'SET_JAVASCRIPT_ERRORS';\r\nexport const SET_WINDOW_WIDTH = 'SET_WINDOW_WIDTH';\r\nexport const SET_WINDOW_HEIGHT = 'SET_WINDOW_HEIGHT';\r\nexport const SET_JOB_ID = 'SET_JOB_ID';\r\nexport const SET_FABRICATOR_DATA = 'SET_FABRICATOR_DATA';\r\nexport const SET_FABRICATOR_TAXES = 'SET_FABRICATOR_TAXES';\r\nexport const UPDATE_FABRICATOR_SETTINGS = 'UPDATE_FABRICATOR_SETTINGS';\r\nexport const TOGGLE_HIDE_ITEMS_PRICES = 'TOGGLE_HIDE_ITEMS_PRICES';\r\nexport const TOGGLE_USE_FABRICATOR_COST_PRICES = 'TOGGLE_USE_FABRICATOR_COST_PRICES';\r\nexport const SET_STONE_PRICING = 'SET_STONE_PRICING';\r\nexport const ADD_VISUALIZERS_LOADED = 'ADD_VISUALIZERS_LOADED';\r\nexport const SET_COOKIE_ACCEPTED = 'SET_COOKIE_ACCEPTED';\r\nexport const SHOW_SUCCESS_NOTIFICATION = 'SHOW_SUCCESS_NOTIFICATION';\r\nexport const SET_LANGUAGE = 'SET_LANGUAGE';\r\nexport const SET_ACTIVE_THEME = 'SET_ACTIVE_THEME';\r\nexport const SET_NETWORK_CONNECTION = 'SET_NETWORK_CONNECTION';\r\nexport const SET_INITIAL_VISUALIZER_TYPE = 'SET_INITIAL_VISUALIZER_TYPE';\r\n\r\n// QUOTINGTOOL CATEGORIES\r\nexport const SET_QT_CATEGORIES_REQUESTED = 'SET_QT_CATEGORIES_REQUESTED';\r\nexport const SET_QT_CATEGORIES_LOADED = 'SET_QT_CATEGORIES_LOADED';\r\nexport const SET_QT_ACTIVE_CATEGORY = 'SET_QT_ACTIVE_CATEGORY';\r\n\r\n// BATHROOM VISUALIZER COMMANDS\r\nexport const TOGGLE_BATHROOM_VISUALIZER_OPEN = 'TOGGLE_BATHROOM_VISUALIZER_OPEN';\r\nexport const SET_BATHROOM_VISUALIZER_VISITED = 'SET_BATHROOM_VISUALIZER_VISITED';\r\nexport const SET_BV_CANVAS_ID = 'SET_BV_CANVAS_ID';\r\nexport const SET_BV_FEATURES = 'SET_BV_FEATURES';\r\nexport const SET_BV_PRESETS = 'SET_BV_PRESETS';\r\nexport const SET_ACTIVE_PRESET = 'SET_ACTIVE_PRESET';\r\nexport const TOGGLE_SHOW_RESTORE_POPUP = 'TOGGLE_SHOW_RESTORE_POPUP';\r\nexport const SET_CANVAS_DIMENSIONS = 'SET_CANVAS_DIMENSIONS';\r\nexport const SET_STATIC_CANVAS_IMAGE = 'SET_STATIC_CANVAS_IMAGE';\r\nexport const SET_CANVAS_SCALE = 'SET_CANVAS_SCALE';\r\nexport const UPDATE_CANVAS_COUNT = 'UPDATE_CANVAS_COUNT';\r\nexport const SET_PRESET_WAS_CHANGED_BY_USER = 'SET_PRESET_WAS_CHANGED_BY_USER';\r\nexport const SET_FIRST_LOADED_PRESET = 'SET_FIRST_LOADED_PRESET';\r\nexport const SET_LOADED_PRESETS = 'SET_LOADED_PRESETS';\r\n\r\n// LOADER\r\nexport const TOGGLE_LOADER = 'TOGGLE_LOADER';\r\nexport const SET_MULTI_LOADER = 'SET_MULTI_LOADER';\r\n\r\n// APPLY POPUP\r\nexport const TOGGLE_APPLY_POPUP = 'TOGGLE_APPLY_POPUP';\r\n// CONFIRM POPUP\r\nexport const TOGGLE_CONFIRM_POPUP = 'TOGGLE_CONFIRM_POPUP';\r\n\r\n// USER COMMANDS\r\nexport const TOGGLE_USER_POPUP = 'TOGGLE_USER_POPUP';\r\nexport const CHANGE_USER_INFO = 'CHANGE_USER_INFO';\r\nexport const CHANGE_USER_INFO_ERRORS = 'CHANGE_USER_INFO_ERRORS';\r\nexport const SET_EMPLOYEES_LIST = 'SET_EMPLOYEES_LIST';\r\nexport const TOGGLE_ADDITIONAL_FIELDS = 'TOGGLE_ADDITIONAL_FIELDS';\r\nexport const SET_USER_PHONE_NUMBER_VALIDATED = 'SET_USER_PHONE_NUMBER_VALIDATED';\r\nexport const RESTORE_USER_STATE = 'RESTORE_USER_STATE';\r\nexport const SET_ALREADY_REGISTERED_USER = 'SET_ALREADY_REGISTERED_USER';\r\nexport const SET_LEAD_CAPTURE_CLICK_COUNT = 'SET_LEAD_CAPTURE_CLICK_COUNT';\r\nexport const SET_USER_POPUP_CONTENT = 'SET_USER_POPUP_CONTENT';\r\nexport const SET_USER_TWO_FA = 'SET_USER_TWO_FA';\r\nexport const SET_USER_OPT_IN = 'SET_USER_OPT_IN';\r\n\r\n// CART COMMANDS\r\nexport const ADD_TO_CART = 'ADD_TO_CART';\r\nexport const ADD_DISPLAY_LOGIC_CART_ITEM = 'ADD_DISPLAY_LOGIC_CART_ITEM';\r\nexport const REMOVE_FROM_CART = 'REMOVE_FROM_CART';\r\nexport const REMOVE_INSTALLATION_SERVICE_FROM_CART = 'REMOVE_INSTALLATION_SERVICE_FROM_CART';\r\nexport const CHANGE_CART_QUANTITY = 'CHANGE_CART_QUANTITY';\r\nexport const CHANGE_CART_FEATURE = 'CHANGE_CART_FEATURE';\r\nexport const CLICK_QUESTION_NO = 'CLICK_QUESTION_NO';\r\nexport const CAME_FROM_PAGE = 'CAME_FROM_PAGE';\r\nexport const CLEAR_CART = 'CLEAR_CART';\r\nexport const RESTORE_CART = 'RESTORE_CART';\r\nexport const ADD_TO_RECENTLY_VIEWED = 'ADD_TO_RECENTLY_VIEWED';\r\nexport const SHOW_CHECKOUT_POPUP = 'SHOW_CHECKOUT_POPUP';\r\nexport const SUBMIT_PAYMENT = 'SUBMIT_PAYMENT';\r\nexport const SUBMIT_PAYMENT_RESPONSE = 'SUBMIT_PAYMENT_RESPONSE';\r\nexport const SHOW_ORDER_COMPLETE_POPUP = 'SHOW_ORDER_COMPLETE_POPUP';\r\nexport const TOGGLE_SHOW_MOBILE_QUOTES = 'TOGGLE_SHOW_MOBILE_QUOTES';\r\nexport const TOGGLE_SHOW_ALL_QUOTES_CART_ITEMS_LIST = 'TOGGLE_SHOW_ALL_QUOTES_CART_ITEMS_LIST';\r\nexport const SET_AGREE_EMAIL_CHECKBOX = 'SET_AGREE_EMAIL_CHECKBOX';\r\nexport const SET_CART_FOOTER_ACTIVE_BUTTON_INDEX = 'SET_CART_FOOTER_ACTIVE_BUTTON_INDEX';\r\nexport const SET_CART_ITEM_EDIT_FEATURE = 'SET_CART_ITEM_EDIT_FEATURE';\r\nexport const SET_LOOK_REMOVED_CART_ITEMS = 'SET_LOOK_REMOVED_CART_ITEMS';\r\nexport const SET_AMAZON_IMAGE_URL = 'SET_AMAZON_IMAGE_URL';\r\nexport const SET_CART_ITEMS_ADDED_TO_PARENT_CART = 'SET_CART_ITEMS_ADDED_TO_PARENT_CART';\r\nexport const CHANGE_ALL_CART_ITEMS = 'CHANGE_ALL_CART_ITEMS';\r\nexport const SET_SURE_TAX = 'SET_SURE_TAX';\r\nexport const SET_SURE_TAX_LOADING = 'SET_SURE_TAX_LOADING';\r\nexport const SET_MANUAL_TAX = 'SET_MANUAL_TAX';\r\n\r\nexport const SET_MARK_UP_LOGIC = 'SET_MARK_UP_LOGIC';\r\nexport const SET_DELIVERY_LIST = 'SET_DELIVERY_LIST';\r\nexport const SET_ALL_FEATURES_LOADED = 'SET_ALL_FEATURES_LOADED';\r\nexport const SET_ALLOW_ROUTING = 'SET_ALLOW_ROUTING';\r\nexport const SET_ALLOW_MAIN_LOADING = 'SET_ALLOW_MAIN_LOADING';\r\nexport const SET_ACTION_AFTER_VISUALIZER_TYPE_CHANGED = 'SET_ACTION_AFTER_VISUALIZER_TYPE_CHANGED';\r\nexport const SET_VISUALIZER_TYPE_CHANGING = 'SET_VISUALIZER_TYPE_CHANGING';\r\n\r\n// INSTALLATION COMMANDS\r\nexport const TOGGLE_INST_OPENED = 'TOGGLE_INST_OPENED';\r\nexport const SET_INST_LIST = 'SET_INST_LIST';\r\nexport const SET_DEFAULT_INST_LIST = 'SET_DEFAULT_INST_LIST';\r\n\r\n// QUOTE STATE\r\nexport const SET_STATE_TO_QUOTE = \"SET_STATE_TO_QUOTE\";\r\n\r\n// PRICE WORKSHEET\r\nexport const TOGGLE_PRICE_WORKSHEET_OPENED = 'TOGGLE_PRICE_WORKSHEET_OPENED';\r\nexport const SET_DISCOUNT_SECTIONS = 'SET_DISCOUNT_SECTIONS';\r\nexport const SET_CUSTOM_ADDED_DISCOUNTS = 'SET_CUSTOM_ADDED_DISCOUNTS';\r\nexport const SET_FINANCE_PERCENTAGE = 'SET_FINANCE_PERCENTAGE';\r\nexport const SET_ALL_FINANCE_OPTIONS_POPUP_VISIBLE = 'SET_ALL_FINANCE_OPTIONS_POPUP_VISIBLE';\r\nexport const SET_DISCOUNT_FINANCE_CELLS_VISIBLE = 'SET_DISCOUNT_FINANCE_CELLS_VISIBLE';\r\n\r\n// MESSAGE BOX COMMANDS\r\nexport const CHANGE_MESSAGE_BOX = 'CHANGE_MESSAGE_BOX';\r\n\r\n// FILTERS\r\nexport const SET_SELECTED_FILTERS = 'SET_SELECTED_FILTERS';\r\nexport const LOAD_FILTERS = 'LOAD_FILTERS';\r\nexport const SET_EXPANDED_FILTERS = 'SET_EXPANDED_FILTERS';\r\nexport const SHOW_FILTERS = 'SHOW_FILTERS';\r\nexport const SHOW_FILTERS_IF_NOT_VISIBLE = \"SHOW_FILTERS_IF_NOT_VISIBLE\";\r\nexport const SET_FILTER_VISIBLE = 'SET_FILTER_VISIBLE';\r\nexport const SET_AVAILABLE_FILTER_VALUES = 'SET_AVAILABLE_FILTER_VALUES';\r\nexport const UPDATE_FILTERS_COUNT = 'UPDATE_FILTERS_COUNT';\r\nexport const SET_COUNTERTOP_FILTERS_RECEIVED = 'SET_COUNTERTOP_FILTERS_RECEIVED';\r\n\r\n// DESKTOP NAVIGATION\r\nexport const TOGGLE_DESKTOP_NAVIGATION = \"TOGGLE_DESKTOP_NAVIGATION\";\r\nexport const SET_ACTIVE_NAVIGATION_NAMES = \"SET_ACTIVE_NAVIGATION_NAMES\";\r\n\r\n// MOBILE MENU NAV\r\nexport const LOAD_MOBILE_NAV = \"LOAD_MOBILE_NAV\";\r\nexport const SHOW_SCHEDULER = \"SHOW_SCHEDULER\";\r\nexport const SCHEDULER_SCHEDULE = \"SCHEDULER_SCHEDULE\";\r\n\r\n// COMMON NAVIGATION\r\nexport const SET_MODULE_CONTEXT_MENU_TYPE = \"SET_MODULE_CONTEXT_MENU_TYPE\";\r\nexport const SET_MODULE_CONTEXT_MENU_MODULE = \"SET_MODULE_CONTEXT_MENU_MODULE\";\r\nexport const SET_MODULE_CONTEXT_MENU_MODULE_PART = \"SET_MODULE_CONTEXT_MENU_MODULE_PART\";\r\nexport const SET_MODULE_CONTEXT_MENU_DIRECTION = \"SET_MODULE_CONTEXT_MENU_DIRECTION\";\r\nexport const SET_NAVIGATION_VIEW_TYPE = \"SET_NAVIGATION_VIEW_TYPE\";\r\nexport const SET_CABINETS_APPLY_TO = \"SET_CABINETS_APPLY_TO\";\r\nexport const SET_CABINETS_APPLY_TO_BATHROOM = \"SET_CABINETS_APPLY_TO_BATHROOM\";\r\nexport const SET_COUNTERTOPS_APPLY_TO = \"SET_COUNTERTOPS_APPLY_TO\";\r\nexport const SET_COUNTERTOPS_APPLY_TO_BATHROOM = \"SET_COUNTERTOPS_APPLY_TO_BATHROOM\";\r\nexport const SET_APPLY_TO_COMMON = \"SET_APPLY_TO_COMMON\";\r\nexport const SET_EDGES_APPLY_TO = \"SET_EDGES_APPLY_TO\";\r\nexport const SET_NAVIGATION_LOADING = \"SET_NAVIGATION_LOADING\";\r\nexport const UPDATE_DISABLE_FEATURE_GROUP_RADIO = \"UPDATE_DISABLE_FEATURE_GROUP_RADIO\";\r\nexport const TOGGLE_NAV_ITEM_POSITION_MODAL = \"TOGGLE_NAV_ITEM_POSITION_MODAL\";\r\nexport const SET_USE_FEATURES_LIGHT_REQUEST = \"SET_USE_FEATURES_LIGHT_REQUEST\";\r\n\r\n// CABINET MODULE FILTERS\r\nexport const SET_ACTIVE_NAVIGATION_FILTER = \"SET_ACTIVE_NAVIGATION_FILTER\";\r\nexport const SET_ACTIVE_NAVIGATION_FILTER_STEP_INDEX = \"SET_ACTIVE_NAVIGATION_FILTER_STEP_INDEX\";\r\nexport const SET_CABINET_NAVIGATION_FILTER_COMPLETED = \"SET_CABINET_NAVIGATION_FILTER_COMPLETED\";\r\n\r\n//COUNTERTOP WIZARD\r\nexport const SET_COUNTERTOP_NAVIGATION_FILTER_COMPLETED = \"SET_COUNTERTOP_NAVIGATION_FILTER_COMPLETED\";\r\nexport const SET_COUNTERTOP_WIZARD = \"SET_COUNTERTOP_WIZARD\";\r\n\r\n//NEW DASHBOARD WIZARD\r\nexport const SET_WIZARD_CONFIG = \"SET_WIZARD_CONFIG\";\r\nexport const SET_WIZARD_IS_ACTIVE = \"SET_WIZARD_IS_ACTIVE\";\r\nexport const SET_WIZARD_ACTIVE_FILTER_GROUP_INDEX = \"SET_WIZARD_ACTIVE_FILTER_GROUP_INDEX\";\r\nexport const SET_WIZARD_LIST = \"SET_WIZARD_LIST\";\r\nexport const SET_WIZARD_ACTIVE_ITEM = \"SET_WIZARD_ACTIVE_ITEM\";\r\nexport const SET_WIZARD_SHOW_FEATURE_SECTION = \"SET_WIZARD_SHOW_FEATURE_SECTION\";\r\nexport const SET_WIZARD_ACTIVE_STEP = \"SET_WIZARD_ACTIVE_STEP\";\r\nexport const SET_WIZARD_SELECTED_VALUES = \"SET_WIZARD_SELECTED_VALUES\";\r\nexport const SET_ALL_WIZARD_SELECTED_VALUES = \"SET_ALL_WIZARD_SELECTED_VALUES\";\r\nexport const SET_WIZARD_CONFLICT_POPUP_OPENED = \"SET_WIZARD_CONFLICT_POPUP_OPENED\";\r\nexport const SET_WIZARD_CONFLICT_STEPS = \"SET_WIZARD_CONFLICT_STEPS\";\r\nexport const RESTORE_ALL_WIZARD_SELECTED_VALUES = \"RESTORE_ALL_WIZARD_SELECTED_VALUES\";\r\nexport const SET_WIZARD_MISSING_FEATURES = \"SET_WIZARD_MISSING_FEATURES\";\r\nexport const SET_WIZARD_SQFT_CART_ITEMS = \"SET_WIZARD_SQFT_CART_ITEMS\";\r\n\r\n// SQUARE FOOTAGE TOOL\r\n// export const TOGGLE_SQFT = \"TOGGLE_SQFT\";\r\nexport const ENABLE_SQUARE_FOOTAGE = \"ENABLE_SQUARE_FOOTAGE\";\r\nexport const SET_SQUARE_FOOTAGE_GROUP = \"SET_SQUARE_FOOTAGE_GROUP\";\r\nexport const SET_SQFT_VIEW_MODE = \"SET_SQFT_VIEW_MODE\";\r\nexport const LOAD_SQFT = \"LOAD_SQFT\";\r\nexport const UPDATE_SQFT = \"UPDATE_SQFT\";\r\nexport const UPDATE_SQFT_CALCULATIONS = \"UPDATE_SQFT_CALCULATIONS\";\r\nexport const SET_SQFT_SQUARE_FEET = \"SET_SQFT_SQUARE_FEET\";\r\nexport const TOGGLE_CHANGE_LAYOUT_POPUP = \"TOGGLE_CHANGE_LAYOUT_POPUP\";\r\nexport const SET_NEW_LAYOUT_ON_SQFT = \"SET_NEW_LAYOUT_ON_SQFT\";\r\nexport const SET_SQFT_MEASURE_UNIT = \"SET_SQFT_MEASURE_UNIT\";\r\nexport const CHANGE_SQFT_FEATURES_POPUP = \"CHANGE_SQFT_FEATURES_POPUP\";\r\nexport const SQT_SQFT_FROM_FEATURE = \"SQT_SQFT_FROM_FEATURE\";\r\nexport const SET_CABINETS_GLB = \"SET_CABINETS_GLB\";\r\nexport const SET_CABINETS_AR_BLOB_URL = \"SET_CABINETS_AR_BLOB_URL\";\r\nexport const SET_API_ERROR_MESSAGE = \"SET_API_ERROR_MESSAGE\";\r\nexport const SET_SHAPE_IDS_WITH_MISSING_FEATURES = \"SET_SHAPE_IDS_WITH_MISSING_FEATURES\";\r\nexport const SET_CHANGE_SHAPE_FEATURE_MISSING_MESSAGE = \"SET_CHANGE_SHAPE_FEATURE_MISSING_MESSAGE\";\r\nexport const ADD_SHAPE_ID_WITH_MISSING_FEATURES = \"ADD_SHAPE_ID_WITH_MISSING_FEATURES\";\r\nexport const SET_SELECTED_COUNTERTOP = \"SET_SELECTED_COUNTERTOP\";\r\nexport const SET_SELECTED_WALL = \"SET_SELECTED_WALL\";\r\nexport const SET_ABORT_CONTROLLER = \"SET_ABORT_CONTROLLER\";\r\n\r\n// SLAB TOOL\r\nexport const SHOW_SLAB_TOOL = \"SHOW_SLAB_TOOL\";\r\nexport const SET_SLAB_TOOL_VISITED = \"SET_SLAB_TOOL_VISITED\";\r\nexport const ADD_ROOM_WITH_VISITED_SLAB_TOOL = \"ADD_ROOM_WITH_VISITED_SLAB_TOOL\";\r\nexport const SET_ACTIVE_SLAB_ID = \"SET_ACTIVE_SLAB_ID\";\r\nexport const SET_ACTIVE_SLAB_URL = \"SET_ACTIVE_SLAB_URL\";\r\nexport const SET_SQFT_SLAB_ACTIVE_STEP = \"SET_SQFT_SLAB_ACTIVE_STEP\";\r\nexport const SET_SQFT_SLAB_SEARCH_TEXT = \"SET_SQFT_SLAB_SEARCH_TEXT\";\r\nexport const SET_SQFT_SLAB_ASPECT_RATIO = \"SET_SQFT_SLAB_ASPECT_RATIO\";\r\nexport const SET_SQFT_SLAB_IMAGE_WIDTH = \"SET_SQFT_SLAB_IMAGE_WIDTH\";\r\nexport const SET_SQFT_SLAB_IMAGE_HEIGHT = \"SET_SQFT_SLAB_IMAGE_HEIGHT\";\r\nexport const SET_SQFT_SLAB_CROPPER_DATA = \"SET_SQFT_SLAB_CROPPER_DATA\";\r\nexport const SET_SQFT_CROPPED_SLAB_IMAGES = \"SET_SQFT_CROPPED_SLAB_IMAGES\";\r\nexport const ADD_SQFT_CROPPED_SLAB_IMAGE = \"ADD_SQFT_CROPPED_SLAB_IMAGE\";\r\nexport const DELETE_CROPPED_SLAB_IMAGE = \"DELETE_CROPPED_SLAB_IMAGE\";\r\nexport const SET_PRICE_PER_AREA = \"SET_PRICE_PER_AREA\";\r\nexport const SET_SLAB_IMAGE_TYPE = \"SET_SLAB_IMAGE_TYPE\";\r\nexport const SET_IS_MEASUREMENT_VISIBLE_IN_SLAB_MODE = \"SET_IS_MEASUREMENT_VISIBLE_IN_SLAB_MODE\";\r\nexport const SET_IS_SIZE_VALIDATION_FAILED = \"SET_IS_SIZE_VALIDATION_FAILED\";\r\nexport const SET_IS_SLAB_PRICING_ENABLED = \"SET_IS_SLAB_PRICING_ENABLED\";\r\n\r\n// MITERED\r\nexport const SET_MITERED_SECTIONS = \"SET_MITERED_SECTIONS\";\r\nexport const ADD_MITERED_SECTION = \"ADD_MITERED_SECTION\";\r\nexport const CHANGE_MITERED_SECTION = \"CHANGE_MITERED_SECTION\";\r\nexport const DELETE_MITERED_SECTION = \"DELETE_MITERED_SECTION\";\r\nexport const DELETE_ALL_MITERED_SECTIONS = \"DELETE_ALL_MITERED_SECTIONS\";\r\n\r\n// RESOURCE\r\nexport const SET_RESOURCES = \"SET_RESOURCES\";\r\nexport const ADD_RESOURCE = \"ADD_RESOURCE\";\r\nexport const CHANGE_RESOURCE = \"CHANGE_RESOURCE\";\r\nexport const DELETE_RESOURCE = \"DELETE_RESOURCE\";\r\nexport const DELETE_RESOURCE_ATTACHED_TO = \"DELETE_RESOURCE_ATTACHED_TO\";\r\nexport const DELETE_ALL_RESOURCES = \"DELETE_ALL_RESOURCES\";\r\nexport const SET_SELECTED_FEATURE = \"SET_SELECTED_FEATURE\";\r\nexport const SET_SELECTED_PART_IDS = \"SET_SELECTED_PART_IDS\";\r\n\r\n// SQUARE FOOTAGE MENU\r\nexport const SET_SQFT_MENU_OPENED = \"SET_SQFT_MENU_OPENED\";\r\nexport const SET_SQFT_MENU_LOCK = \"SET_SQFT_MENU_LOCK\";\r\nexport const SET_SQFT_MENU_ACTIVE_BUTTON = \"SET_SQFT_MENU_ACTIVE_BUTTON\";\r\nexport const SET_SQFT_SYSTEM_MESSAGE = \"SET_SQFT_SYSTEM_MESSAGE\";\r\nexport const SET_SQFT_AR3D_POPUP = \"SET_SQFT_AR3D_POPUP\";\r\nexport const SET_SQFT_POPUP = \"SET_SQFT_POPUP\";\r\nexport const SET_SQFT_CONTEXT_MENU = \"SET_SQFT_CONTEXT_MENU\";\r\nexport const SET_SQFT_CONTEXT_MENU_V2 = \"SET_SQFT_CONTEXT_MENU_V2\";\r\nexport const SET_SQFT_SYSTEM_DELETE_MESSAGE = \"SET_SQFT_SYSTEM_DELETE_MESSAGE\";\r\nexport const SET_SQFT_ACTIVE_SUB_MENU_BUTTON = \"SET_SQFT_ACTIVE_SUB_MENU_BUTTON\";\r\nexport const SET_SQFT_ACTIVE_LEVEL3_BUTTON = \"SET_SQFT_ACTIVE_LEVEL3_BUTTON\";\r\nexport const SET_SQFT_ROOM_LAYOUTS = \"SET_SQFT_ROOM_LAYOUTS\";\r\nexport const SET_SQFT_ACTIVE_ROOM = \"SET_SQFT_ACTIVE_ROOM\";\r\nexport const SET_SQFT_ACTIVE_ROOM_ID = \"SET_SQFT_ACTIVE_ROOM_ID\";\r\nexport const SET_SQFT_ACTIVE_ROOM_TYPE = \"SET_SQFT_ACTIVE_ROOM_TYPE\";\r\nexport const SET_SQFT_ACTIVE_ROOM_INDEX = \"SET_SQFT_ACTIVE_ROOM_INDEX\";\r\nexport const SET_SQFT_ROOM_SWITCHER_VISIBLE= \"SET_SQFT_ROOM_SWITCHER_VISIBLE\";\r\nexport const SET_FREE_DRAW_MODE = \"SET_FREE_DRAW_MODE\";\r\n\r\nexport const SET_CHANGE_VALUE_POPUPS = \"SET_CHANGE_VALUE_POPUPS\";\r\nexport const ADD_CHANGE_VALUE_POPUP = \"ADD_CHANGE_VALUE_POPUP\";\r\nexport const CHANGE_VALUE_POPUP = \"CHANGE_VALUE_POPUP\";\r\nexport const DELETE_CHANGE_VALUE_POPUP = \"DELETE_CHANGE_VALUE_POPUP\";\r\n\r\nexport const SET_VALIDATION_POPUPS = \"SET_VALIDATION_POPUPS\";\r\nexport const ADD_VALIDATION_POPUP = \"ADD_VALIDATION_POPUP\";\r\nexport const VALIDATION_POPUP = \"VALIDATION_POPUP\";\r\nexport const DELETE_VALIDATION_POPUP = \"DELETE_VALIDATION_POPUP\";\r\n\r\nexport const SET_WALLS_UP_MODE = \"SET_WALLS_UP_MODE\";\r\nexport const SET_WALLS_LOCK_MODE = \"SET_WALLS_LOCK_MODE\";\r\nexport const SET_IS_ITEXT_EDITING = \"SET_IS_ITEXT_EDITING\";\r\nexport const SET_SLAB_PLACEHOLDER_OVERLAPS_WITH_MULTIPLE_SHAPES = \"SET_SLAB_PLACEHOLDER_OVERLAPS_WITH_MULTIPLE_SHAPES\";\r\nexport const SET_RE_CACHE_MENU_COUNTER = \"SET_RE_CACHE_MENU_COUNTER\";\r\n\r\n// SQUARE FOOTAGE MANUAL CALCULATION\r\nexport const TOGGLE_SHOW_MANUAL_CALCULATION = \"TOGGLE_SHOW_MANUAL_CALCULATION\";\r\nexport const SET_SWITCHER_POSITION = \"SET_SWITCHER_POSITION\";\r\nexport const ADD_MANUAL_CALCULATION_ROW = \"ADD_MANUAL_CALCULATION_ROW\";\r\nexport const UPDATE_MANUAL_CALCULATION_ROW = \"UPDATE_MANUAL_CALCULATION_ROW\";\r\nexport const UPDATE_MANUAL_CALCULATION_ROWS = \"UPDATE_MANUAL_CALCULATION_ROWS\";\r\nexport const DELETE_MANUAL_CALCULATION_ROW = \"DELETE_MANUAL_CALCULATION_ROW\";\r\n\r\n// SQUARE FOOTAGE TUTORIAL\r\nexport const SET_SQFT_TUTORIAL_STEP = 'SET_SQFT_TUTORIAL_STEP';\r\nexport const SET_SQFT_TUTORIAL_SWITCHING = 'SET_SQFT_TUTORIAL_SWITCHING';\r\n\r\n// CHECKOUT DOCUSIGN IFRAME\r\nexport const SHOW_DOCUSIGN = 'SHOW_DOCUSIGN';\r\nexport const SHOW_DEPOSIT = 'SHOW_DEPOSIT';\r\nexport const SHOW_CONTRACT_SIGNING = 'SHOW_CONTRACT_SIGNING';\r\nexport const SET_AFTER_CONTRACT_SIGN_CALLBACK = 'SET_AFTER_CONTRACT_SIGN_CALLBACK';\r\n\r\n// UPLOADS, NOTES & SQFT\r\nexport const ADD_PROJECT_DOCUMENT = 'ADD_PROJECT_DOCUMENT';\r\n// export const EDIT_PROJECT_DOCUMENTS = 'EDIT_PROJECT_DOCUMENTS';\r\nexport const SET_PROJECT_DOCUMENTS_IDS = 'SET_PROJECT_DOCUMENTS_IDS';\r\n\r\n// UPLOADS, NOTES & SQFT\r\nexport const SHOW_MATERIALS_TUTORIAL = 'SHOW_MATERIALS_TUTORIAL';\r\nexport const SET_MATERIALS_TUTORIAL_STEP = 'SET_MATERIALS_TUTORIAL_STEP';\r\nexport const SET_MATERIALS_TUTORIAL_FINISHED = 'SET_MATERIALS_TUTORIAL_FINISHED';\r\nexport const SHOW_MATERIALS_AGENT_TUTORIAL = 'SHOW_MATERIALS_AGENT_TUTORIAL';\r\nexport const SET_MATERIALS_AGENT_TUTORIAL_FINISHED = 'SET_MATERIALS_AGENT_TUTORIAL_FINISHED';\r\nexport const SHOW_VISUALIZER_TUTORIAL = 'SHOW_VISUALIZER_TUTORIAL';\r\nexport const SET_VISUALIZER_TUTORIAL_STEP = 'SET_VISUALIZER_TUTORIAL_STEP';\r\nexport const SET_VISUALIZER_TUTORIAL_FINISHED = 'SET_VISUALIZER_TUTORIAL_FINISHED';\r\n\r\n// CONTRACT SIGNING\r\nexport const CONTRACT_SIGNING_SET_STEP = 'CONTRACT_SIGNING_SET_STEP';\r\nexport const CONTRACT_SIGNING_POST_SIGNATURE = 'CONTRACT_SIGNING_POST_SIGNATURE';\r\nexport const CONTRACT_SIGNING_JOB_DOCUMENT = 'CONTRACT_SIGNING_JOB_DOCUMENT';\r\nexport const CONTRACT_SIGNING_SHOW_SIGNATURE_PAD = 'CONTRACT_SIGNING_SHOW_SIGNATURE_PAD';\r\nexport const CONTRACT_SIGNING_SET_CONTRACTS_VALUES = 'CONTRACT_SIGNING_SET_CONTRACTS_VALUES';\r\nexport const SET_CONTRACT_BLOB = 'SET_CONTRACT_BLOB';\r\nexport const CONTRACT_SIGNING_RESTORE_VALUES = 'CONTRACT_SIGNING_RESTORE_VALUES';\r\nexport const CONTRACT_SIGNING_SET_CONTRACTS_LIST = 'CONTRACT_SIGNING_SET_CONTRACTS_LIST';\r\n\r\n// INITIAL FLOW\r\nexport const SET_FABRICATOR_SUBSCRIPTIONS = 'SET_FABRICATOR_SUBSCRIPTIONS';\r\nexport const SET_INITIAL_FLOW_FINISHED = 'SET_INITIAL_FLOW_FINISHED';\r\nexport const SET_INITIAL_FLOW_ADDITIONAL_ROOMS = 'SET_INITIAL_FLOW_ADDITIONAL_ROOMS';\r\nexport const SET_INITIAL_FLOW_BUTTON = 'SET_INITIAL_FLOW_BUTTON';\r\nexport const SET_INITIAL_FLOW_ROOM = 'SET_INITIAL_FLOW_ROOM';\r\nexport const SET_INITIAL_FLOW_VISUALIZER_NOT_AVAILABLE = 'SET_INITIAL_FLOW_VISUALIZER_NOT_AVAILABLE';\r\nexport const SET_INITIAL_FLOW_ROOM_LAYOUT = 'SET_INITIAL_FLOW_ROOM_LAYOUT';\r\nexport const SET_INITIAL_FLOW_STEP = 'SET_INITIAL_FLOW_STEP';\r\n\r\n// UNLOCK CALCULATIONS TUTORIAL\r\nexport const SET_SHOW_UNLOCK_CALCULATIONS = 'SET_SHOW_UNLOCK_CALCULATIONS';\r\nexport const SET_UNLOCK_CALCULATIONS_STEP = 'SET_UNLOCK_CALCULATIONS_STEP';\r\nexport const SHOW_UNLOCK_CALCULATIONS_CART_ITEM = 'SHOW_UNLOCK_CALCULATIONS_CART_ITEM';\r\nexport const SHOW_UNLOCK_CALCULATIONS_TOTAL_ITEM = 'SHOW_UNLOCK_CALCULATIONS_TOTAL_ITEM';\r\nexport const SHOW_UNLOCK_CALCULATIONS_TUTORIAL = 'SHOW_UNLOCK_CALCULATIONS_TUTORIAL';\r\nexport const SET_UNLOCK_CALCULATIONS_TUTORIAL_STEP = 'SET_UNLOCK_CALCULATIONS_TUTORIAL_STEP';\r\nexport const SET_UNLOCK_CALCULATIONS_TUTORIAL_FINISHED = 'SET_UNLOCK_CALCULATIONS_TUTORIAL_FINISHED';\r\n\r\n// INTRO VIDEO\r\nexport const SET_INTRO_VIDEO = 'SET_INTRO_VIDEO';\r\n\r\n// QUOTES\r\nexport const ADD_NEW_QUOTE = 'ADD_NEW_QUOTE';\r\nexport const SET_QUOTES = 'SET_QUOTES';\r\nexport const UPDATE_QUOTE = 'UPDATE_QUOTE';\r\nexport const SET_ACTIVE_QUOTE_INDEX = 'SET_ACTIVE_QUOTE_INDEX';\r\n\r\n// ADVANCED QUOTING\r\nexport const TOGGLE_SHOW_ADVANCED_QUOTING = 'TOGGLE_SHOW_ADVANCED_QUOTING';\r\nexport const SET_ADVANCED_QUOTING_SEARCH_ITEM = 'SET_ADVANCED_QUOTING_SEARCH_ITEM';\r\n\r\n// ADVANCED QUOTING\r\nexport const TOGGLE_SHOW_ASSIGN_QUOTE_POPUP = 'TOGGLE_SHOW_ASSIGN_QUOTE_POPUP';\r\nexport const SET_ASSIGN_QUOTE_POPUP_SEARCH_TEXT = 'SET_ASSIGN_QUOTE_POPUP_SEARCH_TEXT';\r\nexport const SET_ASSIGN_QUOTE_POPUP_EMPLOYEE = 'SET_ASSIGN_QUOTE_POPUP_EMPLOYEE';\r\nexport const SET_ASSIGN_QUOTE_POPUP_CUSTOMER = 'SET_ASSIGN_QUOTE_POPUP_CUSTOMER';\r\nexport const SET_ASSIGN_QUOTE_POPUP_SUCCESS_TEXT = 'SET_ASSIGN_QUOTE_POPUP_SUCCESS_TEXT';\r\nexport const SET_ASSIGN_QUOTE_CLONE_MODE = 'SET_ASSIGN_QUOTE_CLONE_MODE';\r\nexport const SET_ASSIGN_QUOTE_OFFLINE_DATA = 'SET_ASSIGN_QUOTE_OFFLINE_DATA';\r\n\r\n// RECEIPT\r\nexport const SET_RECEIPT_URL = 'SET_RECEIPT_URL';\r\nexport const SET_RECEIPT_SIGNATURE = 'SET_RECEIPT_SIGNATURE';\r\n\r\n// LOOK ACTIONS\r\nexport const SET_LOOK_OPENED = 'SET_LOOK_OPENED';\r\nexport const SET_LOOK_EXPANDED = 'SET_LOOK_EXPANDED';\r\nexport const SET_LOOK_PARENT_KEY = 'SET_LOOK_PARENT_KEY';\r\nexport const SET_LOOK_PARENT_KEYS = 'SET_LOOK_PARENT_KEYS';\r\nexport const SET_LOOK_VIEW_TYPE = 'SET_LOOK_VIEW_TYPE';\r\nexport const SET_WISHLIST_POPUP_OPENED = 'SET_WISHLIST_POPUP_OPENED';\r\nexport const SET_SIDEBAR_MODAL_OPENED = 'SET_SIDEBAR_MODAL_OPENED';\r\nexport const SET_LOOK_ACTIVE_FEATURE = 'SET_LOOK_ACTIVE_FEATURE';\r\nexport const UPDATE_LOOK_ACTIVE_FEATURE_STOCK_COUNT = 'UPDATE_LOOK_ACTIVE_FEATURE_STOCK_COUNT';\r\nexport const SET_LOOK_ACTIVE_CATEGORY = 'SET_LOOK_ACTIVE_CATEGORY';\r\nexport const SET_LOOK_MORE_INFO_OPENED = 'SET_LOOK_MORE_INFO_OPENED';\r\nexport const SET_LOOK_LAYOUT_OPENED = 'SET_LOOK_LAYOUT_OPENED';\r\nexport const SET_LOOK_PAGE_OPENED = 'SET_LOOK_PAGE_OPENED';\r\nexport const SET_LOOK_OVERLAY_OPENED = 'SET_LOOK_OVERLAY_OPENED';\r\nexport const SET_LOOK_VIEW_CHANGE_OPTIONS = 'SET_LOOK_VIEW_CHANGE_OPTIONS';\r\nexport const SET_LOOK_STYLE_POPUP = 'SET_LOOK_STYLE_POPUP';\r\nexport const SET_LOOK_REMOVE_POPUP = 'SET_LOOK_REMOVE_POPUP';\r\nexport const SET_LOOK_INTRO_STEP = 'SET_LOOK_INTRO_STEP';\r\nexport const SET_LOOK_INTRO_HIDDEN = 'SET_LOOK_INTRO_HIDDEN';\r\nexport const SET_LOOK_CONTEXT_MENU = 'SET_LOOK_CONTEXT_MENU';\r\nexport const SET_LOOK_WALLS_APPLY_TO = 'SET_LOOK_WALLS_APPLY_TO';\r\nexport const SET_LOOK_ALL_WALLS_OPENED = 'SET_LOOK_ALL_WALLS_OPENED';\r\nexport const SET_LOOK_RETURN_ACTION = 'SET_LOOK_RETURN_ACTION';\r\nexport const SET_LOOK_DEMO_POINTS_CLICKED = 'SET_LOOK_DEMO_POINTS_CLICKED';\r\nexport const UPDATE_LOOK_NAVIGATION_COUNT = 'UPDATE_LOOK_NAVIGATION_COUNT';\r\n// export const UPDATE_LOOK_FEATURE_GROUP_COUNT = 'UPDATE_LOOK_FEATURE_GROUP_COUNT';\r\nexport const SET_LOOK_COMPATABILITY_ALERT = 'SET_LOOK_COMPATABILITY_ALERT';\r\nexport const SET_LOOK_RESTORE_STATE = 'SET_LOOK_RESTORE_STATE';\r\nexport const SET_LOOK_LOCK_TUTORIAL = 'SET_LOOK_LOCK_TUTORIAL';\r\nexport const SET_LOOK_ALL_WALLS_TUTORIAL = 'SET_LOOK_ALL_WALLS_TUTORIAL';\r\n\r\n// IFRAME ACTIONS\r\nexport const SET_IFRAME_INTEGRATION_REQUEST = 'SET_IFRAME_INTEGRATION_REQUEST';\r\nexport const SET_IFRAME_INTEGRATION_RESPONSE = 'SET_IFRAME_INTEGRATION_RESPONSE';\r\n\r\n// GROHE ACTIONS\r\n// export const SET_GROHE_CATEGORIES_OPENED = 'SET_GROHE_CATEGORIES_OPENED';\r\nexport const SET_GROHE_FILTERS_OPENED = 'SET_GROHE_FILTERS_OPENED';\r\nexport const SET_GROHE_SIMILAR_FEATURE = 'SET_GROHE_SIMILAR_FEATURE';\r\nexport const SET_GROHE_SIMILAR_PRODUCTS_OPENED = 'SET_GROHE_SIMILAR_PRODUCTS_OPENED';\r\nexport const SET_GROHE_REQUIRED_BUT_NOT_INCLUDED_FEATURE = 'SET_GROHE_REQUIRED_BUT_NOT_INCLUDED_FEATURE';\r\nexport const SET_GROHE_FILTERS_SEARCH_TEXT = 'SET_GROHE_FILTERS_SEARCH_TEXT';\r\nexport const SET_GROHE_LAST_OPENED_CATEGORY = 'SET_GROHE_LAST_OPENED_CATEGORY';\r\nexport const SET_GROHE_SUB_CATEGORY_OPENED = 'SET_GROHE_SUB_CATEGORY_OPENED';\r\nexport const SET_GROHE_SHOW_ADDED_TO_THE_CART_SUCCESS = 'SET_GROHE_SHOW_ADDED_TO_THE_CART_SUCCESS';\r\nexport const SET_GROHE_ACTIVE_FEATURE_QUANTITY = 'SET_GROHE_ACTIVE_FEATURE_QUANTITY';\r\nexport const SET_GROHE_SHARE_BUTTONS_OPENED = 'SET_GROHE_SHARE_BUTTONS_OPENED';\r\nexport const SET_GROHE_SAME_COLOR_ACTIVE_FEATURE = 'SET_GROHE_SAME_COLOR_ACTIVE_FEATURE';\r\nexport const SET_GROHE_SAME_COLOR_SECTION_OPENED = 'SET_GROHE_SAME_COLOR_SECTION_OPENED';\r\nexport const SET_GROHE_SAME_COLOR_CHECKBOX_APPLIED = 'SET_GROHE_SAME_COLOR_CHECKBOX_APPLIED';\r\nexport const SET_GROHE_EXISTING_TEMP_ID = 'SET_GROHE_EXISTING_TEMP_ID';\r\n\r\n// GROHE QUOTING TOOL ACTIONS\r\nexport const SET_GROHE_WIZARD_NAME = 'SET_GROHE_WIZARD_NAME';\r\nexport const SET_GROHE_WIZARD_OPENED = 'SET_GROHE_WIZARD_OPENED';\r\nexport const SET_GROHE_WIZARD_STEP = 'SET_GROHE_WIZARD_STEP';\r\n\r\n// GROHE SHOPPING CART PAYMENT\r\nexport const SET_PAYMENT_INFO = 'SET_PAYMENT_INFO';\r\nexport const SET_CARD_INFO = 'SET_CARD_INFO';\r\nexport const SET_CARD_ERRORS = 'SET_CARD_ERRORS';\r\nexport const SET_SHIPPING_ERRORS = 'SET_SHIPPING_ERRORS';\r\nexport const SET_SHIPPING_INFO = 'SET_SHIPPING_INFO';\r\nexport const SET_BILLING_INFO = 'SET_BILLING_INFO';\r\nexport const RESTORE_PAYMENT_INFO = 'RESTORE_PAYMENT_INFO';\r\n\r\n//HISTORY\r\nexport const ADD_LAYOUT_HISTORY = 'ADD_LAYOUT_HISTORY';\r\nexport const SET_LAYOUT_HISTORY = 'SET_LAYOUT_HISTORY';\r\n\r\n//SHOP PAGES\r\nexport const SET_SHOP_PAGE_LOADED = 'SET_SHOP_PAGE_LOADED';\r\nexport const SET_SHOP_PAGE_OPENED = 'SET_SHOP_PAGE_OPENED';\r\nexport const SET_SHOP_LAST_PAGE_VISITED = 'SET_SHOP_LAST_PAGE_VISITED';\r\nexport const SET_SHOP_PAGE_LEAVED = 'SET_SHOP_PAGE_LEAVED';\r\n// export const SET_SHOP_ACTIVE_CATEGORY = 'SET_SHOP_ACTIVE_CATEGORY';\r\n// export const SET_SHOP_ACTIVE_FEATURE = 'SET_SHOP_ACTIVE_FEATURE';\r\n\r\n// SUPER ADMIN\r\nexport const SET_ADMIN_LOGOUT_VISIBLE = \"SET_ADMIN_LOGOUT_VISIBLE\";\r\nexport const SET_ADMIN_LOGIN_POPUP_VISIBLE = \"SET_ADMIN_LOGIN_POPUP_VISIBLE\";\r\nexport const SET_ADMIN_TOOL_SETTINGS_POPUP_VISIBLE = \"SET_ADMIN_TOOL_SETTINGS_POPUP_VISIBLE\";\r\n","import config from \"./../components/canvas/store/sqftConfig\";\r\n///todo sqft-reacet//import 'core-js/es/array';\r\nimport workspace from \"./../components/canvas/core/workspace\";\r\nimport line from \"./../components/canvas/core/shapes/line\";\r\nimport $ from \"jquery\";\r\nimport sqftConfig from \"../components/canvas/store/sqftConfig\";\r\nimport {getEdgeFeatures} from \"./shapeHelper\";\r\nimport {isPointInsidePolygon} from \"../lib/pnpoly\";\r\nimport LineCorner from \"../components/canvas/core/shapes/lineHooks/lineCorner\";\r\nimport {getMiterEdgeHeight, isMiterEdge, isWaterfallFeature} from \"./featureHelper\";\r\n\r\nconst S3_FEATURES_Root = 'https://features-thumbnails.s3-accelerate.amazonaws.com/';\r\n\r\nexport const THUMBNAIL_SIZES = {\r\n small: `_100x100`,\r\n medium: `_175x175`,\r\n large: `_400x400`,\r\n};\r\n\r\nexport const featureThumbnailUrl = (dbFeature, size) => {\r\n return dbFeature.customThumbnail\r\n ? dbFeature.customThumbnail\r\n : dbFeature.thumbnailUrl\r\n ? s3FeatureImagePath(dbFeature.thumbnailUrl, size)\r\n : \"\";\r\n};\r\n\r\nexport function s3FeatureImagePath(imageThumbnail, size) {\r\n // const features_root = document.kvConfig.kioskMode ? KIOSK_FEATURES_Root : S3_FEATURES_Root;\r\n const features_root = S3_FEATURES_Root;\r\n return size\r\n ? `${features_root}feature-${imageThumbnail + size}.png`\r\n : `${features_root}feature-${imageThumbnail}.png` // full image path\r\n}\r\n\r\nexport const getUrlSQFTHashParam = (queryParam) => {\r\n let hash = window.location.hash.substr(1);\r\n hash = hash.replace('/sqft?', '');\r\n\r\n const hashParsed = hash.split('&').reduce(function (res, item) {\r\n let parts = item.split('=');\r\n res[parts[0]] = parts[1];\r\n return res;\r\n }, {});\r\n\r\n return hashParsed[queryParam];\r\n}\r\n\r\nexport const isIphoneX = () => { // https://stackoverflow.com/questions/47226824/iphonex-and-notch-detection\r\n let iPhone = /iPhone/.test(navigator.userAgent) && !window.MSStream;\r\n let aspect = window.screen.width / window.screen.height;\r\n return !!(iPhone && aspect.toFixed(3) === \"0.462\")\r\n};\r\nexport const isAndroid = () => {\r\n return navigator.userAgent && navigator.userAgent.toLowerCase().indexOf(\"android\") > -1;\r\n};\r\nexport const isChrome = () => {\r\n return !!navigator.userAgent.match('CriOS');\r\n};\r\nexport const isIOSDevice = () => {\r\n return !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\r\n};\r\nexport const isIE = () => {\r\n return (window.navigator.userAgent.indexOf('MSIE ') > 0)\r\n || (!!window.MSInputMethodContext && !!document.documentMode)\r\n || (window.navigator.userAgent.indexOf('Trident/') > 0)\r\n};\r\nexport const isEdge = () => {\r\n return window.navigator.userAgent.indexOf('Edge') > 0\r\n};\r\nexport const isFirefox = () => navigator.userAgent.toLowerCase().indexOf(\"firefox\") > -1;\r\n\r\nexport const hardCodeIsLowes = () => {\r\n const fabricatorId = getParamFromUrl(\"fabricatorId\") || window.fabricatorId || document.kvConfig.userId || 137530; // master countertops2\r\n return fabricatorId === 139043 || window.location.href.includes(\"mdp_surfaces\") || window.location.href.includes(\"lowes_\")\r\n};\r\n\r\nexport const getFontsize = () => {\r\n return config.measureUnit === \"Imperial\" ? config.workspace.fontSize : config.workspace.fontSizeMetric;\r\n};\r\n\r\nexport const getFontsizeSmall = () => {\r\n return $(window).width() <= 1024 ? getFontsize() - 4 : getFontsize() - 4;\r\n};\r\n\r\nexport const rotatePoint = (point, center, angle) => {\r\n angle = angle * (Math.PI/180); // Convert to radians\r\n const rotatedX = Math.cos(angle) * (point.x - center.x) - Math.sin(angle) * (point.y-center.y) + center.x;\r\n const rotatedY = Math.sin(angle) * (point.x - center.x) + Math.cos(angle) * (point.y - center.y) + center.y;\r\n return {x: rotatedX, y: rotatedY}\r\n};\r\n\r\nexport const getPointDistance = (from, to) => {\r\n var pointDistance = Math.sqrt(Math.pow(to.x - from.x, 2) + Math.pow(to.y - from.y, 2));\r\n return Math.round10(pointDistance, -3)\r\n};\r\n\r\nexport const getClosestPoint = (point, points) => {\r\n return points.reduce((a, b) => getPointDistance(point, a) < getPointDistance(point, b) ? a : b);\r\n};\r\n\r\nexport const get45CornerLegDistanceByHypotenuse = (hypotenuseDistance) => {\r\n return Math.sqrt(Math.pow(hypotenuseDistance, 2) / 2)\r\n};\r\n\r\nexport const getMidPoint = (point1, point2) => {\r\n return {\r\n x: (point1.x + point2.x) / 2,\r\n y: (point1.y + point2.y) / 2\r\n };\r\n};\r\n\r\nexport const getSectionPartPoint = (point1, point2, part) => {\r\n return {\r\n x: (point1.x + 1/part * point2.x) / (1 + 1/part),\r\n y: (point1.y + 1/part * point2.y) / (1 + 1/part)\r\n };\r\n};\r\n\r\nexport const getParralelPoint = (pointA, pointB, distanceFromLine = 5) => {\r\n // pointA - closest to the needed point\r\n // pointB - far to the needed point\r\n const midPoint = getPointBetweenPoints(pointA, pointB, distanceFromLine);\r\n const x = pointA.x + (pointA.x - midPoint.x) * 2;\r\n const y = pointA.y + (pointA.y - midPoint.y) * 2;\r\n\r\n return {x, y}\r\n};\r\n\r\nexport const getParallelPoints = (pointA, pointB, distanceFromLine = 5) => {\r\n let vector = {x: pointB.x - pointA.x, y: pointB.y - pointA.y}\r\n let len = Math.sqrt(Math.pow(vector.x, 2) + Math.pow(vector.y, 2));\r\n let ud = {x: vector.x / len, y: vector.y / len};\r\n //let perpendicularVector = {x: -ud.y, y: ud.x };\r\n\r\n let parallelPoint1 = {\r\n x: pointA.x - ud.y * distanceFromLine,\r\n y: pointA.y + ud.x * distanceFromLine\r\n };\r\n let parallelPoint2 = {\r\n x: parallelPoint1.x + vector.x,\r\n y: parallelPoint1.y + vector.y,\r\n };\r\n\r\n return [parallelPoint2, parallelPoint1];\r\n};\r\n\r\nexport const getDistanceFromPointToLine = (x, y, x1, y1, x2, y2) => {\r\n let A = x - x1;\r\n let B = y - y1;\r\n let C = x2 - x1;\r\n let D = y2 - y1;\r\n\r\n let dot = A * C + B * D;\r\n let len_sq = C * C + D * D;\r\n let param = -1;\r\n if (len_sq !== 0) //in case of 0 length line\r\n param = dot / len_sq;\r\n\r\n let xx, yy;\r\n if (param < 0) {\r\n xx = x1;\r\n yy = y1;\r\n } else if (param > 1) {\r\n xx = x2;\r\n yy = y2;\r\n } else {\r\n xx = x1 + param * C;\r\n yy = y1 + param * D;\r\n }\r\n\r\n let dx = x - xx;\r\n let dy = y - yy;\r\n\r\n return Math.sqrt(dx * dx + dy * dy);\r\n}\r\n\r\nexport const getDistanceFromPointToInfiniteLine = (x, y, x1, y1, x2, y2) => {\r\n return Math.abs((y2 - y1) * x - (x2 - x1) * y + x2 * y1 - y2 * x1) /\r\n Math.sqrt( Math.pow(y2 - y1, 2) + Math.pow(x2 - x1, 2))\r\n}\r\n\r\n/**\r\n * @param pointA closest to the needed point\r\n * @param pointB far to the needed point\r\n * @param distanceFromPointA\r\n * @param decimals\r\n * @return {{x: *, y: *}}\r\n */\r\nexport const getPointBetweenPoints = (pointA, pointB, distanceFromPointA = 5, decimals = null) => {\r\n // Calculate distance between pointA and pointB\r\n const distance = getPointDistance(pointA, pointB);\r\n const Xa = pointA.x;\r\n const Ya = pointA.y;\r\n const Xb = pointB.x;\r\n const Yb = pointB.y;\r\n\r\n // Calculate proportion k\r\n const k = distanceFromPointA / distance;\r\n let Xc = Xa + (Xb - Xa) * k;\r\n let Yc = Ya + (Yb - Ya) * k;\r\n\r\n // Check if decimals is not null and round if needed\r\n if (decimals !== null) {\r\n Xc = parseFloat(Math.round10(Xc, decimals));\r\n Yc = parseFloat(Math.round10(Yc, decimals));\r\n }\r\n\r\n return { x: Xc, y: Yc };\r\n};\r\n\r\nexport const getPointField = (posX, posY, parent = workspace) => {\r\n let scale = workspace.getScale(),\r\n offset = parent.getOffset();\r\n\r\n return {\r\n x: (posX * scale) + offset.x,\r\n y: (posY * scale) + offset.y\r\n };\r\n};\r\n\r\nexport const getPointOnWorkspace = (posX, posY, parent = workspace) => {\r\n let offset = parent.getOffset();\r\n\r\n return {\r\n x: posX + offset.x,\r\n y: posY + offset.y\r\n };\r\n};\r\n\r\nexport const getMousePositionOnField = (mouseX, mouseY) => {\r\n let wPos = workspace.getPosition();\r\n let scale = config.scale;\r\n\r\n return {\r\n x: (mouseX + wPos.x) / scale,\r\n y: (mouseY + wPos.y) / scale\r\n };\r\n};\r\n\r\nexport const getMousePositionOnShape = (mouseX, mouseY, shape) => {\r\n const pointPosOnShape = getMousePositionOnField(mouseX, mouseY, shape);\r\n const pos = shape.getPosition();\r\n return {\r\n x: pointPosOnShape.x - pos.x,\r\n y: pointPosOnShape.y - pos.y\r\n };\r\n};\r\n\r\nexport const getPointPositionOnShape = (pointPosX, pointPosY, shape) => {\r\n const pos = shape.getPosition();\r\n return {\r\n x: pointPosX - pos.x,\r\n y: pointPosY - pos.y\r\n };\r\n};\r\n\r\n/**\r\n * Return the first two pairs which have the smallest distances\r\n * @param pointsA\r\n * @param pointsB\r\n * @return {*[]}\r\n */\r\nexport const findClosestPointPairs = (pointsA, pointsB) => {\r\n let pairs = [];\r\n\r\n // Find the closest point from pointsB for each point in pointsA\r\n pointsA.forEach(pointA => {\r\n let closestPoint = null;\r\n let minDistance = Number.MAX_VALUE;\r\n\r\n // Iterating over each point in pointsB\r\n pointsB.forEach(pointB => {\r\n let distance = getPointDistance(pointA, pointB);\r\n // Updating the closest point and minimum distance if a closer point is found\r\n if (distance < minDistance) {\r\n closestPoint = pointB;\r\n minDistance = distance;\r\n }\r\n });\r\n\r\n pairs.push({ pointA, pointB: closestPoint, distance: minDistance });\r\n });\r\n\r\n // Sorting the pairs by distance\r\n pairs.sort((a, b) => a.distance - b.distance);\r\n\r\n return pairs.slice(0, 2);\r\n}\r\n\r\nexport const orientation = {\r\n VERTICAL: 0,\r\n HORIZONTAL: 1,\r\n NORTHWEST: 2,\r\n SOUTHEAST: 3,\r\n NORTHEAST: 4,\r\n SOUTHWEST: 5\r\n};\r\n\r\nexport const getParamFromUrl = (name, url = window.location.href) => {\r\n name = name.replace(/[\\[\\]]/g, \"\\\\$&\");\r\n var regex = new RegExp(\"[?&]\" + name + \"(=([^&#]*)|&|#|$)\"),\r\n results = regex.exec(url);\r\n if (!results) return null;\r\n if (!results[2]) return '';\r\n return decodeURIComponent(results[2].replace(/\\+/g, \" \"));\r\n};\r\n\r\nexport const numToLetter = (num) => {\r\n let mod = num % 26;\r\n let pow = num / 26 | 0;\r\n let out = mod ? String.fromCharCode(64 + mod) : (pow--, 'Z');\r\n\r\n return pow ? numToLetter(pow) + out : out;\r\n};\r\n\r\nexport const letterToNum = (str) => {\r\n let out = 0,\r\n len = str.length,\r\n pos = len;\r\n\r\n while ((pos -= 1) > -1) {\r\n out += (str.charCodeAt(pos) - 64) * Math.pow(26, len - 1 - pos);\r\n }\r\n\r\n return out;\r\n};\r\n\r\nexport const calculateHypotenuse = (a, b) => {\r\n return Math.sqrt(Math.pow(a, 2) + Math.pow(b, 2));\r\n}\r\n\r\n//// CONVERT MEASURE UNIT START ////\r\n\r\nexport const mmToM = (mm) => {\r\n return Math.ceil10(mm / config.mmDivider, -2);\r\n};\r\n\r\nexport const mm2ToM2 = (mm) => {\r\n return Math.ceil10(mm / config.mm2ToM2Divider, -2);\r\n};\r\n\r\nexport const cmToInches = (cm) => {\r\n return Math.ceil10(cm / 2.54, -2);\r\n};\r\n\r\nexport const mmToInches = (mm) => {\r\n return Math.ceil10(mm / 25.4, -3);\r\n};\r\n\r\nexport const cmToMm = (cm) => {\r\n return Math.ceil10(cm * 10, -2);\r\n};\r\n\r\nexport const inchesToMm = (totalInches, shouldCeil = true, shouldRound = false) => {\r\n if (shouldCeil) {\r\n return Math.ceil(totalInches * config.millimetersMultiplier);\r\n } else if (shouldRound) {\r\n return Math.round(totalInches * config.millimetersMultiplier);\r\n }\r\n return totalInches * config.millimetersMultiplier;\r\n};\r\n\r\nexport const inchesToM = (totalInches) => {\r\n return Math.ceil10(totalInches * config.inchesToMMultiplier, -2);\r\n};\r\nexport const inchesToLNFT = (totalInches) => {\r\n return Math.ceil10(totalInches * 0.08333, -2);\r\n};\r\nexport const sqInchesToSqFoot = (totalInches) => {\r\n return Math.ceil10(totalInches / 144, -2);\r\n};\r\n\r\nexport const sqInchesToMM2 = (inches) => {\r\n return Math.ceil10(inches * 645.16, -2);\r\n};\r\n\r\nexport const sqInchesToM2 = (totalInches) => {\r\n return Math.ceil10(totalInches / 1550, -2);\r\n};\r\n\r\nexport const sqftToMM2 = (length) => {\r\n return Math.ceil(length * config.sqftToMmMultiplier);\r\n};\r\n\r\nexport const lnftToMM = (length) => {\r\n return Math.ceil(length * config.lnftToMmMultiplier);\r\n};\r\n\r\nexport const sqftToM2 = (length) => {\r\n return Math.ceil10(length * config.sqftToM2Multiplier, -2);\r\n};\r\n\r\nexport const getTransformedMeasureUnit = (value) => {\r\n return sqftConfig.measureUnit === \"Metric\"\r\n ? measureDistanceToInches(value).millimeters // ? distanceToMillimeters(inchesToMm(segment.length.value))\r\n : value;\r\n}\r\n\r\n//// CONVERT MEASURE UNIT END ////\r\n\r\n//// MEASURE DISTANCE START ////\r\n\r\n// Reduce a fraction by finding the Greatest Common Divisor and dividing by it.\r\nconst gcd = (a, b) => {\r\n if (b === 0) return a;\r\n return gcd(b, a % b);\r\n};\r\n\r\nconst reduce = (numerator, denominator) => {\r\n const common = gcd(numerator, denominator);\r\n return [numerator / common, denominator / common];\r\n};\r\n\r\nexport const measureDistanceToInches = (distance) => {\r\n let denom = 16;\r\n var total_segments = Math.ceil(distance * denom),\r\n // todo check if calculations are correct\r\n // millimeters = inchesToMm(distance),\r\n millimeters = Math.round(distance * config.millimetersMultiplier),\r\n segmentDistance = total_segments / denom,\r\n fraction = total_segments % denom,\r\n rounded = Math.floor(segmentDistance),\r\n inches = rounded % 12,\r\n feet = (rounded - inches) / 12,\r\n reduced = [0,0],\r\n decimal = 0;\r\n\r\n if(fraction > 0) {\r\n reduced = reduce(fraction, denom);\r\n }\r\n\r\n if(reduced[0] !== 0 && reduced[1] !== 0) {\r\n decimal = Math.floor((reduced[0] * 100) / (reduced[1] * 100)) / 100;\r\n }\r\n\r\n return {\r\n feet: feet,\r\n inches: inches,\r\n millimeters: millimeters,\r\n rounded: rounded,\r\n reduced: reduced,\r\n decimal: decimal\r\n }\r\n};\r\n\r\nexport const getSnappedPos = function(pos) {\r\n let scaledGridSize = sqftConfig.workspace.getScaledGridSize();\r\n let newX = Math.round(pos.x / scaledGridSize) * scaledGridSize;\r\n let newY = Math.round(pos.y / scaledGridSize) * scaledGridSize;\r\n return {\r\n x: newX,\r\n y: newY\r\n };\r\n};\r\n\r\nexport const distanceToInches = (distance) => {\r\n var dist = measureDistanceToInches(distance),\r\n ret = \"\";\r\n\r\n if(dist.feet > 0)\r\n ret = dist.feet + \"'\";\r\n if(dist.inches > 0)\r\n ret += dist.inches + \"\\\"\";\r\n\r\n if(dist.reduced[0] > 0) {\r\n var fraction_text = dist.reduced[0] + \"/\" + dist.reduced[1];\r\n ret = ret.toString().substr(0, ret.length - 1) + \" \" + fraction_text + \"\\\"\";\r\n dist.rounded += \" \" + fraction_text;\r\n }\r\n\r\n ret = dist.rounded + \"\\\"\";\r\n\r\n return ret;\r\n};\r\n\r\nexport const distanceToMillimeters = (distance) => {\r\n var dist = measureDistanceToInches(distance);\r\n\r\n return dist.millimeters + \" mm\";\r\n};\r\n\r\n/*\r\n * edge can be applied to line and to lineCorner\r\n */\r\nexport const getEdgeLength = (attachedTo) => {\r\n let lineBumpoutTotalHeight = 0;\r\n let lineCornerWidth = 0;\r\n let length = 0;\r\n if (attachedTo instanceof LineCorner) {\r\n switch (config.measureUnit) {\r\n case \"Imperial\": length += inchesToLNFT(attachedTo.getLength()); break;\r\n case \"Metric\": length += inchesToM(attachedTo.getLength()); break;\r\n }\r\n } else if (attachedTo instanceof line) {\r\n if (attachedTo.isWithBumpout()) {\r\n lineBumpoutTotalHeight = attachedTo.getLineBumpoutTotalHeight();\r\n }\r\n if (attachedTo.lineCorner) {\r\n lineCornerWidth += attachedTo.get45CornerLegDistance();\r\n }\r\n const prevLine = attachedTo.getParent().getPrevLine(attachedTo);\r\n if (prevLine.lineCorner) {\r\n lineCornerWidth += prevLine.get45CornerLegDistance();\r\n }\r\n if (config.measureUnit === \"Imperial\") {\r\n length = Math.round(( Math.sqrt(\r\n Math.pow(attachedTo.to.x - attachedTo.from.x, 2)\r\n +\r\n Math.pow(attachedTo.to.y - attachedTo.from.y, 2)\r\n ) + lineBumpoutTotalHeight - lineCornerWidth) / 12 * 100) / 100;\r\n } else {\r\n length = inchesToM(\r\n Math.abs(attachedTo.to.x - attachedTo.from.x + attachedTo.to.y - attachedTo.from.y)\r\n + lineBumpoutTotalHeight - lineCornerWidth\r\n )\r\n }\r\n }\r\n\r\n return length;\r\n};\r\n\r\nexport const getEdgeArea = (line, length, featureId) => {\r\n let totalArea = 0;\r\n const navItems = getEdgeFeatures();\r\n let edge = navItems.find(edge => edge.part.dbFeature.id === featureId);\r\n // let edge = edges.edges.find(edge => edge.id === +img.dataset.id);\r\n // let edgeFeature = edges.getFeatureEdgeFilter(edge);\r\n\r\n if (!edge) {\r\n if (!workspace.isEdgeFeatureError) {\r\n console.log('edgeFeature not found', featureId);\r\n workspace.isEdgeFeatureError = true\r\n }\r\n\r\n return totalArea;\r\n }\r\n\r\n // 1.) additional area for waterfall edges\r\n if (isWaterfallFeature(edge.part.dbFeature.id)) { // && !isFeatureUnitUseEach(edge.part)\r\n switch (config.measureUnit) {\r\n case \"Imperial\": totalArea += length * config.waterfallImperialHeight; break;\r\n case \"Metric\": totalArea += length * config.waterfallMetricHeight; break;\r\n }\r\n // additional area for 40mm edges\r\n }\r\n\r\n // 2.) additional area for mitered edges (additional area for the mitered edge tool added separately)\r\n if (isMiterEdge(featureId) && !line.isWithMitered() ) {\r\n // additional area for 40mm edges\r\n const miterEdgeHeight = getMiterEdgeHeight(featureId);\r\n if (miterEdgeHeight) {\r\n totalArea += length * miterEdgeHeight\r\n }\r\n }\r\n\r\n //let edge40mmIds = edges.getEdgeFilterByValue(\"40mm Waterfall\").map(({ id }) => id);\r\n //let is40mmEdge = edge40mmIds.filter(value => edgeFeature.includes(value)).length > 0;\r\n\r\n // else if (is40mmEdge) { // by text: edge.displayName.includes('40mm')\r\n // switch (config.measureUnit) {\r\n // //case \"Imperial\": totalArea += length * config.waterfallImperialHeight; break;\r\n // case \"Metric\": totalArea += length * 40; break;\r\n // }\r\n // }\r\n\r\n return totalArea;\r\n}\r\n\r\nexport const getBacksplashArea = (backsplashValue, attachedTo) => {\r\n backsplashValue = config.measureUnit === \"Imperial\" ? +backsplashValue : mmToInches(+backsplashValue);\r\n const backsplashLength = sqInchesToSqFoot(getBacksplashLength(attachedTo));\r\n const backsplashArea = Math.round10(backsplashValue * backsplashLength, -2)\r\n\r\n return config.measureUnit === \"Imperial\" ? backsplashArea : sqftToM2(backsplashArea);\r\n};\r\n\r\n/*\r\n * backsplash can be applied to line and to lineCorner\r\n * return sqft\r\n */\r\nexport const getBacksplashLength = (attachedTo) => {\r\n let length = 0;\r\n let lineCornerWidth = 0;\r\n\r\n if (attachedTo instanceof LineCorner) {\r\n length += attachedTo.getLength();\r\n } else if(attachedTo instanceof line) {\r\n const prevLine = attachedTo.getParent().getPrevLine(attachedTo);\r\n let lineLength = attachedTo.getLineLength();\r\n\r\n if (attachedTo.isWithBumpout()) {\r\n lineLength += attachedTo.getLineBumpoutTotalHeight();\r\n }\r\n if (attachedTo.lineCorner) {\r\n lineCornerWidth += attachedTo.get45CornerLegDistance();\r\n }\r\n if (prevLine.lineCorner) {\r\n lineCornerWidth += prevLine.get45CornerLegDistance();\r\n }\r\n\r\n length += lineLength - lineCornerWidth;\r\n }\r\n\r\n return length;\r\n};\r\n\r\n//// MEASURE DISTANCE END ////\r\n\r\nexport const truncate = (source, size) => {\r\n let quot = '"';\r\n if(source.slice(0, size - 1 + quot.length).includes(quot)) {\r\n size += quot.length - 1;\r\n }\r\n\r\n return source.length > size ? source.slice(0, size - 1) + \"…\" : source;\r\n};\r\n\r\n//// HTML ////\r\n\r\nexport const setStylesOnElement = (element, styles) => {\r\n Object.assign(element.style, styles);\r\n};\r\n\r\nexport const getMinInArray = (array, attrib) => {\r\n return array.reduce(function(prev, curr) {\r\n return prev[attrib] < curr[attrib] ? prev : curr;\r\n });\r\n};\r\n\r\nexport const getMaxInArray = (array, attrib) =>{\r\n return array.reduce(function(prev, curr) {\r\n return prev[attrib] < curr[attrib] ? prev : curr;\r\n });\r\n};\r\n\r\n/// SLAB ///\r\n\r\nexport const getGCD = function(a, b) {\r\n if (!b) {\r\n return a;\r\n }\r\n\r\n return getGCD(b, a % b);\r\n};\r\n\r\nexport const getAspectRatio = function(height, width) {\r\n let heightGCD = getGCD(height, width);\r\n let aspectHeight = height / heightGCD;\r\n let aspectWidth = width / heightGCD;\r\n\r\n console.log(\"heightGCD\", heightGCD);\r\n console.log(\"aspectHeight\", aspectHeight);\r\n console.log(\"aspectWidth\", aspectWidth);\r\n\r\n return {aspectHeight, aspectWidth, heightGCD};\r\n};\r\n\r\n/**\r\n * If shouldExtend is true this will always return point if segments are not parallel.\r\n * @param {{x: number, y: number}} point1\r\n * @param {{x: number, y: number}} point2\r\n * @param {{x: number, y: number}} point3\r\n * @param {{x: number, y: number}} point4\r\n * @param {boolean} isRounded\r\n * @param {boolean} shouldExtend\r\n * @return {{x: number, y: number}|null} new point on the line\r\n */\r\nexport const getIntersectCordsBetweenLines = (point1, point2, point3, point4, isRounded, shouldExtend = false) => {\r\n const points = [point1.x, point1.y, point2.x, point2.y, point3.x, point3.y, point4.x, point4.y];\r\n if (shouldExtend) {\r\n return getIntersectCordsWithExtendedSegments(...points);\r\n } else {\r\n return getIntersectCords(...points, isRounded)\r\n }\r\n\r\n}\r\n\r\n// line intercept math by Paul Bourke http://paulbourke.net/geometry/pointlineplane/\r\n// Determine the intersection point of two line segments\r\n// Return FALSE if the lines don't intersect\r\nexport const getIntersectCords = function(x1, y1, x2, y2, x3, y3, x4, y4, rounded) {\r\n\r\n // Check if none of the lines are of length 0\r\n if ((x1 === x2 && y1 === y2) || (x3 === x4 && y3 === y4)) {\r\n return false\r\n }\r\n let denominator = ((y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1));\r\n\r\n // Lines are parallel\r\n if (denominator === 0) {\r\n return false\r\n }\r\n\r\n let ua = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / denominator;\r\n let ub = ((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)) / denominator;\r\n\r\n // is the intersection along the segments\r\n if (ua < 0 || ua > 1 || ub < 0 || ub > 1) {\r\n return false\r\n }\r\n\r\n // Return a object with the x and y coordinates of the intersection\r\n let x = x1 + ua * (x2 - x1);\r\n let y = y1 + ua * (y2 - y1);\r\n if (rounded) {\r\n x = Math.round(x);\r\n y = Math.round(y);\r\n }\r\n\r\n return {x, y}\r\n};\r\n\r\n/**\r\n * We expand two segments and get their intersection point. This will always return point if segments are not parallel.\r\n * @param x1\r\n * @param y1\r\n * @param x2\r\n * @param y2\r\n * @param x3\r\n * @param y3\r\n * @param x4\r\n * @param y4\r\n * @return {{x: number, y: number}|null} new point on the line\r\n **/\r\nconst getIntersectCordsWithExtendedSegments = (x1, y1, x2, y2, x3, y3, x4, y4) => {\r\n const A1 = y2 - y1;\r\n const B1 = x1 - x2;\r\n const C1 = A1 * x1 + B1 * y1;\r\n\r\n const A2 = y4 - y3;\r\n const B2 = x3 - x4;\r\n const C2 = A2 * x3 + B2 * y3;\r\n\r\n const det = A1 * B2 - A2 * B1;\r\n\r\n if (det === 0) {\r\n return null;\r\n } else {\r\n const x = (B2 * C1 - B1 * C2) / det;\r\n const y = (A1 * C2 - A2 * C1) / det;\r\n return { x, y };\r\n }\r\n};\r\n\r\n/**\r\n * get new point on the beam which is at distant from the second point at a certain length distance\r\n * @param {{x: number, y: number}} point1\r\n * @param {{x: number, y: number}} point2\r\n * @param {number} distance\r\n * @return {{x: number, y: number}} new point on the line\r\n */\r\nexport const getPointOnTheLine = (point1, point2, distance) => {\r\n const length = getPointDistance(point1, point2);\r\n const k = 1 + distance / length;\r\n const x = parseFloat(point2.x) + k * (parseFloat(point1.x) - parseFloat(point2.x));\r\n const y = parseFloat(point2.y) + k * (parseFloat(point1.y) - parseFloat(point2.y));\r\n\r\n return {x, y}\r\n}\r\n\r\n/**\r\n * Determines whether a point is inside a shape or on its border.\r\n *\r\n * @param {Object} point - The point to check, with properties x and y.\r\n * @param {Object} shape - The shape object, which has a getLines method returning line segments.\r\n * @param {boolean} [includeBorder=false] - If true, the function also returns true when the point is on the border of the shape.\r\n * @returns {boolean} True if the point is inside the shape or on its border (depending on includeBorder), otherwise false.\r\n */\r\nexport const isPointInsideShape = (point, shape, includeBorder = false) => {\r\n let x = point.x, y = point.y;\r\n let inside = false;\r\n let shapeLines = shape.getLines(true);\r\n\r\n for (let i = 0, j = shapeLines.length - 1; i < shapeLines.length; j = i++) {\r\n const iPosition = getPointField(shapeLines[i].from.x, shapeLines[i].from.y, shapeLines[i]);\r\n const jPosition = getPointField(shapeLines[j].to.x, shapeLines[i].to.y, shapeLines[j]);\r\n\r\n let xi = iPosition.x, yi = iPosition.y;\r\n let xj = jPosition.x, yj = jPosition.y;\r\n\r\n // Check if the point is on the line segment\r\n if (includeBorder && isPointOnLine(point, {x: xi, y: yi}, {x: xj, y: yj})) {\r\n return true;\r\n }\r\n\r\n if (((yi > y) !== (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi)) {\r\n inside = !inside;\r\n }\r\n }\r\n\r\n return inside;\r\n};\r\n\r\n/**\r\n * Checks if a point is on a line segment defined by two points.\r\n *\r\n * @param {Object} pt - The point to check, with properties x and y.\r\n * @param {Object} linePt1 - The first point of the line segment, with properties x and y.\r\n * @param {Object} linePt2 - The second point of the line segment, with properties x and y.\r\n * @returns {boolean} True if the point is on the line segment, otherwise false.\r\n */\r\nfunction isPointOnLine(pt, linePt1, linePt2) {\r\n const dxc = pt.x - linePt1.x;\r\n const dyc = pt.y - linePt1.y;\r\n const dxl = linePt2.x - linePt1.x;\r\n const dyl = linePt2.y - linePt1.y;\r\n\r\n const cross = dxc * dyl - dyc * dxl;\r\n if (cross !== 0) return false; // Point is not on the line\r\n\r\n // Check if the point is within the line segment bounds\r\n if (Math.abs(dxl) >= Math.abs(dyl))\r\n return dxl > 0 ? linePt1.x <= pt.x && pt.x <= linePt2.x : linePt2.x <= pt.x && pt.x <= linePt1.x;\r\n else\r\n return dyl > 0 ? linePt1.y <= pt.y && pt.y <= linePt2.y : linePt2.y <= pt.y && pt.y <= linePt1.y;\r\n}\r\n\r\nexport const getAreaByShoelaceFormula = (lines) => {\r\n let area = 0;\r\n for (let i = 0; i < lines.length; i++) {\r\n area += lines[i].to.x * (lines[i + 1] ? lines[i + 1].to.y : lines[0].to.y );\r\n area -= lines[i].to.y * (lines[i + 1] ? lines[i + 1].to.x : lines[0].to.x );\r\n }\r\n\r\n return area / 2;\r\n};\r\n\r\nexport const addDecimalToLength = (lineLength) => {\r\n let decimal = 0;\r\n if (lineLength.reduced.length) {\r\n if (lineLength.reduced[0] === 1 && lineLength.reduced[1] === 4) {\r\n decimal = 0.25;\r\n } else if (lineLength.reduced[0] === 1 && lineLength.reduced[1] === 2) {\r\n decimal = 0.5;\r\n } else if (lineLength.reduced[0] === 3 && lineLength.reduced[1] === 4) {\r\n decimal = 0.75;\r\n }\r\n }\r\n\r\n return lineLength.rounded + decimal\r\n};\r\n\r\nexport const getAngleBetweenTwoPoints = (point1, point2) => {\r\n return Math.atan2(point2.y - point1.y, point2.x - point1.x) * 180 / Math.PI;\r\n}\r\n\r\nexport const getAngleRelativeToTheHorizontalAxis = (point1, point2) => {\r\n let dx = point1.x - point2.x;\r\n let dy = point1.y - point2.y;\r\n\r\n return (Math.atan2(dy, dx) * 180 / Math.PI + 360) % 360;\r\n}\r\n\r\nexport const getTanDeg = (deg) => {\r\n let rad = deg * Math.PI/180;\r\n return Math.tan(rad);\r\n}\r\n\r\n/**\r\n * return closest higher number in array than needle\r\n * @param {int} needle\r\n * @param {[int]} array\r\n * @return {*}\r\n */\r\nexport const getClosestHigherNumber = (needle, array) => {\r\n return array.reduce((prev, curr) => {\r\n if (curr <= needle) {\r\n return prev\r\n }\r\n if (prev === null) {\r\n return curr\r\n }\r\n return curr - needle < prev - needle ? curr : prev;\r\n }, null);\r\n}\r\n\r\nexport const isDisabledInPopupWithParents = (item) => {\r\n if (item.isDisabledInPopup) {\r\n return true\r\n }\r\n if (item.getParent && item.getParent()) {\r\n return isDisabledInPopupWithParents(item.getParent());\r\n }\r\n\r\n return false\r\n}\r\n\r\n/**\r\n * Point 1,2,3 is a corner, where 2 is midpoint\r\n * we assume that distance between lines is more than minLineLength\r\n * @param shape\r\n * @param point1\r\n * @param point2\r\n * @param point3\r\n * @param {number} minLineLength\r\n */\r\nexport const isInnerCorner = (shape, point1, point2, point3, minLineLength = 25) => {\r\n const shapePoints = shape.getPointFieldArray();\r\n const closePoint1 = getPointOnTheLine(point2, point1, -minLineLength);\r\n const closePoint2 = getPointOnTheLine(point2, point3, -minLineLength);\r\n const midPoint = getMidPoint(closePoint1, closePoint2);\r\n\r\n // RenderFigures.renderCircle(closePoint1, 12,1, '#63b141');\r\n // RenderFigures.renderCircle(closePoint2, 12,1, '#63b141');\r\n // RenderFigures.renderCircle(midPoint, 10, 1);\r\n // console.log(\"midPoint\", midPoint);\r\n // console.log(\"isPointInsidePolygon\", isPointInsidePolygon(midPoint, shapePoints));\r\n // debugger // eslint-disable-line no-debugger\r\n return !isPointInsidePolygon(midPoint, shapePoints);\r\n}\r\n\r\nexport const parseImperialFractionToDecimal = (input) => {\r\n const sanitizedInput = input.replace(/['\"]/g, \"\");\r\n const [wholePart, fractionPart] = sanitizedInput.split(\" \");\r\n\r\n let decimalValue = parseFloat(wholePart) || 0; // Default to 0 if no whole part\r\n\r\n // If there's a fraction part, convert it to decimal\r\n if (fractionPart && fractionPart.includes(\"/\")) {\r\n const [numerator, denominator] = fractionPart.split(\"/\").map(Number);\r\n if (denominator) {\r\n decimalValue += numerator / denominator;\r\n }\r\n }\r\n\r\n return decimalValue;\r\n};\r\n","import invert from \"lodash/invert\";\r\nimport uniqBy from \"lodash/uniqBy\";\r\nimport isEqual from \"lodash/isEqual\";\r\n\r\nimport {getFilterGroupValues, splitFeatureName} from \"../../../misc/utils\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport {Part} from \"./part\";\r\nimport store from '../../../store';\r\nimport {\r\n LayoutAbbreviation, LayoutType, LayoutAbbreviationsToRemove, SIDE_POSITIONS,\r\n useNewNavLogicPartIds, LOOK_WALLS_ONLY, COUNTERTOP_GROUP_BATHROOM, PAN_POSITIONS\r\n} from \"./constants\";\r\nimport {getFeatureIsLocked} from \"../../../misc/helpers\";\r\nimport {getOptionsFromNavItemsForFeature, navFeatureCLick} from \"../lookNavigation/lookFunctions\";\r\nimport {allowCheckForCollection} from \"../grohe/groheNavigation/groheFunctions\";\r\nimport {getSkusDifferences, getSkuWithoutDot} from \"../lookNavigation/lookFunctions2\";\r\nimport {getColorFilterValue} from \"../../../misc/filtersFunctions\";\r\nimport {IS_LIXIL_SERVERS, IS_QKB_UI} from \"../../../config\";\r\nimport {HANDLES_GROUP_BATHROOM} from \"../../bvSceneComponent/core/constants\";\r\nimport {isEncore} from \"../../../misc/fabricatorHardcode\";\r\n\r\n/**\r\n * Used for Complex parts such as Vanity, to perform some base functionality for related items\r\n */\r\nexport class IntermediatePart extends Part {\r\n\r\n constructor(isChild) {\r\n super(false, isChild);\r\n this.disabled = false;\r\n this.defaultDisabled = false; // used after reset click\r\n this.canBeDisabled = false;\r\n }\r\n\r\n /**\r\n * This will be called on feature creation\r\n * @param dbFeature\r\n */\r\n load(dbFeature) {\r\n if (this.layerPositions) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] && dbFeature.metaData[\"Side\"][0] !== \"0\"\r\n ? dbFeature.metaData[\"Side\"][0]\r\n : SIDE_POSITIONS[0];\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === SIDE_POSITIONS[0] ? 1 : 2;\r\n const instance = new this.constructor(false, partNumber);\r\n return this.load_(dbFeature, instance, true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n return this.load_(dbFeature, new this.constructor());\r\n }\r\n\r\n /**\r\n * This will be called by the underlying vanity feature with a concrete instance of the part\r\n * @param dbFeature\r\n * @param part {Part}\r\n * @param setParent {boolean}\r\n * @param features\r\n */\r\n load_(dbFeature, part, setParent = true, features = 'features') {\r\n\r\n const featureList = features + \"List\";\r\n\r\n const {displayName} = dbFeature;\r\n let {featureName} = splitFeatureName(displayName);\r\n if (!featureName && dbFeature.groupName && dbFeature.displayName) {\r\n featureName = dbFeature.displayName.replace(dbFeature.groupName + \" - \", \"\")\r\n }\r\n // console.log('displayName:', displayName);\r\n\r\n if (setParent) {\r\n part.getParent = () => this;\r\n if (dbFeature.galleryImages) {\r\n const featured = dbFeature.galleryImages.find(galImage => galImage.featured);\r\n if (featured) {\r\n this.featuredImage = featured.url\r\n }\r\n dbFeature.galleryImages = dbFeature.galleryImages.sort((a, b) => b.default - a.default)\r\n }\r\n }\r\n\r\n if (!dbFeature.sharedFeatureName) {\r\n console.error(\"No sharedFeatureName property:\", dbFeature);\r\n }\r\n\r\n part.partName = featureName;\r\n part.metaData = dbFeature.metaData || {};\r\n\r\n if (dbFeature.s3Bindings && dbFeature.s3Bindings.length) {\r\n // dbFeature.s3Bindings = dbFeature.s3Bindings.filter(binding => binding.visualizer === \"BathroomV5\")\r\n }\r\n\r\n part.dbFeature = dbFeature || {};\r\n if (!part.dbFeature.filterValueIDs) {\r\n part.dbFeature.filterValueIDs = {}\r\n }\r\n part.notAvailableInVisualizer = !dbFeature.s3Bindings || !dbFeature.s3Bindings.length;\r\n\r\n if (part.metaData.RoomLayout) {\r\n const roomLayout = part.metaData.RoomLayout;\r\n if (roomLayout.includes(LayoutAbbreviation.All)) {\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n } else if (Array.isArray(roomLayout) && roomLayout.length) {\r\n roomLayout.forEach(roomLayoutAbbreviation => {\r\n const layoutName = invert(LayoutAbbreviation)[roomLayoutAbbreviation];\r\n if (layoutName) { // Prevent bad roomLayout Metadata\r\n this[featureList][layoutName].push(part);\r\n }\r\n });\r\n } else { // single value\r\n const layoutName = invert(LayoutAbbreviation)[roomLayout];\r\n if(layoutName) {\r\n this[featureList][layoutName].push(part);\r\n }\r\n }\r\n }\r\n\r\n if (part.notAvailableInVisualizer || !part.metaData.RoomLayout) {\r\n part.notAvailableInVisualizer = true;\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n }\r\n\r\n // Object.keys(LayoutType).forEach(layoutName => {\r\n // this[features+\"List\"][layoutName].push(part);\r\n // });\r\n\r\n this.loadFeatureCommon(part);\r\n\r\n return part\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions()\r\n }\r\n\r\n // someFeatureInStock(feature, arrayOfFeatures) {\r\n // // console.log(\"someFeatureInStock\", feature);\r\n // return isInStock(feature) || arrayOfFeatures.some(currentFeature => {\r\n // // if ((feature._collectionName === currentFeature._collectionName) && (currentFeature.dbFeature.id !== feature.dbFeature.id) && isInStock(currentFeature)) {\r\n // // console.log(\"currentFeature\", currentFeature);\r\n // // }\r\n // if (feature.partId === \"vanity_sink\") {\r\n // return (feature._collectionName === currentFeature._collectionName)\r\n // && (currentFeature.dbFeature.id !== feature.dbFeature.id) && isInStock(currentFeature)\r\n // }\r\n // return (feature._collectionName === currentFeature._collectionName)\r\n // && (feature.dbFeature.lixilProductSubCategory === currentFeature.dbFeature.lixilProductSubCategory)\r\n // && (currentFeature.dbFeature.id !== feature.dbFeature.id) && isInStock(currentFeature)\r\n // })\r\n // }\r\n\r\n // navigationSubItems(filters, searchText, forFeature, filterGroups, restOptions) { // to do\r\n navigationSubItemsSimple(filters, searchText) {\r\n const featuresList = this.activeFeature && this.activeFeature.metaData.layerPosition\r\n && this.activeFeature.metaData.layerPosition !== SIDE_POSITIONS[0] ? this.featuresParts : this.features;\r\n const filteredAvailableFeatures = this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters, featuresList), searchText);\r\n let featuresToDisplay = this.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n // console.log(\"filterGroups\", filterGroups);\r\n return this.returnUniqueNavFeatures(featuresToDisplay)\r\n }\r\n\r\n navigationSubItems(filters, searchText, forFeature, filterGroups, restOptions = {}) {\r\n // const {firstOpenedFeature, firstOpenedConditions, returnAllFeatures} = restOptions;\r\n const {returnAllFeatures} = restOptions;\r\n const featuresList = this.getFeaturesForNavigationFrom(restOptions);\r\n const filteredAvailableFeatures = this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters, featuresList), searchText);\r\n let featuresToDisplay = returnAllFeatures\r\n ? filteredAvailableFeatures\r\n : this.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n if (this.partId === \"vanity_faucet\" || HANDLES_GROUP_BATHROOM.includes(this.partId) || this.nextFeaturesPageToLoadArray) {\r\n const allConditions = this.getArrayOfConditions();\r\n if (this.partId === \"vanity_faucet\") {\r\n const mountTypeCondition = allConditions.find(cond => cond.propName === \"MountType\");\r\n if (mountTypeCondition) {\r\n featuresToDisplay = featuresToDisplay.sort((a, b) => {\r\n return b.matchesMetaForCondition(mountTypeCondition.propName, mountTypeCondition.propValue)\r\n - a.matchesMetaForCondition(mountTypeCondition.propName, mountTypeCondition.propValue)\r\n })\r\n }\r\n } else { // vanity_backsplash and vanity_countertop should show in visualizer first\r\n featuresToDisplay = featuresToDisplay.sort((a, b) => {\r\n return b.matchesMetaForArrayOfConditions(allConditions) - a.matchesMetaForArrayOfConditions(allConditions)\r\n })\r\n }\r\n }\r\n // console.log(\"filterGroups\", filterGroups);\r\n if (this.layerPositions || this.oneLayerPosition || returnAllFeatures) {\r\n featuresToDisplay = uniqBy(featuresToDisplay, (feature) => feature.getSplittedFeatureName());\r\n }\r\n return this.navigationItemsWithOptions(filters, forFeature, filterGroups, featuresToDisplay)\r\n }\r\n\r\n // navigationSubItems(filters, searchText, forFeature, filterGroups, restOptions) { // to do\r\n navigationItemsWithOptions(filters, forFeature, filterGroups, featuresToDisplay) {\r\n let newFeatures = [];\r\n let navItems = [];\r\n const matchingFeatureProperty = this.useMatchingFeatureReplacement || \"MatchingFeature\";\r\n\r\n if (filterGroups && filterGroups.length && (!filters || !Object.keys(filters).length) && !IS_QKB_UI && !isEncore) {\r\n // console.log(\"filteredAvailableFeatures\", filteredAvailableFeatures);\r\n // console.log(\"featuresToDisplay\", featuresToDisplay);\r\n for (let i = 0; i < featuresToDisplay.length; i++) { // 1) take all others\r\n const currentFeature = featuresToDisplay[i];\r\n // if (currentFeature.dbFeature.sharedFeatureName === \"26128EN2\") {\r\n // debugger;//eslint-disable-line\r\n // }\r\n const collectionName = currentFeature.getCollectionName(filterGroups);\r\n const colorName = currentFeature.getColorName(filterGroups);\r\n const matchingOptionsName = currentFeature.getMatchingOptionsName();\r\n const matchByCollection = allowCheckForCollection(currentFeature) ? !newFeatures.some(feature => {\r\n return feature._collectionName === collectionName && feature.dbFeature.lixilProductSubCategory === currentFeature.dbFeature.lixilProductSubCategory\r\n }) : false;\r\n let conditionPassed = false;\r\n if (useNewNavLogicPartIds.includes(this.partId)) {\r\n const sku = getSkuWithoutDot(currentFeature.dbFeature.sharedFeatureName);\r\n conditionPassed = !collectionName\r\n || matchByCollection\r\n || (!colorName && !newFeatures.some(feature => getSkusDifferences(feature.dbFeature.sharedFeatureName, currentFeature.dbFeature.sharedFeatureName) <= 1))\r\n || (colorName && !newFeatures.some(feature => {\r\n const skuDiff = getSkusDifferences(feature.dbFeature.sharedFeatureName, currentFeature.dbFeature.sharedFeatureName);\r\n if (this.partId === \"vanity_cabinet\" && skuDiff <= 2) {\r\n // case when K-33554-ASB-1WT and K-33555-ASB-0 and K-33555-ASB-1WT should be shown separately\r\n return false\r\n }\r\n return skuDiff <= 1 || getSkuWithoutDot(feature.dbFeature.sharedFeatureName) === sku\r\n }))\r\n } else {\r\n conditionPassed = !collectionName\r\n || !colorName\r\n || matchByCollection\r\n || !newFeatures.some(feature => feature.getMatchingOptionsName() === matchingOptionsName)\r\n || !newFeatures.some(feature => feature.metaData[matchingFeatureProperty] && currentFeature.metaData[matchingFeatureProperty]\r\n && isEqual(feature.metaData[matchingFeatureProperty], currentFeature.metaData[matchingFeatureProperty]))\r\n }\r\n if (conditionPassed) {\r\n newFeatures.push(currentFeature);\r\n }\r\n }\r\n // console.log(\"newFeatures\", newFeatures);\r\n navItems = this.returnUniqueNavFeatures(this.getNavItemsWithOptions(forFeature, newFeatures, featuresToDisplay, filterGroups).map(featureObject => {\r\n return new DesignNavigationItem(featureObject.mainFeature.featureName, featureObject.mainFeature, featureObject.otherOptions)\r\n }), false);\r\n }\r\n if (!navItems.length) {\r\n navItems = this.returnUniqueNavFeatures(featuresToDisplay)\r\n }\r\n if (this.filterNavigationItems && forFeature) {\r\n navItems = this.filterNavigationItems(navItems, forFeature)\r\n }\r\n // console.log(\"navItems\", navItems);\r\n return navItems\r\n }\r\n\r\n /**\r\n * this is almost the same as feature options, it is replacing next nav items with the needed color feature\r\n * @param forFeature {featureInterface} featureInterface\r\n * @param newFeatures {[featureInterface]}\r\n * @param allFeatures {[featureInterface]}\r\n * @param filterGroups {[filterGroupInterface]}\r\n * @returns {array}\r\n */\r\n getNavItemsWithOptions = (forFeature= null,\r\n newFeatures = [],\r\n allFeatures = [],\r\n filterGroups) => {\r\n\r\n const matchingFeatureProperty = this.useMatchingFeatureReplacement || \"MatchingFeature\";\r\n const neededColorName = forFeature ? forFeature.getColorName(filterGroups) : \"\";\r\n\r\n return newFeatures.map(currentFeature => {\r\n const filterValue = getColorFilterValue(currentFeature, filterGroups);\r\n const otherOptions = getOptionsFromNavItemsForFeature(currentFeature, allFeatures, filterGroups);\r\n\r\n const currentFeatureColor = currentFeature.getColorName(filterGroups);\r\n const customFullDisplayName = currentFeature.getMatchingOptionsName();\r\n const matchByCollection = forFeature && allowCheckForCollection(currentFeature) ? (currentFeature._collectionName === forFeature._collectionName) : true;\r\n let matchForSimilarSku = forFeature && useNewNavLogicPartIds.includes(this.partId) && matchByCollection\r\n && getSkusDifferences(currentFeature.dbFeature.sharedFeatureName, forFeature.dbFeature.sharedFeatureName) <= 1;\r\n if (this.partId === \"vanity_cabinet\" && matchForSimilarSku) {\r\n matchForSimilarSku = customFullDisplayName === forFeature.getMatchingOptionsName() // cases when 48 replaced 24\r\n }\r\n if (forFeature && (currentFeature.dbFeature.id === forFeature.dbFeature.id || matchForSimilarSku || (\r\n (customFullDisplayName === forFeature.getMatchingOptionsName())\r\n && (!forFeature.metaData[matchingFeatureProperty] || isEqual(forFeature.metaData[matchingFeatureProperty], currentFeature.metaData[matchingFeatureProperty]))\r\n && matchByCollection\r\n && (forFeature.partId === \"vanity_sink\" ? true : forFeature.dbFeature.lixilProductSubCategory === currentFeature.dbFeature.lixilProductSubCategory)\r\n && (currentFeature.dbFeature.id !== forFeature.dbFeature.id)\r\n && (currentFeatureColor && forFeature.getColorName(filterGroups) && (currentFeatureColor !== forFeature.getColorName(filterGroups)))\r\n ))) {\r\n if (filterValue && !otherOptions.some(option => option.colorValue.id === filterValue.id)) {\r\n otherOptions.push({feature: currentFeature, colorValue: filterValue})\r\n }\r\n return {\r\n mainFeature: forFeature,\r\n otherOptions: otherOptions.filter(option => option.feature.dbFeature.id !== forFeature.dbFeature.id)\r\n };\r\n } else {\r\n // console.log(\"neededColorName\", neededColorName);\r\n // console.log(\"otherOptions\", otherOptions);\r\n if (!filterValue || !otherOptions.length) {\r\n return {mainFeature: currentFeature, otherOptions: []}\r\n }\r\n if (!LOOK_WALLS_ONLY.includes(this.partId) && !COUNTERTOP_GROUP_BATHROOM.includes(this.partId)) {\r\n const allOptions = [{feature: currentFeature, colorValue: filterValue}, ...otherOptions];\r\n const mainOption = (forFeature && neededColorName && allOptions.find(option => option.feature.getColorName(filterGroups) === neededColorName))\r\n || allOptions.find(option => option.feature.getColorName(filterGroups) && option.feature.getColorName(filterGroups).includes(\"Chrome\"))\r\n || allOptions.find(option => option.feature.getColorName(filterGroups) && option.feature.getColorName(filterGroups).includes(\"White\"))\r\n || allOptions.find(option => option.feature.getColorName(filterGroups) && option.feature.getColorName(filterGroups).includes(\"rushed\")) // brushed nickel;\r\n // console.log(\"mainOption\", mainOption);\r\n if (mainOption) {\r\n return {\r\n mainFeature: mainOption.feature,\r\n otherOptions: allOptions.filter(option => option.feature.dbFeature.id !== mainOption.feature.dbFeature.id)\r\n }\r\n }\r\n }\r\n return {mainFeature: currentFeature, otherOptions}\r\n }\r\n });\r\n }\r\n\r\n\r\n\r\n navigationSubItemsWithSides(filters, searchText) {\r\n const filteredAvailableFeatures = this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = this.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n\r\n let navFeatures = [];\r\n const activePosition = this.activeFeature && this.activeFeature.dbFeature.metaData[\"layerPosition\"]\r\n ? this.activeFeature.dbFeature.metaData[\"layerPosition\"]\r\n : SIDE_POSITIONS[0];\r\n navFeatures = featuresToDisplay.filter(feature => {\r\n return feature.dbFeature.metaData[\"layerPosition\"] === activePosition\r\n })\r\n featuresToDisplay.forEach(feature => {\r\n const name1 = feature.getSplittedFeatureName();\r\n if (!navFeatures.some(navFeature => navFeature.getSplittedFeatureName() === name1)) {\r\n navFeatures.push(feature)\r\n }\r\n })\r\n return this.returnUniqueNavFeatures(navFeatures)\r\n }\r\n\r\n navigationSubItemsWithFilter(propName, propValue, featuresToCheck = this.features) {\r\n return featuresToCheck.filter((feature) => {\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n }).map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n navigationSubItemsWithFilterMultipleConditions(arrayOfConditions, featuresToCheck = this.features) {\r\n // console.log('arrayOfConditions', arrayOfConditions);\r\n // console.log('featuresToCheck', featuresToCheck);\r\n return featuresToCheck.filter((feature) => {\r\n return feature.notAvailableInVisualizer || arrayOfConditions.every((conditionObject) => {\r\n const {propName, propValue} = conditionObject;\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n });\r\n })\r\n }\r\n\r\n setDefault(layout, setNotInVisFeature = false) {\r\n this.setFeatureGroupDefault(layout, setNotInVisFeature)\r\n }\r\n\r\n setLayerPositions = (activeFeature = this.activeFeature) => {\r\n if (!activeFeature) {\r\n return\r\n }\r\n const layout = this.getParent().layout;\r\n const conditions = this.getArrayOfConditions();\r\n if (layout && this.defaultLayerLayoutPositions && this.defaultLayerLayoutPositions[layout.type]) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.defaultLayerLayoutPositions[layout.type] === key\r\n && (!this.layerPositions[key] || !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n } else if (activeFeature.dbFeature.metaData[\"layerPosition\"] !== key) {\r\n this.layerPositions[key] = null;\r\n }\r\n })\r\n } else {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if ((activeFeature.dbFeature.metaData[\"layerPosition\"] === key)\r\n && (!this.layerPositions[key] || !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n // } else if (this.setAllLayerPositions) {\r\n } else if ((key !== \"C\" && activeFeature.metaData.layerPosition === \"C\") || (activeFeature.metaData.layerPosition !== \"C\" && key === \"C\")) {\r\n this.layerPositions[key] = null;\r\n } else {\r\n const matchingPositionFeature = this.getMatchingPositionFeature(key);\r\n if (matchingPositionFeature) {\r\n this.layerPositions[key] = matchingPositionFeature;\r\n }\r\n }\r\n })\r\n }\r\n }\r\n\r\n toggleLayerPositions() {\r\n if (this.layerPositions) { // just in case\r\n Object.keys(this.layerPositions).forEach(key => {\r\n this.layerPositions[key] = this.disabled ? null : this.getMatchingPositionFeature(key)\r\n })\r\n }\r\n }\r\n\r\n getMatchingPositionFeature = (position = \"\",\r\n fromFeature = this.activeFeature,\r\n fromLayout = null,\r\n conditions = null) => {\r\n if (fromFeature) { //just in case\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n let arrayOfConditions = (conditions || this.getArrayOfConditions()).filter(cond => cond.propName !== \"Side\");\r\n // if (fromFeature.metaData[\"SkuName\"]) {\r\n // arrayOfConditions.push({\r\n // propName: \"SkuName\",\r\n // propValue: fromFeature.metaData[\"SkuName\"]\r\n // })\r\n // }\r\n if (fromLayout) {\r\n let roomLayoutMeta = arrayOfConditions.find(condition => condition.propName === \"RoomLayout\");\r\n let roomSceneMeta = arrayOfConditions.find(condition => condition.propName === \"RoomScene\");\r\n if (roomLayoutMeta) {\r\n roomLayoutMeta.propValue = fromLayout.getCurrentLayoutAbbreviation();\r\n }\r\n if (roomSceneMeta) {\r\n roomSceneMeta.propValue = fromLayout.scene;\r\n }\r\n }\r\n const skuNamesPartIds = [\"walk_in_tub\"];\r\n\r\n const whereToFind = (!this.layerPositions || (position === Object.keys(this.layerPositions)[0])\r\n || (this.partId === \"grab_bar\" && position === \"C\"))\r\n ? fromLayout ? this.featuresList[fromLayout.getCurrentLayoutName()] : this.features\r\n : fromLayout ? this.featuresPartsList[fromLayout.getCurrentLayoutName()] : this.featuresParts;\r\n\r\n let matchFeature = null;\r\n if (fromFeature.metaData[\"SkuName\"]) {\r\n const withSkuNameConditions = [...arrayOfConditions, {\r\n propName: \"SkuName\",\r\n propValue: fromFeature.metaData[\"SkuName\"][0],\r\n }]\r\n matchFeature = whereToFind.find((feature) => {\r\n return (skuNamesPartIds.includes(this.partId) || name1 === feature.getSplittedFeatureName())\r\n && feature.matchesMetaForArrayOfConditions(withSkuNameConditions) && feature.metaData[\"layerPosition\"] === position\r\n });\r\n }\r\n if (!matchFeature) {\r\n matchFeature = whereToFind.find((feature) => {\r\n return (skuNamesPartIds.includes(this.partId) || name1 === feature.getSplittedFeatureName())\r\n && feature.matchesMetaForArrayOfConditions(arrayOfConditions) && feature.metaData[\"layerPosition\"] === position\r\n });\r\n }\r\n return matchFeature\r\n }\r\n return null\r\n };\r\n\r\n getArrayOfConditions() {\r\n const layout = this.getParent().layout;\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: layout.getCurrentLayoutAbbreviation()\r\n }, {\r\n propName: 'RoomScene',\r\n propValue: layout.scene\r\n }];\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.hideLayerCondition && this.hideLayerCondition()) {\r\n this.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n if (this.hasAdditionalParts) {\r\n this.checkIfFeaturePartIsMatching();\r\n }\r\n return this._setLayers(layout);\r\n }\r\n this.setDefault(layout);\r\n return this._setLayers(layout);\r\n }\r\n\r\n showLayerPositionsModal(forFeature) {\r\n const checkSidesFeatureGroups = [\"shower_door\", \"shower_fixture\", \"grab_bar\", \"large_corner_seat\",\r\n \"replacement_tub\", \"shower_pan_combo\", \"corner_caddie\", \"large_corner_caddie\", \"soap_dish\", \"walk_in_tub\",\r\n \"shower_seats\", \"replacement_tub_fixture\"];\r\n if (checkSidesFeatureGroups.includes(this.partId)) {\r\n const positionsAvailable = PAN_POSITIONS.filter(position => {\r\n return !!this.getMatchingPositionFeature(position, forFeature);\r\n });\r\n return positionsAvailable.length > 1\r\n }\r\n return false\r\n }\r\n\r\n clickFromAllWalls(ignoreLocked) {\r\n if (this && this.dbFeature && this.dbFeature.sharedFeatureName) {\r\n console.log(`${this.partId}:`, this.dbFeature.sharedFeatureName);\r\n }\r\n navFeatureCLick(this, false, ignoreLocked, false);\r\n // this.handleClick(ignoreLocked, \"all_walls\");\r\n }\r\n\r\n /**\r\n * @param ignoreLocked {boolean} // false by the default, is used by wizard ONLY\r\n */\r\n handleClick(ignoreLocked = false) {\r\n const parent = this.getParent();\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n parent.firstClick[activeQuoteIndex] = true; // allow to show active item\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (featureIsLocked) {\r\n parent.activeLockedFeature = this;\r\n } else {\r\n if (parent.activeLockedFeature) {\r\n parent.activeLockedFeature = null;\r\n }\r\n this.featureClick();\r\n }\r\n }\r\n\r\n featureClick() {\r\n const parent = this.getParent();\r\n parent.placeholderChanged = true;\r\n if (this.notAvailableInVisualizer) {\r\n parent.activeNotInVisualizerFeature = this; // do not change the activeFeature (in order to keep the layer)\r\n } else if (parent.activeNotInVisualizerFeature) {\r\n parent.activeNotInVisualizerFeature = null; // remove it from other searches and so on\r\n parent.activeFeature = this;\r\n } else {\r\n parent.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n hideLayers() {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.src = '';\r\n }\r\n if (Array.isArray(this.activeFeatureParts) && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.src = '';\r\n }\r\n })\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.src = '';\r\n }\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.src = '';\r\n }\r\n })\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n\r\n const getZIndex = (feature, partId = null) => {\r\n return feature.metaData[\"ZSorting\"] ? feature.metaData[\"ZSorting\"] * 1000 : zIndexes[partId || this.partId];\r\n }\r\n\r\n let increase = 0;\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach((key) => {\r\n const feature = this.layerPositions[key];\r\n if (feature) {\r\n increase = increase + 0.000001;\r\n feature.layer.zIndex = getZIndex(feature) + increase;\r\n }\r\n })\r\n } else if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = getZIndex(this.activeFeature);\r\n if (this.hasAdditionalParts && this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (this.partId === \"attachment\") {\r\n activeFeaturePart.layer.zIndex = getZIndex(activeFeaturePart, this.additionalPartPartId)\r\n } else {\r\n increase = increase + 0.000001;\r\n activeFeaturePart.layer.zIndex = getZIndex(activeFeaturePart, this.additionalPartPartId) + increase;\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n removeLayoutFromPartName(partName) {\r\n LayoutAbbreviationsToRemove.forEach(abbr => {\r\n const spaceWithLayoutName = \" \"+abbr;\r\n partName = partName.replace(spaceWithLayoutName + \" \", \" \"); // 1) replace \" Agra S Some edge name\" -> \" Agra Some edge name\"\r\n if (partName.slice(-spaceWithLayoutName.length) === spaceWithLayoutName) {\r\n partName = partName.substring(0, partName.length - spaceWithLayoutName.length); // 2) replace \" Agra Some edge name S\" -> \" Agra Some edge name\"\r\n }\r\n });\r\n partName = partName.replace(\" Backsplash\", \"\");\r\n return partName\r\n }\r\n\r\n removeEdgeFromPartName(partName) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n if (edgeFilterGroup && edgeFilterGroup.values && edgeFilterGroup.values.length) {\r\n const edgeFilterGroupValues = edgeFilterGroup.values.sort((a,b) => {\r\n return a.value && b.value && (b.value.length - a.value.length)\r\n }); // 1st should be \"Full Bullnose\", then simple \"Bullnose\"\r\n edgeFilterGroupValues.forEach((filterGroupValue) => { // arrayOf {id: 293, value: \"Eased\", displayText: \"Eased\", parent_id: null, icon: \"\", …}\r\n partName = partName.split(\" \"+filterGroupValue.value).join(\"\");\r\n });\r\n }\r\n return partName\r\n }\r\n\r\n getCountertopGroupsSplittedFeatureName = () => {\r\n if (this._countertopGroupsCustomDisplayName == null) {\r\n this._countertopGroupsCustomDisplayName = this.dbFeature.sharedFeatureName || \"\";\r\n }\r\n return this._countertopGroupsCustomDisplayName\r\n };\r\n\r\n getSplittedFeatureName = () => {\r\n if (this._customDisplayName == null || this.dbFeature.wasUpdatedFromAnotherResponse) {\r\n this._customDisplayName = this.dbFeature.sharedFeatureName || this.partName || \"\";\r\n if (LOOK_WALLS_ONLY.includes(this.partId) || COUNTERTOP_GROUP_BATHROOM.includes(this.partId)) {\r\n const manufacturerFilter = getFilterGroupValues(this, {id: 35});\r\n if (Array.isArray(manufacturerFilter)) {\r\n this._customDisplayName = this._customDisplayName + manufacturerFilter[0];\r\n }\r\n } else if (this.partId === \"shower_pan_combo\") {\r\n this._customDisplayName = !IS_LIXIL_SERVERS && this.metaData && Array.isArray(this.metaData[\"MatchingFeature\"])\r\n && this.metaData[\"MatchingFeature\"][0]\r\n ? this.metaData[\"MatchingFeature\"][0]\r\n : this._customDisplayName.replace(/LHO/g, \"\").replace(/RHO/g, \"\");\r\n }\r\n }\r\n if (this.dbFeature.wasUpdatedFromAnotherResponse) {\r\n this.dbFeature.wasUpdatedFromAnotherResponse = false;\r\n }\r\n return this._customDisplayName\r\n };\r\n\r\n getMatchingOptionsName = () => {\r\n if (!this._customMatchingOptionsName) {\r\n switch (this.partId) {\r\n case \"vanity_cabinet\":\r\n this._customMatchingOptionsName = getSkuWithoutDot(this.getCustomFullDisplayName()).split(\"-ASB\")[0];\r\n break;\r\n case \"hand_shower_only\": {\r\n this._customMatchingOptionsName = this.getCustomFullDisplayName();\r\n if (this.metaData[\"MatchingFeature\"] && this.metaData[\"MatchingFeature\"][0]) {\r\n this._customMatchingOptionsName += this.metaData[\"MatchingFeature\"][0];\r\n }\r\n break;\r\n }\r\n case \"vanity_backsplash\":\r\n case \"vanity_countertop\":\r\n case \"walk_in_tub_fixture\":\r\n this._customMatchingOptionsName = this.getSplittedFeatureName();\r\n break;\r\n case \"shower_fixture\":\r\n case \"shower_door\":\r\n this._customMatchingOptionsName = getSkuWithoutDot(this.getSplittedFeatureName()); // TU105507.243 -> TU105507\r\n break;\r\n case \"body_spray\":\r\n this._customMatchingOptionsName = this.getSplittedFeatureName().substr(0, 5);\r\n break;\r\n default:\r\n this._customMatchingOptionsName = getSkuWithoutDot(this.getCustomFullDisplayName()).substr(0, 5);\r\n break;\r\n }\r\n if (LOOK_WALLS_ONLY.includes(this.partId)) {\r\n const manufacturerFilter = getFilterGroupValues(this, {id: 35});\r\n if (Array.isArray(manufacturerFilter)) {\r\n this._customMatchingOptionsName = this._customMatchingOptionsName + manufacturerFilter[0];\r\n }\r\n }\r\n }\r\n return this._customMatchingOptionsName\r\n };\r\n\r\n getSplittedSku = () => {\r\n if (!this._splittedSku) {\r\n this._splittedSku = this.dbFeature.isFromAsRoom\r\n ? getSkuWithoutDot(this.dbFeature.sku || this.dbFeature.sharedFeatureName || \"\") // as rooms should have 8\r\n : (this.dbFeature.sku || this.dbFeature.sharedFeatureName || \"\").substr(0, 5); // grohe rooms should have 5\r\n }\r\n return this._splittedSku\r\n }\r\n\r\n getMatchingFeatureName = () => {\r\n return this.getSplittedFeatureName()\r\n };\r\n\r\n getCustomFullDisplayName = () => {\r\n if (!this._customFullDisplayName) {\r\n this._customFullDisplayName = this.dbFeature.customDisplayName || \"\";\r\n switch (this.partId) {\r\n case \"vanity_faucet\":\r\n this._customFullDisplayName = this._customFullDisplayName\r\n .replace(\" With Lever Handles\", \"\")\r\n .replace(\" With Lever Handle\", \"\");\r\n break;\r\n case \"vanity_sink\":\r\n this._customFullDisplayName = this._customFullDisplayName\r\n .replace(\"4 Inch Centerset \", \"\")\r\n .replace(\"8 Inch Widespread \", \"\")\r\n .replace(\"Center Hole Only \", \"\");\r\n break;\r\n case \"shower_hose\":\r\n this._customFullDisplayName = this._customFullDisplayName.replace(\" Longlife\", \"\")\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n return this._customFullDisplayName\r\n };\r\n\r\n getModuleFeatureName = () => {\r\n // return this.partName.split(\" M_\")[0];\r\n return this.partName.split(\" M\")[0];\r\n };\r\n\r\n featureIsMatchingFilters(currentFeature, activeFilters, filters = []) {\r\n return filters.every(filter => {\r\n return activeFilters[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id].includes(activeFilters[filter.id][0])\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n let activeFeaturePart;\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n // if (this.partId === \"right_wall\") {\r\n // arrayOfConditions = arrayOfConditions.filter(condition => condition.propName !== \"MirrorSize\");\r\n // }\r\n if (this.getAdditionalPartsConditions) {\r\n arrayOfConditions = this.getAdditionalPartsConditions(arrayOfConditions); // modify or extend parts conditions\r\n }\r\n activeFeatureParts = this.featuresParts.filter((feature) => name1 === feature.getSplittedFeatureName());\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n if (activeFeatureParts.length) {\r\n activeFeaturePart = activeFeatureParts.find((feature) => {\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n if (!activeFeaturePart) {\r\n activeFeaturePart = activeFeatureParts[0];\r\n }\r\n }\r\n activeFeatureParts = activeFeaturePart ? [activeFeaturePart] : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n checkIfFeaturePartIsMatching() {\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n let activeFeatureConditions = this.getActiveFeatureConditions();\r\n if (this.getAdditionalPartsConditions) {\r\n activeFeatureConditions = this.getAdditionalPartsConditions(activeFeatureConditions); // modify or extend parts conditions\r\n }\r\n const name1 = this.activeFeature.getSplittedFeatureName();\r\n const activeFeaturePart = this.activeFeatureParts[0];\r\n if (!(activeFeaturePart.matchesMetaForArrayOfConditions(activeFeatureConditions)\r\n && name1 === activeFeaturePart.getSplittedFeatureName())) {\r\n this.activeFeatureParts = this.setActiveFeatureParts(this.activeFeature, activeFeatureConditions);\r\n }\r\n } else {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n if (!this.hasAdditionalParts) {\r\n return []\r\n }\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n }\r\n\r\n\r\n // OLD SHOWER LOGIC\r\n\r\n rememberPreviousSelection(shower, currentActiveFeature) {\r\n const layoutAbbr = shower.layout.getCurrentLayoutAbbreviation();\r\n const currentShowerBodyId = IntermediatePart.getCurrentShowerBodyId(shower);\r\n const wallConfiguration = shower.layout.parts[\"Shower Tub Combo\"] && shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration;\r\n if (this.currentShowerBodyId !== currentShowerBodyId && currentActiveFeature && !currentActiveFeature.partName.includes(\"laceholder\")) {\r\n if (!this.previouslySelectedFeatures[layoutAbbr]) {\r\n this.previouslySelectedFeatures[layoutAbbr] = {}\r\n }\r\n this.previouslySelectedFeatures[layoutAbbr][this.currentShowerBodyId] = currentActiveFeature; // remember previous active item\r\n if (wallConfiguration\r\n && wallConfiguration.features.some(feature => feature.showerBodyId === this.currentShowerBodyId)) {\r\n wallConfiguration.features.forEach((wallConfigurationFeature) => { // remember previous active item for all wall conf\r\n this.previouslySelectedFeatures[layoutAbbr][wallConfigurationFeature.showerBodyId] = currentActiveFeature;\r\n })\r\n }\r\n }\r\n this.currentShowerBodyId = currentShowerBodyId; // set new shower type\r\n }\r\n\r\n setDefaultAccordingToPreviousSelect(shower, filteredFeatures, hardCodedDefaultName, placeholderDefaultName = \"laceholder\") {\r\n const layoutAbbr = shower.layout.getCurrentLayoutAbbreviation();\r\n const currentShowerBodyId = IntermediatePart.getCurrentShowerBodyId(shower);\r\n // console.log('currentShowerBodyId', currentShowerBodyId);\r\n // console.log('this.previouslySelectedFeatures', this.previouslySelectedFeatures);\r\n\r\n if (this.currentShowerBodyId !== currentShowerBodyId\r\n && this.previouslySelectedFeatures[layoutAbbr]\r\n && this.previouslySelectedFeatures[layoutAbbr][currentShowerBodyId]\r\n && filteredFeatures.some(f => f.dbFeature.id === this.previouslySelectedFeatures[layoutAbbr][currentShowerBodyId].dbFeature.id)) {\r\n this.activeFeature = this.previouslySelectedFeatures[layoutAbbr][currentShowerBodyId]; // restore from previous chosen\r\n } else {\r\n const hardCodedDefault = hardCodedDefaultName && filteredFeatures.find((feature) => {\r\n return !feature.notAvailableInVisualizer && feature.dbFeature.displayName && feature.dbFeature.displayName.includes(hardCodedDefaultName);\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n }\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return !feature.notAvailableInVisualizer && feature.dbFeature.displayName\r\n && feature.dbFeature.displayName.includes(placeholderDefaultName);\r\n });\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n return true\r\n }\r\n\r\n /** shower door, fixture methods **/\r\n static getCurrentShowerBodyId(shower) {\r\n let currentShowerBodyId = \"\";\r\n const showerTubComboIsActive = shower.showerTubComboIsActive();\r\n if (!showerTubComboIsActive && shower.showerBody && shower.showerBody.activeFeature) {\r\n currentShowerBodyId = shower.showerBody.activeFeature.showerBodyId;\r\n } else if (showerTubComboIsActive && shower.layout.parts[\"Shower Tub Combo\"]\r\n && shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration\r\n && shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration.activeFeature) {\r\n currentShowerBodyId = shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration.activeFeature.showerBodyId;\r\n }\r\n return currentShowerBodyId\r\n }\r\n\r\n canBeEnabled() {\r\n const {wizardActiveItem, wizardSelectedValues, wizardActiveStep} = store.getState().wizardState;\r\n if (wizardActiveItem && wizardActiveItem.hideItems && wizardActiveItem.wizardGroups\r\n && wizardActiveItem.wizardGroups.length\r\n && wizardActiveItem.wizardGroups.some(wizardGroup => wizardGroup.groupName === (this.dbName || this.partName))\r\n && !Object.keys(wizardSelectedValues).some(key => key <= wizardActiveStep && wizardSelectedValues[key].partId === this.partId)) {\r\n return false // do not enable feature group if it uses hide items (shower wizard issue)\r\n }\r\n return true\r\n }\r\n\r\n /**\r\n * @param position {string}\r\n * @param clickedFeature {featureInterface}\r\n * @returns {[featureInterface]}\r\n */\r\n checkConflictingPosition(position, clickedFeature) {\r\n if (!position || !clickedFeature || !this.conflictingPositions\r\n || ((clickedFeature.partId === \"shower_seats\")\r\n && !clickedFeature.dbFeature.sharedFeatureName.includes(\"Comfort Plus\"))) { // hardcode - should be metadata here\r\n return []\r\n }\r\n const accParent = this.getParent();\r\n let conflictingPositions = [];\r\n this.conflictingPositions.forEach(partId => {\r\n const relItem = accParent.layout.getFeatureGroupByPartId(partId);\r\n if (relItem && !relItem.disabled && relItem.layerPositions && relItem.layerPositions[position]) {\r\n if ((clickedFeature.partId === \"valve_trim\")\r\n && !relItem.layerPositions[position].dbFeature.sharedFeatureName.includes(\"Comfort Plus\")) {\r\n // hardcode - should be metadata here. for now only Comfort Plus are conflicting\r\n return\r\n }\r\n conflictingPositions.push(relItem.layerPositions[position])\r\n }\r\n });\r\n return conflictingPositions\r\n }\r\n\r\n applyConflictingPosition(position, clickedFeature) {\r\n const conflictingPositions = this.checkConflictingPosition(position, clickedFeature);\r\n conflictingPositions.forEach(feature => {\r\n const parent = feature.getParent();\r\n parent.layerPositions[position] = null;\r\n })\r\n }\r\n\r\n}\r\n","import imagePolygon from \"./imagePolygon\";\r\nimport {UseFullSizeImages} from \"../config\";\r\n\r\nconst KIOSK_BVR_Root = document.kvConfig.imageServer + \"/brv/\";\r\nconst KIOSK_BV5_Root = document.kvConfig.imageServer + \"/bv5/\";\r\n\r\nconst KIOSK_KV_Root = document.kvConfig.imageServer + \"/kv4/\";\r\nconst KIOSK_KV5_Root = document.kvConfig.imageServer + \"/kv5/\";\r\n\r\nconst S3_BVR_Root = 'https://brv.s3-accelerate.amazonaws.com/';\r\nconst S3_BV5_Root = document.kvConfig.visualizerType === \"bvLook\"\r\n ? 'https://qc-bv5.s3-accelerate.amazonaws.com/'\r\n : 'https://qc-bv5.s3.amazonaws.com/';\r\nconst S3_BV6_Root = 'https://qc-fp5.s3.amazonaws.com/';\r\n\r\nconst S3_KV4_Root = 'https://kv4.s3-accelerate.amazonaws.com/';\r\nconst S3_KV5_Root = 'https://kv5.s3-accelerate.amazonaws.com/';\r\n//const S3_BVR_Root = 'http://s3.gfd.us/';\r\n\r\nconst KIOSK_FEATURES_Root = document.kvConfig.imageServer + \"/features-thumbnails/\";\r\nconst S3_FEATURES_Root = 'https://features-thumbnails.s3-accelerate.amazonaws.com/';\r\nconst S3_FILTERS_Root = 'https://s3.amazonaws.com/';\r\n\r\nexport const THUMBNAIL_SIZES = {\r\n small: `_100x100`,\r\n medium: `_175x175`,\r\n large: `_400x400`,\r\n}\r\nexport const LAYERS_SIZES = {\r\n normal: {\r\n width: 1620,\r\n height: 1080,\r\n },\r\n full_hd: {\r\n width: 1920,\r\n height: 1080,\r\n },\r\n full_hd_large: {\r\n width: 2880,\r\n height: 1620,\r\n },\r\n large: {\r\n width: 3000,\r\n height: 2000,\r\n },\r\n}\r\n\r\n/**\r\n * Case insensitive string inclusion\r\n * @param s3BindingName {string}\r\n * @param visualizer {string}\r\n * @param isCropped {boolean}\r\n * @param bucketName {string}\r\n * @returns {string}\r\n */\r\nexport function s3Path(s3BindingName, visualizer, isCropped = false, bucketName = \"\") {\r\n let bvr_root = document.kvConfig.kioskMode ? KIOSK_BVR_Root : S3_BVR_Root;\r\n let bv5_root = document.kvConfig.kioskMode ? KIOSK_BV5_Root : S3_BV5_Root;\r\n let kv4_root = document.kvConfig.kioskMode ? KIOSK_KV_Root : S3_KV4_Root;\r\n let kv5_root = document.kvConfig.kioskMode ? KIOSK_KV5_Root : S3_KV5_Root;\r\n let bv6_root = document.kvConfig.kioskMode ? KIOSK_KV5_Root : S3_BV6_Root;\r\n // https://brv.s3.amazonaws.com/features/All%20-%20Background%20-%20Default.png\r\n let s3Root = \"\";\r\n switch (visualizer) {\r\n case \"bv\":\r\n s3Root = document.kvConfig.toolVersion === 5 || document.kvConfig.toolVersion === 6 ? bv5_root : bvr_root;\r\n break;\r\n case \"kv\":\r\n s3Root = document.kvConfig.toolVersion === 5 || document.kvConfig.toolVersion === 6 ? kv5_root : kv4_root;\r\n break;\r\n case \"fireplace\":\r\n s3Root = bv6_root;\r\n break;\r\n default:\r\n s3Root = `https://${bucketName}.s3.amazonaws.com/`\r\n // console.error(\"undefined visualizer\", visualizer, s3BindingName);\r\n break;\r\n }\r\n let url = s3Root + s3BindingName;\r\n switch (document.kvConfig.layersSize) {\r\n case \"full_hd\":\r\n url += UseFullSizeImages || isCropped ? \".png\" : \"_1920x1080.png\"\r\n break;\r\n default:\r\n url+= UseFullSizeImages || isCropped ? \".png\" : \"_1620x1080.png\"\r\n }\r\n return encodeURI(url).replace(new RegExp('#', 'g'), '%23');\r\n}\r\n\r\nexport function s3FilterImagePath(imageThumbnail) {\r\n return imageThumbnail ? `${S3_FILTERS_Root}filter-images/${imageThumbnail.replace(\".png\", \"\")}.png` : \"\";\r\n}\r\n\r\n// export function s3FeatureImagePath(imageThumbnail, smallThumbnail = false, largeThumbnail = false) {\r\n// const features_root = document.kvConfig.kioskMode ? KIOSK_FEATURES_Root : S3_FEATURES_Root;\r\n// const mobileThumbnailPath = `_100x100`;\r\n// const desktopThumbnailPath = `_175x175`;\r\n// return smallThumbnail\r\n// ? `${features_root}feature-${imageThumbnail + mobileThumbnailPath}.png`\r\n// : `${features_root}feature-${largeThumbnail ? imageThumbnail : imageThumbnail + desktopThumbnailPath}.png`;\r\n// }\r\nexport function s3FeatureImagePath(imageThumbnail, size) {\r\n const features_root = document.kvConfig.kioskMode ? KIOSK_FEATURES_Root : S3_FEATURES_Root;\r\n return size\r\n ? `${features_root}feature-${imageThumbnail + size}.png`\r\n : `${features_root}feature-${imageThumbnail}.png` // full image path\r\n}\r\n\r\nexport function className(instance) {\r\n if(instance && instance.constructor)\r\n return instance.constructor.name;\r\n console.log(\"Instance constructor not found\", instance);\r\n return \"\";\r\n}\r\n\r\nexport function ignoreDefault(e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n}\r\n\r\n/**\r\n *\r\n * @param hayStack {string}\r\n * @param needle {string}\r\n * @return {boolean}\r\n */\r\nexport function iStartWith(hayStack, needle) {\r\n return hayStack ? hayStack.toLowerCase().startsWith(needle.toLowerCase()) : false\r\n}\r\n\r\n/**\r\n * Case insensitive string inclusion\r\n * @param hayStack {string}\r\n * @param needle {string}\r\n * @returns {boolean}\r\n */\r\nexport function iIncludes(hayStack, needle) {\r\n return hayStack ? hayStack.toLowerCase().includes(needle.toLowerCase()) : false\r\n}\r\n\r\nexport function getNonce(length = 6) {\r\n let text = \"\";\r\n const possible = \"abcdefghijklmnopqrstuvwxyz0123456789\";\r\n for (let i = 0; i < length; i++) {\r\n text += possible.charAt(Math.floor(Math.random() * possible.length));\r\n }\r\n return text;\r\n}\r\n\r\n/**\r\n * Makes a case-insensitive string compare\r\n * @param s1 {string}\r\n * @param s2 {string}\r\n * @param needToUppercase {boolean}\r\n * @returns {boolean}\r\n */\r\nexport function iCmp(s1, s2, needToUppercase = false) {\r\n if (!s1 && !s2) {\r\n return true;\r\n }\r\n if (!s1 || !s2) {\r\n return false;\r\n }\r\n if (needToUppercase) {\r\n return s1.toUpperCase() === s2.toUpperCase()\r\n }\r\n return s1 === s2;\r\n}\r\n\r\nconst RgFeatureName = /^([\\w\\s\\d]+)\\s*-\\s*([\\w\\d\\s]+)\\s*([\\[\\(][(\\d\\w=;\\s_\\(\\):,]+[\\)\\]]\\s*)*$/i;\r\n\r\n/**\r\n * Split a full feature name into: GroupName, FeatureName\r\n * @param name {string} Full Feature Name GroupName - Name\r\n * @param groupName {string}\r\n * @returns {*}\r\n */\r\nexport function splitFeatureName(name, groupName) {\r\n if (groupName && (groupName !== \"Backsplash\")) {\r\n return {featureName: name, groupName}\r\n }\r\n name = name.replace(/\\\"-/g, \"in \"); // for example Backsplash - 4\"-6\" Backsplash -> Backsplash - 4in 6in Backsplash\r\n name = name.replace(/\\\"/g, \"in\"); // for example Radius - 1\" Radius -> Radius - 1in Radius\r\n const matches = RgFeatureName.exec(name);\r\n if (!matches) {\r\n return {}\r\n }\r\n return {\r\n groupName: matches[1].trim(),\r\n featureName: matches[2].trim(),\r\n }\r\n}\r\n\r\n\r\nexport function styleBkgImage(image) {\r\n return {backgroundImage: `url('${image}')`};\r\n}\r\n\r\nexport function getMetadataByDimensions(dimensions) {\r\n switch (dimensions) {\r\n case \"30X8\":\r\n case \"Full\":\r\n return \"Full\";\r\n case \"15X4\":\r\n case \"Half\":\r\n return \"Half\";\r\n case \"Pony\":\r\n return \"Pony\";\r\n default:\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Checked wheather an object is NULL, if not, calls the callback method with the object itself\r\n */\r\nexport function NN(obj, cb) {\r\n if (obj)\r\n cb(obj);\r\n}\r\n\r\n/**\r\n * returns clicked canvas coordinates as {x:value, y:value}\r\n */\r\nexport function getMousePos(evt, canvas) {\r\n const rect = canvas.getBoundingClientRect();\r\n return {\r\n x: evt.clientX - rect.left,\r\n y: evt.clientY - rect.top\r\n };\r\n}\r\n\r\nexport function getFilterGroupValues(feature, filterGroup) {\r\n return feature.dbFeature.fabFilterValueIDs[filterGroup.id] || feature.dbFeature.filterValueIDs[filterGroup.id]\r\n}\r\nexport const isFeatureHasFilterValue = (feature, filterValue) => {\r\n let testFabFilter = feature.dbFeature.fabFilterValueIDs[filterValue.filterGroup_id] &&\r\n feature.dbFeature.fabFilterValueIDs[filterValue.filterGroup_id].some(filterValueId => filterValueId === filterValue.id)\r\n let testFilter = feature.dbFeature.filterValueIDs[filterValue.filterGroup_id] &&\r\n feature.dbFeature.filterValueIDs[filterValue.filterGroup_id].some(filterValueId => filterValueId === filterValue.id)\r\n\r\n return testFabFilter || testFilter;\r\n}\r\nexport function getFilterGroupValue(featureFilterValueId, filterGroup) {\r\n return filterGroup.values.find(val => val.id === featureFilterValueId);\r\n}\r\nexport function getFilterGroupValueByName(name, filterGroup) {\r\n return filterGroup.values.find(val => val.value === name);\r\n}\r\n\r\nexport const mergeFilterObjects = (filterValueIDs, fabFilterValueIDs) => {\r\n let unitedFilterValueIds = Object.assign({}, filterValueIDs || {}); // 1st create duplicate object\r\n Object.keys(fabFilterValueIDs || {}).forEach((filterKey) => {\r\n if (unitedFilterValueIds[filterKey]) { // group exist\r\n unitedFilterValueIds[filterKey] = [\r\n ...unitedFilterValueIds[filterKey],\r\n ...fabFilterValueIDs[filterKey]\r\n ];\r\n } else {\r\n unitedFilterValueIds[filterKey] = fabFilterValueIDs[filterKey] // set new key\r\n }\r\n });\r\n return unitedFilterValueIds\r\n}\r\n\r\nexport function getAllFeatureFilters(feature) {\r\n return mergeFilterObjects(feature.dbFeature.filterValueIDs, feature.dbFeature.fabFilterValueIDs)\r\n}\r\n\r\n/**\r\n * Filters features according to received filters\r\n * @param feature {featureInterface}\r\n * @param filters {Object} array of objects with filters: [{ 18: 111 }, {5: 12}] etc.\r\n * @returns {Array}\r\n */\r\nexport function featureHasSelectedFilters(feature, filters) {\r\n const featureFilterValueIds = getAllFeatureFilters(feature);\r\n return filters.every(filterObject => {\r\n return featureFilterValueIds[filterObject.filterGroupId]\r\n && featureFilterValueIds[filterObject.filterGroupId].some(filterId => filterObject.filterId === filterId)\r\n })\r\n}\r\n\r\n/**\r\n * Filters features according to received filters\r\n * @param features {Array} Array of features\r\n * @param filters {[navigationFilterValueInterface]} array with filters: {filterId: 9, filterGroupId: 5} // old logic object -> { 18: 111, 5: 12 } etc.\r\n * @returns {Array}\r\n */\r\nexport function filterFeaturesByValues(features, filters) {\r\n return features.filter(feature => {\r\n let unitedFilterValueIds = getAllFeatureFilters(feature);\r\n const newFiltersArray = [];\r\n filters.forEach((filterObject) => {\r\n const existingFilterGroup = newFiltersArray.find(filterGroupObject => {\r\n return filterGroupObject.filterGroupId === filterObject.filterGroupId\r\n });\r\n if (filterObject.filterId) {\r\n if (existingFilterGroup) {\r\n existingFilterGroup.filterValues.push(filterObject.filterId)\r\n } else {\r\n newFiltersArray.push({\r\n filterGroupId: filterObject.filterGroupId,\r\n filterValues: [filterObject.filterId]\r\n })\r\n }\r\n }\r\n });\r\n return newFiltersArray.every(filterObject => {\r\n const existingFeatureFilter = unitedFilterValueIds[filterObject.filterGroupId];\r\n return existingFeatureFilter && existingFeatureFilter.some(filterValue => {\r\n return filterObject.filterValues.some(filVal => filVal === filterValue)\r\n })\r\n })\r\n });\r\n}\r\n\r\nexport function scrollToDivInArea(div, area) {\r\n const divOffset = div.offset();\r\n if (divOffset) {\r\n area.animate({\r\n scrollLeft: divOffset.left - area.offset().left + area.scrollLeft() - area.width()/2 + div.width()/2\r\n }, 600);\r\n }\r\n}\r\n\r\nexport function getTranslateX(myElement) {\r\n const style = window.getComputedStyle(myElement);\r\n const matrix = new window.WebKitCSSMatrix(style.webkitTransform);\r\n return matrix.m41;\r\n}\r\n\r\nexport function reorder(array, indexA, indexB) {\r\n const tmp = array[indexA];\r\n array[indexA] = array[indexB];\r\n array[indexB] = tmp;\r\n return array\r\n}\r\n\r\n/**\r\n * requestAnim shim layer by Paul Irish\r\n */\r\nconst updateRate = 1000 / 60; //ticks per second in miliseconds\r\nexport function requestAnimFrame() {\r\n return window.requestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.oRequestAnimationFrame ||\r\n window.msRequestAnimationFrame ||\r\n function(callback){\r\n window.setTimeout(callback, updateRate);\r\n };\r\n}\r\n\r\n/**\r\n * checks for mobile state\r\n */\r\nexport function isTouchDevice() { // https://stackoverflow.com/questions/4817029/whats-the-best-way-to-detect-a-touch-screen-device-using-javascript\r\n const prefixes = ' -webkit- -moz- -o- -ms- '.split(' ');\r\n const mq = function(query) {\r\n return window.matchMedia(query).matches;\r\n };\r\n\r\n if (('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch) {\r\n return true;\r\n }\r\n\r\n // include the 'heartz' as a way to have a non matching MQ to help terminate the join\r\n // https://git.io/vznFH\r\n const query = ['(', prefixes.join('touch-enabled),('), 'heartz', ')'].join('');\r\n return mq(query);\r\n}\r\n\r\n/**\r\n * creates a layer polygon https://stackoverflow.com/questions/23983461/creating-a-path-from-the-edge-of-an-image\r\n */\r\n\r\nexport function makeLayerPolygon(layer, image, width, height) {\r\n const fakeCanvas = document.createElement('canvas');\r\n fakeCanvas.setAttribute('height', `${height}px`);\r\n fakeCanvas.setAttribute('width', `${width}px`);\r\n const context2D = fakeCanvas.getContext(\"2d\");\r\n\r\n // step 3 - make canvas layer 0.5 transparent\r\n context2D.globalAlpha = 0.5;\r\n\r\n // step 4 - put layer image on fake canvas\r\n context2D.clearRect(0, 0, fakeCanvas.width, fakeCanvas.height);\r\n context2D.drawImage(image, 0, 0);\r\n\r\n const imgData = context2D.getImageData(0,0, width, height);\r\n const layerPolygon = {\r\n layer,\r\n img: image,\r\n polygon: imagePolygon(imgData.data, width, height, layer.image)\r\n };\r\n // console.log('layerPolygon created!', layerPolygon);\r\n return layerPolygon\r\n}\r\n/**\r\n * checks if point is inside the polygon\r\n */\r\nexport function pnpoly(points, test) {\r\n let i, j, c = false;\r\n for (i = 0, j = points.length - 1; i < points.length; j = i++) {\r\n if (((points[i][1] > test.y) !== (points[j][1] > test.y)) &&\r\n (test.x < (points[j][0] - points[i][0]) * (test.y - points[i][1])\r\n / (points[j][1] - points[i][1]) + points[i][0])) {\r\n c = !c;\r\n }\r\n }\r\n return c;\r\n}\r\n\r\nexport function base64ToBlob(base64, mime) {\r\n mime = mime || '';\r\n var sliceSize = 1024;\r\n var byteChars = window.atob(base64);\r\n var byteArrays = [];\r\n for (var offset = 0, len = byteChars.length; offset < len; offset += sliceSize) {\r\n var slice = byteChars.slice(offset, offset + sliceSize);\r\n var byteNumbers = new Array(slice.length);\r\n for (var i = 0; i < slice.length; i++) {\r\n byteNumbers[i] = slice.charCodeAt(i);\r\n }\r\n var byteArray = new window.Uint8Array(byteNumbers);\r\n byteArrays.push(byteArray);\r\n }\r\n return new Blob(byteArrays, {type: mime});\r\n}\r\nexport function downloadCanvasImageById(canvasId) {\r\n const canvas = document.getElementById(canvasId);\r\n // console.log('canvasId', canvasId);\r\n // console.log('canvas', canvas);\r\n const imageUrl = canvas.toDataURL();\r\n var base64ImageContent = imageUrl.replace(/^data:image\\/(png|jpg);base64,/, \"\");\r\n var blob = base64ToBlob(base64ImageContent, 'image/png');\r\n var a = document.createElement(\"a\");\r\n document.body.appendChild(a);\r\n a.style = \"display: none\";\r\n var url = window.URL.createObjectURL(blob);\r\n a.href = url;\r\n a.download = \"bathroom-visualizer.png\";\r\n a.click();\r\n window.URL.revokeObjectURL(url);\r\n}\r\n\r\nexport const toBoolean = (value) => {\r\n if (typeof (value) === 'string') {\r\n value = value.toLowerCase();\r\n }\r\n switch (value) {\r\n case true:\r\n case \"true\":\r\n case 1:\r\n case \"1\":\r\n case \"on\":\r\n case \"yes\":\r\n return true;\r\n default:\r\n return false;\r\n }\r\n};\r\n\r\nexport const capitalizeFirstLetters = (string) => {\r\n return string.replace(/(^\\w|\\s\\w)/g, m => m.toUpperCase()) // ^\\w - first character of the string, | - or, \\s\\w - first character after whitespace, (^\\w|\\s\\w) - Capture the pattern, g - Flag: Match all occurrences\r\n}\r\n\r\nexport const isVisualizerRoute = () => {\r\n return window.location.hash.includes(\"visualizer\") || (document.kvConfig.visualizerOnly && window.location.hash === \"#/\")\r\n}\r\n\r\nexport const convertImgToBase64URL = (url, outputFormat = \"image/jpeg\") => {\r\n return new Promise((resolve) => {\r\n const img = new Image();\r\n img.crossOrigin = 'Anonymous';\r\n img.onerror = (e) => {\r\n console.log(\"couldn't load receipt logo image :(\", e)\r\n resolve(\"\");\r\n };\r\n img.onload = function () {\r\n let canvas = document.createElement('CANVAS');\r\n const ctx = canvas.getContext('2d');\r\n let dataURL = \"\";\r\n canvas.height = img.height;\r\n canvas.width = img.width;\r\n ctx.drawImage(img, 0, 0, img.width, img.height);\r\n if (url && url.includes(\".png\")) {\r\n outputFormat = \"image/png\";\r\n }\r\n dataURL = canvas.toDataURL(outputFormat);\r\n canvas = null;\r\n resolve(dataURL);\r\n };\r\n img.src = url;\r\n });\r\n}\r\n","import takeRight from \"lodash/takeRight\";\r\nimport isEqual from \"lodash/isEqual\";\r\n\r\nimport {getCurrentLayout, getCurrentRoomType} from \"../../appLayout\";\r\nimport {\r\n browserIsSafari,\r\n getCartItemObject,\r\n getFeatureIsLocked,\r\n getRelatedFeaturesFromLayout,\r\n getShareUrl\r\n} from \"../../../misc/helpers\";\r\nimport {checkIfFeatureCanBeAddedToTheCart, getLookList} from \"./lookFunctions\";\r\nimport {shareImage} from \"../../bvComponent/core/assets\";\r\nimport {loaderDisable, loaderEnable} from \"../../ui/loaderView\";\r\nimport {saveQuote} from \"../../../api/server-api\";\r\nimport {setAmazonImageUrl} from \"../../../actions/serverFunctions\";\r\nimport {getShareConfig, SHARE_BUTTONS} from \"./lookSideBar/lookSidebarModals/lookSideBarShareButtons\";\r\nimport store from \"../../../store\";\r\nimport {LOOK_ROOM_TYPES, LOOK_WALLS} from \"../core/constants\";\r\nimport {IS_LOOK_JOURNEY, IS_PRODUCT_JOURNEY} from \"../../../config\";\r\nimport {allowCheckForCollection} from \"../grohe/groheNavigation/groheFunctions\";\r\nimport {CART_ITEM_ADDED_BY} from \"../../shoppingCart/cartItemInterface\";\r\nimport {isFeatureEnabled} from \"../../../misc/displayLogic\";\r\nimport Cabinet from \"../../kvSceneComponent/core/parts/cabinet\";\r\nimport {checkIfLookFeaturesReceived, getAdditionalFeaturesOnScroll} from \"../../../api/look-api\";\r\nimport {getCurrentGroups, getFeatureGroupFromWizardGroup} from \"./lookMain/lookWizard/lookWizardFunctions\";\r\n\r\n/**\r\n * disable Feature common function\r\n * @param feature {featureInterface}\r\n * @param updateLookCartItem {function}\r\n */\r\nexport const disableFeature = async (feature, updateLookCartItem = null) => {\r\n if (!feature) {\r\n return\r\n }\r\n switch (feature.partId) {\r\n case \"hood\": {\r\n const cabinetParent = feature.getParent().getParent().layout.parts[Cabinet.id];\r\n if (cabinetParent && cabinetParent.topCabinet && !cabinetParent.topCabinet.allFeaturesReceived) {\r\n loaderEnable();\r\n await getAdditionalFeaturesOnScroll(cabinetParent.topCabinet)\r\n loaderDisable();\r\n }\r\n break;\r\n }\r\n case \"sink\": {\r\n const cabinetParent = feature.getParent().getParent().layout.parts[Cabinet.id];\r\n if (cabinetParent\r\n && ((cabinetParent.bottomCabinet && !cabinetParent.bottomCabinet.allFeaturesReceived)\r\n || (cabinetParent.bottomHandle && !cabinetParent.bottomHandle.allFeaturesReceived))) {\r\n loaderEnable();\r\n if (cabinetParent.bottomCabinet && !cabinetParent.bottomCabinet.allFeaturesReceived) {\r\n await getAdditionalFeaturesOnScroll(cabinetParent.bottomCabinet)\r\n }\r\n if (cabinetParent.bottomHandle && !cabinetParent.bottomHandle.allFeaturesReceived) {\r\n await getAdditionalFeaturesOnScroll(cabinetParent.bottomHandle)\r\n }\r\n loaderDisable();\r\n }\r\n break;\r\n }\r\n case \"center_island_cabinet\": {\r\n const floorParent = feature.getParent().getParent().layout.parts[\"Floor\"];\r\n if (floorParent && floorParent.floorBody && !floorParent.floorBody.allFeaturesReceived) {\r\n loaderEnable();\r\n await getAdditionalFeaturesOnScroll(floorParent.floorBody)\r\n loaderDisable();\r\n }\r\n break;\r\n }\r\n case \"fridge\": {\r\n const cabinetParent = feature.getParent().getParent().layout.parts[\"Cabinet\"];\r\n if (cabinetParent && cabinetParent.topCabinet && !cabinetParent.topCabinet.allFeaturesReceived) {\r\n loaderEnable();\r\n await checkIfLookFeaturesReceived(cabinetParent.topCabinet)\r\n loaderDisable();\r\n }\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n // console.log(\"removeFromCartArray\", removeFromCartArray);\r\n const featureGroup = feature.getParent();\r\n if (!featureGroup || !featureGroup.canBeDisabled) {\r\n return;\r\n }\r\n if (featureGroup.layerPositions) {\r\n Object.keys(featureGroup.layerPositions).forEach(position => {\r\n featureGroup.layerPositions[position] = null;\r\n })\r\n }\r\n featureGroup.disabled = true;\r\n featureGroup.disabledClick();\r\n if (updateLookCartItem && IS_LOOK_JOURNEY) {\r\n updateLookCartItem();\r\n }\r\n const layout = getCurrentLayout();\r\n layout.updateLocalStorage();\r\n}\r\n\r\n/**\r\n * enable Feature common function\r\n * @param feature {object}\r\n * @param addToCart {function}\r\n * @param qtActiveCategory {string}\r\n */\r\nexport const enableRelatedFeature = (feature, addToCart, qtActiveCategory) => {\r\n const featureIsLocked = getFeatureIsLocked(feature);\r\n if (featureIsLocked || feature.notAvailableInVisualizer) {\r\n return false\r\n }\r\n let relatedFeaturesToEnable = [];\r\n const layout = getCurrentLayout();\r\n switch (feature.partId) {\r\n case \"vanity_sink\":\r\n case \"vanity_faucet\": {\r\n const relatedPartId = feature.partId === \"vanity_sink\" ? \"vanity_faucet\" : \"vanity_sink\";\r\n const relatedFeatureGroup = layout.getFeatureGroupByPartId(relatedPartId);\r\n if (relatedFeatureGroup) {\r\n relatedFeatureGroup.disabled = false;\r\n Object.keys(relatedFeatureGroup.layerPositions).forEach(position => {\r\n if ((position !== \"C\" && feature.metaData.layerPosition === \"C\") || (feature.metaData.layerPosition !== \"C\" && position === \"C\")) {\r\n relatedFeatureGroup.layerPositions[position] = null; // erase sibling positions\r\n return\r\n }\r\n const someFeature = relatedFeatureGroup.getMatchingPositionFeature(position);\r\n if (someFeature) {\r\n relatedFeatureGroup.layerPositions[position] = someFeature;\r\n }\r\n })\r\n // } else if (relatedFeatureGroup && !relatedFeatureGroup.layerPositions[feature.metaData.layerPosition]) {\r\n // const someFeature = relatedFeatureGroup.getMatchingPositionFeature(feature.metaData.layerPosition);\r\n // if (someFeature) {\r\n // relatedFeaturesToEnable.push(someFeature);\r\n // relatedFeatureGroup.disabled = false;\r\n // relatedFeatureGroup.layerPositions[feature.metaData.layerPosition] = someFeature;\r\n // }\r\n }\r\n break;\r\n }\r\n case \"toilet\": {\r\n [\"toilet_brush\", \"paper_holder\"].forEach(partId => {\r\n const relatedFeatureGroup = layout.getFeatureGroupByPartId(partId);\r\n if (relatedFeatureGroup && relatedFeatureGroup.disabled && relatedFeatureGroup.activeFeature) {\r\n relatedFeatureGroup.disabled = false;\r\n relatedFeaturesToEnable.push(relatedFeatureGroup.activeFeature);\r\n }\r\n })\r\n break;\r\n }\r\n case \"bathtub_body\":\r\n case \"bathtub_fixture\": {\r\n const relatedPartId = feature.partId === \"bathtub_body\" ? \"bathtub_fixture\" : \"bathtub_body\";\r\n const relatedFeatureGroup = layout.getFeatureGroupByPartId(relatedPartId);\r\n if (relatedFeatureGroup && relatedFeatureGroup.disabled && relatedFeatureGroup.activeFeature) {\r\n relatedFeatureGroup.disabled = false;\r\n relatedFeaturesToEnable.push(relatedFeatureGroup.activeFeature);\r\n }\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n if (relatedFeaturesToEnable.length && addToCart) {\r\n relatedFeaturesToEnable.forEach(relatedFeature => {\r\n if (checkIfFeatureCanBeAddedToTheCart(relatedFeature)) {\r\n addToCart([getCartItemObject(relatedFeature, 1, qtActiveCategory)]);\r\n }\r\n })\r\n }\r\n}\r\n\r\n/**\r\n * returns use or not lixil stock available quantity\r\n * @param fabricatorSettings {object}\r\n * @param feature {featureInterface}\r\n * @returns {boolean}\r\n */\r\nexport const shouldUseLixilAvailableQty = (fabricatorSettings, feature) => {\r\n if (!fabricatorSettings || !feature) {\r\n return false;\r\n }\r\n return (fabricatorSettings.enableASInventorySync && feature.dbFeature.isFromAsRoom)\r\n || (fabricatorSettings.enableGInventorySync && !feature.dbFeature.isFromAsRoom)\r\n}\r\n\r\n/**\r\n * returns lixil stock available quantity\r\n * @param feature {featureInterface}\r\n * @returns {boolean}\r\n */\r\nexport const isInStock = (feature) => {\r\n if (document.kvConfig.visualizerType !== \"bvLook\") {\r\n return true\r\n }\r\n const {settings} = store.getState().fabricatorState;\r\n if (shouldUseLixilAvailableQty(settings, feature)) {\r\n const bundledFeatures = getBundledFeatures(feature);\r\n if (bundledFeatures.length > 1) { // fix for ROUGH VALVE BODIES assigned on Shower Fixtures\r\n return bundledFeatures.some(relFeature => relFeature.dbFeature.lixilAvailableQty > 0)\r\n }\r\n return feature.dbFeature.lixilAvailableQty > 0\r\n }\r\n if (settings.useTrumbleApi && feature.quantityOptions && feature.quantityOptions.trumbleQty === \"0\") {\r\n return false\r\n }\r\n return true\r\n}\r\n/**\r\n * returns lixil stock available quantity for cart item\r\n * @param cartItem {cartItemInterface}\r\n * @returns {boolean}\r\n */\r\nexport const cartItemInStock = (cartItem) => {\r\n // return cartItem.relatedProductParent ? isInStock(cartItem.relatedProductParent) : isInStock(cartItem.cartFeature)\r\n return isInStock(cartItem.cartFeature)\r\n}\r\n\r\n/**\r\n * returns lixil sku first part 0328400.222 -> 0328400\r\n * @param sku {string}\r\n * @returns {string}\r\n */\r\nexport const getSkuWithoutDot = (sku) => {\r\n if (!sku) {\r\n return \"\"\r\n }\r\n return sku.split(\".\")[0]\r\n}\r\n\r\n/**\r\n * returns lixil stock available quantity for cart item\r\n * @param sku {string}\r\n * @returns {string}\r\n */\r\nexport const getProductIdFromSku = (sku) => {\r\n if (sku.includes(\".\")) {\r\n return getSkuWithoutDot(sku) // \"7075100.002\" => \"7075100\"\r\n }\r\n if (sku.includes(\"-\")) {\r\n return sku.split(\"-\")[0] // \"A8001L-RHO.020\" => \"A8001L-RHO\"\r\n }\r\n return sku.substr(0, 5) + \"_\" + sku.substr(sku.length - 1); // \"26635GN0\" => \"26635_0\"\r\n}\r\n\r\n/**\r\n * returns a list needed for integration\r\n * @param cartItems {array}\r\n * @param forCart {boolean}\r\n * @returns {array}\r\n */\r\nexport const getPostCartItemsList = (cartItems, forCart = false) => {\r\n return cartItems\r\n .filter(cartItem => {\r\n let match = !(cartItem.cartFeature.dbFeature.sharedFeatureName || \"\").includes(\"undle sku\")\r\n && (!featureIsBundle(cartItem.cartFeature, cartItems) || (forCart && cartItemInStock(cartItem)));\r\n if (match && forCart) {\r\n match = cartItem.quantity > 0 && cartItemInStock(cartItem) && !cartItem.isRemoved;\r\n }\r\n return match\r\n })\r\n .map(cartItem => {\r\n const sku = cartItem.cartFeature.dbFeature.sku || \"\";\r\n const lixilProductId = cartItem.cartFeature.dbFeature.lixilProductId || getProductIdFromSku(sku);\r\n return {\r\n \"VariantId\": sku, // \"26635GN0\"\r\n \"ProductId\": lixilProductId, // \"26635_0\"\r\n \"Quantity\": \"\" + cartItem.quantity // \"1\"\r\n }\r\n })\r\n}\r\n\r\n/**\r\n * @param feature {featureInterface}\r\n * @param cartItems {array}\r\n * @returns {boolean}\r\n */\r\nexport const featureIsBundle = (feature, cartItems) => {\r\n if (!feature) {\r\n return false\r\n }\r\n const relatedFeatures = getBundledFeatures(feature);\r\n return Array.isArray(relatedFeatures) && !!relatedFeatures.length && cartItems.some(cItem => {\r\n return cItem.relatedProductParent && cItem.relatedProductParent.dbFeature.id === feature.dbFeature.id;\r\n })\r\n}\r\n\r\n/**\r\n * returns bundled features\r\n * @param feature {featureInterface}\r\n * @returns {array}\r\n */\r\nexport const getBundledFeatures = (feature) => {\r\n if (Array.isArray(feature.dbFeature.bundledFeatures) && feature.dbFeature.bundledFeatures.length) {\r\n // console.log(\"relatedFeatures\", relatedFeatures);\r\n let {relatedFeaturesFound} = getRelatedFeaturesFromLayout(feature.dbFeature.bundledFeatures, feature);\r\n // console.log(\"relatedFeaturesFound\", relatedFeaturesFound);\r\n return relatedFeaturesFound\r\n }\r\n return []\r\n}\r\n\r\n/**\r\n * returns bundled features\r\n * @param feature {featureInterface}\r\n * @returns {array}\r\n */\r\nexport const getAvailableFeatureContent = (feature) => {\r\n if (!feature) {\r\n return []\r\n }\r\n const availableFeatureContent = []; // [\"description\", \"features\", \"reviews\", \"faq\"]\r\n if (feature.dbFeature.description) {\r\n availableFeatureContent.push(\"description\");\r\n }\r\n if (feature.dbFeature.subDescription) {\r\n availableFeatureContent.push(\"features\");\r\n }\r\n return availableFeatureContent\r\n}\r\n\r\n/**\r\n * returns bundled features\r\n * @param activePreset {number}\r\n * @param bvPresets {array}\r\n * @returns lookId {number}\r\n */\r\nexport const getLookId = (activePreset, bvPresets) => {\r\n const room = bvPresets.find(preset => preset.id === activePreset);\r\n return room ? room.lookId : 0\r\n}\r\n\r\n/**\r\n * returns URL start for look and product journeys\r\n * @param withSlash {boolean}\r\n * @returns string {string}\r\n */\r\nexport const getLookIdUrl = (withSlash = true) => {\r\n const {activePreset, bvPresets} = store.getState().bathroomVisualizerState;\r\n const lookId = getLookId(activePreset, bvPresets);\r\n return withSlash ? `/look-${lookId}/` : `/look-${lookId}`\r\n}\r\n\r\n/**\r\n * returns feature url name\r\n * @param feature {featureInterface}\r\n * @param withCategory {boolean}\r\n * @returns string {string}\r\n */\r\nexport const getFeatureUrl = (feature, withCategory = false) => {\r\n if (!feature || !feature.dbFeature) {\r\n return \"\"\r\n }\r\n\r\n let finalUrl = getLookIdUrl();\r\n const urlName = feature.dbFeature.sku || feature.dbFeature.sharedFeatureName; // check sku first! old support\r\n\r\n if (withCategory) {\r\n const urlPartId = feature.partId.replace(/_/gi, \"-\");\r\n return finalUrl + `${urlPartId}/${urlName}`\r\n } else {\r\n return finalUrl + urlName\r\n }\r\n}\r\n\r\n/**\r\n * returns category url\r\n * @param partId {string}\r\n * @returns string {string}\r\n */\r\nexport const getCategoryOnlyUrl = (partId = \"\") => {\r\n let finalUrl = getLookIdUrl();\r\n return finalUrl + partId.replace(/_/gi, \"-\")\r\n}\r\n\r\n/**\r\n * returns bundled features\r\n * @param updateCanvasCount {function}\r\n */\r\nexport const revertFeatureBeforeChange = (updateCanvasCount) => {\r\n if (IS_PRODUCT_JOURNEY) {\r\n return\r\n }\r\n const featureGroups = getLookList();\r\n if (featureGroups) {\r\n featureGroups.forEach(parentObject => {\r\n if (parentObject.featureGroup && parentObject.featureGroup.featureBeforeChange\r\n && checkIfFeatureCanBeAddedToTheCart(parentObject.featureGroup.featureBeforeChange)) {\r\n if (parentObject.featureGroup.layerPositions) {\r\n Object.keys(parentObject.featureGroup.layerPositions).forEach(position => {\r\n if (parentObject.featureGroup.layerPositions[position]) {\r\n const sameFeature = parentObject.featureGroup.getMatchingPositionFeature(position, parentObject.featureGroup.featureBeforeChange);\r\n if (sameFeature) {\r\n parentObject.featureGroup.layerPositions[position] = sameFeature;\r\n }\r\n }\r\n })\r\n }\r\n if (!parentObject.featureGroup.disabled) {\r\n parentObject.featureGroup.activeFeature = parentObject.featureGroup.featureBeforeChange;\r\n }\r\n parentObject.featureGroup.featureBeforeChange = null;\r\n updateCanvasCount();\r\n }\r\n })\r\n }\r\n}\r\n\r\n/**\r\n * returns filtered features by metadata field\r\n * @param navFeatures {object}\r\n * @param matchFeature {object}\r\n * @param metadataField {string}\r\n */\r\nexport const filterFeaturesByMetadata = (navFeatures, matchFeature, metadataField) => {\r\n return navFeatures.filter((navFeature) => {\r\n return navFeature.part.metaData[metadataField] && navFeature.part.metaData[metadataField].some((mType) => {\r\n return matchFeature.metaData[metadataField] &&\r\n matchFeature.metaData[metadataField].includes(mType)\r\n })\r\n })\r\n}\r\n\r\n/**\r\n * returns default camera preset\r\n * @param bvPresets {array}\r\n * @param lookId {string|number}\r\n * @returns lookId {number}\r\n */\r\nexport const getDefaultPresetByLook = (bvPresets, lookId) => {\r\n const numLookId = +lookId;\r\n const allMatchedPresets = bvPresets.filter((preset) => preset.lookId === numLookId);\r\n if (!allMatchedPresets.length) {\r\n return null\r\n }\r\n switch (numLookId) {\r\n case 5:\r\n return allMatchedPresets.find(preset => preset.scene === \"1\" && (preset.id === 22)) || allMatchedPresets[0];\r\n default:\r\n return allMatchedPresets.find(preset => preset.scene === \"1\")\r\n }\r\n}\r\n\r\n/**\r\n * open share link\r\n * @param buttonKey {string}\r\n * @param afterSaveUrl {string}\r\n * @param amazonImageUrl {string}\r\n */\r\nconst createShareUrl = (buttonKey, afterSaveUrl, amazonImageUrl) => {\r\n const shareUrl = afterSaveUrl; // || propsShareUrl;\r\n const shareImageUrl = amazonImageUrl || shareImage[document.kvConfig.visualizerType];\r\n switch (buttonKey) {\r\n case SHARE_BUTTONS.facebook: {\r\n const metaTag = document.querySelector('meta[property=\"og:image\"]');\r\n if (metaTag) {\r\n metaTag.setAttribute(\"content\", shareImageUrl);\r\n }\r\n var domain = takeRight(window.location.hostname.split('.'), 2);\r\n if(domain[0] == \"americanstandard-us\") {\r\n domain[0] = \"americanstandard.\" + domain[0];\r\n } else if(domain[0] == \"grohe\") {\r\n domain[0] = \"grohe.\" + domain[0];\r\n }\r\n const fbUrl = \"https://facebook.com/sharer/sharer.php?u=\";\r\n const qfUrl = window.location.protocol + \"//\" + domain.join('.') + \"/url?u=\";\r\n const splittedHost = window.location.host.split(\".\") // ['grohe', 'qkandb', 'net']\r\n const topLevelDomain = \".\" + splittedHost[splittedHost.length - 1]; // \".com\" or \".net\"\r\n\r\n const shareUrlSplitted = shareUrl.split(topLevelDomain)\r\n return fbUrl + qfUrl + shareUrlSplitted[0] + topLevelDomain + encodeURIComponent(shareUrlSplitted[1])\r\n }\r\n case SHARE_BUTTONS.pinterest: {\r\n const imageUrl = encodeURIComponent(shareImageUrl);\r\n return `//pinterest.com/pin/create/button/?url=${encodeURIComponent(shareUrl)}&media=${imageUrl}`\r\n }\r\n case SHARE_BUTTONS.twitter: {\r\n return `//twitter.com/share?url=${encodeURIComponent(shareUrl)}&text=Click Here to Design your Dream Bathroom!`\r\n }\r\n default:\r\n return \"\"\r\n }\r\n}\r\n\r\n/**\r\n * open share link\r\n * @param buttonKey {string}\r\n */\r\nconst getShareWindowReference = (buttonKey) => {\r\n switch (buttonKey) {\r\n case SHARE_BUTTONS.facebook: {\r\n // target: facebook-share-dialog\r\n return window.open(\"\", '_blank', getShareConfig({width: 630, height: 420}))\r\n }\r\n case SHARE_BUTTONS.pinterest: {\r\n return window.open(\"\", '_blank', getShareConfig({width: 880, height: 554}))\r\n }\r\n case SHARE_BUTTONS.twitter: {\r\n return window.open(\"\", '_blank', getShareConfig({width: 550, height: 470}))\r\n }\r\n default:\r\n return window.open()\r\n }\r\n}\r\n\r\n/**\r\n * save Quote and open share link\r\n * @param buttonKey {string}\r\n * @param propsShareUrl {string}\r\n * @param saveNeeded {boolean}\r\n * @param imageUrl {string}\r\n */\r\nexport const saveQuoteAndShare = async (buttonKey, propsShareUrl, saveNeeded = true, imageUrl = \"\") => {\r\n if (!propsShareUrl) {\r\n propsShareUrl = store.getState().serverState.shareUrl;\r\n }\r\n let windowReference = null;\r\n const isSafari = browserIsSafari();\r\n if (isSafari) {\r\n windowReference = getShareWindowReference(buttonKey);\r\n }\r\n let responseData = null;\r\n if (saveNeeded) {\r\n loaderEnable();\r\n responseData = await saveQuote({\r\n submit: true,\r\n showReceipt: false\r\n });\r\n if (!responseData) {\r\n return false\r\n }\r\n document.kvConfig.jobId = responseData.jobId;\r\n if (responseData.imageUrl) {\r\n imageUrl = responseData.imageUrl;\r\n store.dispatch(setAmazonImageUrl(responseData.imageUrl));\r\n }\r\n loaderDisable();\r\n }\r\n\r\n if (!isSafari) {\r\n windowReference = getShareWindowReference(buttonKey);\r\n }\r\n\r\n windowReference.location = createShareUrl(buttonKey, getShareUrl(document.kvConfig.jobId) || propsShareUrl, imageUrl);\r\n\r\n}\r\n\r\n/**\r\n * returns cart items array\r\n * @param neededFeature {featureInterface}\r\n * @param quantity {number}\r\n * @param qtActiveCategory {string}\r\n * @param addedBy {string}\r\n * @returns {array}\r\n */\r\nexport const getCartItemsArrayFromFeature = (neededFeature, quantity, qtActiveCategory, addedBy = CART_ITEM_ADDED_BY.user) => {\r\n const firstCartItem = getCartItemObject(neededFeature, quantity, qtActiveCategory);\r\n firstCartItem.addedBy = addedBy;\r\n let itemsToAdd = [firstCartItem];\r\n const relatedFeatures = getBundledFeatures(neededFeature);\r\n if (Array.isArray(relatedFeatures) && relatedFeatures.length) {\r\n relatedFeatures.forEach((relatedFeature) => {\r\n const cartItem = getCartItemObject(relatedFeature, quantity, qtActiveCategory);\r\n cartItem.relatedProductParent = neededFeature;\r\n cartItem.addedBy = addedBy;\r\n itemsToAdd.push(cartItem);\r\n })\r\n }\r\n return itemsToAdd\r\n}\r\n\r\n\r\n/**\r\n * Checks available meta options for feature\r\n * @param lookActiveFeature {featureInterface}\r\n * @param filterGroups {array}\r\n * @param metaName {string}\r\n * @returns {array} array of objects\r\n */\r\nexport const getSameFeatureWithAnotherMeta = (lookActiveFeature, filterGroups, metaName = \"MatchingFeature\") => {\r\n if (!lookActiveFeature) {\r\n return null\r\n }\r\n\r\n const parent = lookActiveFeature.getParent();\r\n const activeFeatureValue = Array.isArray(lookActiveFeature.metaData[metaName]) ? lookActiveFeature.metaData[metaName][0] : null;\r\n\r\n let optionFeatures = activeFeatureValue ? [{\r\n feature: lookActiveFeature,\r\n metaValue: activeFeatureValue\r\n }] : [];\r\n\r\n const layout = getCurrentLayout();\r\n const navItems = layout.designNavigationItems({part: parent}, {}, \"\", lookActiveFeature, true);\r\n const activeFeatureCollectionName = lookActiveFeature.getCollectionName(filterGroups);\r\n const customFullDisplayName = lookActiveFeature.getCustomFullDisplayName();\r\n\r\n for (let i = 0; i < navItems.length; i++) {\r\n const checkFeature = navItems[i].part;\r\n if ((checkFeature.dbFeature.sharedFeatureName === \"MatchingFeature\") && checkFeature.getCustomFullDisplayName() !== customFullDisplayName) {\r\n continue\r\n }\r\n if ((checkFeature.dbFeature.sharedFeatureName !== \"MatchingFeature\") && getSkusDifferences(checkFeature.dbFeature.sharedFeatureName, lookActiveFeature.dbFeature.sharedFeatureName) > 1) {\r\n continue\r\n }\r\n // // console.log(\"checkFeature\", checkFeature);\r\n const metaValue = Array.isArray(checkFeature.metaData[metaName]) ? checkFeature.metaData[metaName][0] : null;\r\n if (!metaValue) {\r\n continue\r\n }\r\n if (allowCheckForCollection(checkFeature) && (checkFeature.getCollectionName(filterGroups) !== activeFeatureCollectionName)) {\r\n continue\r\n }\r\n if ((metaName === \"MatchingFeature\") && lookActiveFeature.metaData[\"MatchingFeature\"] && !isEqual(lookActiveFeature.metaData[\"MatchingFeature\"], checkFeature.metaData[\"MatchingFeature\"])) {\r\n continue\r\n }\r\n if (optionFeatures.every(optFeature => optFeature.metaValue !== metaValue)) {\r\n optionFeatures.push({\r\n feature: checkFeature,\r\n metaValue\r\n })\r\n }\r\n }\r\n\r\n return optionFeatures\r\n\r\n};\r\n\r\nexport const getFeatureSectionIsHidden = (lookActiveFeature) => {\r\n return !lookActiveFeature || (LOOK_WALLS.includes(lookActiveFeature.partId) && !(\r\n lookActiveFeature.partId === \"front_wall\" && (document.kvConfig.visualizerType === \"Fireplace\")\r\n ))\r\n // const layout = getCurrentLayout();\r\n // return lookActiveFeature && (\r\n // (!layout.partIdExistInQtCategory(lookActiveFeature.partId, true) || LOOK_WALLS.includes(lookActiveFeature.partId)));\r\n}\r\n\r\n/**\r\n * returns parent feature group\r\n * @param lookFeature {featureInterface}\r\n * @param lookActiveCategory {string}\r\n * @returns {object} featureGroup\r\n */\r\nexport const getFeatureParent = (lookFeature, lookActiveCategory = \"\") => {\r\n if (lookFeature && lookFeature.getParent) {\r\n return lookFeature.getParent()\r\n }\r\n const layout = getCurrentLayout();\r\n return layout.getFeatureGroupByPartId(lookActiveCategory);\r\n}\r\n\r\n/**\r\n * returns feature property name\r\n * @param lookActiveFeature {featureInterface}\r\n * @returns {string}\r\n */\r\nexport const getPropertyToMatchActiveFeature = (lookActiveFeature) => {\r\n if (lookActiveFeature.dbFeature.sharedFeatureName) {\r\n // keep old logic, some features are missing the sku, so we have to have the code below\r\n return \"sharedFeatureName\"\r\n }\r\n // original check for other tools\r\n return \"sku\"\r\n}\r\n\r\n/**\r\n * Checks if list feature is currently active\r\n * @param lookFeature {featureInterface}\r\n * @param lookActiveFeature {featureInterface}\r\n * @param lookActiveCategory {string}\r\n * @param featureGroup {object}\r\n * @returns {boolean}\r\n */\r\nexport const getFeatureIsActive = (lookFeature, lookActiveFeature, lookActiveCategory = \"\", featureGroup) => {\r\n if (!lookFeature) {\r\n return false\r\n }\r\n let checkFeature = lookActiveFeature;\r\n if (!checkFeature && lookActiveCategory) {\r\n const parentFeatureGroup = featureGroup || getFeatureParent(lookFeature, lookActiveCategory);\r\n if (parentFeatureGroup) {\r\n checkFeature = parentFeatureGroup.activeNotInVisualizerFeature || parentFeatureGroup.activeFeature;\r\n }\r\n }\r\n return checkFeature && ((lookFeature.dbFeature.id === checkFeature.dbFeature.id)\r\n || (lookFeature.getSplittedFeatureName() === checkFeature.getSplittedFeatureName())\r\n )\r\n}\r\n\r\n/**\r\n * Checks if list feature is currently active\r\n * @param parentObject {object}\r\n * @param layoutType {number|string}\r\n * @param scene {number|string}\r\n * @param [position] {string}\r\n * @returns {boolean}\r\n */\r\nexport const removeLookPointFor = (parentObject, layoutType, scene, position) => {\r\n const layout = getCurrentLayout();\r\n if ((layout.type === layoutType) && (layout.scene === scene)) {\r\n if (position) {\r\n return parentObject.layerPosition !== position\r\n }\r\n return false\r\n }\r\n return true\r\n}\r\n\r\n/**\r\n * Checks if two strings are almost the same (to compare SKU\\s, for example 0328400.222 and 0328800.222)\r\n * @param sku1 {string}\r\n * @param sku2 {string}\r\n * @returns {number}\r\n */\r\nexport const getSkusDifferences = (sku1, sku2) => {\r\n if (sku1 === sku2) {\r\n return 0\r\n }\r\n let differences = 0;\r\n sku1.split(\"\").forEach((letter, letterIndex) => {\r\n if (!sku2[letterIndex] || letter !== sku2[letterIndex]) {\r\n differences++;\r\n }\r\n })\r\n return differences\r\n}\r\n\r\n/**\r\n * filters removed cartItems\r\n * @param cartItems {[cartItemInterface]}\r\n * @param withoutNotInStock {boolean}\r\n * @param withoutZeroQuantity {boolean}\r\n * @param parentsOnly {boolean}\r\n * @returns {[cartItemInterface]}\r\n */\r\nexport const filterCartItems = (cartItems, withoutNotInStock = false, withoutZeroQuantity = false, parentsOnly = false) => {\r\n return cartItems.filter(cItem => {\r\n if (withoutZeroQuantity && cItem.quantity < 1) {\r\n return false\r\n }\r\n if (withoutNotInStock) {\r\n // if (cItem.relatedProductParent && !isInStock(cItem.relatedProductParent)) {\r\n // return false\r\n // }\r\n if (!isInStock(cItem.cartFeature) || getBundledFeatures(cItem.cartFeature).length) {\r\n return false\r\n }\r\n }\r\n if (IS_PRODUCT_JOURNEY) {\r\n return cItem.addedBy === CART_ITEM_ADDED_BY.user && !cItem.isRemoved\r\n }\r\n if (parentsOnly) {\r\n return !cItem.relatedProductParent\r\n }\r\n return !cItem.isRemoved\r\n })\r\n}\r\n\r\n/**\r\n * sorts CartItems for List Page\r\n * @param cartItems {[cartItemInterface]}\r\n * @returns {[cartItemInterface]}\r\n */\r\nexport const sortCartItemsForListPage = (cartItems) => {\r\n return cartItems\r\n .filter(cItem => !cItem.relatedProductParent)\r\n .sort((a, b) => featureIsBundle(a.cartFeature, cartItems) - featureIsBundle(b.cartFeature, cartItems))\r\n .sort((a, b) => (b.addedBy === CART_ITEM_ADDED_BY.user) - (a.addedBy === CART_ITEM_ADDED_BY.user) || cartItemInStock(b) - cartItemInStock(a))\r\n}\r\n\r\n/**\r\n * returns array of deliveries\r\n * @param lookOpened {boolean}\r\n * @param lookActiveCategory {string}\r\n * @param lookActiveFeature {featureInterface}\r\n * @param lookCompatabilityAlert {object}\r\n * @returns {boolean}\r\n */\r\nexport const hideFeatureSection = (lookOpened, lookActiveCategory, lookActiveFeature, lookCompatabilityAlert) => {\r\n const layout = getCurrentLayout();\r\n let showFeaturesOnly = !lookCompatabilityAlert.visible && lookOpened && lookActiveCategory && !layout.partIdExistInQtCategory(lookActiveCategory, true);\r\n if (!showFeaturesOnly && lookActiveFeature && !lookCompatabilityAlert.visible) {\r\n showFeaturesOnly = !isFeatureEnabled(lookActiveFeature, \"quotingTool\");\r\n }\r\n return showFeaturesOnly\r\n}\r\n\r\n/**\r\n * returns array of deliveries\r\n * @param partId {string}\r\n * @param layout {object}\r\n * @param fabricatorState {object}\r\n * @returns {boolean}\r\n */\r\nexport const hardCodelyRemovedClicking = (partId, layout = getCurrentLayout(), fabricatorState = null) => {\r\n if (document.kvConfig.visualizerType !== \"bvLook\") {\r\n return false\r\n }\r\n if (getCurrentRoomType(layout) === LOOK_ROOM_TYPES.as) {\r\n if (fabricatorState && fabricatorState.isCoburn && partId === \"shower_door\" && layout.parts.Shower) {\r\n const showerDoorFeatureGroup = layout.parts.Shower.showerDoor;\r\n if (showerDoorFeatureGroup && showerDoorFeatureGroup.activeFeature\r\n && (showerDoorFeatureGroup.activeFeature.dbFeature.sharedFeatureName === \"Hinge Door.002\"\r\n || showerDoorFeatureGroup.activeFeature.dbFeature.sharedFeatureName === \"Barn Door.002\")) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n return partId === \"bathtub_body\" || partId === \"vanity_cabinet\"\r\n}\r\n\r\nexport const getWizardWithFirstStepCurrentPartId = (wizardList, partId) => {\r\n return wizardList.find(wizardItem => {\r\n if (!wizardItem.openWizardOnClick) {\r\n return false\r\n }\r\n const firstStepGroups = getCurrentGroups(wizardItem, 0, {});\r\n if (firstStepGroups && firstStepGroups.length === 1 && firstStepGroups[0].nodeType === \"group\") {\r\n const featureGroup = getFeatureGroupFromWizardGroup(firstStepGroups[0]);\r\n if (featureGroup && featureGroup.partId === partId) {\r\n return true\r\n }\r\n }\r\n return false\r\n });\r\n}\r\n","export const LayoutType = {\r\n Small: 0,\r\n SmallWithPopout: 1,\r\n SmallWithPeninsula: 2,\r\n SmallWithIsland: 3,\r\n SmallWithPopoutWithPeninsula: 4,\r\n SmallWithPopoutWithIsland: 5,\r\n SmallWithPeninsulaWithIsland: 6,\r\n SmallWithPopoutWithPeninsulaWithIsland: 7,\r\n LShape: 8,\r\n LShapeWithPeninsula: 9,\r\n LShapeWithIsland: 10,\r\n LShapeWithPeninsulaWithIsland: 11,\r\n};\r\n\r\nexport const LayoutAbbreviation = {\r\n All: \"ALL\",\r\n Small: \"S\",\r\n SmallWithPopout: \"SP\",\r\n SmallWithPeninsula: \"SN\",\r\n SmallWithIsland: \"SI\",\r\n SmallWithPopoutWithPeninsula: \"SPN\",\r\n SmallWithPopoutWithIsland: \"SPI\",\r\n SmallWithPeninsulaWithIsland: \"SNI\",\r\n SmallWithPopoutWithPeninsulaWithIsland: \"SPNI\",\r\n LShape: \"L\",\r\n LShapeWithPeninsula: \"LN\",\r\n LShapeWithIsland: \"LI\",\r\n LShapeWithPeninsulaWithIsland: \"LNI\",\r\n};\r\n\r\nexport const LayoutAbbreviations = [\"S\",\"SP\",\"SN\",\"SI\",\"SPN\",\"SPI\",\"SNI\",\"SPNI\",\"L\",\"LN\",\"LI\",\"LNI\"];\r\nexport const LayoutAbbreviationsToRemove = [\"LSP\",\"LNI\",\"LI\",\"LN\",\"L\",\"SPNI\",\"SNI\",\"SPI\",\"SPN\",\"SI\",\"SN\",\"SP\",\"S\"];\r\n\r\nexport const PLACEMENTS = {\r\n Island: \"Island\",\r\n Countertop: \"Countertop\"\r\n};\r\n\r\nexport const MODULE_CONTEXT_MENU_TYPES = {\r\n Filters: \"Filters\",\r\n SliceButtons: \"SliceButtons\",\r\n};\r\nexport const MODULE_CONTEXT_MENU_DIRECTIONS = {\r\n Vertical: \"Vertical\",\r\n Horizontal: \"Horizontal\"\r\n};\r\n\r\nexport const CABINET_WIZARD_BUTTONS = [{\r\n text: \"All products\",\r\n buttonId: \"all_products\",\r\n},{\r\n text: \"Door style\",\r\n filtersGroupName: \"DoorStyle\",\r\n buttonId: \"door_style\",\r\n},{\r\n text: \"Wood type\",\r\n filtersGroupName: \"WoodType\",\r\n buttonId: \"wood_type\",\r\n},{\r\n text: \"Stain / color\",\r\n filtersGroupName: \"StainColor\",\r\n buttonId: \"stain_color\",\r\n},{\r\n text: \"Inlay type\",\r\n filtersGroupName: \"Inlay Type\",\r\n buttonId: \"inlay_type\",\r\n}];\r\n\r\nexport const COUNTERTOP_WIZARD_BUTTONS = [{\r\n text: \"Stone\",\r\n pluralText: \"Stones\",\r\n buttonId: \"all_products\",\r\n},{\r\n text: \"Color\",\r\n pluralText: \"Color\",\r\n filtersGroupName: \"Stone Color\",\r\n buttonId: \"color\",\r\n},{\r\n text: \"Material\",\r\n pluralText: \"Materials\",\r\n filtersGroupName: \"Stone Material\",\r\n buttonId: \"materials\",\r\n},{\r\n text: \"Edge\",\r\n pluralText: \"Edges\",\r\n filtersGroupName: \"Edge Profile\",\r\n buttonId: \"edges\",\r\n},{\r\n text: \"Backsplash\",\r\n pluralText: \"Backsplash\",\r\n buttonId: \"backsplash\",\r\n}];\r\n\r\nexport const wizardAllButton = {\r\n id: \"All\",\r\n value: \"All\",\r\n displayText: \"All\",\r\n parent_id: null,\r\n icon: \"\",\r\n lockedInWizard: false,\r\n filterGroup_id: 0,\r\n additionalImages: []\r\n};\r\n\r\nexport const BACKSPLASH_TYPES = [\"4in\", \"6in\", \"18in\"];\r\n\r\nexport const METADATA = {\r\n ALL: \"ALL\"\r\n};\r\n\r\nexport const COUNTERTOP_GROUP = [\"countertop\", \"center_island_countertop\", \"backsplash\"];\r\nexport const CABINET_GROUP = [\"top_cabinet\", \"bottom_cabinet\", \"center_island_cabinet\", \"fridge_enclosure\", \"tall_cabinet\"];\r\nexport const EDGE_GROUP = [\"edge\", \"edge_profile\", \"center_island_edge\"];\r\n","import $ from \"jquery\";\r\nimport 'hammerjs';\r\nimport sqftConfig from \"./sqftConfig\";\r\nimport sqftCursorManager from \"./sqftCursorManager\";\r\n\r\nconst sqftEventManager = {\r\n renderEvents: [],\r\n renderEventsSlab: [],\r\n priorities: {\r\n OVERALL: -100,\r\n SLAB_RIGHT_PART_CONTENT: -40,\r\n SLAB_RIGHT_PART_WORKSPACE: -30,\r\n BOX_POINT: -5,\r\n BOX: -1,\r\n OVERLAY: 0,\r\n IMAGE_LINE: 1,\r\n IMAGE: 3,\r\n POINT: 5,\r\n SEGMENT_MEASUREMENTS: 7,\r\n SEGMENT: 10,\r\n SHAPE_LABEL: 12,\r\n SHAPE_UPPER: 14.5,\r\n SHAPE: 15,\r\n SHAPE_SLAB_PLACEHOLDER: 15.5,\r\n WALL: 18,\r\n SLAB_IMAGE: 20,\r\n SLAB_LEFT_PART: 25,\r\n WORKSPACE: 100,\r\n },\r\n events: {\r\n MOUSE_MOVE: \"mousemove\",\r\n MOUSE_DOWN: \"mousedown\",\r\n MOUSE_UP: \"mouseup\",\r\n MOUSE_WHEEL: \"mousewheel\",\r\n WHEEL: \"wheel\",\r\n ON_MOUSE_WHEEL: \"onmousewheel\",\r\n RESIZE: \"resize\",\r\n TOUCH_START: \"touchstart\",\r\n TOUCH_END: \"touchend\",\r\n TOUCH_MOVE: \"touchmove\",\r\n TOUCH_CANCEL: \"touchcancel\",\r\n MOUSE_LEAVE: \"mouseleave\",\r\n CLICK: \"click\",\r\n DBLCLICK: \"dblclick\",\r\n CONTEXTMENU: \"contextmenu\",\r\n KEYDOWN: \"keydown\",\r\n RENDER: \"render\",\r\n DRAG_OVER: \"dragover\",\r\n DROP: \"drop\"\r\n },\r\n keyCode: {\r\n ENTER: \"Enter\",\r\n NumpadEnter: \"NumpadEnter\"\r\n },\r\n self: this,\r\n activeEvents: [],\r\n canvas: null,\r\n $canvas: null,\r\n canvasOffset: null,\r\n ctx: null,\r\n state: {\r\n processing: false\r\n },\r\n eventQueue: [],\r\n G_events: { //events to tie into the Quoting Tool's Global Events for Idle timeout\r\n userIdleStartTimer: 'userIdleStartTimer',\r\n userIdleWarning: 'userIdleWarning',\r\n userIdleTimeOut: 'userIdleTimeOut',\r\n userIdleStopTimer: 'userIdleStopTimer',\r\n userIdleGoHome: 'userIdleGoHome',\r\n userIdleGoHomeCountdown: 'userIdleGoHomeCountdown'\r\n },\r\n hammerMC: null,\r\n LastKnownMousePos: null,\r\n //currentCursorOwner: null,\r\n //currentCursor: null,\r\n //noCursorStealing: false,\r\n zoomLock: null,\r\n resizeHandler: null,\r\n keydownHandler: null,\r\n\r\n getCtx: function() {\r\n return this.ctx\r\n },\r\n eventSort: function (a, b) {\r\n if (a.priority < b.priority)\r\n return -1;\r\n if (a.priority > b.priority)\r\n return 1;\r\n return 0;\r\n },\r\n getMousePos: function (e) {\r\n if (!e) {\r\n return this.LastKnownMousePos;\r\n }\r\n this.LastKnownMousePos = {\r\n x: e.pageX - this.canvasOffset.left,\r\n y: e.pageY - this.canvasOffset.top\r\n };\r\n return this.LastKnownMousePos;\r\n },\r\n getTouchPos: function (e) {\r\n var touch = e.changedTouches[0];\r\n if (!touch) {\r\n return null;\r\n }\r\n this.LastKnownMousePos = {\r\n x: touch.pageX - this.canvasOffset.left,\r\n y: touch.pageY - this.canvasOffset.top\r\n };\r\n return this.LastKnownMousePos;\r\n },\r\n setCanvas: function(value) {\r\n this.canvas = value;\r\n this.$canvas = $(value);\r\n this.ctx = this.canvas.getContext('2d');\r\n sqftCursorManager.init(this.canvas);\r\n },\r\n onMouseMove: function(mousepos, e) {\r\n let mousemove = this.activeEvents[this.events.MOUSE_MOVE] || [];\r\n e.terminate = false;\r\n for (var i = 0; i < mousemove.length; i++) {\r\n if (mousemove[i].event.call(mousemove[i].sender, mousepos, e)) {\r\n e.terminate = true;\r\n }\r\n }\r\n },\r\n onMouseUp: function(mousepos, e) {\r\n var mouseup = this.activeEvents[this.events.MOUSE_UP] || [];\r\n for (var i = 0; i < mouseup.length; i++) {\r\n if (mouseup[i].event.call(mouseup[i].sender, mousepos, e)) {\r\n break;\r\n }\r\n }\r\n },\r\n onMouseDown: function(mousepos, e, callback) {\r\n var mousedown = this.activeEvents[this.events.MOUSE_DOWN] || [];\r\n for (var i = 0; i < mousedown.length; i++) {\r\n if (mousedown[i].event.call(mousedown[i].sender, mousepos, e)) {\r\n break;\r\n }\r\n }\r\n if (callback) {\r\n callback(mousepos, e);\r\n }\r\n },\r\n onMouseLeave: function(mousepos, e, callback) {\r\n var mouseleave = this.activeEvents[this.events.MOUSE_LEAVE] || [];\r\n for (var i = 0; i < mouseleave.length; i++) {\r\n if (mouseleave[i].event.call(mouseleave[i].sender, mousepos, e)) {\r\n break;\r\n }\r\n }\r\n if (callback) {\r\n callback(mousepos, e);\r\n }\r\n },\r\n onKeyDown: function (code, e, callback) {\r\n let mouseleave = this.activeEvents[this.events.KEYDOWN] || [];\r\n for (let i = 0; i < mouseleave.length; i++) {\r\n if (mouseleave[i].event.call(mouseleave[i].sender, code, e)) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n break;\r\n }\r\n }\r\n if (callback) {\r\n callback(code, e);\r\n }\r\n },\r\n onDblClick: function(mousepos, e, callback) {\r\n let mousedown = this.activeEvents[this.events.DBLCLICK] || [];\r\n for (let i = 0; i < mousedown.length; i++) {\r\n if (mousedown[i].event.call(mousedown[i].sender, mousepos, e)) {\r\n break;\r\n }\r\n }\r\n if (callback) {\r\n callback(mousepos, e);\r\n }\r\n },\r\n onWheel: function(mousePos, e, callback) {\r\n let wheel = this.activeEvents[this.events.WHEEL] || [];\r\n for (let i = 0; i < wheel.length; i++) {\r\n if (wheel[i].event.call(wheel[i].sender, mousePos, e)) {\r\n break;\r\n }\r\n }\r\n if (callback) {\r\n callback(mousePos, e);\r\n }\r\n },\r\n onResize: function(e) {\r\n let resize = this.activeEvents[this.events.RESIZE] || [];\r\n for (let i = 0; i < resize.length; i++) {\r\n if (resize[i].event.call(resize[i].sender, e)) {\r\n break;\r\n }\r\n }\r\n this.updateOffset(e);\r\n },\r\n onContextmenu: function(mousePos, e, callback) {\r\n let contextmenu = this.activeEvents[this.events.CONTEXTMENU] || [];\r\n for (let i = 0; i < contextmenu.length; i++) {\r\n if (contextmenu[i].event.call(contextmenu[i].sender, mousePos, e)) {\r\n break;\r\n }\r\n }\r\n if (callback) {\r\n callback(mousePos, e);\r\n }\r\n },\r\n onDrop: function(mousePos, e, callback) {\r\n let dragEvents = this.activeEvents[this.events.DROP] || [];\r\n for (let i = 0; i < dragEvents.length; i++) {\r\n if (dragEvents[i].event.call(dragEvents[i].sender, mousePos, e)) {\r\n break;\r\n }\r\n }\r\n if (callback) {\r\n callback(mousePos, e);\r\n }\r\n },\r\n onDragOver: function(mousePos, e, callback) {\r\n let dragOverEvents = this.activeEvents[this.events.DRAG_OVER] || [];\r\n for (let i = 0; i < dragOverEvents.length; i++) {\r\n if (dragOverEvents[i].event.call(dragOverEvents[i].sender, mousePos, e)) {\r\n break;\r\n }\r\n }\r\n if (callback) {\r\n callback(mousePos, e);\r\n }\r\n },\r\n onTouchCancel: function() {\r\n onMouseUp(this.LastKnownMousePos, {});\r\n this.LastKnownMousePos = {x: 0, y: 0};\r\n onMouseMove(this.LastKnownMousePos, {});\r\n },\r\n onRender: function() {\r\n var render = this.activeEvents[this.events.RENDER] || [];\r\n var triangles = [];\r\n for (var i = render.length - 1; i >= 0; i-- ) {\r\n if (render[i] === undefined) {\r\n continue\r\n }\r\n var result = render[i].event.call(render[i].sender, this.ctx);\r\n if (render[i] !== undefined && render[i].priority === this.priorities.SHAPE) {\r\n triangles.push(result);\r\n }\r\n }\r\n return triangles;\r\n },\r\n updateOffset: function() {\r\n this.canvasOffset = $(this.canvas).offset();\r\n },\r\n trigger: function(event, e) {\r\n let response = null;\r\n switch(event) {\r\n case this.events.MOUSE_MOVE:\r\n case this.events.TOUCH_MOVE:\r\n response = this.onMouseMove(this.getMousePos(e), e);\r\n break;\r\n case this.events.MOUSE_WHEEL:\r\n case this.events.WHEEL:\r\n case this.events.ON_MOUSE_WHEEL:\r\n console.log(\"WHEEL\");\r\n break;\r\n case this.events.MOUSE_UP:\r\n case this.events.TOUCH_END:\r\n response = this.onMouseUp(this.getMousePos(e), e);\r\n break;\r\n case this.events.MOUSE_DOWN:\r\n case this.events.TOUCH_START:\r\n response = this.onMouseDown(this.getMousePos(e), e);\r\n break;\r\n case this.events.TOUCH_CANCEL:\r\n response = this.onTouchCancel();\r\n break;\r\n case this.events.RESIZE:\r\n response = this.onResize(e);\r\n break;\r\n case this.MOUSE_LEAVE:\r\n response = this.onMouseLeave(e);\r\n break;\r\n case this.CONTEXTMENU:\r\n response = this.onContextmenu(this.getMousePos(e), e);\r\n break;\r\n case this.DBLCLICK:\r\n response = this.onDblClick(this.getMousePos(e), e);\r\n break;\r\n case this.events.RENDER:\r\n response = this.onRender();\r\n break;\r\n }\r\n return response;\r\n },\r\n pinchToZoom: function(event) {\r\n let stepSize = 0.04;\r\n let self = this;\r\n if (!this.zoomLock) {\r\n this.zoomLock = window.setTimeout(function() {\r\n self.zoomLock = null;\r\n }, 10);\r\n let scale = sqftConfig.scale,\r\n mod = 0;\r\n if (event.additionalEvent === \"pinchin\") {\r\n mod = -1;\r\n } else if (event.additionalEvent === \"pinchout\") {\r\n mod = 1;\r\n }\r\n if (mod !== 0) {\r\n scale += (mod * stepSize);\r\n if (scale < 1) {\r\n scale = 1;\r\n } else if (scale > 10) {\r\n scale = 10;\r\n }\r\n sqftConfig.scale = scale;\r\n }\r\n }\r\n },\r\n init: function(canvas) {\r\n if (this.canvas && this.canvas.isWithEventManager) {\r\n return;\r\n }\r\n let self = this;\r\n this.setCanvas(canvas);\r\n if (!this.hammerMC) {\r\n this.hammerMC = new Hammer.Manager(canvas);\r\n this.hammerMC.add(new Hammer.Pinch({enable: true}));\r\n this.hammerMC.on('pinch', this.pinchToZoom);\r\n }\r\n\r\n this.resizeHandler = this.onResize.bind(this);\r\n window.addEventListener(this.events.RESIZE, this.resizeHandler);\r\n\r\n this.keydownHandler = function (e) {\r\n // e.preventDefault();\r\n // e.stopPropagation();\r\n if (event.isComposing || event.keyCode === 229) {\r\n return;\r\n }\r\n\r\n //console.log(\"code\", e.code);\r\n //console.log(\"keyCode\", e.keyCode);\r\n this.eventQueue.push([this.events.KEYDOWN, e.code, e]);\r\n this.processEventQueue();\r\n }.bind(this);\r\n window.addEventListener(this.events.KEYDOWN, this.keydownHandler);\r\n\r\n canvas.addEventListener(this.events.MOUSE_MOVE, function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (this.eventQueue.length > 2 &&\r\n this.eventQueue[this.eventQueue.length - 1][0] === self.events.MOUSE_MOVE &&\r\n this.eventQueue[this.eventQueue.length - 2][0] === self.events.MOUSE_MOVE\r\n ) {\r\n this.eventQueue[this.eventQueue.length - 1] = [self.events.MOUSE_MOVE, this.getMousePos(e), e];\r\n } else {\r\n this.eventQueue.push([self.events.MOUSE_MOVE, this.getMousePos(e), e]);\r\n }\r\n this.processEventQueue();\r\n }.bind(this));\r\n canvas.addEventListener('dragover', function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.eventQueue.push([self.events.DRAG_OVER, this.getMousePos(e), e]);\r\n this.processEventQueue();\r\n }.bind(this));\r\n canvas.addEventListener('drop', function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.eventQueue.push([self.events.DROP, this.getMousePos(e), e]);\r\n this.processEventQueue();\r\n }.bind(this));\r\n canvas.addEventListener(self.events.MOUSE_DOWN, function(e){\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (!e.handled) {\r\n this.eventQueue.push([self.events.MOUSE_DOWN, this.getMousePos(e), e]);\r\n this.processEventQueue();\r\n }\r\n }.bind(this));\r\n canvas.addEventListener(this.events.MOUSE_UP, function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (!e.handled) {\r\n this.eventQueue.push([self.events.MOUSE_UP, this.getMousePos(e), e]);\r\n this.processEventQueue();\r\n }\r\n }.bind(this));\r\n canvas.addEventListener(this.events.TOUCH_START, function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n e.handled = true;\r\n if (e.touches.length === 1) {\r\n let touchPos = self.getTouchPos(e);\r\n this.eventQueue.push([self.events.MOUSE_MOVE, touchPos, e]);\r\n this.eventQueue.push([self.events.TOUCH_START, touchPos, e]);\r\n this.processEventQueue();\r\n }\r\n }.bind(this), { passive: false });\r\n canvas.addEventListener(this.events.TOUCH_END, function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n e.handled = true;\r\n this.eventQueue.push([self.events.TOUCH_END, this.getTouchPos(e), e]);\r\n this.processEventQueue();\r\n }.bind(this), { passive: false });\r\n canvas.addEventListener(this.events.TOUCH_CANCEL, function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.eventQueue.push([self.events.TOUCH_CANCEL, this.getTouchPos(e), e]);\r\n this.processEventQueue();\r\n }.bind(this), { passive: false });\r\n canvas.addEventListener(this.events.TOUCH_MOVE, function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (self.zoomLock || e.touches.length > 1) //do not move when multi-touch or zoom locked or if the finger-move jumps too far\r\n return;\r\n let touchPos = self.getTouchPos(e);\r\n if (self.eventQueue.length > 2 &&\r\n self.eventQueue[self.eventQueue.length - 1][0] === self.events.TOUCH_MOVE &&\r\n self.eventQueue[self.eventQueue.length - 2][0] === self.events.TOUCH_MOVE\r\n ) {\r\n self.eventQueue[self.eventQueue.length - 1] = [self.events.TOUCH_MOVE, self.getTouchPos(e), e];\r\n } else {\r\n self.eventQueue.push([self.events.TOUCH_MOVE, touchPos, e]);\r\n }\r\n self.processEventQueue();\r\n }.bind(this), { passive: false });\r\n canvas.addEventListener(this.events.MOUSE_LEAVE, function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.eventQueue.push([self.events.MOUSE_LEAVE, this.getMousePos(e), e]);\r\n this.processEventQueue();\r\n }.bind(this));\r\n canvas.addEventListener(this.events.DBLCLICK, function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (!e.handled) {\r\n this.eventQueue.push([self.events.DBLCLICK, this.getMousePos(e), e]);\r\n this.processEventQueue();\r\n }\r\n }.bind(this));\r\n canvas.addEventListener(this.events.WHEEL, function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (!e.handled) {\r\n this.eventQueue.push([self.events.WHEEL, this.getMousePos(e), e]);\r\n this.processEventQueue();\r\n }\r\n }.bind(this));\r\n canvas.addEventListener(this.events.CONTEXTMENU, function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (!e.handled) {\r\n this.eventQueue.push([self.events.CONTEXTMENU, this.getMousePos(e), e]);\r\n this.processEventQueue();\r\n }\r\n }.bind(this));\r\n this.updateOffset();\r\n this.resetCursor(null);\r\n this.canvas.isWithEventManager = true;\r\n },\r\n clearAll: function() {\r\n window.removeEventListener(this.events.RESIZE, this.resizeHandler);\r\n window.removeEventListener(this.events.KEYDOWN, this.keydownHandler);\r\n\r\n this.activeEvents = [];\r\n this.eventQueue = [];\r\n this.LastKnownMousePos = {\r\n x: -1,\r\n y: -1\r\n };\r\n },\r\n stealCursor: (override, revertBackAfterMouseUp) => {\r\n return sqftCursorManager.stealCursor(override, revertBackAfterMouseUp);\r\n },\r\n releaseStealLock: (owner) => {\r\n return sqftCursorManager.releaseStealLock(owner);\r\n },\r\n setCursor: (cursor, owner, noStealing) => {\r\n return sqftCursorManager.setCursor(cursor, owner, noStealing);\r\n },\r\n setCursorImage: (cursorImage, owner, noStealing) => {\r\n return sqftCursorManager.setCursorImage(cursorImage, owner, noStealing);\r\n },\r\n resetCursor: (owner) => {\r\n return sqftCursorManager.resetCursor(owner);\r\n },\r\n getCursor: () => {\r\n return sqftCursorManager.getCursor();\r\n },\r\n event: function(callback, sender, priority) {\r\n this.event = callback;\r\n this.sender = sender;\r\n this.priority = priority;\r\n },\r\n addEvent: function(event, callback, sender, priority) {\r\n var e = new this.event(callback, sender, priority);\r\n this.activeEvents[event] = this.activeEvents[event] || [];\r\n this.activeEvents[event].unshift(e);\r\n this.activeEvents[event].sort(this.eventSort);\r\n },\r\n removeEvent: function(sender, event) {\r\n let i;\r\n if (typeof(event) === 'undefined') {\r\n event = null;\r\n } else {\r\n event = event.toLowerCase();\r\n }\r\n if (event === null) {\r\n for (var key in this.activeEvents) {\r\n for (i = this.activeEvents[key].length -1; i >= 0; i--) {\r\n // lodash compare variant\r\n // if (_.isEqual(this.activeEvents[key][i].sender, sender)) {\r\n if (this.activeEvents[key][i].sender === sender) {\r\n this.activeEvents[key].splice(i, 1);\r\n }\r\n }\r\n }\r\n } else if (this.activeEvents[event] !== null) {\r\n for (i = this.activeEvents[event].length - 1; i >= 0; i--) {\r\n if (this.activeEvents[event][i].sender === sender) {\r\n this.activeEvents[event].splice(i, 1);\r\n }\r\n }\r\n }\r\n },\r\n removeStuckCursorEvents: function() {\r\n let mouseupEvents = this.activeEvents[this.events.MOUSE_UP] || [];\r\n for (const mouseupEvent of mouseupEvents) {\r\n const isCursorExist = mouseupEvent.sender.cursorImage || mouseupEvent.sender.cursor;\r\n if (isCursorExist && mouseupEvent.sender && mouseupEvent.sender.destroy) {\r\n mouseupEvent.sender.destroy(true, false);\r\n }\r\n }\r\n },\r\n processEventQueue: function() {\r\n if (!this.state.processing) {\r\n this.state.processing = true;\r\n let e;\r\n while( (e = this.eventQueue.shift()) ) {\r\n if (e[1] == null) {\r\n continue;\r\n }\r\n switch(e[0]) {\r\n case this.events.MOUSE_DOWN:\r\n case this.events.TOUCH_START:\r\n this.onMouseDown(e[1], e[2]);\r\n break;\r\n case this.events.MOUSE_MOVE:\r\n case this.events.TOUCH_MOVE:\r\n this.onMouseMove(e[1], e[2]);\r\n break;\r\n case this.events.MOUSE_UP:\r\n case this.events.TOUCH_END:\r\n this.onMouseUp(e[1], e[2]);\r\n break;\r\n case this.events.DBLCLICK:\r\n this.onDblClick(e[1], e[2]);\r\n break;\r\n case this.events.TOUCH_CANCEL:\r\n this.onTouchCancel();\r\n break;\r\n case this.events.MOUSE_LEAVE:\r\n this.onMouseLeave(e[1], e[2]);\r\n break;\r\n case this.events.RESIZE:\r\n this.onResize(e[1], e[2]);\r\n break;\r\n case this.events.MOUSE_WHEEL:\r\n case this.events.WHEEL:\r\n case this.events.ON_MOUSE_WHEEL:\r\n this.onWheel(e[1], e[2]);\r\n break;\r\n case this.events.KEYDOWN:\r\n this.onKeyDown(e[1], e[2]);\r\n break;\r\n case this.events.CONTEXTMENU:\r\n this.onContextmenu(e[1], e[2]);\r\n break;\r\n case this.events.DRAG_OVER:\r\n this.onDragOver(e[1], e[2]);\r\n break;\r\n case this.events.DROP:\r\n this.onDrop(e[1], e[2]);\r\n break;\r\n }\r\n }\r\n }\r\n this.state.processing = false;\r\n //window.resetIdleTimer(); //todo sqft-react is this needed\r\n }\r\n};\r\n\r\nexport default sqftEventManager\r\n","export const ROUTES = {\r\n home: \"/\",\r\n list: \"/list\",\r\n view: \"/view\",\r\n wizard: \"/wizard\",\r\n login: \"/login\",\r\n register: \"/register\",\r\n rooms: \"/room-ideas\",\r\n // look: \"/look\",\r\n // lookActiveFeature: \"/look/:partId\",\r\n // lookActiveCategory: \"/look/:partId/select\",\r\n // quote: \"/quote\", // wtf? never used that\r\n lookId: \":lookId\",\r\n lookFeatureSku: \":lookId/:skuId\",\r\n // grohe\r\n category: \"/category\",\r\n // product journey\r\n print: \"/print\",\r\n cart: \"/cart\",\r\n cartLogin: \"/cart/login\",\r\n cartRegister: \"/cart/register\",\r\n cartTerms: \"/cart/terms\",\r\n cartBilling: \"/cart/billing\",\r\n cartBillingInfo: \"/cart/billing/info\",\r\n cartShipping: \"/cart/shipping\",\r\n cartPayment: \"/cart/payment\",\r\n cartDelivery: \"/cart/delivery\",\r\n cartTwoFAVerify: \"/cart/twoFA/verify\",\r\n cartTwoFA: \"/cart/twoFA\",\r\n cartConfirm: \"/cart/confirm\",\r\n cartSuccess: \"/cart/success\",\r\n shop: \"/shop\",\r\n shopRoutes: \"/shop/:shopCategoryId/:skuId\",\r\n sqft: \"/sqft\",\r\n sqftCabinetsIntro: \"/sqft-cabinets-intro/:step\",\r\n sqftCabinetsAR: \"/sqft-cabinets-ar/:file\", // this is for the models saved by Vlad's API (old not used)\r\n cabinetsAR: \"/cabinets-ar/:file\", // this is fr the urls created by exporting scene\r\n sqftCabinetsTutorial: \"/sqft-cabinets-tutorial/:step\",\r\n /// QKB routes\r\n quoting: \"/quoting/:wizardId/:wizardStep\",\r\n quoteDesign: \"/quote-design\",\r\n newscope: \"/newscope\",\r\n shoppingcart: \"/shoppingcart\",\r\n visualizer: \"/visualizer\",\r\n contract: \"/sign\",\r\n};\r\n","//********* SQFT *********//\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const setSQFTMenuOpened = (menuOpened = \"\") => ({\r\n type: types.SET_SQFT_MENU_OPENED,\r\n payload: {menuOpened}\r\n});\r\n\r\nexport const setSQFTMenuOpenedLock = (menuOpenedLock = true) => ({\r\n type: types.SET_SQFT_MENU_LOCK,\r\n payload: {menuOpenedLock}\r\n});\r\n\r\nexport const setSQFTActiveButton = (activeButton) => ({\r\n type: types.SET_SQFT_MENU_ACTIVE_BUTTON,\r\n payload: {activeButton}\r\n});\r\n\r\nexport const setSQFTActiveSubMenuButton = (activeSubMenuButton) => ({\r\n type: types.SET_SQFT_ACTIVE_SUB_MENU_BUTTON,\r\n payload: {activeSubMenuButton}\r\n});\r\n\r\nexport const setSQFTActiveLevel3Button = (activeLevel3Button = \"\") => ({\r\n type: types.SET_SQFT_ACTIVE_LEVEL3_BUTTON,\r\n payload: {activeLevel3Button}\r\n});\r\n\r\nexport const setSQFTActiveRoomIndex = (activeRoomIndex) => ({\r\n type: types.SET_SQFT_ACTIVE_ROOM_INDEX,\r\n payload: {activeRoomIndex}\r\n});\r\n\r\nexport const setSQFTActiveRoomType = (activeRoomType) => ({\r\n type: types.SET_SQFT_ACTIVE_ROOM_TYPE,\r\n payload: {activeRoomType}\r\n});\r\n\r\nexport const setSQFTActiveRoomId = (activeRoomId) => ({\r\n type: types.SET_SQFT_ACTIVE_ROOM_ID,\r\n payload: {activeRoomId}\r\n});\r\n\r\nexport const setSQFTActiveRoom = (activeRoom) => ({\r\n type: types.SET_SQFT_ACTIVE_ROOM,\r\n payload: {activeRoom}\r\n});\r\n\r\nexport const setIsRoomSwitcherVisible = (isVisible) => ({\r\n type: types.SET_SQFT_ROOM_SWITCHER_VISIBLE,\r\n payload: {isVisible}\r\n});\r\n\r\nexport const setFreeDrawMode = (isFreeDrawMode) => ({\r\n type: types.SET_FREE_DRAW_MODE,\r\n payload: {isFreeDrawMode}\r\n});\r\n\r\nexport const setWallsUpMode = (isWallsUpMode) => ({\r\n type: types.SET_WALLS_UP_MODE,\r\n payload: {isWallsUpMode}\r\n});\r\n\r\nexport const setWallsLockMode = (isWallsLockMode) => ({\r\n type: types.SET_WALLS_LOCK_MODE,\r\n payload: {isWallsLockMode}\r\n});\r\n\r\nexport const setSQFTRoomLayouts = (roomLayouts) => ({\r\n type: types.SET_SQFT_ROOM_LAYOUTS,\r\n payload: {roomLayouts}\r\n});\r\n\r\nexport const setSQFTContextMenu = (contextMenu) => ({\r\n type: types.SET_SQFT_CONTEXT_MENU,\r\n payload: {contextMenu}\r\n});\r\n\r\nexport const setSQFTContextMenuV2 = (contextMenuV2) => ({\r\n type: types.SET_SQFT_CONTEXT_MENU_V2,\r\n payload: {contextMenuV2}\r\n});\r\n\r\nexport const setSQFTSystemMessage = (systemMessage) => ({\r\n type: types.SET_SQFT_SYSTEM_MESSAGE,\r\n payload: {systemMessage}\r\n});\r\n\r\nexport const setSQFTAr3dPopup = (ar3dPopup) => ({\r\n type: types.SET_SQFT_AR3D_POPUP,\r\n payload: {ar3dPopup}\r\n});\r\n\r\nexport const setSQFTSystemDeleteMessage = (systemDeleteMessage) => ({\r\n type: types.SET_SQFT_SYSTEM_DELETE_MESSAGE,\r\n payload: {systemDeleteMessage}\r\n});\r\n\r\nexport const setSQFTPopup = (sqftPopup) => ({\r\n type: types.SET_SQFT_POPUP,\r\n payload: {sqftPopup}\r\n});\r\n\r\n/**\r\n * Change Value Popups\r\n */\r\nexport const setChangeValuePopups = (changeValuePopups) => ({\r\n type: types.SET_CHANGE_VALUE_POPUPS,\r\n payload: {changeValuePopups}\r\n});\r\n\r\nexport const addChangeValuePopup = (changeValuePopup) => ({\r\n type: types.ADD_CHANGE_VALUE_POPUP,\r\n payload: changeValuePopup\r\n});\r\n\r\nexport const changeValuePopup = (changeValuePopup) => ({\r\n type: types.CHANGE_VALUE_POPUP,\r\n payload: changeValuePopup\r\n});\r\n\r\nexport const deleteChangeValuePopup = (id) => ({\r\n type: types.DELETE_CHANGE_VALUE_POPUP,\r\n payload: {id}\r\n});\r\n\r\n/**\r\n * ValidationPopups\r\n */\r\nexport const setValidationPopups = (validationPopups) => ({\r\n type: types.SET_VALIDATION_POPUPS,\r\n payload: {validationPopups}\r\n});\r\n\r\nexport const addValidationPopup = (validationPopup) => ({\r\n type: types.ADD_VALIDATION_POPUP,\r\n payload: validationPopup\r\n});\r\n\r\nexport const validationPopup = (validationPopup) => ({\r\n type: types.VALIDATION_POPUP,\r\n payload: validationPopup\r\n});\r\n\r\nexport const deleteValidationPopup = (id) => ({\r\n type: types.DELETE_VALIDATION_POPUP,\r\n payload: {id}\r\n});\r\n\r\nexport const setShouldShowChangeShapeFeatureMissingMessage = (isShapeFeatureMissing) => ({\r\n type: types.SET_CHANGE_SHAPE_FEATURE_MISSING_MESSAGE,\r\n payload: {isShapeFeatureMissing}\r\n});\r\n\r\nexport const setShapeIdsWithMissingFeature = (shapeIdsWithMissingFeature) => ({\r\n type: types.SET_SHAPE_IDS_WITH_MISSING_FEATURES,\r\n payload: {shapeIdsWithMissingFeature}\r\n});\r\n\r\nexport const addShapeIdWithMissingFeature = (shapeIdsWithMissingFeature) => ({\r\n type: types.ADD_SHAPE_ID_WITH_MISSING_FEATURES,\r\n payload: shapeIdsWithMissingFeature\r\n});\r\n\r\nexport const setSelectedCountertop = (selectedCountertop) => ({\r\n type: types.SET_SELECTED_COUNTERTOP,\r\n payload: {selectedCountertop}\r\n})\r\n\r\nexport const setSelectedWall = (selectedWall) => ({\r\n type: types.SET_SELECTED_WALL,\r\n payload: {selectedWall}\r\n});\r\n\r\nexport const setAbortController = (abortRequestController) => ({\r\n type: types.SET_ABORT_CONTROLLER,\r\n payload: {abortRequestController}\r\n});\r\n\r\nexport const setIsItextEditing = (isITextEditing) => ({\r\n type: types.SET_IS_ITEXT_EDITING,\r\n payload: {isITextEditing}\r\n});\r\n\r\nexport const setIsSlabPlaceholderOverlapsWithMultipleShapes = (isSlabPlaceholderOverlapsWithMultipleShapes) => ({\r\n type: types.SET_SLAB_PLACEHOLDER_OVERLAPS_WITH_MULTIPLE_SHAPES,\r\n payload: {isSlabPlaceholderOverlapsWithMultipleShapes}\r\n});\r\n\r\nexport const setReCacheMenuCounter = (reCacheMenuCounter) => ({\r\n type: types.SET_RE_CACHE_MENU_COUNTER,\r\n payload: {reCacheMenuCounter}\r\n});\r\n","import find from 'lodash/find';\r\nimport last from 'lodash/last';\r\n\r\nimport {splitFeatureName, iStartWith} from \"../../../../misc/utils\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {Part} from \"./part\";\r\nimport store from '../../../../store';\r\nimport {LayoutAbbreviation} from \"../constants\";\r\nimport {getFeatureIsLocked} from \"../../../../misc/helpers\";\r\n\r\nconst RgCabinetSize = /[0-9]+/g;\r\n\r\n/**\r\n * Used for Complex parts such as Vanity, to perform some base functionality for related items\r\n */\r\nexport class IntermediatePart extends Part {\r\n\r\n constructor(isChild) {\r\n super(false, isChild);\r\n this.disabled = false;\r\n this.defaultDisabled = false; // used after reset click\r\n this.canBeDisabled = false;\r\n }\r\n\r\n /**\r\n * This will be called by the underlying vanity feature with a concrete instance of the part\r\n * @param dbFeature\r\n * @param part {Part}\r\n * @param setParent {boolean}\r\n * @param features\r\n */\r\n load_(dbFeature, part, setParent = true, features = 'features') {\r\n\r\n const {displayName, sharedFeatureName} = dbFeature;\r\n let {featureName} = splitFeatureName(displayName);\r\n if (!featureName && dbFeature.groupName && dbFeature.displayName) {\r\n featureName = dbFeature.displayName.replace(dbFeature.groupName + \" - \", \"\")\r\n }\r\n\r\n // console.log('displayName:', displayName);\r\n\r\n if (setParent) {\r\n part.getParent = () => this;\r\n if (dbFeature.galleryImages) {\r\n const featured = dbFeature.galleryImages.find(galImage => galImage.featured);\r\n if (featured) {\r\n this.featuredImage = featured.url\r\n }\r\n dbFeature.galleryImages = dbFeature.galleryImages.sort((a, b) => b.default - a.default)\r\n }\r\n }\r\n\r\n if (iStartWith(displayName, 'Vanity -') || dbFeature.groupName === \"Vanity\") {\r\n if (displayName === \"Vanity - Placeholder D[For=Custom]\") {\r\n part.vanitySize = 72;\r\n } else {\r\n const fromName = sharedFeatureName || displayName || \"\";\r\n const lastDigit = last(fromName.match(RgCabinetSize));\r\n part.vanitySize = lastDigit ? lastDigit.slice(-2) : ''; // take two last digits from the name\r\n }\r\n\r\n }\r\n\r\n part.partName = featureName;\r\n part.metaData = dbFeature.metaData || {};\r\n part.dbFeature = dbFeature || {};\r\n if (!part.dbFeature.filterValueIDs) {\r\n part.dbFeature.filterValueIDs = {}\r\n }\r\n part.notAvailableInVisualizer = !dbFeature.s3Bindings || !dbFeature.s3Bindings.length || !dbFeature.s3Bindings.some(binding => binding.bucketName === \"brv\");\r\n\r\n let arrayOfBindings = [];\r\n if(dbFeature.s3Bindings) {\r\n dbFeature.s3Bindings.forEach((binding) => {\r\n if (!arrayOfBindings.includes(\"Small\")\r\n && (binding.layout === LayoutAbbreviation.All || binding.layout === LayoutAbbreviation.Small)) {\r\n arrayOfBindings.push(\"Small\");\r\n }\r\n if (!arrayOfBindings.includes(\"Large\") &&\r\n (binding.layout === LayoutAbbreviation.All || binding.layout === LayoutAbbreviation.Large)) {\r\n arrayOfBindings.push(\"Large\");\r\n }\r\n });\r\n }\r\n\r\n arrayOfBindings.forEach(layoutName => {\r\n this[features+\"List\"][layoutName].push(part);\r\n });\r\n\r\n if (part.notAvailableInVisualizer || !arrayOfBindings.length) { // features not in visualizer should be shown in the QuotingTool\r\n part.notAvailableInVisualizer = true;\r\n Object.keys(LayoutAbbreviation).forEach(layoutName => {\r\n if (layoutName !== \"All\") {\r\n this[features+\"List\"][layoutName].push(part);\r\n }\r\n })\r\n }\r\n\r\n this.loadFeatureCommon(part);\r\n\r\n return part\r\n }\r\n\r\n navigationSubItemsWithFilter(propName, propValue, featuresToCheck = this.features) {\r\n return featuresToCheck.filter((feature) => {\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n }).map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n navigationSubItemsWithFilterMultipleConditions(arrayOfConditions, featuresToCheck = this.features) {\r\n // console.log('arrayOfConditions', arrayOfConditions);\r\n // console.log('featuresToCheck', featuresToCheck);\r\n return featuresToCheck.filter((feature) => {\r\n return feature.notAvailableInVisualizer || arrayOfConditions.every((conditionObject) => {\r\n const {propName, propValue} = conditionObject;\r\n\r\n let conditionPassed = feature.matchesMetaForCondition(propName, propValue);\r\n if (propName === \"EX L\" && !conditionPassed) {\r\n conditionPassed = feature.matchesMetaForCondition(\"Wall\", propValue);\r\n }\r\n return conditionPassed\r\n\r\n // let {propName, propValue} = conditionObject;\r\n // const excludeProperty = propName.includes('-exclude');\r\n // if (excludeProperty) {\r\n // propName = propName.split('-exclude')[0];\r\n // }\r\n // return excludeProperty\r\n // ? feature.matchesMetaForCondition(propName, propValue)\r\n // : feature.matchesMetaForCondition(propName, propValue)\r\n });\r\n })\r\n }\r\n\r\n // navigationSubItemsWithFilterMultipleConditionsWithInactive(arrayOfConditions, featuresToCheck = this.features) { // shows all items & sets not mathing array\r\n // const refactoredArray = featuresToCheck.map((feature) => {\r\n // feature.matchesMetaFailed = false;\r\n // feature.matchesMetaFailedArray = [];\r\n // arrayOfConditions.forEach((conditionObject) => {\r\n // const {propName, propValue} = conditionObject;\r\n // let conditionPassed = feature.matchesMetaForCondition(propName, propValue);\r\n // if (propName === \"EX L\" && !conditionPassed) {\r\n // conditionPassed = feature.matchesMetaForCondition(\"Wall\", propValue);\r\n // }\r\n // if (!conditionPassed) {\r\n // feature.matchesMetaFailed = true;\r\n // feature.matchesMetaFailedArray.push(propName);\r\n // }\r\n // });\r\n //\r\n // return feature\r\n // });\r\n // return orderBy(refactoredArray, ['matchesMetaFailed'],['asc']).map(_ => new DesignNavigationItem(_.featureName, _));\r\n // }\r\n\r\n setDefault() {\r\n if (!this.tryToSetTheSameFeature(this.features)) {\r\n this.activeFeature = this.features && this.features[0] || null;\r\n this.placeholderFeature = this.features && this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n if (!this.disabled) {\r\n if (!this.activeFeature) {\r\n this.setDefault(layout);\r\n }\r\n if (this.activeFeature && !this.activeFeature.notAvailableInVisualizer) {\r\n this.setFeatureLayer(this.activeFeature, layout);\r\n if (Array.isArray(this.activeFeatureParts) && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n this.setFeatureLayer(activeFeaturePart, layout);\r\n })\r\n }\r\n }\r\n if (this.placeholderFeature) {\r\n this.setFeatureLayer(this.placeholderFeature, layout);\r\n }\r\n if (this.shadowFeature) {\r\n this.setFeatureLayer(this.shadowFeature, layout);\r\n }\r\n } else {\r\n this.hideLayers();\r\n }\r\n }\r\n\r\n setFeatureLayer(currentFeature, layout) {\r\n // console.log('currentFeature', currentFeature);\r\n if (!currentFeature || !currentFeature.dbFeature)\r\n return; //feature no longer exists\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n\r\n let s3Binding = find(currentFeature.dbFeature.s3Bindings,\r\n {entityID: this.featureDefinitionId(currentFeature), layout: layoutAbr});\r\n if (!s3Binding) {\r\n s3Binding = find(currentFeature.dbFeature.s3Bindings,\r\n {entityID: this.featureDefinitionId(currentFeature), layout: LayoutAbbreviation.All});\r\n }\r\n // !!! we need to check, either a specific layout or ALL layout only !!!\r\n // if (!s3Binding) {\r\n // s3Binding = find(currentFeature.dbFeature.s3Bindings,\r\n // {entityID: this.featureDefinitionId(currentFeature)});\r\n // }\r\n currentFeature.layer.fromS3Binding(s3Binding);\r\n }\r\n\r\n clickFromAllWalls(ignoreLocked) {\r\n this.handleClick(ignoreLocked, \"all_walls\");\r\n }\r\n\r\n tryToSetTheSameFeature(filteredFeatures, partName, placeholderName, shadowNeeded = false) {\r\n if (this.activeFeature) {\r\n const activeName = this.activeFeature.getSplittedFeatureName();\r\n this.activeFeature = filteredFeatures.find(feature => {\r\n const featureName = feature.getSplittedFeatureName();\r\n return activeName === featureName\r\n }) || null;\r\n // console.log('AF', filteredFeatures, this.activeFeature);\r\n this.placeholderFeature = filteredFeatures.find((feature) => {\r\n return placeholderName\r\n ? feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\"placeholder\")\r\n && feature.dbFeature.displayName.includes(placeholderName)\r\n : feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\"placeholder\")\r\n });\r\n if (shadowNeeded) {\r\n this.setShadowFeature();\r\n }\r\n if (this.activeFeature) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * @param ignoreLocked {boolean} // false by the default, is used by wizard ONLY\r\n */\r\n handleClick(ignoreLocked = false) {\r\n const parent = this.getParent();\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n parent.firstClick[activeQuoteIndex] = true; // allow to show active item\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (featureIsLocked) {\r\n parent.activeLockedFeature = this;\r\n } else {\r\n if (parent.activeLockedFeature) {\r\n parent.activeLockedFeature = null;\r\n }\r\n this.featureClick();\r\n }\r\n }\r\n\r\n featureClick() {\r\n const parent = this.getParent();\r\n parent.placeholderChanged = true;\r\n if (this.notAvailableInVisualizer) {\r\n parent.activeNotInVisualizerFeature = this; // do not change the activeFeature (in order to keep the layer)\r\n } else if (parent.activeNotInVisualizerFeature) {\r\n parent.activeNotInVisualizerFeature = null; // remove it from other searches and so on\r\n parent.activeFeature = this;\r\n } else {\r\n parent.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n setShadowFeature() {\r\n const parentGroup = this.getParent();\r\n let filteredAvailableFeatures = [];\r\n if (parentGroup.shadows && parentGroup.shadows.features && parentGroup.shadows.features.length) {\r\n const layoutAbr = this.getParent().layout.getCurrentLayoutAbbreviation();\r\n const filteredFeatures = parentGroup.shadows.features.filter((shadow) => {\r\n return Array.isArray(shadow.dbFeature.s3Bindings) && shadow.dbFeature.s3Bindings.some(binding => {\r\n return binding.layout === LayoutAbbreviation.All || binding.layout === layoutAbr\r\n })\r\n });\r\n const compatibleFeatures = filteredFeatures.filter(shadowFeature => {\r\n return shadowFeature.partName && this.shadowName && shadowFeature.partName === this.shadowName\r\n });\r\n filteredAvailableFeatures = this.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), compatibleFeatures);\r\n }\r\n this.shadowFeature = filteredAvailableFeatures.length ? filteredAvailableFeatures[0] : null;\r\n }\r\n\r\n getFeatureWithMeta(featuresArray, metaName, metaValue) {\r\n return featuresArray.find((feature) => {\r\n return feature.metaData[metaName] && feature.metaData[metaName].includes(metaValue);\r\n });\r\n }\r\n\r\n getFeaturesWithMeta(featuresArray, metaName, metaValue) {\r\n return featuresArray.filter((feature) => {\r\n return feature.metaData[metaName] && feature.metaData[metaName].includes(metaValue);\r\n });\r\n }\r\n\r\n hideLayers() {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.src = '';\r\n }\r\n if (Array.isArray(this.activeFeatureParts) && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.src = '';\r\n }\r\n })\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.src = '';\r\n }\r\n if (this.shadowFeature) {\r\n this.shadowFeature.layer.src = '';\r\n }\r\n }\r\n\r\n /** shower door, fixture methods **/\r\n static getCurrentShowerBodyId(shower) {\r\n let currentShowerBodyId = \"\";\r\n const showerTubComboIsActive = shower.showerTubComboIsActive();\r\n if (!showerTubComboIsActive && shower.showerBody && shower.showerBody.activeFeature) {\r\n currentShowerBodyId = shower.showerBody.activeFeature.showerBodyId;\r\n } else if (showerTubComboIsActive && shower.layout.parts[\"Shower Tub Combo\"]\r\n && shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration\r\n && shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration.activeFeature) {\r\n currentShowerBodyId = shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration.activeFeature.showerBodyId;\r\n }\r\n return currentShowerBodyId\r\n }\r\n\r\n rememberPreviousSelection(shower, currentActiveFeature) {\r\n const layoutAbbr = shower.layout.getCurrentLayoutAbbreviation();\r\n const currentShowerBodyId = IntermediatePart.getCurrentShowerBodyId(shower);\r\n const wallConfiguration = shower.layout.parts[\"Shower Tub Combo\"] && shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration;\r\n if (this.currentShowerBodyId !== currentShowerBodyId && currentActiveFeature && !currentActiveFeature.partName.includes(\"laceholder\")) {\r\n this.previouslySelectedFeatures[layoutAbbr][this.currentShowerBodyId] = currentActiveFeature; // remember previous active item\r\n if (wallConfiguration\r\n && wallConfiguration.features.some(feature => feature.showerBodyId === this.currentShowerBodyId)) {\r\n wallConfiguration.features.forEach((wallConfigurationFeature) => { // remember previous active item for all wall conf\r\n this.previouslySelectedFeatures[layoutAbbr][wallConfigurationFeature.showerBodyId] = currentActiveFeature;\r\n })\r\n }\r\n }\r\n this.currentShowerBodyId = currentShowerBodyId; // set new shower type\r\n }\r\n\r\n setDefaultAccordingToPreviousSelect(shower, filteredFeatures, hardCodedDefaultName, placeholderDefaultName = \"laceholder\") {\r\n const layoutAbbr = shower.layout.getCurrentLayoutAbbreviation();\r\n const currentShowerBodyId = IntermediatePart.getCurrentShowerBodyId(shower);\r\n // console.log('currentShowerBodyId', currentShowerBodyId);\r\n // console.log('this.previouslySelectedFeatures', this.previouslySelectedFeatures);\r\n\r\n if (this.currentShowerBodyId !== currentShowerBodyId && this.previouslySelectedFeatures[layoutAbbr][currentShowerBodyId]\r\n && filteredFeatures.some(f => f.dbFeature.id === this.previouslySelectedFeatures[layoutAbbr][currentShowerBodyId].dbFeature.id)) {\r\n this.activeFeature = this.previouslySelectedFeatures[layoutAbbr][currentShowerBodyId]; // restore from previous chosen\r\n } else {\r\n const hardCodedDefault = hardCodedDefaultName && filteredFeatures.find((feature) => {\r\n return !feature.notAvailableInVisualizer && feature.dbFeature.displayName && feature.dbFeature.displayName.includes(hardCodedDefaultName);\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n }\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return !feature.notAvailableInVisualizer && feature.dbFeature.displayName\r\n && feature.dbFeature.displayName.includes(placeholderDefaultName);\r\n });\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n\r\n /**\r\n * Returns matching feature (for example: return Mirrors with the same Color and DoorStyle as current selected Vanity)\r\n * @param feature {object} // current feature\r\n * @param activeFilterValueIDs {object} // current activeFeature filters (that needed to be matched)\r\n * @param filter1 {object} // featureGroup1\r\n * @param filter2 {object} // featureGroup2\r\n */\r\n static featureHasFilters(feature, activeFilterValueIDs, filter1, filter2) {\r\n const filterValueIDs = feature.dbFeature && feature.dbFeature.filterValueIDs;\r\n if (filterValueIDs) {\r\n const hasValues = filterValueIDs[filter1.id]\r\n && filterValueIDs[filter2.id]\r\n && activeFilterValueIDs[filter1.id]\r\n && activeFilterValueIDs[filter2.id]\r\n && filterValueIDs[filter1.id].includes(activeFilterValueIDs[filter1.id][0])\r\n && filterValueIDs[filter2.id].includes(activeFilterValueIDs[filter2.id][0]);\r\n // hasValues ? console.log('match-', feature) : null;\r\n return hasValues || false // false is needed here, because true !> undefined\r\n }\r\n return false\r\n }\r\n\r\n getSplittedFeatureName = () => {\r\n if(this._customDisplayName == null) {\r\n this._customDisplayName = this.getFeatureName()\r\n // .replace(/ 30/g, \"\") // we can't do that since room layout change is broken after that\r\n // .replace(/ 60/g, \"\")\r\n // .replace(/ LG/g, \"\")\r\n // .replace(/ SM/g, \"\");\r\n }\r\n return this._customDisplayName\r\n };\r\n\r\n getCountertopGroupsSplittedFeatureName = () => {\r\n if (this._countertopGroupsCustomDisplayName == null) {\r\n this._countertopGroupsCustomDisplayName = this.dbFeature.sharedFeatureName;\r\n }\r\n return this._countertopGroupsCustomDisplayName\r\n };\r\n\r\n getMatchingFeatureName = () => {\r\n return this.getSplittedFeatureName()\r\n };\r\n\r\n}\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { showLoading, hideLoading } from 'react-redux-loading-bar';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport CircularProgress from '@mui/material/CircularProgress';\r\n\r\nimport LoadingBar from '../../lib/react-redux-loading-bar';\r\nimport store from '../../store';\r\nimport {toggleLoader} from \"../../actions/actionFunctions\";\r\nimport COLOR_THEMES, {COLORS} from \"../../colorThemes\";\r\nimport {IS_LIXIL_UI} from \"../../config\";\r\n\r\nclass LoaderView extends React.Component {\r\n\r\n\r\n render() {\r\n const {iframe, loaderTitle, loaderText, loaderOpened, lookOpened, loaderFullScreen, activeTheme,\r\n visualizersLoaded, lookOverlayOpened} = this.props;\r\n\r\n if (!loaderOpened) {\r\n return null\r\n }\r\n\r\n if (IS_LIXIL_UI) {\r\n const color = visualizersLoaded.length ? COLORS.white : COLOR_THEMES[activeTheme].active\r\n return (\r\n
\r\n \r\n \r\n
\r\n )\r\n }\r\n\r\n // const {fabricatorData} = this.props;\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n

\r\n

\r\n {/*{fabricatorData.received ?

: null}*/}\r\n {/*{fabricatorData.received ?

: null}*/}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {activeTheme, visualizersLoaded} = store.serverState;\r\n const {loaderOpened, loaderTitle, loaderText, loaderFullScreen} = store.loaderState;\r\n const {lookOpened, lookOverlayOpened} = store.lookState;\r\n return {\r\n activeTheme,\r\n visualizersLoaded,\r\n loaderOpened,\r\n loaderTitle,\r\n loaderText,\r\n loaderFullScreen,\r\n lookOpened,\r\n lookOverlayOpened,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {})(LoaderView);\r\n\r\nexport function loaderEnable(loaderText = \"loader.defaultText\", loaderTitle = \"loader.defaultTitle\") {\r\n //null value is passed, and not defaulted with the above, so the below 2 lines handle if null or other falsey value is passed\r\n loaderText = loaderText || \"loader.defaultText\";\r\n loaderTitle = loaderTitle || \"loader.defaultTitle\";\r\n store.dispatch(showLoading());\r\n store.dispatch(toggleLoader(true, loaderText, loaderTitle));\r\n}\r\n\r\nexport function loaderDisable() {\r\n store.dispatch(hideLoading());\r\n store.dispatch(toggleLoader(false));\r\n}\r\n","import PropTypes from \"prop-types\";\r\n\r\nexport const dbFeatureInterface = {\r\n id: PropTypes.number, // unique id fro every feature\r\n price: PropTypes.number, // retail price\r\n cost: PropTypes.number, // fabricator price\r\n shippingCost: PropTypes.number, // shippingCost\r\n fabricatorCost: PropTypes.number, // discount price\r\n}\r\n\r\nexport const featureInterface = {\r\n metaData: PropTypes.object,\r\n dbFeature: PropTypes.shape(dbFeatureInterface),\r\n};\r\n\r\nexport const featureCollectionInterface = {\r\n id: PropTypes.number.isRequired,\r\n features: PropTypes.arrayOf(PropTypes.shape(featureInterface)),\r\n};\r\n\r\nexport const featureGroupInterface = {\r\n partName: PropTypes.string.isRequired,\r\n};\r\n\r\nexport const navItemInterface = {\r\n part: PropTypes.shape(featureInterface).isRequired,\r\n}\r\n","import invert from 'lodash/invert';\r\nimport uniqBy from 'lodash/uniqBy';\r\n\r\nimport {getFilterGroupValues, splitFeatureName} from \"../../../misc/utils\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport {Part} from \"./part\";\r\nimport store from '../../../store';\r\nimport {LayoutAbbreviation, LayoutType} from \"./constants\";\r\nimport {getFeatureIsLocked} from \"../../../misc/helpers\";\r\n\r\n/**\r\n * Used for Complex parts such as Vanity, to perform some base functionality for related items\r\n */\r\nexport class IntermediatePart extends Part {\r\n\r\n constructor(isChild) {\r\n super(false, isChild);\r\n this.disabled = false;\r\n this.defaultDisabled = false; // used after reset click\r\n this.canBeDisabled = false;\r\n }\r\n\r\n /**\r\n * This will be called on feature creation\r\n * @param dbFeature\r\n */\r\n load(dbFeature) {\r\n if (dbFeature.metaData[\"Part\"]) {\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return this.load_(dbFeature, new this.constructor(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n return this.load_(dbFeature, new this.constructor());\r\n }\r\n\r\n /**\r\n * This will be called by the underlying vanity feature with a concrete instance of the part\r\n * @param dbFeature\r\n * @param part {Part}\r\n * @param setParent {boolean}\r\n * @param features\r\n */\r\n load_(dbFeature, part, setParent = true, features = 'features') {\r\n\r\n if (!dbFeature.s3Bindings && features === \"featuresParts\") { // keep not-in-visualizer features in the main list\r\n features = \"features\"\r\n }\r\n\r\n const featureList = features + \"List\";\r\n\r\n const {displayName} = dbFeature;\r\n let {featureName} = splitFeatureName(displayName, dbFeature.groupName);\r\n if (!featureName && dbFeature.groupName && dbFeature.displayName) {\r\n featureName = dbFeature.displayName.replace(dbFeature.groupName + \" - \", \"\")\r\n }\r\n // console.log('displayName:', displayName);\r\n\r\n if (setParent) {\r\n part.getParent = () => this;\r\n if (dbFeature.galleryImages) {\r\n const featured = dbFeature.galleryImages.find(galImage => galImage.featured);\r\n if (featured) {\r\n this.featuredImage = featured.url\r\n }\r\n dbFeature.galleryImages = dbFeature.galleryImages.sort((a, b) => b.default - a.default)\r\n }\r\n }\r\n\r\n if (!dbFeature.sharedFeatureName) {\r\n console.error(\"No sharedFeatureName property:\", dbFeature);\r\n }\r\n\r\n part.partName = featureName;\r\n part.metaData = dbFeature.metaData || {};\r\n\r\n if (dbFeature.s3Bindings && dbFeature.s3Bindings.length) {\r\n // dbFeature.s3Bindings = dbFeature.s3Bindings.filter(binding => binding.visualizer === \"KitchenV5\")\r\n if (!dbFeature.metaData[\"CropCoords\"]) {\r\n dbFeature.s3Bindings = dbFeature.s3Bindings.map(object => {\r\n object.path = object.path.replace(\"-copy\", \"\");\r\n return object\r\n })\r\n }\r\n }\r\n\r\n part.dbFeature = dbFeature || {};\r\n if (!part.dbFeature.filterValueIDs) {\r\n part.dbFeature.filterValueIDs = {}\r\n }\r\n part.notAvailableInVisualizer = !dbFeature.s3Bindings || !dbFeature.s3Bindings.length;\r\n\r\n let someLayoutFound = false;\r\n if (part.metaData.RoomLayout) {\r\n const roomLayout = part.metaData.RoomLayout;\r\n if (roomLayout.includes(LayoutAbbreviation.All)) {\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n } else if (Array.isArray(roomLayout) && roomLayout.length) {\r\n roomLayout.forEach(roomLayoutAbbreviation => {\r\n const layoutName = invert(LayoutAbbreviation)[roomLayoutAbbreviation];\r\n if (layoutName) { // Prevent bad roomLayout Metadata\r\n if (!someLayoutFound) {\r\n someLayoutFound = true;\r\n }\r\n this[featureList][layoutName].push(part);\r\n }\r\n });\r\n } else { // single value\r\n const layoutName = invert(LayoutAbbreviation)[roomLayout];\r\n if (layoutName) {\r\n someLayoutFound = true;\r\n this[featureList][layoutName].push(part);\r\n }\r\n }\r\n }\r\n\r\n if (part.notAvailableInVisualizer || !part.metaData.RoomLayout || !someLayoutFound) {\r\n part.notAvailableInVisualizer = true;\r\n if (!someLayoutFound) {\r\n // remove old version layers so the feature will be as simple not-in-visualizer feature\r\n part.metaData.RoomLayout = null;\r\n part.dbFeature.metaData.RoomLayout = null;\r\n part.dbFeature.s3Bindings = null;\r\n }\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n }\r\n\r\n // Object.keys(LayoutType).forEach(layoutName => {\r\n // this[features+\"List\"][layoutName].push(part);\r\n // });\r\n\r\n this.loadFeatureCommon(part);\r\n\r\n return part\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions()\r\n }\r\n\r\n // navigationSubItems(filters, searchText, forFeature, filterGroups, firstOpenedFeature, firstOpenedConditions) { // to do\r\n navigationSubItems(filters, searchText, forFeature, filterGroups, restOptions = {}) {\r\n // const {firstOpenedFeature, firstOpenedConditions, returnAllFeatures} = restOptions;\r\n const {returnAllFeatures} = restOptions;\r\n const featuresList = this.getFeaturesForNavigationFrom(restOptions);\r\n\r\n // const featuresList = (forFeature && forFeature.metaData.layerPosition === SIDE_POSITIONS[1]) ? this.featuresParts : this.features;\r\n const filteredAvailableFeatures = this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters, featuresList), searchText);\r\n let featuresToDisplay = returnAllFeatures\r\n ? filteredAvailableFeatures\r\n : this.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n // console.log(\"filterGroups\", filterGroups);\r\n if (returnAllFeatures) {\r\n featuresToDisplay = uniqBy(featuresToDisplay, (feature) => feature.dbFeature.sharedFeatureName);\r\n }\r\n return this.navigationItemsWithOptions(filters, forFeature, filterGroups, featuresToDisplay)\r\n }\r\n\r\n navigationSubItemsWithFilter(propName, propValue, featuresToCheck = this.features) {\r\n return featuresToCheck.filter((feature) => {\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n }).map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n navigationSubItemsWithFilterMultipleConditions(arrayOfConditions, featuresToCheck = this.features) {\r\n // console.log('arrayOfConditions', arrayOfConditions);\r\n // console.log('featuresToCheck', featuresToCheck);\r\n return featuresToCheck.filter((feature) => {\r\n return feature.notAvailableInVisualizer || arrayOfConditions.every((conditionObject) => {\r\n const {propName, propValue} = conditionObject;\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n });\r\n })\r\n }\r\n\r\n setDefault(layout, setNotInVisFeature = this.hasNoVisualizerLayers) {\r\n this.setFeatureGroupDefault(layout, setNotInVisFeature)\r\n }\r\n\r\n setLayerPositions = (activeFeature = this.activeFeature) => {\r\n if (!activeFeature) {\r\n return\r\n }\r\n const layout = this.getParent().layout;\r\n const conditions = this.getArrayOfConditions();\r\n if (layout && this.defaultLayerLayoutPositions && this.defaultLayerLayoutPositions[layout.type]) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.defaultLayerLayoutPositions[layout.type] === key\r\n && (!this.layerPositions[key] || !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n } else if (activeFeature.dbFeature.metaData[\"layerPosition\"] !== key) {\r\n this.layerPositions[key] = null;\r\n }\r\n })\r\n } else {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (layout.initialized) {\r\n if ((activeFeature.dbFeature.metaData[\"layerPosition\"] === key)\r\n && (this.layerPositions[key] && !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n // } else if (this.setAllLayerPositions) {\r\n } else if (this.layerPositions[key]) { // here we have to change vanity cabinet to console for example\r\n const matchingPositionFeature = this.getMatchingPositionFeature(key);\r\n if (matchingPositionFeature) {\r\n this.layerPositions[key] = matchingPositionFeature;\r\n }\r\n }\r\n } else { // first time we should set everything by the default! // missing layers issue\r\n if ((activeFeature.dbFeature.metaData[\"layerPosition\"] === key)\r\n && (!this.layerPositions[key] || !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n // } else if (this.setAllLayerPositions) {\r\n } else {\r\n const matchingPositionFeature = this.getMatchingPositionFeature(key);\r\n if (matchingPositionFeature) {\r\n this.layerPositions[key] = matchingPositionFeature;\r\n }\r\n }\r\n }\r\n })\r\n }\r\n }\r\n\r\n toggleLayerPositions() {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n this.layerPositions[key] = this.disabled ? null : this.getMatchingPositionFeature(key)\r\n })\r\n }\r\n\r\n getMatchingPositionFeature = (position = \"\", fromFeature = this.activeFeature, fromLayout = null) => {\r\n if (fromFeature) { //just in case\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n let arrayOfConditions = this.getArrayOfConditions();\r\n if (fromFeature.metaData[\"SkuName\"]) {\r\n arrayOfConditions.push({\r\n propName: \"SkuName\",\r\n propValue: fromFeature.metaData[\"SkuName\"]\r\n })\r\n }\r\n if (fromLayout) {\r\n let roomLayoutMeta = arrayOfConditions.find(condition => condition.propName === \"RoomLayout\");\r\n let roomSceneMeta = arrayOfConditions.find(condition => condition.propName === \"RoomScene\");\r\n if (roomLayoutMeta) {\r\n roomLayoutMeta.propValue = fromLayout.getCurrentLayoutAbbreviation();\r\n }\r\n if (roomSceneMeta) {\r\n roomSceneMeta.propValue = fromLayout.scene;\r\n }\r\n }\r\n const skuNamesPartIds = [\"shower_door\", \"walk_in_tub\", \"shower_pan_combo\"];\r\n const whereToFind = (!this.layerPositions || (position === Object.keys(this.layerPositions)[0])) ? this.features : this.featuresParts;\r\n return whereToFind.find((feature) => {\r\n return (skuNamesPartIds.includes(this.partId) || name1 === feature.getSplittedFeatureName())\r\n && feature.matchesMetaForArrayOfConditions(arrayOfConditions) && feature.metaData[\"layerPosition\"] === position\r\n });\r\n }\r\n return null\r\n };\r\n\r\n getArrayOfConditions() {\r\n const layout = this.getParent().layout;\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: layout.getCurrentLayoutAbbreviation()\r\n }, {\r\n propName: 'RoomScene',\r\n propValue: layout.scene\r\n }];\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.hideLayerCondition && this.hideLayerCondition()) {\r\n this.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n if (this.hasAdditionalParts) {\r\n this.checkIfFeaturePartIsMatching();\r\n }\r\n return this._setLayers(layout);\r\n }\r\n this.setDefault(layout);\r\n return this._setLayers(layout);\r\n }\r\n\r\n showLayerPositionsModal() {\r\n return false\r\n }\r\n\r\n clickFromAllWalls(ignoreLocked) {\r\n if (this && this.dbFeature && this.dbFeature.sharedFeatureName) {\r\n console.log(`${this.partId}:`, this.dbFeature.sharedFeatureName);\r\n }\r\n this.handleClick(ignoreLocked, \"all_walls\");\r\n }\r\n\r\n /**\r\n * @param ignoreLocked {boolean} // false by the default, is used by wizard ONLY\r\n * @param clickFrom {string} // is used for countertop and cabinet switchers, and walls\r\n */\r\n handleClick(ignoreLocked = false, clickFrom = \"\") {\r\n const parent = this.getParent();\r\n if (clickFrom !== \"all_walls\") {\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n parent.firstClick[activeQuoteIndex] = true; // allow to show active item\r\n }\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (featureIsLocked) {\r\n parent.activeLockedFeature = this;\r\n } else {\r\n if (parent.activeLockedFeature) {\r\n parent.activeLockedFeature = null;\r\n }\r\n this.featureClick();\r\n }\r\n }\r\n\r\n featureClick() {\r\n const parent = this.getParent();\r\n parent.placeholderChanged = true;\r\n if (this.notAvailableInVisualizer) {\r\n parent.activeNotInVisualizerFeature = this; // do not change the activeFeature (in order to keep the layer)\r\n } else if (parent.activeNotInVisualizerFeature) {\r\n parent.activeNotInVisualizerFeature = null; // remove it from other searches and so on\r\n parent.activeFeature = this;\r\n } else {\r\n parent.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n hideLayers() {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.src = '';\r\n }\r\n if (Array.isArray(this.activeFeatureParts) && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.src = '';\r\n }\r\n })\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.src = '';\r\n }\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.src = '';\r\n }\r\n })\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n\r\n const getZIndex = (feature, partId = null) => {\r\n return feature.metaData[\"ZSorting\"] ? feature.metaData[\"ZSorting\"] * 1000 : zIndexes[partId || this.partId];\r\n }\r\n\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n const feature = this.layerPositions[key];\r\n if (feature) {\r\n feature.layer.zIndex = getZIndex(feature) + keyIndex*10;\r\n }\r\n })\r\n } else if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = getZIndex(this.activeFeature);\r\n if (this.hasAdditionalParts && this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart, keyIndex) => {\r\n activeFeaturePart.layer.zIndex = getZIndex(activeFeaturePart, this.additionalPartPartId);\r\n if (this.partId === \"bottom_cabinet\" || this.partId === \"bottom_handle\" || (this.activeFeatureParts.length > 3)) {\r\n activeFeaturePart.layer.zIndex = activeFeaturePart.layer.zIndex + (keyIndex + 1);\r\n return\r\n }\r\n activeFeaturePart.layer.zIndex = activeFeaturePart.layer.zIndex + ((keyIndex + 1) * 10);\r\n });\r\n }\r\n }\r\n }\r\n\r\n removeEdgeFromPartName(partName) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n if (edgeFilterGroup && edgeFilterGroup.values && edgeFilterGroup.values.length) {\r\n const edgeFilterGroupValues = edgeFilterGroup.values.sort((a,b) => {\r\n return a.value && b.value && (b.value.length - a.value.length)\r\n }); // 1st should be \"Full Bullnose\", then simple \"Bullnose\"\r\n edgeFilterGroupValues.forEach((filterGroupValue) => { // arrayOf {id: 293, value: \"Eased\", displayText: \"Eased\", parent_id: null, icon: \"\", …}\r\n partName = partName.split(\" \"+filterGroupValue.value).join(\"\");\r\n });\r\n }\r\n return partName\r\n }\r\n\r\n getCountertopGroupsSplittedFeatureName = () => {\r\n if (this._countertopGroupsCustomDisplayName == null) {\r\n this._countertopGroupsCustomDisplayName = this.dbFeature.sharedFeatureName || \"\";\r\n }\r\n return this._countertopGroupsCustomDisplayName\r\n };\r\n\r\n getSplittedFeatureName = () => {\r\n if (this._customDisplayName == null || this.dbFeature.wasUpdatedFromAnotherResponse) {\r\n this._customDisplayName = this.dbFeature.sharedFeatureName || this.partName || \"\";\r\n switch (this.partId) {\r\n case \"center_island_countertop\": {\r\n this._customDisplayName = this._customDisplayName\r\n .replace(/2 0 /g, \"\")\r\n .replace(/Center Island Countertop 1 /g, \"\");\r\n const manufacturerFilter = getFilterGroupValues(this, {id: 35});\r\n if (Array.isArray(manufacturerFilter)) {\r\n this._customDisplayName = this._customDisplayName + manufacturerFilter[0]\r\n }\r\n break;\r\n }\r\n case \"countertop\":\r\n case \"backsplash\": {\r\n const manufacturerFilter = getFilterGroupValues(this, {id: 35});\r\n if (Array.isArray(manufacturerFilter)) {\r\n this._customDisplayName = this._customDisplayName + manufacturerFilter[0]\r\n }\r\n break;\r\n }\r\n case \"sink\":\r\n case \"center_island_sink\": {\r\n this._customDisplayName = this._customDisplayName\r\n .replace(/ D/g, \"\")\r\n .replace(/ Countertop/g, \"\")\r\n .replace(/ Island/g, \"\")\r\n break;\r\n }\r\n case \"hood\": {\r\n // cases when LG LSHD3089SS and LG LSHD3089DS should match\r\n this._customDisplayName = this._customDisplayName.substring(0, this._customDisplayName.length - 2);\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n if (this.dbFeature.wasUpdatedFromAnotherResponse) {\r\n this.dbFeature.wasUpdatedFromAnotherResponse = false;\r\n }\r\n return this._customDisplayName\r\n };\r\n\r\n getMatchingFeatureName = () => {\r\n return this.getSplittedFeatureName()\r\n };\r\n\r\n getModuleFeatureName = () => {\r\n // return this.partName.split(\" M_\")[0];\r\n return this.partName.split(\" M\")[0];\r\n };\r\n\r\n featureIsMatchingFilters(currentFeature, activeFilters, filters = []) {\r\n return filters.every(filter => {\r\n return activeFilters[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id].includes(activeFilters[filter.id][0])\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && Number.isInteger(fromFeature.partNumber)) {\r\n let activeFeaturePart;\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n // if (this.partId === \"right_wall\") {\r\n // arrayOfConditions = arrayOfConditions.filter(condition => condition.propName !== \"MirrorSize\");\r\n // }\r\n activeFeatureParts = this.featuresParts.filter((feature) => name1 === feature.getSplittedFeatureName());\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n if (activeFeatureParts.length) {\r\n activeFeaturePart = activeFeatureParts.find((feature) => {\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n if (!activeFeaturePart) {\r\n activeFeaturePart = activeFeatureParts[0];\r\n }\r\n }\r\n activeFeatureParts = activeFeaturePart ? [activeFeaturePart] : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n checkIfFeaturePartIsMatching() {\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n const activeFeatureConditions = this.getActiveFeatureConditions();\r\n const name1 = this.activeFeature.getSplittedFeatureName();\r\n const activeFeaturePart = this.activeFeatureParts[0];\r\n if (!(activeFeaturePart.matchesMetaForArrayOfConditions(activeFeatureConditions)\r\n && name1 === activeFeaturePart.getSplittedFeatureName())) {\r\n this.activeFeatureParts = this.setActiveFeatureParts(this.activeFeature, activeFeatureConditions);\r\n }\r\n } else {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n }\r\n\r\n}\r\n","import invert from 'lodash/invert';\r\n\r\nimport {splitFeatureName} from \"../../../misc/utils\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport {Part} from \"./part\";\r\nimport store from '../../../store';\r\nimport {LayoutAbbreviation, LayoutType, LayoutAbbreviationsToRemove, SIDE_POSITIONS, PAN_POSITIONS} from \"./constants\";\r\nimport {getFeatureIsLocked} from \"../../../misc/helpers\";\r\nimport {IS_BATHROOM_OLD_BV_SCENE} from \"../../../config\";\r\n\r\n/**\r\n * Used for Complex parts such as Vanity, to perform some base functionality for related items\r\n */\r\nexport class IntermediatePart extends Part {\r\n\r\n constructor(isChild) {\r\n super(false, isChild);\r\n this.disabled = false;\r\n this.defaultDisabled = false; // used after reset click\r\n this.canBeDisabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n return this.load_(dbFeature, new this.constructor());\r\n }\r\n\r\n /**\r\n * This will be called by the underlying vanity feature with a concrete instance of the part\r\n * @param dbFeature\r\n * @param part {Part}\r\n * @param setParent {boolean}\r\n * @param features\r\n */\r\n load_(dbFeature, part, setParent = true, features = 'features') {\r\n\r\n const featureList = features + \"List\";\r\n\r\n const {displayName} = dbFeature;\r\n let {featureName} = splitFeatureName(displayName);\r\n if (!featureName && dbFeature.groupName && dbFeature.displayName) {\r\n featureName = dbFeature.displayName.replace(dbFeature.groupName + \" - \", \"\")\r\n }\r\n // console.log('displayName:', displayName);\r\n\r\n if (setParent) {\r\n part.getParent = () => this;\r\n if (dbFeature.galleryImages) {\r\n const featured = dbFeature.galleryImages.find(galImage => galImage.featured);\r\n if (featured) {\r\n this.featuredImage = featured.url\r\n }\r\n dbFeature.galleryImages = dbFeature.galleryImages.sort((a, b) => b.default - a.default)\r\n }\r\n }\r\n\r\n if (!dbFeature.sharedFeatureName) {\r\n console.error(\"No sharedFeatureName property:\", dbFeature);\r\n }\r\n\r\n part.partName = featureName;\r\n part.metaData = dbFeature.metaData || {};\r\n\r\n if (dbFeature.s3Bindings && dbFeature.s3Bindings.length) {\r\n // dbFeature.s3Bindings = dbFeature.s3Bindings.filter(binding => binding.visualizer === \"BathroomV5\")\r\n }\r\n\r\n part.dbFeature = dbFeature || {};\r\n if (!part.dbFeature.filterValueIDs) {\r\n part.dbFeature.filterValueIDs = {}\r\n }\r\n part.notAvailableInVisualizer = !dbFeature.s3Bindings || !dbFeature.s3Bindings.length;\r\n\r\n if (part.metaData.RoomLayout) {\r\n const roomLayout = part.metaData.RoomLayout;\r\n if (roomLayout.includes(LayoutAbbreviation.All)) {\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n } else if (Array.isArray(roomLayout) && roomLayout.length) {\r\n roomLayout.forEach(roomLayoutAbbreviation => {\r\n const layoutName = invert(LayoutAbbreviation)[roomLayoutAbbreviation];\r\n if (layoutName) { // Prevent bad roomLayout Metadata\r\n this[featureList][layoutName].push(part);\r\n }\r\n });\r\n } else { // single value\r\n const layoutName = invert(LayoutAbbreviation)[roomLayout];\r\n if(layoutName) {\r\n this[featureList][layoutName].push(part);\r\n }\r\n }\r\n }\r\n\r\n if (part.notAvailableInVisualizer || !part.metaData.RoomLayout) {\r\n part.notAvailableInVisualizer = true;\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n }\r\n\r\n // Object.keys(LayoutType).forEach(layoutName => {\r\n // this[features+\"List\"][layoutName].push(part);\r\n // });\r\n\r\n this.loadFeatureCommon(part);\r\n\r\n return part\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions()\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = this.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return this.returnUniqueNavFeatures(featuresToDisplay)\r\n }\r\n\r\n navigationSubItemsWithSides(filters, searchText) {\r\n const filteredAvailableFeatures = this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = this.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n\r\n let navFeatures = [];\r\n const activePosition = this.activeFeature && this.activeFeature.dbFeature.metaData[\"layerPosition\"]\r\n ? this.activeFeature.dbFeature.metaData[\"layerPosition\"]\r\n : SIDE_POSITIONS[0];\r\n navFeatures = featuresToDisplay.filter(feature => {\r\n return feature.dbFeature.metaData[\"layerPosition\"] === activePosition\r\n })\r\n featuresToDisplay.forEach(feature => {\r\n const skuName = feature.metaData[\"SkuName\"] ? feature.metaData[\"SkuName\"][0] : null;\r\n if ((IS_BATHROOM_OLD_BV_SCENE && !skuName) || (skuName && navFeatures.every(navFeature => {\r\n const skuName2 = navFeature.metaData[\"SkuName\"] ? navFeature.metaData[\"SkuName\"][0] : null;\r\n return skuName2 && (skuName2 !== skuName)\r\n }))) {\r\n navFeatures.push(feature)\r\n }\r\n })\r\n return this.returnUniqueNavFeatures(navFeatures)\r\n }\r\n\r\n navigationSubItemsWithFilter(propName, propValue, featuresToCheck = this.features) {\r\n return featuresToCheck.filter((feature) => {\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n }).map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n navigationSubItemsWithFilterMultipleConditions(arrayOfConditions, featuresToCheck = this.features) {\r\n // console.log('arrayOfConditions', arrayOfConditions);\r\n // console.log('featuresToCheck', featuresToCheck);\r\n return featuresToCheck.filter((feature) => {\r\n return feature.notAvailableInVisualizer || arrayOfConditions.every((conditionObject) => {\r\n const {propName, propValue} = conditionObject;\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n });\r\n })\r\n }\r\n\r\n setDefault(layout, setNotInVisFeature = false) {\r\n this.setFeatureGroupDefault(layout, setNotInVisFeature)\r\n }\r\n\r\n setLayerPositions = (activeFeature = this.activeFeature) => {\r\n if (!activeFeature) {\r\n return\r\n }\r\n const layout = this.getParent().layout;\r\n const conditions = this.getArrayOfConditions();\r\n if (layout && this.defaultLayerLayoutPositions && this.defaultLayerLayoutPositions[layout.type]) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.defaultLayerLayoutPositions[layout.type] === key\r\n && (!this.layerPositions[key] || !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n } else if (activeFeature.dbFeature.metaData[\"layerPosition\"] !== key) {\r\n this.layerPositions[key] = null;\r\n }\r\n })\r\n } else {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if ((activeFeature.dbFeature.metaData[\"layerPosition\"] === key)\r\n && (!this.layerPositions[key] || !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n }\r\n })\r\n }\r\n }\r\n\r\n getMatchingPositionFeature = (position = \"\", fromFeature = this.activeFeature) => {\r\n if (fromFeature) { //just in case\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n let arrayOfConditions = this.getArrayOfConditions();\r\n if (fromFeature.metaData[\"SkuName\"]) {\r\n arrayOfConditions.push({\r\n propName: \"SkuName\",\r\n propValue: fromFeature.metaData[\"SkuName\"]\r\n })\r\n }\r\n const skuNamesPartIds = [\"shower_door\", \"walk_in_tub\", \"shower_pan_combo\", \"replacement_tub\"];\r\n const whereToFind = (!this.layerPositions || (position === Object.keys(this.layerPositions)[0])) ? this.features : this.featuresParts;\r\n return whereToFind.find((feature) => {\r\n return (skuNamesPartIds.includes(this.partId) || name1 === feature.getSplittedFeatureName())\r\n && feature.matchesMetaForArrayOfConditions(arrayOfConditions) && feature.metaData[\"layerPosition\"] === position\r\n });\r\n }\r\n return null\r\n };\r\n\r\n getArrayOfConditions() {\r\n const layout = this.getParent().layout;\r\n const conditions = [{\r\n propName: 'RoomLayout',\r\n propValue: layout.getCurrentLayoutAbbreviation()\r\n }];\r\n if (document.kvConfig.userId === 140045) { // new_bathroom_2021.quotesflooring.com\r\n conditions.push({\r\n propName: 'RoomScene',\r\n propValue: layout.scene\r\n })\r\n }\r\n return conditions;\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n if (this.hasAdditionalParts) {\r\n this.checkIfFeaturePartIsMatching();\r\n }\r\n return this._setLayers(layout);\r\n }\r\n this.setDefault(layout);\r\n return this._setLayers(layout);\r\n }\r\n\r\n\r\n showLayerPositionsModal(forFeature) {\r\n const checkSidesFeatureGroups = [\"shower_door\", \"shower_fixture\", \"grab_bar\", \"large_corner_seat\",\r\n \"replacement_tub\", \"shower_pan_combo\", \"corner_caddie\", \"large_corner_caddie\", \"soap_dish\", \"walk_in_tub\",\r\n \"shower_seats\"];\r\n if (checkSidesFeatureGroups.includes(this.partId)) {\r\n const positionsAvailable = PAN_POSITIONS.filter(position => {\r\n return !!this.getMatchingPositionFeature(position, forFeature);\r\n });\r\n return positionsAvailable.length > 1\r\n }\r\n return false\r\n }\r\n\r\n clickFromAllWalls(ignoreLocked) {\r\n if (this && this.dbFeature && this.dbFeature.sharedFeatureName) {\r\n console.log(`${this.partId}:`, this.dbFeature.sharedFeatureName);\r\n }\r\n this.handleClick(ignoreLocked, \"all_walls\");\r\n }\r\n\r\n /**\r\n * @param ignoreLocked {boolean} // false by the default, is used by wizard ONLY\r\n */\r\n handleClick(ignoreLocked = false) {\r\n const parent = this.getParent();\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n parent.firstClick[activeQuoteIndex] = true; // allow to show active item\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (featureIsLocked) {\r\n parent.activeLockedFeature = this;\r\n } else {\r\n if (parent.activeLockedFeature) {\r\n parent.activeLockedFeature = null;\r\n }\r\n this.featureClick();\r\n }\r\n }\r\n\r\n featureClick() {\r\n const parent = this.getParent();\r\n parent.placeholderChanged = true;\r\n if (this.notAvailableInVisualizer) {\r\n parent.activeNotInVisualizerFeature = this; // do not change the activeFeature (in order to keep the layer)\r\n } else if (parent.activeNotInVisualizerFeature) {\r\n parent.activeNotInVisualizerFeature = null; // remove it from other searches and so on\r\n parent.activeFeature = this;\r\n } else {\r\n parent.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n hideLayers() {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.src = '';\r\n }\r\n if (Array.isArray(this.activeFeatureParts) && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.src = '';\r\n }\r\n })\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.src = '';\r\n }\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.src = '';\r\n }\r\n })\r\n }\r\n }\r\n\r\n removeLayoutFromPartName(partName) {\r\n LayoutAbbreviationsToRemove.forEach(abbr => {\r\n const spaceWithLayoutName = \" \"+abbr;\r\n partName = partName.replace(spaceWithLayoutName + \" \", \" \"); // 1) replace \" Agra S Some edge name\" -> \" Agra Some edge name\"\r\n if (partName.slice(-spaceWithLayoutName.length) === spaceWithLayoutName) {\r\n partName = partName.substring(0, partName.length - spaceWithLayoutName.length); // 2) replace \" Agra Some edge name S\" -> \" Agra Some edge name\"\r\n }\r\n });\r\n partName = partName.replace(\" Backsplash\", \"\");\r\n return partName\r\n }\r\n\r\n removeEdgeFromPartName(partName) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n if (edgeFilterGroup && edgeFilterGroup.values && edgeFilterGroup.values.length) {\r\n const edgeFilterGroupValues = edgeFilterGroup.values.sort((a,b) => {\r\n return a.value && b.value && (b.value.length - a.value.length)\r\n }); // 1st should be \"Full Bullnose\", then simple \"Bullnose\"\r\n edgeFilterGroupValues.forEach((filterGroupValue) => { // arrayOf {id: 293, value: \"Eased\", displayText: \"Eased\", parent_id: null, icon: \"\", …}\r\n partName = partName.split(\" \"+filterGroupValue.value).join(\"\");\r\n });\r\n }\r\n return partName\r\n }\r\n\r\n getCountertopGroupsSplittedFeatureName = () => {\r\n if (this._countertopGroupsCustomDisplayName == null) {\r\n this._countertopGroupsCustomDisplayName = this.dbFeature.sharedFeatureName;\r\n }\r\n return this._countertopGroupsCustomDisplayName\r\n };\r\n\r\n getSplittedFeatureName = () => {\r\n if (this._customDisplayName == null) {\r\n this._customDisplayName = this.dbFeature.sharedFeatureName || this.partName;\r\n if (this.partId ===\"vanity_sink\" || this.partId ===\"vanity_faucet\") {\r\n this._customDisplayName = this._customDisplayName.replace(/ D/g, \"\")\r\n } else if (this.partId === \"shower_interior_wall\") {\r\n // White Acrylic 30in 1 Moment Flat -> White Acrylic\r\n // Grey Garden 48in 1 Solid Surface -> Grey Garden\r\n this._customDisplayName = this._customDisplayName.replace(/ 60in/g, \"\").replace(/ 48in/g, \"\").replace(/ 30in/g, \"\").split(\" 1 \")[0]\r\n } else if (this.partId === \"shower_pan_combo\" && Array.isArray(this.metaData[\"SkuName\"]) && this.metaData[\"SkuName\"][0]) {\r\n this._customDisplayName = this.metaData[\"SkuName\"][0]\r\n }\r\n }\r\n return this._customDisplayName\r\n };\r\n\r\n getMatchingFeatureName = () => {\r\n return this.getSplittedFeatureName()\r\n };\r\n\r\n getModuleFeatureName = () => {\r\n // return this.partName.split(\" M_\")[0];\r\n return this.partName.split(\" M\")[0];\r\n };\r\n\r\n featureIsMatchingFilters(currentFeature, activeFilters, filters = []) {\r\n return filters.every(filter => {\r\n return activeFilters[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id].includes(activeFilters[filter.id][0])\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n let activeFeaturePart;\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n if (this.partId === \"right_wall\") {\r\n arrayOfConditions = arrayOfConditions.filter(condition => condition.propName !== \"MirrorSize\");\r\n }\r\n activeFeatureParts = this.featuresParts.filter((feature) => name1 === feature.getSplittedFeatureName());\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n if (activeFeatureParts.length) {\r\n activeFeaturePart = activeFeatureParts.find((feature) => {\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n if (!activeFeaturePart) {\r\n activeFeaturePart = activeFeatureParts[0];\r\n }\r\n }\r\n activeFeatureParts = activeFeaturePart ? [activeFeaturePart] : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n checkIfFeaturePartIsMatching() {\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n const activeFeatureConditions = this.getActiveFeatureConditions();\r\n const name1 = this.activeFeature.getSplittedFeatureName();\r\n const activeFeaturePart = this.activeFeatureParts[0];\r\n if (!(activeFeaturePart.matchesMetaForArrayOfConditions(activeFeatureConditions)\r\n && name1 === activeFeaturePart.getSplittedFeatureName())) {\r\n this.activeFeatureParts = this.setActiveFeatureParts(this.activeFeature, activeFeatureConditions);\r\n }\r\n } else {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n }\r\n\r\n\r\n // OLD SHOWER LOGIC\r\n\r\n rememberPreviousSelection(shower, currentActiveFeature) {\r\n const layoutAbbr = shower.layout.getCurrentLayoutAbbreviation();\r\n const currentShowerBodyId = IntermediatePart.getCurrentShowerBodyId(shower);\r\n const wallConfiguration = shower.layout.parts[\"Shower Tub Combo\"] && shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration;\r\n if (this.currentShowerBodyId !== currentShowerBodyId && currentActiveFeature && !currentActiveFeature.partName.includes(\"laceholder\")) {\r\n if (!this.previouslySelectedFeatures[layoutAbbr]) {\r\n this.previouslySelectedFeatures[layoutAbbr] = {}\r\n }\r\n this.previouslySelectedFeatures[layoutAbbr][this.currentShowerBodyId] = currentActiveFeature; // remember previous active item\r\n if (wallConfiguration\r\n && wallConfiguration.features.some(feature => feature.showerBodyId === this.currentShowerBodyId)) {\r\n wallConfiguration.features.forEach((wallConfigurationFeature) => { // remember previous active item for all wall conf\r\n this.previouslySelectedFeatures[layoutAbbr][wallConfigurationFeature.showerBodyId] = currentActiveFeature;\r\n })\r\n }\r\n }\r\n this.currentShowerBodyId = currentShowerBodyId; // set new shower type\r\n }\r\n\r\n setDefaultAccordingToPreviousSelect(shower, filteredFeatures, hardCodedDefaultName, placeholderDefaultName = \"laceholder\") {\r\n const layoutAbbr = shower.layout.getCurrentLayoutAbbreviation();\r\n const currentShowerBodyId = IntermediatePart.getCurrentShowerBodyId(shower);\r\n // console.log('currentShowerBodyId', currentShowerBodyId);\r\n // console.log('this.previouslySelectedFeatures', this.previouslySelectedFeatures);\r\n\r\n if (this.currentShowerBodyId !== currentShowerBodyId\r\n && this.previouslySelectedFeatures[layoutAbbr]\r\n && this.previouslySelectedFeatures[layoutAbbr][currentShowerBodyId]\r\n && filteredFeatures.some(f => f.dbFeature.id === this.previouslySelectedFeatures[layoutAbbr][currentShowerBodyId].dbFeature.id)) {\r\n this.activeFeature = this.previouslySelectedFeatures[layoutAbbr][currentShowerBodyId]; // restore from previous chosen\r\n } else {\r\n const hardCodedDefault = hardCodedDefaultName && filteredFeatures.find((feature) => {\r\n return !feature.notAvailableInVisualizer && feature.dbFeature.displayName && feature.dbFeature.displayName.includes(hardCodedDefaultName);\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n }\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return !feature.notAvailableInVisualizer && feature.dbFeature.displayName\r\n && feature.dbFeature.displayName.includes(placeholderDefaultName);\r\n });\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n\r\n /** shower door, fixture methods **/\r\n static getCurrentShowerBodyId(shower) {\r\n let currentShowerBodyId = \"\";\r\n const showerTubComboIsActive = shower.showerTubComboIsActive();\r\n if (!showerTubComboIsActive && shower.showerBody && shower.showerBody.activeFeature) {\r\n currentShowerBodyId = shower.showerBody.activeFeature.showerBodyId;\r\n } else if (showerTubComboIsActive && shower.layout.parts[\"Shower Tub Combo\"]\r\n && shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration\r\n && shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration.activeFeature) {\r\n currentShowerBodyId = shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration.activeFeature.showerBodyId;\r\n }\r\n return currentShowerBodyId\r\n }\r\n\r\n\r\n}\r\n","import {useEffect} from \"react\";\r\n\r\nimport {compareCoords, getCommonCoords, getFeatureCoords} from \"../../lookFunctions\";\r\nimport {getCurrentLayout} from \"../../../../appLayout\";\r\nimport {featureHasSelectedFilters, s3FilterImagePath} from \"../../../../../misc/utils\";\r\nimport {WIZARD_GROUP_TYPES} from \"../../../../../interfaces/wizardItemInterface\";\r\nimport Misc from \"../../../../../misc/misc\";\r\nimport {getCompressedFeature} from \"../../../../../misc/backendFunctions\";\r\nimport {getBvFeatures} from \"../../../../../api/server-api\";\r\nimport store from \"../../../../../store\";\r\nimport {setWizardMissingFeatures} from \"../../../../../actions/wizardFunctions\";\r\nimport {getFeatureGroupFeaturesQuantity} from \"../../lookNavigationFunctions\";\r\nimport {AVAILABLE_VISUALIZER_TYPES, getCommonVisualizerType} from \"../../../../../config\";\r\nimport {isSameVisualizerWizard, selectedWizardGroupIsNotInCurrentStepAnymore} from \"./lookWizardFunctions2\";\r\n\r\nconst regexForWizardId = /\\/wizard\\/(.*?)$/;\r\n\r\n/**\r\n * returns current wizard list for visualizer\r\n * @param wizardList {[wizardItemInterface]}\r\n * @param activePreset {string|number}\r\n * @returns {wizardItemInterface[]}\r\n */\r\nexport const getCurrentWizardList = (wizardList, activePreset) => {\r\n return wizardList.filter(wizardItem => !wizardIsDisabled(wizardItem, activePreset))\r\n}\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param wizardItem {wizardItemInterface}\r\n * @param activePreset {string|number}\r\n * @returns {boolean}\r\n */\r\nexport const wizardIsDisabled = (wizardItem, activePreset) => {\r\n if (!isSameVisualizerWizard(wizardItem)) {\r\n return true\r\n }\r\n return !wizardItem.disabledScenes || (typeof activePreset !== \"undefined\" && wizardItem.disabledScenes.includes(activePreset))\r\n}\r\n\r\n/**\r\n * checks if we need to show the wizard in the project scope and shoppingcart for the QuotingTool\r\n * @param wizardList {[wizardItemInterface]}\r\n * @param wizardIsActive {boolean}\r\n * @returns {boolean}\r\n */\r\nexport const showWizardInsteadOfQT = (wizardList, wizardIsActive) => {\r\n return wizardIsActive && wizardList.length\r\n}\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param wizardList {[wizardItemInterface]}\r\n * @param location {object}\r\n * @returns wizardActiveItem {wizardItemInterface}\r\n */\r\nexport const getActiveWizardItem = (wizardList, location) => {\r\n if (!Array.isArray(wizardList) || !location) {\r\n return null\r\n }\r\n const match = location.pathname.match(regexForWizardId);\r\n if (!Array.isArray(match) || !match[1]) {\r\n return null\r\n }\r\n const stringId = +match[1];\r\n return wizardList.find(wizItem => wizItem.id === stringId);\r\n}\r\n\r\n\r\n/**\r\n * returns layout's featureGroup\r\n * @param wizardGroup {wizardGroupInterface}\r\n * @returns featureGroup {featureGroupInterface}\r\n */\r\nexport const getFeatureGroupFromWizardGroup = (wizardGroup) => {\r\n if (!wizardGroup) {\r\n return null\r\n }\r\n const layout = getCurrentLayout();\r\n if (layout.visualizerType === AVAILABLE_VISUALIZER_TYPES.Kitchen || layout.visualizerType === AVAILABLE_VISUALIZER_TYPES.kvScene) {\r\n switch (wizardGroup.groupName) {\r\n case \"Edge Profile\":\r\n return layout.getFeatureGroupByPartId(wizardGroup.isCenterIslandGroup ? \"center_island_edge\" : \"edge_profile\")\r\n case \"Sink\":\r\n return layout.getFeatureGroupByPartId(wizardGroup.isCenterIslandGroup ? \"center_island_sink\" : \"sink\")\r\n case \"Faucet\":\r\n return layout.getFeatureGroupByPartId(wizardGroup.isCenterIslandGroup ? \"center_island_faucet\" : \"faucet\")\r\n default:\r\n break;\r\n }\r\n }\r\n return layout.getFeatureGroupByGroupName(wizardGroup.groupName)\r\n}\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param wizardList {[wizardItemInterface]}\r\n * @param partId {string}\r\n * @param activePreset {number|string} // check\r\n * @param firstOnly {boolean} // determines if we need to check only first step featureGroups or all\r\n * @returns wizardActiveItem {wizardItemInterface}\r\n */\r\nexport const categoryIsInTheWizard = (wizardList, partId = \"\", activePreset, firstOnly = true) => {\r\n if (!Array.isArray(wizardList) || !partId) {\r\n return null\r\n }\r\n return wizardList.find(wizItem => {\r\n if (wizardIsDisabled(wizItem, activePreset)) {\r\n return false\r\n }\r\n let lookWhere = firstOnly ? getCurrentGroupsFromSource(\"0\", wizItem) : wizItem.wizardGroups;\r\n if (firstOnly && Array.isArray(lookWhere) && lookWhere.length && lookWhere.every(wizGroup => wizGroup.nodeType === \"custom\")) {\r\n lookWhere = lookWhere.reduce((total, wizGroup) => {\r\n return [...total, ...getCurrentGroupsFromSource(wizGroup.id, wizItem)]\r\n }, []);\r\n }\r\n return lookWhere.some(wizardGroup => {\r\n if (wizardGroup.nodeType !== \"group\") {\r\n return false;\r\n }\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n if (!featureGroup) {\r\n return false\r\n }\r\n return featureGroup.partId === partId\r\n })\r\n })\r\n}\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param wizardList {[wizardItemInterface]}\r\n * @param params {object}\r\n * @returns wizardActiveItem {wizardItemInterface}\r\n */\r\nexport const getMaterialsWizardItem = (wizardList, params) => {\r\n if (!Array.isArray(wizardList) || !params) {\r\n return null\r\n }\r\n return wizardList.find(wizItem => {\r\n if (!isSameVisualizerWizard(wizItem)) {\r\n return false\r\n }\r\n return (Misc.getUrlFromString(wizItem.name) === params.partName || wizItem.id === +params.partName)\r\n }) || getDefaultMaterialsWizardItem()\r\n}\r\n\r\n/**\r\n * returns default wizard on switch to page\r\n * @returns wizardActiveItem {wizardItemInterface}\r\n */\r\nexport const getDefaultMaterialsWizardItem = () => {\r\n const {quotesState, wizardState} = store.getState();\r\n const {wizardList, allWizardsValues, wizardActiveItem} = wizardState;\r\n const {activeQuoteIndex} = quotesState;\r\n if (!Array.isArray(wizardList)) {\r\n return null\r\n }\r\n const currentVisType = getCommonVisualizerType();\r\n const lastSelectedWizardInThisQuote = Array.isArray(allWizardsValues) ? allWizardsValues.find(wizItem => {\r\n return wizItem.quoteIndex === activeQuoteIndex && wizItem.isLastActiveWizard\r\n && isSameVisualizerWizard(wizItem, currentVisType)\r\n }) : null;\r\n if (lastSelectedWizardInThisQuote) {\r\n const foundWizItem = wizardList.find(wizItem => wizItem.id === lastSelectedWizardInThisQuote.wizardItemId);\r\n if (foundWizItem) {\r\n return foundWizItem\r\n }\r\n }\r\n if (wizardActiveItem && isSameVisualizerWizard(wizardActiveItem, currentVisType)) {\r\n return wizardActiveItem\r\n }\r\n return wizardList.find(wizItem => isSameVisualizerWizard(wizItem, currentVisType)) || wizardList[0]\r\n}\r\n\r\nlet cachedSiblingFeatures = []; // {wizardId: number, groups: [{}, {}], totalFeatures: [] }\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param source {string}\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @returns array {[wizardGroupInterface]}\r\n */\r\nexport const getCurrentGroupsFromSource = (source, wizardActiveItem) => {\r\n if (!wizardActiveItem) {\r\n return []\r\n }\r\n const siblingGroups = wizardActiveItem.wizardGroups.filter(wizGroup => {\r\n return wizardActiveItem.wizardEdges.some(wizEdge => wizEdge.source === source && wizEdge.target === wizGroup.id)\r\n });\r\n // console.log(\"siblingGroups\", siblingGroups);\r\n const areSameSiblingGroups = siblingGroups.length > 1 && siblingGroups.every(siblingGroup => {\r\n return (siblingGroup.nodeType === WIZARD_GROUP_TYPES.group) && (siblingGroup.groupName === siblingGroups[0].groupName)\r\n });\r\n if (areSameSiblingGroups) {\r\n // console.log(\"cachedSiblingFeatures\", cachedSiblingFeatures);\r\n\r\n if (siblingGroups.every(wizardGroup => wizardGroup.useIncluded && wizardGroup.featuresIncluded)) { // new logic\r\n let featuresIncluded = [];\r\n const alreadyCached = cachedSiblingFeatures.find(cacheObject => {\r\n return (cacheObject.wizardId === wizardActiveItem.id) && (cacheObject.groups.every((wGroup, wGroupIndex) => {\r\n return siblingGroups[wGroupIndex] && (wGroup.id === siblingGroups[wGroupIndex].id)\r\n }))\r\n })\r\n // console.log(\"alreadyCached\", alreadyCached);\r\n if (alreadyCached) {\r\n featuresIncluded = alreadyCached.totalFeatures;\r\n } else {\r\n featuresIncluded = siblingGroups.reduce((total, wizardGroup) => {\r\n wizardGroup.featuresIncluded.forEach(included => {\r\n if (!total.some(exclObj => (exclObj.featureDefinitionId === included.featureDefinitionId))) {\r\n total.push(included)\r\n }\r\n })\r\n return total\r\n }, []);\r\n cachedSiblingFeatures.push({\r\n wizardId: wizardActiveItem.id,\r\n groups: siblingGroups,\r\n totalFeatures: featuresIncluded\r\n })\r\n }\r\n const newGroup = Object.assign({}, siblingGroups[0], {\r\n mergedGroups: siblingGroups,\r\n featuresExcluded: [], // not sure if we need it\r\n featuresIncluded\r\n })\r\n return [newGroup]\r\n }\r\n\r\n const allFeaturesExcluded = siblingGroups.reduce((total, wizardGroup) => {\r\n wizardGroup.featuresExcluded.forEach(excluded => {\r\n if (!excluded) {\r\n return\r\n }\r\n if (typeof excluded === \"object\") { // new logic for excluded\r\n if (!total.some(exclObj => (typeof exclObj === \"object\") && (exclObj.featureDefinitionId === excluded.featureDefinitionId))) {\r\n total.push(excluded)\r\n }\r\n } else if (!total.includes(excluded)) {\r\n total.push(excluded)\r\n }\r\n })\r\n return total\r\n }, []);\r\n const featuresExcluded = allFeaturesExcluded.filter(exclFeature => {\r\n return siblingGroups.every(siblingGroup => {\r\n if (typeof exclFeature === \"object\") {\r\n return siblingGroup.featuresExcluded.some(exclObj => {\r\n return (exclObj !== null)\r\n && (typeof exclObj === \"object\")\r\n && (exclObj.featureDefinitionId === exclFeature.featureDefinitionId)\r\n })\r\n }\r\n return siblingGroup.featuresExcluded.includes(exclFeature) // reaally old support\r\n })\r\n })\r\n const newGroup = Object.assign({}, siblingGroups[0], {\r\n mergedGroups: siblingGroups,\r\n featuresExcluded\r\n })\r\n return [newGroup]\r\n }\r\n return siblingGroups\r\n}\r\n\r\nexport const getCorrectedWizardGroupId = (stepGroups, stepSelectedValue) => {\r\n if ((stepGroups.length === 1) && stepGroups[0].mergedGroups && stepSelectedValue && stepSelectedValue.wizardGroup\r\n && (stepSelectedValue.wizardGroup.groupName === stepGroups[0].groupName)\r\n && stepGroups[0].mergedGroups.some(wizG => wizG.id === stepSelectedValue.wizardGroup.id)) {\r\n const correctedWizG = Object.assign({}, stepGroups[0], {\r\n id: stepSelectedValue.wizardGroup.id\r\n });\r\n return [correctedWizG]\r\n }\r\n return stepGroups\r\n}\r\n\r\n/**\r\n * returns fixed wizard group for merged groups\r\n * @param wizardGroup {wizardGroupInterface}\r\n * @param feature {featureInterface}\r\n * @returns {wizardGroupInterface}\r\n */\r\nexport const getCorrectedWizardGroupForFeature = (wizardGroup, feature) => {\r\n if (wizardGroup.mergedGroups && feature) {\r\n const realWizardGroup = wizardGroup.mergedGroups.find(wizG => !navItemIsExcluded({part: feature}, wizG));\r\n if (realWizardGroup && (realWizardGroup.id !== wizardGroup.id)) {\r\n return Object.assign({}, wizardGroup, {\r\n id: realWizardGroup.id\r\n })\r\n }\r\n }\r\n return wizardGroup\r\n}\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @param wizardActiveStep {number}\r\n * @param wizardSelectedValues {object}\r\n * @param prevStepGroups {[wizardGroupInterface]}\r\n * @param additionalWizardValuesToCheck {object}\r\n * @returns {array}\r\n */\r\nexport const getCurrentGroups = (wizardActiveItem,\r\n wizardActiveStep,\r\n wizardSelectedValues,\r\n prevStepGroups = [],\r\n additionalWizardValuesToCheck= null) => {\r\n if (!wizardActiveItem || wizardActiveStep < 0) {\r\n return []\r\n }\r\n const stepStr = \"\" + wizardActiveStep;\r\n\r\n const toCheckValue = wizardSelectedValues[wizardActiveStep] || (additionalWizardValuesToCheck\r\n ? additionalWizardValuesToCheck[wizardActiveStep] : null);\r\n\r\n if (wizardActiveStep === 0) {\r\n return getCorrectedWizardGroupId(\r\n getCurrentGroupsFromSource(stepStr, wizardActiveItem),\r\n toCheckValue\r\n )\r\n }\r\n\r\n const selectedPrevStep = wizardSelectedValues[wizardActiveStep - 1];\r\n if (!selectedPrevStep || !selectedPrevStep.wizardGroup\r\n || (prevStepGroups.length && selectedWizardGroupIsNotInCurrentStepAnymore(selectedPrevStep, prevStepGroups))) {\r\n if (prevStepGroups.length && prevStepGroups[0].id) {\r\n if (additionalWizardValuesToCheck) { // here we check also previously selected values to make steps similar to prev choices\r\n let foundPreviouslySelectedGroup = null;\r\n if (prevStepGroups.every(wg => wg.nodeType === \"custom\")) {\r\n Object.keys(additionalWizardValuesToCheck).forEach(key => {\r\n if ((key > Object.keys(wizardSelectedValues).length)\r\n && !additionalWizardValuesToCheck[key].partId\r\n && additionalWizardValuesToCheck[key].wizardGroup) {\r\n prevStepGroups.forEach(wg => {\r\n if (wg.id === additionalWizardValuesToCheck[key].wizardGroup.id) {\r\n foundPreviouslySelectedGroup = wg;\r\n }\r\n });\r\n }\r\n });\r\n } else {\r\n // here we can add simple feature group, but no need for now\r\n }\r\n if (foundPreviouslySelectedGroup) {\r\n return getCorrectedWizardGroupId(\r\n getCurrentGroupsFromSource(foundPreviouslySelectedGroup.id, wizardActiveItem),\r\n toCheckValue\r\n )\r\n }\r\n }\r\n const suggestedStepGroups = getCurrentGroupsFromSource(prevStepGroups[0].id, wizardActiveItem);\r\n if ((suggestedStepGroups.length === 1 && (suggestedStepGroups[0].nodeType === \"group\") && suggestedStepGroups[0].mergedGroups && suggestedStepGroups[0].mergedGroups.length)\r\n && additionalWizardValuesToCheck && Object.keys(additionalWizardValuesToCheck).length) {\r\n // here we check if there are selections in the old flow that might actually help to select current product\r\n if (toCheckValue && toCheckValue.wizardGroup\r\n && (toCheckValue.wizardGroup.groupName === suggestedStepGroups[0].groupName)\r\n && toCheckValue.selectedFeature\r\n && suggestedStepGroups[0].mergedGroups.some(wizG => !navItemIsExcluded({part: toCheckValue.selectedFeature}, wizG))) {\r\n return [getCorrectedWizardGroupForFeature(\r\n suggestedStepGroups[0],\r\n toCheckValue.selectedFeature\r\n )]\r\n } else if (!toCheckValue || !toCheckValue.wizardGroup || (toCheckValue.wizardGroup.groupName !== suggestedStepGroups[0].groupName)) {\r\n // here we check if there are selections in the old flow that might actually help to select current product\r\n for (let key = Object.keys(wizardSelectedValues).length + 1; key < Object.keys(additionalWizardValuesToCheck).length; key++) {\r\n if (key && (key > Object.keys(wizardSelectedValues).length)\r\n && additionalWizardValuesToCheck[key]\r\n && additionalWizardValuesToCheck[key].wizardGroup\r\n && additionalWizardValuesToCheck[key].selectedFeature\r\n && (additionalWizardValuesToCheck[key].wizardGroup.groupName === suggestedStepGroups[0].groupName)\r\n && suggestedStepGroups[0].mergedGroups.some(wizG => !navItemIsExcluded({part: additionalWizardValuesToCheck[key].selectedFeature}, wizG))) {\r\n return [getCorrectedWizardGroupForFeature(\r\n suggestedStepGroups[0],\r\n additionalWizardValuesToCheck[key].selectedFeature\r\n )]\r\n }\r\n }\r\n }\r\n }\r\n return getCorrectedWizardGroupId(\r\n suggestedStepGroups,\r\n toCheckValue\r\n )\r\n }\r\n // console.log(\"Previous step is not selected! Check selected values --> \", wizardSelectedValues);\r\n return []\r\n }\r\n\r\n if (selectedPrevStep && selectedPrevStep.wizardGroup && selectedPrevStep.wizardGroup.mergedGroups && selectedPrevStep.selectedFeature) {\r\n const wizardGroupWithSelectedFeature = selectedPrevStep.wizardGroup.mergedGroups.find(wizGroup => {\r\n return !navItemIsExcluded({part: selectedPrevStep.selectedFeature}, wizGroup)\r\n });\r\n if (wizardGroupWithSelectedFeature) {\r\n return getCorrectedWizardGroupId(\r\n getCurrentGroupsFromSource(wizardGroupWithSelectedFeature.id, wizardActiveItem),\r\n toCheckValue\r\n )\r\n }\r\n }\r\n\r\n // const prevStepStr = \"\" + (wizardActiveStep - 1);\r\n // const prevGroups = getCurrentGroupsFromSource(prevStepStr, wizardActiveItem);\r\n // if (prevGroups.length > 1 && wizardActiveStep > 0) {\r\n // return [selectedPrevStep.wizardGroup]\r\n // }\r\n\r\n return getCorrectedWizardGroupId(\r\n getCurrentGroupsFromSource(selectedPrevStep.wizardGroup.id, wizardActiveItem),\r\n toCheckValue\r\n )\r\n}\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @param wizardSelectedValues {object}\r\n * @param returnAllSteps {boolean}\r\n * @param additionalWizardValuesToCheck {object}\r\n * @returns {array}\r\n */\r\nexport const getAvailableSteps = (wizardActiveItem, wizardSelectedValues, returnAllSteps, additionalWizardValuesToCheck = null) => {\r\n if (!wizardActiveItem || !wizardActiveItem.wizardGroups || !wizardActiveItem.wizardEdges) {\r\n return []\r\n }\r\n\r\n const maxWizardSteps = 50;\r\n\r\n let stepsArray = [{\r\n stepIndex: 0,\r\n stepGroups: getCorrectedWizardGroupId(getCurrentGroupsFromSource(\"0\", wizardActiveItem), wizardSelectedValues[0]),\r\n }];\r\n\r\n for (let i = 1; i <= maxWizardSteps; i++) {\r\n const prevStepGroups = returnAllSteps && stepsArray[i - 1] ? stepsArray[i - 1].stepGroups : [];\r\n const currentGroups = getCurrentGroups(wizardActiveItem, i, wizardSelectedValues, prevStepGroups, additionalWizardValuesToCheck)\r\n if (!currentGroups.length) {\r\n break;\r\n }\r\n stepsArray.push({\r\n stepIndex: i,\r\n stepGroups: currentGroups\r\n })\r\n }\r\n\r\n return stepsArray\r\n}\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param currentGroups {[wizardGroupInterface]}\r\n * @returns {array}\r\n */\r\nexport const getWizardStepCommonCoords = (currentGroups) => {\r\n if (!currentGroups.length) {\r\n return []\r\n }\r\n let commonCoords = {};\r\n for (let i = 0; i < currentGroups.length; i++) {\r\n const wizardGroup = currentGroups[i];\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n if (!featureGroup) {\r\n continue\r\n }\r\n const currentCoords = featureGroup.activeFeature ? getFeatureCoords(featureGroup.activeFeature) : getCommonCoords(featureGroup);\r\n commonCoords = compareCoords(currentCoords, currentCoords);\r\n }\r\n\r\n return commonCoords\r\n}\r\n\r\n/**\r\n * returns closest wizard group with nodeType === group\r\n * @param wizardGroup {wizardGroupInterface}\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @returns {array}\r\n */\r\nexport const findParentWizardFeatureGroup = (wizardGroup, wizardActiveItem) => {\r\n if (!wizardGroup || !wizardActiveItem) {\r\n return null\r\n }\r\n let wizardFeatureParentGroup = null;\r\n\r\n let maxStack = 5;\r\n let currentTry = 0;\r\n const recursiveFindParent = (checkWizardGroup) => {\r\n const sourceEdge = wizardActiveItem.wizardEdges.find(wizEdge => wizEdge.target === checkWizardGroup.id);\r\n const nextToCheckWizardGroup = wizardActiveItem.wizardGroups.find(wizGroup => wizGroup.id === sourceEdge.source);\r\n if (nextToCheckWizardGroup && nextToCheckWizardGroup.nodeType === \"group\") {\r\n wizardFeatureParentGroup = nextToCheckWizardGroup;\r\n } else if (nextToCheckWizardGroup && currentTry < maxStack) {\r\n currentTry++;\r\n recursiveFindParent(nextToCheckWizardGroup)\r\n }\r\n }\r\n recursiveFindParent(wizardGroup)\r\n\r\n return wizardFeatureParentGroup\r\n}\r\n/**\r\n * returns closest wizard group with nodeType === group\r\n * @param featureGroup {featureGroupInterface}\r\n * @param selectedFilters {array}\r\n * @returns {featureInterface}\r\n */\r\nexport const findFeatureBySelectedFilters = (featureGroup, selectedFilters) => {\r\n if (!featureGroup || !selectedFilters) {\r\n return null\r\n }\r\n if (featureGroup.activeFeature && featureHasSelectedFilters(featureGroup.activeFeature, selectedFilters)) {\r\n return featureGroup.activeFeature\r\n }\r\n const layout = getCurrentLayout();\r\n const navItems = layout.designNavigationItems({part: featureGroup}, selectedFilters);\r\n if (!navItems.length) {\r\n return null\r\n }\r\n if (navItems.length > 1 && featureGroup.activeFeature && featureGroup.activeFeature.dbFeature.sharedFeatureName.includes(\".\")) {\r\n const skuColor = \".\" + featureGroup.activeFeature.dbFeature.sharedFeatureName.split(\".\")[1];\r\n const sameColor = navItems.find(navItem => navItem.part.dbFeature.sharedFeatureName.includes(skuColor));\r\n if (sameColor) {\r\n return sameColor.part\r\n }\r\n }\r\n return navItems[0].part\r\n}\r\n\r\n/**\r\n * @param currentFilterValue {object} filterValueInterface\r\n * @param filterGroup {object} filterGroupInterface\r\n * @returns {object}\r\n */\r\nexport const getFilterValueThumbnailAndStyles = (currentFilterValue, filterGroup) => {\r\n\r\n const getFilterItemThumbnail = () => {\r\n const additionalImages = currentFilterValue.additionalImages;\r\n if (Array.isArray(additionalImages) && additionalImages.length) {\r\n return additionalImages[0].imageUrl\r\n }\r\n return s3FilterImagePath(currentFilterValue.icon);\r\n }\r\n\r\n let thumbnail = getFilterItemThumbnail();\r\n const isColor = (filterGroup.name || \"\").toLowerCase().includes(\"color\");\r\n\r\n const styles = {\r\n backgroundSize: isColor ? \"cover\" : \"contain\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundPosition: \"center\",\r\n };\r\n if (thumbnail) {\r\n styles.backgroundImage = \"url(\" + thumbnail + \")\";\r\n }\r\n if (!thumbnail && currentFilterValue && isColor) {\r\n styles.backgroundColor = currentFilterValue.value;\r\n }\r\n\r\n return {thumbnail, styles}\r\n}\r\n\r\n/**\r\n * @param navItem {navItemInterface}\r\n * @param wizardGroup {wizardGroupInterface}\r\n * @returns {boolean}\r\n */\r\nexport const navItemIsExcluded = (navItem, wizardGroup) => {\r\n const {sku, featureDefinitionID, customDisplayName} = navItem.part.dbFeature;\r\n const {partName} = navItem.part; // it replaces the {groupName + \"-\"} from the name, same logic as we have in the dashboard\r\n // if (customDisplayName === \"Only Front Edge\") {\r\n // console.log(\"checking excluded from wizardGroup\", wizardGroup);\r\n // debugger;//eslint-disable-line\r\n // }\r\n if (wizardGroup.useIncluded && wizardGroup.featuresIncluded) {\r\n return !wizardGroup.featuresIncluded.some(includedFeature => {\r\n return (includedFeature.sharedFeatureName && (includedFeature.sharedFeatureName === navItem.part.getLowerCasedSharedFeatureName()))\r\n || (includedFeature.featureDefinitionId === featureDefinitionID)\r\n || (!includedFeature.sharedFeatureName && (includedFeature.name === customDisplayName))\r\n || (includedFeature.sku && sku && (includedFeature.sku === sku))\r\n })\r\n }\r\n for (let excluded of wizardGroup.featuresExcluded) {\r\n if (excluded && (typeof excluded === \"object\")) {\r\n if (\r\n (excluded.sharedFeatureName && (excluded.sharedFeatureName === navItem.part.getLowerCasedSharedFeatureName()))\r\n || (excluded.featureDefinitionId === featureDefinitionID)\r\n || (excluded.name === customDisplayName)\r\n || (excluded.sku && sku && (excluded.sku === sku))\r\n ) {\r\n return true\r\n }\r\n // if (excluded.name === customDisplayName || excluded.name === sharedFeatureName || (excluded.sku && sku && (excluded.sku === sku))) {\r\n } else if (excluded) {\r\n // if (excluded === sku || excluded === sharedFeatureName || excluded === partName || excluded === featureDefinitionID) {\r\n if (excluded === sku || excluded === partName || excluded === featureDefinitionID) {\r\n return true\r\n }\r\n }\r\n }\r\n return false\r\n}\r\n\r\n/**\r\n * @param navItems {[navItemInterface]}\r\n * @param wizardGroup {wizardGroupInterface}\r\n * @returns {[navItemInterface]}\r\n */\r\nexport const filterWizardNavItems = (navItems, wizardGroup) => {\r\n if (!wizardGroup.useIncluded && (!Array.isArray(wizardGroup.featuresExcluded) || !wizardGroup.featuresExcluded.length)) {\r\n return navItems\r\n }\r\n // console.log(\"navItems to filter\", navItems);\r\n return navItems.filter(navItem => !navItemIsExcluded(navItem, wizardGroup));\r\n}\r\n\r\n/**\r\n * @param wizardSelectedValues {object} // selected wizard steps values\r\n * @param wizardActiveStep {number} wizardActiveStep\r\n * @param wizardActiveItem {wizardItemInterface} wizardItemInterface\r\n * @param wizardGroup {wizardGroupInterface} wizardGroupInterface\r\n * @param featureGroup {featureGroupInterface} featureGroupInterface\r\n * @param filterGroups {[filterGroupInterface]}\r\n * @param searchText {string}\r\n * @param filters {object}\r\n * @param shopPageOpened {boolean}\r\n * @param showPrevStepsColorFirst {boolean}\r\n * @returns {array}\r\n */\r\nexport const getCurrentWizardNavItems = (wizardSelectedValues,\r\n wizardActiveStep,\r\n wizardActiveItem,\r\n wizardGroup,\r\n featureGroup = null,\r\n filterGroups = [],\r\n searchText = \"\",\r\n filters = [],\r\n shopPageOpened = false,\r\n showPrevStepsColorFirst = false) => {\r\n\r\n const layout = getCurrentLayout();\r\n featureGroup = featureGroup || getFeatureGroupFromWizardGroup(wizardGroup);\r\n if (!featureGroup) {\r\n return []\r\n }\r\n\r\n const selectedStepsReversed = Object.keys(wizardSelectedValues).reverse() // is needed to take last selected steps first\r\n\r\n selectedStepsReversed.forEach(selectedStep => {\r\n const {selectedFilter} = wizardSelectedValues[selectedStep];\r\n if (!selectedFilter || +selectedStep >= wizardActiveStep) {\r\n return\r\n }\r\n const parentWizardGroup = findParentWizardFeatureGroup(wizardSelectedValues[selectedStep].wizardGroup, wizardActiveItem);\r\n if (!parentWizardGroup) {\r\n return null\r\n }\r\n const parentFeatureGroup = getFeatureGroupFromWizardGroup(parentWizardGroup);\r\n if (parentFeatureGroup && parentFeatureGroup.partId === featureGroup.partId) {\r\n filters.push({\r\n filterId: selectedFilter.id,\r\n filterGroupId: selectedFilter.filterGroup_id,\r\n })\r\n }\r\n });\r\n\r\n let navItems = layout.designNavigationItems(\r\n {part: featureGroup},\r\n filters,\r\n searchText,\r\n featureGroup.activeFeature,\r\n \"all\",\r\n filterGroups,\r\n {returnAllFeatures: shopPageOpened}\r\n );\r\n\r\n navItems = filterWizardNavItems(navItems, wizardGroup);\r\n\r\n if (featureGroup.partId === \"vanity_sink\") {\r\n const selectedPrevStep = wizardSelectedValues[wizardActiveStep - 1];\r\n if (selectedPrevStep && selectedPrevStep.partId === \"vanity_faucet\" && selectedPrevStep.selectedFeature) {\r\n const faucetParent = selectedPrevStep.selectedFeature.getParent();\r\n if (selectedPrevStep.selectedFeature.matchesMetaForArrayOfConditions(faucetParent.getArrayOfConditions())) {\r\n const selectedFaucetConditions = faucetParent.getActiveFeatureConditions(selectedPrevStep.selectedFeature)\r\n const filteredNavItems = navItems.filter(navItem => {\r\n return selectedFaucetConditions.every(condition => navItem.part.matchesMetaForCondition(condition.propName, condition.propValue))\r\n });\r\n // console.log(\"navItems left\", filteredNavItems);\r\n return filteredNavItems\r\n }\r\n }\r\n }\r\n\r\n if (showPrevStepsColorFirst && !wizardSelectedValues[wizardActiveStep]) {\r\n const allSelectedColors = selectedStepsReversed.reduce((total, selectedStep) => {\r\n if (wizardSelectedValues[selectedStep] && wizardSelectedValues[selectedStep].selectedFeature) {\r\n const colorName = wizardSelectedValues[selectedStep].selectedFeature.getColorName(filterGroups);\r\n if (colorName && !total.includes(colorName)) {\r\n total.push(colorName)\r\n }\r\n }\r\n return total\r\n }, []);\r\n // console.log(\"navItems222\", navItems);\r\n // console.log(\"allSelectedColors\", allSelectedColors);\r\n // console.log(\"wizardGroup\", wizardGroup);\r\n if (allSelectedColors.length) {\r\n navItems = navItems.map(navItem => {\r\n if (navItem.colorOptions && navItem.colorOptions.length) {\r\n const currentColorOption = navItem.part.getColorName(filterGroups);\r\n if (currentColorOption !== allSelectedColors[0]) {\r\n let optionMatchForPrevSelectedColor = null;\r\n allSelectedColors.forEach(selectedColor => {\r\n if (!optionMatchForPrevSelectedColor && (currentColorOption !== selectedColor)) {\r\n optionMatchForPrevSelectedColor = navItem.colorOptions.find(option => {\r\n return option.feature.getColorName(filterGroups) === selectedColor\r\n })\r\n }\r\n })\r\n if (optionMatchForPrevSelectedColor) {\r\n // console.log(\"replaced! from\", navItem);\r\n // console.log(\"replaced! to\", {part: optionMatchForPrevSelectedColor});\r\n return {part: optionMatchForPrevSelectedColor.feature}\r\n }\r\n }\r\n }\r\n return navItem\r\n })\r\n }\r\n }\r\n\r\n\r\n return navItems\r\n}\r\n\r\n/**\r\n * is used for context menu, to detect vanity wizard or shower wizard\r\n * @param partIdGroups {[string]}\r\n * @param wizardList {[wizardItemInterface]}\r\n * @param activePreset {string|number}\r\n * @returns {wizardItemInterface}\r\n */\r\nexport const getExistingWizardForGroups = (partIdGroups, wizardList, activePreset) => {\r\n return wizardList.find(wizardItem => {\r\n if (wizardIsDisabled(wizardItem, activePreset)) {\r\n return false\r\n }\r\n // const currentGroups = getCurrentGroups(wizardItem, 0, {});\r\n // // console.log(\"currentGroups\", currentGroups);\r\n // if (!currentGroups || !currentGroups.length) {\r\n // return false\r\n // }\r\n return wizardItem.wizardGroups.some(wizardGroup => {\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup)\r\n return featureGroup && partIdGroups.includes(featureGroup.partId)\r\n })\r\n });\r\n}\r\n\r\n/**\r\n * is used for removing the layers from the canvas which are not selected in the wizard\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @param wizardSelectedValues {object}\r\n * @param layers {[]}\r\n * @returns partIdGroups {[string]}\r\n */\r\nexport const getFilteredLayersForActiveWizard = (wizardActiveItem, wizardSelectedValues, layers) => {\r\n if (!wizardActiveItem || !wizardActiveItem.hideItems) {\r\n return layers\r\n }\r\n wizardActiveItem.wizardGroups.forEach(wizardGroup => {\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n if (featureGroup && !Object.keys(wizardSelectedValues).some(stepIndex => {\r\n return wizardSelectedValues[stepIndex].partId === featureGroup.partId && wizardSelectedValues[stepIndex].selectedFeature\r\n })) {\r\n layers = layers.filter(layer => layer.partId !== featureGroup.partId) // if there is a step and it is not selected - remove it\r\n }\r\n })\r\n return layers\r\n}\r\n\r\n/**\r\n * is used for removing the feature groups to prevent them appear after the wizard is finished\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @param wizardSelectedValues {object}\r\n */\r\nexport const disableNotSelectedFeatureGroups = (wizardActiveItem, wizardSelectedValues) => {\r\n wizardActiveItem.wizardGroups.forEach(wizardGroup => {\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n if (featureGroup && !Object.keys(wizardSelectedValues).some(stepIndex => {\r\n return wizardSelectedValues[stepIndex].partId === featureGroup.partId && wizardSelectedValues[stepIndex].selectedFeature\r\n })) {\r\n featureGroup.disabled = true;\r\n if (featureGroup.layerPositions) { // we need it here to prevent adding to the cart through restore cart on item change\r\n Object.keys(featureGroup.layerPositions).forEach(position => {\r\n featureGroup.layerPositions[position] = null;\r\n })\r\n }\r\n if (featureGroup.disabledClick) {\r\n featureGroup.disabledClick()\r\n }\r\n }\r\n })\r\n}\r\n\r\n/**\r\n * is used to compress the data that will be passed in the job data back and force\r\n * @param allWizardsValues {array}\r\n * @param allWizardsValues {array}\r\n */\r\nexport const getCompressedAllWizardValues = (allWizardsValues) => {\r\n const allWizardsValuesToSave = allWizardsValues.map(newWizObject => {\r\n let wizValues = {};\r\n Object.keys(newWizObject.wizardSelectedValues).forEach(stepIndex => {\r\n wizValues[stepIndex] = Object.assign({}, newWizObject.wizardSelectedValues[stepIndex])\r\n if (newWizObject.wizardSelectedValues[stepIndex].wizardGroup) {\r\n wizValues[stepIndex].wizardGroup = Object.assign(\r\n {},\r\n newWizObject.wizardSelectedValues[stepIndex].wizardGroup,\r\n {featuresExcluded: [], featuresIncluded: []} // to keep clean in json\r\n )\r\n if (wizValues[stepIndex].wizardGroup.mergedGroups) {\r\n wizValues[stepIndex].wizardGroup.mergedGroups = wizValues[stepIndex].wizardGroup.mergedGroups.map(wizGroup => {\r\n return {id: wizGroup.id, groupName: wizGroup.groupName}\r\n });\r\n }\r\n }\r\n if (newWizObject.wizardSelectedValues[stepIndex].selectedFeature) {\r\n wizValues[stepIndex].selectedFeature = getCompressedFeature(\r\n null,\r\n newWizObject.wizardSelectedValues[stepIndex].selectedFeature,\r\n newWizObject.quoteIndex\r\n ); // to keep clean in json\r\n }\r\n })\r\n return Object.assign({}, newWizObject, {wizardSelectedValues: wizValues})\r\n });\r\n // console.log(\"allWizardsValues to save ->\", allWizardsValuesToSave);\r\n return allWizardsValuesToSave\r\n}\r\n\r\n/**\r\n * checks if the following step is disabled\r\n * @param stepIndex {number}\r\n * @param wizardSelectedValues {object}\r\n * @param wizardSteps {array}\r\n * @returns {boolean}\r\n */\r\nexport const getWizardStepIsDisabled = (stepIndex, wizardSelectedValues, wizardSteps) => {\r\n if (stepIndex === 0) {\r\n return false\r\n }\r\n if (wizardSelectedValues[stepIndex - 1] && wizardSelectedValues[stepIndex - 1].wizardGroup) {\r\n return false // prev step is selected, current is not disabled\r\n }\r\n const prevWizardGroup = wizardSelectedValues[stepIndex - 1]\r\n ? wizardSelectedValues[stepIndex - 1].wizardGroup\r\n : wizardSteps[stepIndex - 1] && wizardSteps[stepIndex - 1].stepGroups\r\n ? wizardSteps[stepIndex - 1].stepGroups[0]\r\n : null;\r\n if (prevWizardGroup && prevWizardGroup.notRequired && (stepIndex === 1 || wizardSelectedValues[stepIndex - 2])) {\r\n // added logic for cases when not required goes after not required so you can't jump in the end of the wizard\r\n // you have to have prev prev step selected to jump\r\n return false // if prev is not required - return false, otherwise true\r\n }\r\n return true\r\n}\r\n\r\nexport const getWizardProductGroupName = (wizardGroup) => {\r\n return wizardGroup.productCartTitle || wizardGroup.title || wizardGroup.groupName || \"\"\r\n}\r\n\r\n/**\r\n * checks if we need to request sharedFeatureNames from backend instead of the regular request\r\n * @param wizardGroup {wizardGroupInterface}\r\n * @param featureGroup {featureGroupInterface}\r\n * @returns {boolean}\r\n */\r\nexport const shouldUseNewWizardFeaturesRequestsLogic = (wizardGroup, featureGroup) => {\r\n if (!wizardGroup || !wizardGroup.useIncluded || !wizardGroup.featuresIncluded || !wizardGroup.featuresIncluded.length\r\n || !featureGroup) {\r\n return false\r\n }\r\n return featureGroup.counts && Object.keys(featureGroup.counts).some(layoutType => {\r\n // if less - we will request features with regular request cause it is faster\r\n // we are checking in all layouts case they might be not uploaded(need to change after feature overhaul)\r\n return featureGroup.counts[layoutType] > 1000\r\n })\r\n}\r\n\r\n\r\n/**\r\n * checks if the following step is disabled\r\n * @param currentNavItems {[navItemInterface]}\r\n * @param wizardGroup {wizardGroupInterface}\r\n * @param featureGroup {featureGroupInterface}\r\n * @returns {boolean}\r\n */\r\nexport const getMissingWizardFeatures = async (currentNavItems,\r\n wizardGroup,\r\n featureGroup) => {\r\n\r\n if (featureGroup.requestInProgress) {\r\n // we will request features with regular request cause it is faster\r\n return false\r\n }\r\n\r\n const {wizardMissingFeatures} = store.getState().wizardState;\r\n\r\n if (wizardMissingFeatures[wizardGroup.groupName] && !wizardMissingFeatures[wizardGroup.groupName].length) {\r\n // already received everything\r\n return false\r\n }\r\n\r\n const missingSkus = (wizardGroup.featuresIncluded || [])\r\n .filter(feature => {\r\n return !currentNavItems.some(navItem => navItem.part.getLowerCasedSharedFeatureName() === feature.sharedFeatureName)\r\n })\r\n .map(feature => feature.sharedFeatureName); // convert to names only array\r\n\r\n console.log(\"current missing skus\", missingSkus);\r\n\r\n if (!missingSkus.length) { // first time we create it with requested features // small chances but let it be\r\n store.dispatch(setWizardMissingFeatures(wizardGroup.groupName, missingSkus));\r\n return\r\n }\r\n\r\n const slicedArray = missingSkus.slice(0, 100); // take first 100 features\r\n const stillMissingArray = missingSkus.slice(100); // from 100 to the end\r\n\r\n // 2) get missing features from the backend;\r\n console.log(\"request more missingSkus\", slicedArray);\r\n console.log(\"stillMissingArray\", stillMissingArray);\r\n // loaderEnable();\r\n featureGroup.requestInProgress = true;\r\n const missingSkusResponse = await getBvFeatures(null, slicedArray, true);\r\n featureGroup.requestInProgress = false;\r\n\r\n store.dispatch(setWizardMissingFeatures(wizardGroup.groupName, stillMissingArray)); // set features that left\r\n\r\n if (missingSkusResponse && missingSkusResponse.data) {\r\n console.log(\"missingSkusResponse\", missingSkusResponse.data);\r\n const layout = getCurrentLayout();\r\n layout.loadNewFeatures(missingSkusResponse.data);\r\n return true\r\n }\r\n\r\n // loaderDisable();\r\n return false\r\n}\r\n\r\n/**\r\n * this hook is disabling feature groups for hide items wizards because they should not be added to the cart\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @param visualizersLoadedLength {number}\r\n * @param wizardSelectedValues {object}\r\n * @param updateLookCartItem {function}\r\n * @returns {boolean}\r\n */\r\nexport const useHideItemsDisabledfeatureGroups = (wizardActiveItem, visualizersLoadedLength, wizardSelectedValues, updateLookCartItem = null) => {\r\n useEffect(() => {\r\n if (wizardActiveItem && wizardActiveItem.hideItems && visualizersLoadedLength) {\r\n wizardActiveItem.wizardGroups.forEach(wizardGroup => {\r\n if (Object.keys(wizardSelectedValues).some(key => wizardSelectedValues[key].wizardGroup.groupName === wizardGroup.groupName)) {\r\n return // do not disable already selected in wizard groups (restoring logic)\r\n }\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n if (featureGroup) {\r\n featureGroup.disabled = true;\r\n if (featureGroup.layerPositions) {\r\n Object.keys(featureGroup.layerPositions).forEach(position => {\r\n featureGroup.layerPositions[position] = null;\r\n })\r\n }\r\n console.log(\"featureGroup disabled\", featureGroup);\r\n }\r\n })\r\n }\r\n if (updateLookCartItem) {\r\n updateLookCartItem();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [visualizersLoadedLength]);\r\n}\r\n\r\nexport const getNextWizardStepQuantity = (currentGroups, wizardSelectedValues, wizardActiveStep, fromFeature, wizardSqftCartItems = []) => {\r\n let newQuantity = 1\r\n if (currentGroups.length === 1) {\r\n const featureGroup = getFeatureGroupFromWizardGroup(currentGroups[0]);\r\n if (wizardSelectedValues[wizardActiveStep] && Number.isInteger(wizardSelectedValues[wizardActiveStep].quantity)) {\r\n newQuantity = wizardSelectedValues[wizardActiveStep].quantity;\r\n } else if (wizardSqftCartItems.length && (fromFeature || featureGroup)) {\r\n const groupName = fromFeature ? fromFeature.dbFeature.groupName : (featureGroup.dbName || featureGroup.partName);\r\n const addedCartItems = wizardSqftCartItems.filter(cItem => cItem.cartFeature && cItem.cartFeature.dbFeature.groupName === groupName);\r\n // console.log(\"addedCartItems\", addedCartItems);\r\n if (addedCartItems.length) {\r\n newQuantity = addedCartItems.reduce((total, cItem) => total + cItem.quantity, 0);\r\n } else {\r\n newQuantity = getFeatureGroupFeaturesQuantity(fromFeature, featureGroup);\r\n }\r\n } else {\r\n newQuantity = getFeatureGroupFeaturesQuantity(fromFeature, featureGroup);\r\n }\r\n }\r\n return newQuantity\r\n}\r\n\r\n/**\r\n * this returns on qkb wizard custom groups or feature groups as features\r\n * @param currentGroups {[wizardGroupInterface]}\r\n * @returns {boolean}\r\n */\r\nexport const displayMaterialsWizardGroupAsFeature = (currentGroups) => {\r\n return currentGroups.length > 1 || (currentGroups.length === 1 && currentGroups[0].nodeType === WIZARD_GROUP_TYPES.custom)\r\n}\r\n\r\n/**\r\n * this returns on qkb wizard wizardGroup from current steps\r\n * @param wizardItem {wizardItemInterface}\r\n * @param wizardValues {object}\r\n * @param neededWizardGroupId {string}\r\n * @returns {object}\r\n */\r\nexport const getWizardGroupFromCurrentSteps = (wizardItem, wizardValues, neededWizardGroupId) => {\r\n let neededStep, neededWizardGroup;\r\n if (!wizardItem || !wizardValues || !neededWizardGroupId) {\r\n return {neededStep, neededWizardGroup}\r\n }\r\n getAvailableSteps(wizardItem, wizardValues, true).forEach(step => {\r\n if (neededStep) {\r\n return\r\n }\r\n step.stepGroups.forEach(wizGroup => {\r\n if (wizGroup.id === neededWizardGroupId) {\r\n neededStep = step;\r\n neededWizardGroup = wizGroup;\r\n } else if (wizGroup.mergedGroups) {\r\n wizGroup.mergedGroups.forEach(mergedGroup => {\r\n if (mergedGroup.id === neededWizardGroupId) {\r\n neededStep = step;\r\n neededWizardGroup = mergedGroup;\r\n }\r\n })\r\n }\r\n })\r\n });\r\n return {neededStep, neededWizardGroup}\r\n}\r\n","export const LayoutType = {\r\n Layout1: 1,\r\n Layout4: 4,\r\n};\r\n\r\nexport const LayoutAbbreviation = {\r\n All: \"ALL\",\r\n Layout1: \"Layout1\",\r\n Layout4: \"Layout4\",\r\n};\r\n\r\nexport const LayoutAbbreviations = [\r\n \"Layout1\",\r\n \"Layout4\",\r\n];\r\nexport const LayoutAbbreviationsToRemove = [\r\n \"Layout4\",\r\n \"Layout1\",\r\n];\r\n\r\nexport const METADATA = {\r\n ALL: \"ALL\",\r\n LeftSide: \"L\", // used as side for shower grab bars\r\n RightSide: \"R\", // used as side for shower grab bars\r\n Inner: \"Inner\", // used for sinks & faucets\r\n Outer: \"Outer\", // used for sinks & faucets\r\n};\r\n\r\nexport const ShowerComboTubType = {\r\n bathtub_liner: \"bathtub_liner\",\r\n replacement_tub: \"replacement_tub\",\r\n walk_in_tub: \"walk_in_tub\",\r\n jetted_tub: \"jetted_tub\",\r\n};\r\n\r\nexport const CountsType = {\r\n allLayoutFeaturesCount: \"All\", // not used\r\n largeLayoutFeaturesCount: \"Large\",\r\n smallLayoutFeaturesCount: \"Small\",\r\n totalFeaturesCount: \"Total\" // not used\r\n};\r\n\r\nexport const BathTubType = {\r\n Custom60in: 'Custom60in',\r\n FreeStanding: 'BathTubFreeStanding'\r\n};\r\n\r\nexport const VanityTypes = {\r\n Complete: 'Complete',\r\n Custom: 'Custom'\r\n};\r\n\r\nexport const ShowerBodyType = {\r\n Glass: 0,\r\n Door: 1\r\n};\r\n\r\nexport const PartMenuType = {\r\n Simple: 0, // i.e. Toilet - doesn't have any sub-items\r\n Complex: 1, // i.e. Vanity - has sub-menu items, Sink, Faucet Mirror\r\n};\r\n\r\nexport function bathTubTypeToString(bathTypeType) {\r\n switch (bathTypeType) {\r\n case BathTubType.Custom60in:\r\n return 'Custom';\r\n case BathTubType.FreeStanding:\r\n return 'Complete';\r\n }\r\n}\r\nexport function bathTubStringToType(bathtubString) {\r\n switch (bathtubString) {\r\n case 'custom':\r\n return BathTubType.Custom60in;\r\n case 'complete':\r\n return BathTubType.FreeStanding;\r\n }\r\n}\r\n\r\nexport const vanityWizardFilters = [\"Size\", \"DoorStyle\", \"Material\", \"Color\"];\r\n\r\nexport const showerWizardFilters = [\"Material\", \"DuraBathColor\", \"SlabColor\", \"TileColor\", \"TilePattern\", \"AcrylicPattern\", \"AcrylicColor\"];\r\n\r\nexport const NotQCVanityDoorStylesFilters = [\"Centennial\", \"Hudson\", \"Northbrook\", \"Osage\", \"Quebec\", \"Riverside\", \"Villager\", \"Zurich\"];\r\n\r\nexport const COUNTERTOP_GROUP_BATHROOM = [\"vanity_countertop\", \"vanity_backsplash\"];\r\n\r\nexport const CABINET_GROUP_BATHROOM = [\"vanity_cabinet\", \"vanity_mirror\"];\r\n\r\nexport const HANDLES_GROUP_BATHROOM = [\"door_handle\", \"drawer_handle\"];\r\n\r\nexport const SHOWER_FLOOR_GROUP_BATHROOM = [\"shower_floor\", \"shower_curb\"];\r\n\r\nexport const CORNER_SHELVES_POSITIONS = [\"L1\",\"L2\",\"L3\",\"R1\",\"R2\",\"R3\"];\r\n\r\nexport const SIDE_POSITIONS = [\"L\",\"R\"];\r\n\r\nexport const PAN_POSITIONS = [\"L\",\"C\",\"R\"];\r\n","import invert from 'lodash/invert';\r\n\r\nimport {splitFeatureName} from \"../../../misc/utils\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport {Part} from \"./part\";\r\nimport store from '../../../store';\r\nimport {LayoutAbbreviation, LayoutType, LayoutAbbreviationsToRemove, COUNTERTOP_GROUP} from \"./constants\";\r\nimport {getFeatureIsLocked} from \"../../../misc/helpers\";\r\n\r\n/**\r\n * Used for Complex parts such as Vanity, to perform some base functionality for related items\r\n */\r\nexport class IntermediatePart extends Part {\r\n\r\n constructor(isChild) {\r\n super(false, isChild);\r\n this.disabled = false;\r\n this.defaultDisabled = false; // used after reset click\r\n this.canBeDisabled = false;\r\n }\r\n\r\n /**\r\n * This will be called by the underlying vanity feature with a concrete instance of the part\r\n * @param dbFeature\r\n * @param part {Part}\r\n * @param setParent {boolean}\r\n * @param features\r\n */\r\n load_(dbFeature, part, setParent = true, features = 'features') {\r\n\r\n const featureList = features + \"List\";\r\n\r\n const {displayName} = dbFeature;\r\n let {featureName} = splitFeatureName(displayName);\r\n if (!featureName && dbFeature.groupName && dbFeature.displayName) {\r\n featureName = dbFeature.displayName.replace(dbFeature.groupName + \" - \", \"\")\r\n }\r\n // console.log('displayName:', displayName);\r\n\r\n if (setParent) {\r\n part.getParent = () => this;\r\n if (dbFeature.galleryImages) {\r\n const featured = dbFeature.galleryImages.find(galImage => galImage.featured);\r\n if (featured) {\r\n this.featuredImage = featured.url\r\n }\r\n dbFeature.galleryImages = dbFeature.galleryImages.sort((a, b) => b.default - a.default)\r\n }\r\n }\r\n\r\n if (!dbFeature.sharedFeatureName) {\r\n console.error(\"No sharedFeatureName property:\", dbFeature);\r\n if (!featureName) {\r\n return false\r\n }\r\n }\r\n\r\n part.partName = featureName;\r\n part.metaData = dbFeature.metaData || {};\r\n\r\n if (dbFeature.s3Bindings && dbFeature.s3Bindings.length) {\r\n dbFeature.s3Bindings = dbFeature.s3Bindings.filter(binding => binding.visualizer === \"Kitchen\")\r\n }\r\n\r\n part.dbFeature = dbFeature || {};\r\n if (!part.dbFeature.filterValueIDs) {\r\n part.dbFeature.filterValueIDs = {}\r\n }\r\n part.notAvailableInVisualizer = !dbFeature.s3Bindings || !dbFeature.s3Bindings.length;\r\n\r\n if (part.metaData.RoomLayout) {\r\n const roomLayout = part.metaData.RoomLayout;\r\n if (roomLayout.includes(LayoutAbbreviation.All)) {\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n } else if (Array.isArray(roomLayout) && roomLayout.length) {\r\n roomLayout.forEach(roomLayoutAbbreviation => {\r\n const layoutName = invert(LayoutAbbreviation)[roomLayoutAbbreviation];\r\n if (layoutName) { // Prevent bad roomLayout Metadata\r\n this[featureList][layoutName].push(part);\r\n }\r\n });\r\n } else { // single value\r\n const layoutName = invert(LayoutAbbreviation)[roomLayout];\r\n if(layoutName) {\r\n this[featureList][layoutName].push(part);\r\n }\r\n }\r\n } if (part.notAvailableInVisualizer || !part.metaData.RoomLayout) {\r\n part.notAvailableInVisualizer = true;\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n if(!this[featureList][layoutName].some(t => t.dbFeature.sharedFeatureName == part.dbFeature.sharedFeatureName)) {\r\n this[featureList][layoutName].push(part);\r\n }\r\n })\r\n }\r\n\r\n // Object.keys(LayoutType).forEach(layoutName => {\r\n // this[features+\"List\"][layoutName].push(part);\r\n // });\r\n\r\n this.loadFeatureCommon(part);\r\n\r\n return part\r\n }\r\n\r\n navigationSubItemsWithFilter(propName, propValue, featuresToCheck = this.features) {\r\n return featuresToCheck.filter((feature) => {\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n }).map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n navigationSubItemsWithFilterMultipleConditions(arrayOfConditions, featuresToCheck = this.features) {\r\n // console.log('arrayOfConditions', arrayOfConditions);\r\n // console.log('featuresToCheck', featuresToCheck);\r\n return featuresToCheck.filter((feature) => {\r\n return feature.notAvailableInVisualizer || arrayOfConditions.every((conditionObject) => {\r\n const {propName, propValue} = conditionObject;\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n });\r\n })\r\n }\r\n\r\n setDefault(layout, setNotInVisFeature = false) {\r\n this.setFeatureGroupDefault(layout, setNotInVisFeature)\r\n }\r\n\r\n setLayers(layout) {\r\n if (!this.disabled) {\r\n if (!this.activeFeature) {\r\n this.setDefault(layout);\r\n }\r\n if (this.activeFeature && !this.activeFeature.notAvailableInVisualizer) {\r\n this.setFeatureLayer(this.activeFeature, layout);\r\n if (Array.isArray(this.activeFeatureParts) && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n this.setFeatureLayer(activeFeaturePart, layout);\r\n })\r\n }\r\n }\r\n if (this.placeholderFeature) {\r\n this.setFeatureLayer(this.placeholderFeature, layout);\r\n }\r\n if (this.shadowFeature) {\r\n this.setFeatureLayer(this.shadowFeature, layout);\r\n }\r\n } else {\r\n this.hideLayers();\r\n }\r\n }\r\n\r\n clickFromAllWalls(ignoreLocked) {\r\n if (this && this.dbFeature && this.dbFeature.sharedFeatureName) {\r\n console.log(`${this.partId}:`, this.dbFeature.sharedFeatureName);\r\n }\r\n this.handleClick(ignoreLocked, \"all_walls\");\r\n }\r\n\r\n /**\r\n * @param ignoreLocked {boolean} // false by the default, is used by wizard ONLY\r\n * @param clickFrom {string} // is used for countertop and cabinet switchers, and walls\r\n */\r\n handleClick(ignoreLocked = false, clickFrom = \"\") {\r\n const parent = this.getParent();\r\n if (clickFrom !== \"all_walls\") {\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n parent.firstClick[activeQuoteIndex] = true; // allow to show active item\r\n }\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (featureIsLocked) {\r\n parent.activeLockedFeature = this;\r\n } else {\r\n if (parent.activeLockedFeature) {\r\n parent.activeLockedFeature = null;\r\n }\r\n this.featureClick();\r\n }\r\n }\r\n\r\n featureClick() {\r\n const parent = this.getParent();\r\n parent.placeholderChanged = true;\r\n if (this.notAvailableInVisualizer) {\r\n parent.activeNotInVisualizerFeature = this; // do not change the activeFeature (in order to keep the layer)\r\n } else if (parent.activeNotInVisualizerFeature) {\r\n parent.activeNotInVisualizerFeature = null; // remove it from other searches and so on\r\n parent.activeFeature = this;\r\n } else {\r\n parent.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n hideLayers() {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.src = '';\r\n }\r\n if (Array.isArray(this.activeFeatureParts) && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.src = '';\r\n }\r\n })\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.src = '';\r\n }\r\n if (this.shadowFeature) {\r\n this.shadowFeature.layer.src = '';\r\n }\r\n }\r\n\r\n removeLayoutFromPartName(partName) {\r\n LayoutAbbreviationsToRemove.forEach(abbr => {\r\n const spaceWithLayoutName = \" \"+abbr;\r\n partName = partName.replace(spaceWithLayoutName + \" \", \" \"); // 1) replace \" Agra S Some edge name\" -> \" Agra Some edge name\"\r\n if (partName.slice(-spaceWithLayoutName.length) === spaceWithLayoutName) {\r\n partName = partName.substring(0, partName.length - spaceWithLayoutName.length); // 2) replace \" Agra Some edge name S\" -> \" Agra Some edge name\"\r\n }\r\n });\r\n partName = partName.replace(\" Backsplash\", \"\");\r\n return partName\r\n }\r\n\r\n removeCountertopFromPartName(partName) {\r\n partName = partName.replace(\"Countertop - \", \"\");\r\n return partName\r\n }\r\n\r\n removeBacksplashFromPartName(partName) {\r\n partName = partName.replace(\"Backsplash - \", \"\");\r\n return partName\r\n }\r\n\r\n removeCabinetLayoutFromPartName(partName) {\r\n const possibleLayouts = [\" Layout 1\",\" Layout 2\",\" Layout 3\",\" Layout 4\",\" Layout 5\",\" Layout 6\",\" Layout 7\",\" Layout 8\",\" 1\",\" 2\",\" 3\",\" 4\",\" 5\",\" 6\",\" 7\",\" 8\"];\r\n possibleLayouts.forEach(cabinetLayout => {\r\n partName = partName.replace(cabinetLayout,\"\")\r\n });\r\n return partName\r\n }\r\n\r\n removeEdgeFromPartName(partName) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n if (edgeFilterGroup && edgeFilterGroup.values && edgeFilterGroup.values.length) {\r\n const edgeFilterGroupValues = edgeFilterGroup.values.sort((a,b) => {\r\n return a.value && b.value && (b.value.length - a.value.length)\r\n }); // 1st should be \"Full Bullnose\", then simple \"Bullnose\"\r\n edgeFilterGroupValues.forEach((filterGroupValue) => { // arrayOf {id: 293, value: \"Eased\", displayText: \"Eased\", parent_id: null, icon: \"\", …}\r\n partName = partName.split(\" \"+filterGroupValue.value).join(\"\");\r\n });\r\n }\r\n return partName\r\n }\r\n\r\n getCountertopGroupsSplittedFeatureName = () => {\r\n if (this._countertopGroupsCustomDisplayName == null) {\r\n this._countertopGroupsCustomDisplayName = this.dbFeature.sharedFeatureName;\r\n if (!this._countertopGroupsCustomDisplayName) {\r\n this._countertopGroupsCustomDisplayName = this.partName || \"\";\r\n this._countertopGroupsCustomDisplayName = this.removeCabinetLayoutFromPartName(this._countertopGroupsCustomDisplayName); // remove 1 2\r\n this._countertopGroupsCustomDisplayName = this.removeLayoutFromPartName(this._countertopGroupsCustomDisplayName); // remove SP SPNI\r\n this._countertopGroupsCustomDisplayName = this.removeEdgeFromPartName(this._countertopGroupsCustomDisplayName); // remove Bullnose\r\n } else {\r\n this._countertopGroupsCustomDisplayName = this.removeLayoutFromPartName(this._countertopGroupsCustomDisplayName); // remove SP SPNI\r\n this._countertopGroupsCustomDisplayName = this._countertopGroupsCustomDisplayName.replace(\" PartN\", \"\");\r\n this._countertopGroupsCustomDisplayName = this.removeEdgeFromPartName(this._countertopGroupsCustomDisplayName); // remove Bullnose\r\n }\r\n if (this.partId === \"backsplash\" && this.removeBacksplashTypeFromPartName) {\r\n this._countertopGroupsCustomDisplayName = this.removeBacksplashTypeFromPartName(this._countertopGroupsCustomDisplayName);\r\n // this._countertopGroupsCustomDisplayName = this.removeCabinetLayoutFromPartName(this._countertopGroupsCustomDisplayName); // remove 1 2\r\n }\r\n }\r\n return this._countertopGroupsCustomDisplayName\r\n };\r\n\r\n getSplittedFeatureName = () => {\r\n const cabinetsGroup = [\"top_cabinet\", \"bottom_cabinet\", \"center_island_cabinet\"];\r\n if(this._customDisplayName == null) {\r\n this._customDisplayName = this.dbFeature.sharedFeatureName || this.partName;\r\n if (cabinetsGroup.includes(this.partId)) {\r\n this._customDisplayName = this.removeCabinetLayoutFromPartName(this._customDisplayName)\r\n .replace(/ Microwave/g, \"\")\r\n .replace(/ Hood/g, \"\")\r\n .replace(/ Layout/g, \"\")\r\n .replace(/ Part2/g, \"\")\r\n }\r\n this._customDisplayName = this.removeLayoutFromPartName(this._customDisplayName);\r\n this._customDisplayName = this.removeEdgeFromPartName(this._customDisplayName);\r\n this._customDisplayName = this.removeCountertopFromPartName(this._customDisplayName);\r\n this._customDisplayName = this.removeBacksplashFromPartName(this._customDisplayName);\r\n }\r\n return this._customDisplayName\r\n };\r\n\r\n getMatchingFeatureName = () => {\r\n return COUNTERTOP_GROUP.includes(this.partId)\r\n ? this.getCountertopGroupsSplittedFeatureName()\r\n : this.getSplittedFeatureName()\r\n };\r\n\r\n getModuleFeatureName = () => {\r\n // return this.partName.split(\" M_\")[0];\r\n return this.partName.split(\" M\")[0];\r\n };\r\n\r\n featureIsMatchingFilters(currentFeature, activeFilters, filters = []) {\r\n return filters.every(filter => {\r\n return activeFilters[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id].includes(activeFilters[filter.id][0])\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n let activeFeaturePart;\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n const arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n activeFeatureParts = this.featuresParts.filter((feature) => name1 === feature.getSplittedFeatureName());\r\n if (activeFeatureParts.length) {\r\n activeFeaturePart = activeFeatureParts.find((feature) => {\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n if (!activeFeaturePart) {\r\n activeFeaturePart = activeFeatureParts[0];\r\n }\r\n }\r\n activeFeatureParts = activeFeaturePart ? [activeFeaturePart] : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n checkIfFeaturePartIsMatching() {\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n const activeFeatureConditions = this.getActiveFeatureConditions();\r\n const name1 = this.activeFeature.getSplittedFeatureName();\r\n const activeFeaturePart = this.activeFeatureParts[0];\r\n if (!(activeFeaturePart.matchesMetaForArrayOfConditions(activeFeatureConditions)\r\n && name1 === activeFeaturePart.getSplittedFeatureName())) {\r\n this.activeFeatureParts = this.setActiveFeatureParts(this.activeFeature, activeFeatureConditions);\r\n }\r\n } else {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n }\r\n\r\n}\r\n","import groupBy from \"lodash/groupBy\";\r\nimport isEqual from \"lodash/isEqual\";\r\n\r\nimport {getFilterGroupValue, getFilterGroupValues, s3FilterImagePath} from \"../../../misc/utils\";\r\nimport {getCurrentLayout, getCurrentRoomType} from \"../../appLayout\";\r\nimport {\r\n ALL_CONTEXT_MENU,\r\n CONTEXT_MENU_BATHTUB_BUTTONS,\r\n CONTEXT_MENU_SHOWER_ALL,\r\n CONTEXT_MENU_SHOWER_OTHER,\r\n CONTEXT_MENU_SPLIT_WALL,\r\n CONTEXT_MENU_VANITY_BUTTONS,\r\n POSSIBLE_ONE_POSITION,\r\n VANITY_TYPES,\r\n LOOK_ROOM_TYPES,\r\n ALL_CONTEXT_MENU_KITCHEN,\r\n CONTEXT_MENU_KITCHEN_CENTER_ISLAND,\r\n CONTEXT_MENU_KITCHEN_COUNTERTOPS,\r\n CONTEXT_MENU_VANITY_ONLY, CONTEXT_MENU_SHOWER_ACCESSORIES, METADATA\r\n} from \"../core/constants\";\r\nimport {getCartItemObject, getFeatureIsLocked} from \"../../../misc/helpers\";\r\nimport {getBundledFeatures, hardCodelyRemovedClicking} from \"./lookFunctions2\";\r\nimport {isVisibleForNavigation} from \"../../../misc/displayLogic\";\r\nimport {allowCheckForCollection} from \"../grohe/groheNavigation/groheFunctions\";\r\nimport {CART_ITEM_ADDED_BY} from \"../../shoppingCart/cartItemInterface\";\r\nimport {getCommonVisualizerType, IS_PRODUCT_JOURNEY, IS_QKB_UI} from \"../../../config\";\r\nimport {GROHE_CONFIG} from \"../grohe/groheConfig\";\r\nimport {addLayoutHistory} from \"../../../actions/actionFunctions\";\r\nimport store from \"../../../store\";\r\nimport {getExistingWizardForGroups} from \"./lookMain/lookWizard/lookWizardFunctions\";\r\nimport {getColorFilterValue} from \"../../../misc/filtersFunctions\";\r\nimport {getFeatureCropCoors} from \"../../../misc/metaDataFunctions\";\r\n\r\n\r\n/**\r\n * Checks available color options for reature\r\n * @param lookActiveFeature {object}\r\n * @param filterGroups {array}\r\n * @param returnAllFeatures {boolean}\r\n * @param fromNavItemOptions {array}\r\n * @returns {array} array of objects\r\n */\r\nexport const getFeatureOptions = (lookActiveFeature, filterGroups, returnAllFeatures = false, fromNavItemOptions = null) => {\r\n if (!lookActiveFeature) {\r\n return null\r\n }\r\n\r\n const colorFilterGroup = filterGroups.find(group => group.name === \"Color\");\r\n\r\n if (!colorFilterGroup) {\r\n return null\r\n }\r\n\r\n const activeFeatureValues = getFilterGroupValues(lookActiveFeature, colorFilterGroup);\r\n\r\n // console.log(\"activeFeatureValues\", activeFeatureValues);\r\n\r\n if (!Array.isArray(activeFeatureValues) || !activeFeatureValues.length) {\r\n return null\r\n }\r\n\r\n const parent = lookActiveFeature.getParent();\r\n const activeFeatureValue = getFilterGroupValue(activeFeatureValues[0], colorFilterGroup);\r\n\r\n let optionFeatures = activeFeatureValue ? [{\r\n feature: lookActiveFeature,\r\n colorValue: activeFeatureValue\r\n }] : [];\r\n\r\n if (fromNavItemOptions) {\r\n // console.log(\"optionFeatures\", optionFeatures);\r\n return activeFeatureValue && fromNavItemOptions.some(option => option.colorValue.id === activeFeatureValue.id)\r\n ? fromNavItemOptions\r\n : [...optionFeatures, ...fromNavItemOptions]\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n let navItems;\r\n if (returnAllFeatures) {\r\n const layout = getCurrentLayout();\r\n const forSpecificLayout = lookActiveFeature.metaData[\"RoomLayout\"] ? lookActiveFeature.metaData[\"RoomLayout\"][0] : null;\r\n if (forSpecificLayout && (+(forSpecificLayout.replace(\"Layout\", \"\")) !== layout.type)) {\r\n navItems = parent.getFeaturesForNavigationFrom({\r\n returnAllFeatures,\r\n forSpecificLayout: lookActiveFeature.metaData[\"RoomLayout\"] ? lookActiveFeature.metaData[\"RoomLayout\"][0] : null,\r\n forSpecificScene: lookActiveFeature.metaData[\"RoomScene\"] ? lookActiveFeature.metaData[\"RoomScene\"][0] : null\r\n })\r\n } else {\r\n navItems = layout.designNavigationItems({part: parent}, {}, \"\", lookActiveFeature, false)\r\n }\r\n } else {\r\n navItems = layout.designNavigationItems({part: parent}, {}, \"\", lookActiveFeature, false)\r\n }\r\n\r\n optionFeatures = getOptionsFromNavItemsForFeature(lookActiveFeature, navItems, filterGroups, optionFeatures);\r\n return optionFeatures\r\n};\r\n\r\nexport const getOptionsFromNavItemsForFeature = (lookActiveFeature, navItems, filterGroups, optionFeatures = []) => {\r\n const activeFeatureCollectionName = lookActiveFeature.getCollectionName(filterGroups);\r\n const matchingOptionsName = lookActiveFeature.getMatchingOptionsName();\r\n const matchingFeatureProperty = lookActiveFeature.useMatchingFeatureReplacement || \"MatchingFeature\";\r\n\r\n for (let i = 0; i < navItems.length; i++) {\r\n const checkFeature = navItems[i].part || navItems[i];\r\n if (checkFeature.dbFeature.id === lookActiveFeature.dbFeature.id) {\r\n continue\r\n }\r\n if (checkFeature.getMatchingOptionsName() !== matchingOptionsName) {\r\n continue\r\n }\r\n // console.log(\"checkFeature\", checkFeature);\r\n const filterValue = getColorFilterValue(checkFeature, filterGroups);\r\n if (!filterValue) {\r\n continue\r\n }\r\n if (lookActiveFeature.metaData[matchingFeatureProperty] && !isEqual(lookActiveFeature.metaData[matchingFeatureProperty], checkFeature.metaData[matchingFeatureProperty])) {\r\n continue\r\n }\r\n if (document.kvConfig.visualizerType === \"bvLook\") {\r\n if (allowCheckForCollection(checkFeature) && (checkFeature.getCollectionName(filterGroups) !== activeFeatureCollectionName)) {\r\n continue\r\n }\r\n if (lookActiveFeature.partId !== \"vanity_sink\" && (lookActiveFeature.dbFeature.lixilProductSubCategory !== checkFeature.dbFeature.lixilProductSubCategory)) {\r\n continue\r\n }\r\n if (lookActiveFeature.partId === \"vanity_cabinet\" && lookActiveFeature.dbFeature.metaData[\"VanitySize\"]\r\n && !isEqual(lookActiveFeature.metaData[\"VanitySize\"], checkFeature.metaData[\"VanitySize\"])) {\r\n continue\r\n }\r\n }\r\n if (optionFeatures.every(optFeature => optFeature.colorValue.id !== filterValue.id)) {\r\n optionFeatures.push({\r\n feature: checkFeature,\r\n colorValue: filterValue\r\n })\r\n } else if (lookActiveFeature.partId === \"vanity_sink\" && (document.kvConfig.visualizerType === \"bvLook\")) {\r\n const alreadyAddedOptionIndex = optionFeatures.findIndex(optFeature => optFeature.colorValue.id === filterValue.id);\r\n if (alreadyAddedOptionIndex > -1\r\n && !isEqual(optionFeatures[alreadyAddedOptionIndex].feature.metaData[\"MountHoles\"], lookActiveFeature.metaData[\"MountHoles\"])\r\n && isEqual(checkFeature.metaData[\"MountHoles\"], lookActiveFeature.metaData[\"MountHoles\"])) {\r\n optionFeatures.splice(alreadyAddedOptionIndex, 1, {\r\n feature: checkFeature,\r\n colorValue: filterValue\r\n })\r\n }\r\n }\r\n }\r\n return optionFeatures\r\n}\r\n\r\n\r\n/**\r\n * returns matching color feature depending on the feature passed\r\n * @param activeFeature {featureInterface}\r\n * @param notMatchingFeature {featureInterface}\r\n * @param filterGroups {array}\r\n * @returns featureFound {featureInterface}\r\n */\r\nexport const getMatchingColorFeature = (activeFeature, notMatchingFeature, filterGroups) => {\r\n if (activeFeature) { //just in case\r\n const colorFilterValue = getColorFilterValue(activeFeature, filterGroups);\r\n const currentCollectionName = notMatchingFeature.getCollectionName(filterGroups);\r\n const currentFeatureName = activeFeature.getSplittedFeatureName();\r\n const parent = notMatchingFeature.getParent();\r\n const navItems = parent.navigationSubItems({}, \"\", notMatchingFeature);\r\n\r\n let featureFound = null;\r\n let featureFoundItems = navItems.filter((navItem) => { // 2) match by color filter\r\n const colorValue = getColorFilterValue(navItem.part, filterGroups);\r\n return !!(colorValue && colorFilterValue && (\r\n (colorValue.id === colorFilterValue.id)\r\n || [colorValue,colorFilterValue].every(filterValue => filterValue.displayText && filterValue.displayText.toLowerCase().includes(\"chrome\"))\r\n ));\r\n });\r\n if (featureFoundItems.length) {\r\n featureFound =\r\n featureFoundItems.find(navItem => navItem.part.getSplittedFeatureName() === currentFeatureName) // 2) match by sku\r\n || featureFoundItems.find(navItem => navItem.part.getCollectionName(filterGroups) === currentCollectionName) // 3) match by collection\r\n || featureFoundItems[0]; // 4) return at least something\r\n } else {\r\n featureFound = navItems.find(navItem => {\r\n return navItem.part.getSplittedFeatureName() === currentFeatureName // 2) match by sku\r\n });\r\n }\r\n return featureFound\r\n }\r\n return null\r\n};\r\n\r\n/**\r\n * returns same color features but different feature groups\r\n * @param lookActiveFeature {featureInterface}\r\n * @param filterGroups {array}\r\n * @param sameColorOnly {boolean}\r\n * @returns sameColorFeatures {array}\r\n */\r\nexport const getSameColorFeatures = (lookActiveFeature, filterGroups, sameColorOnly = true) => {\r\n let sameColorFeatures = [];\r\n let differentColorFeatures = [];\r\n const doNotShowStylePopupFor = [\"bathtub_body\", \"vanity_cabinet\", \"vanity_middle\", \"shower_pan_combo\", \"replacement_tub\"];\r\n const isAsBathroom = getCurrentRoomType() === LOOK_ROOM_TYPES.as;\r\n\r\n if (lookActiveFeature && (doNotShowStylePopupFor.includes(lookActiveFeature.partId)) && isAsBathroom) {\r\n return {sameColorFeatures, differentColorFeatures}\r\n }\r\n\r\n const featureGroups = getLookList(true);\r\n if (featureGroups) {\r\n const activeFilterGroupValue = getColorFilterValue(lookActiveFeature, filterGroups);\r\n featureGroups.forEach(parentObject => {\r\n if (activeFilterGroupValue && parentObject.cartFeature && (parentObject.cartFeature.partId !== lookActiveFeature.partId)) {\r\n const colorValue = getColorFilterValue(parentObject.cartFeature, filterGroups);\r\n if (colorValue && (colorValue.id !== activeFilterGroupValue.id)) {\r\n const sameFeatureAsActive = getMatchingColorFeature(lookActiveFeature, parentObject.cartFeature, filterGroups);\r\n const bathroomShowerPanExclude = isAsBathroom\r\n && (sameFeatureAsActive && sameFeatureAsActive.part.partId === \"shower_pan_combo\")\r\n && sameFeatureAsActive.part.getParent().getParent().layout.parts[\"Shower Tub Combo\"]\r\n && sameFeatureAsActive.part.getParent().getParent().layout.parts[\"Shower Tub Combo\"].showerTubComboIsActive;\r\n if (sameFeatureAsActive && !bathroomShowerPanExclude) {\r\n sameColorFeatures.push(sameFeatureAsActive.part);\r\n differentColorFeatures.push(parentObject.cartFeature);\r\n } else if (IS_PRODUCT_JOURNEY && !sameColorOnly) {\r\n differentColorFeatures.push(parentObject.cartFeature);\r\n }\r\n } else if (IS_PRODUCT_JOURNEY && !sameColorOnly) {\r\n differentColorFeatures.push(parentObject.cartFeature);\r\n }\r\n }\r\n })\r\n }\r\n // console.log(\"sameColorFeatures\", sameColorFeatures);\r\n // console.log(\"differentColorFeatures\", differentColorFeatures);\r\n return {sameColorFeatures, differentColorFeatures}\r\n};\r\n\r\n/**\r\n * returns same color features but different feature groups\r\n * @param lookActiveFeature {featureInterface}\r\n * @param fromArray {array}\r\n * @param filterGroups {array}\r\n * @returns displayFeatures {array}\r\n */\r\nexport const getDisplaySameColorGroups = (lookActiveFeature, fromArray, filterGroups) => {\r\n\r\n if (!lookActiveFeature || !fromArray.length || !filterGroups) {\r\n return []\r\n }\r\n\r\n // const activeFilterGroupValue = getColorFilterValue(lookActiveFeature, filterGroups);\r\n const activeCollectionFilterGroupValue = lookActiveFeature.getCollectionName(filterGroups);\r\n\r\n let displayFeatures = [];\r\n let otherGroup = {\r\n colName: \"other\",\r\n features: []\r\n }\r\n let currentColGroup = {\r\n colName: activeCollectionFilterGroupValue,\r\n features: []\r\n }\r\n if (activeCollectionFilterGroupValue) {\r\n displayFeatures.push(currentColGroup)\r\n }\r\n displayFeatures.push(otherGroup);\r\n\r\n\r\n fromArray.forEach(feature => {\r\n if (displayFeatures.some(sameColorObject => sameColorObject.features.some(addedFeature => addedFeature.partId === feature.partId))) {\r\n return false\r\n }\r\n\r\n const currentCollectionValue = feature.getCollectionName(filterGroups);\r\n\r\n if (currentCollectionValue && activeCollectionFilterGroupValue && (currentCollectionValue === activeCollectionFilterGroupValue)) {\r\n currentColGroup.features.push(feature)\r\n } else {\r\n otherGroup.features.push(feature)\r\n }\r\n });\r\n displayFeatures = displayFeatures\r\n .filter(sameColorObject => sameColorObject.features.length)\r\n .sort((a,b) => (a.colName === \"other\") - (b.colName === \"other\"));\r\n\r\n // console.log(\"displayFeatures\", displayFeatures);\r\n\r\n return displayFeatures\r\n};\r\n\r\n\r\n/**\r\n * returns a list needed for integration\r\n * @param checkFeature {object}\r\n * @param filterGroups {array}\r\n * @returns {array}\r\n */\r\nexport const getSimilarItemsList = (checkFeature, filterGroups) => {\r\n if (!checkFeature) {\r\n return []\r\n }\r\n const featureGroups = getLookList();\r\n if (!featureGroups) {\r\n return []\r\n }\r\n let matchingFeatures = [];\r\n const activeFilterGroupValue = getColorFilterValue(checkFeature, filterGroups);\r\n const collectionName = checkFeature.getCollectionName(filterGroups);\r\n featureGroups.forEach(parentObject => {\r\n if (parentObject.partId === checkFeature.partId) {\r\n return\r\n }\r\n const navItems = parentObject.featureGroup.navigationSubItems({}, \"\", checkFeature)\r\n const sameColorItems = navItems.filter((navItem) => { // 2) match by color filter\r\n const colorValue = getColorFilterValue(navItem.part, filterGroups);\r\n return colorValue && activeFilterGroupValue && (colorValue.id === activeFilterGroupValue.id)\r\n });\r\n if (sameColorItems.length) {\r\n const sameCollectionFeature = sameColorItems.find(navItem => {\r\n return navItem.part.getCollectionName(filterGroups) === collectionName\r\n });\r\n matchingFeatures.push(sameCollectionFeature ? sameCollectionFeature.part : sameColorItems[0].part);\r\n } else if (parentObject.cartFeature) {\r\n // tubs, toilets and shower pans? for now let's push all\r\n matchingFeatures.push(parentObject.cartFeature);\r\n }\r\n })\r\n return matchingFeatures\r\n}\r\n\r\nconst setLayerPosition = (position, featureGroup) => {\r\n const sameFeature = featureGroup.getMatchingPositionFeature(position, featureGroup.activeFeature);\r\n // console.log(\"sameFeature\", sameFeature);\r\n if (sameFeature) {\r\n featureGroup.activeFeature = sameFeature;\r\n }\r\n featureGroup.layerPositions[position] = sameFeature || null; // if no feature found - erase previous\r\n}\r\n\r\nconst updateMirrorAndWallsCrop = (feature) => {\r\n const layout = getCurrentLayout();\r\n const vanityParent = layout.parts[\"Vanity\"];\r\n if (!vanityParent || !vanityParent.mirror || !vanityParent.relatedItems || !vanityParent.relatedItems.some(relItem => relItem.partId === feature.partId)) {\r\n return\r\n }\r\n vanityParent.mirror.setLayers(layout);\r\n const wallsParent = layout.parts[\"Walls\"];\r\n if (wallsParent && wallsParent.relatedItems) {\r\n wallsParent.relatedItems.forEach(wallFeatureGroup => {\r\n if (wallFeatureGroup.hasAdditionalParts) {\r\n wallFeatureGroup.checkIfFeaturePartIsMatching(); // update crops after mirror change\r\n }\r\n })\r\n }\r\n}\r\n\r\n/**\r\n * Updates Vanity related items sides\r\n * @param feature {featureInterface}\r\n * @param oldActiveFeature {featureInterface}\r\n */\r\nexport const updateVanitySides = (feature, oldActiveFeature = null) => {\r\n const layout = getCurrentLayout();\r\n const currentSideMeta = oldActiveFeature ? oldActiveFeature.metaData.layerPosition : null;\r\n const nextSideMeta = feature.metaData.layerPosition;\r\n const vanityParent = layout.parts[\"Vanity\"];\r\n if (!vanityParent || !vanityParent.relatedItems || !vanityParent.relatedItems.some(relItem => relItem.partId === feature.partId)\r\n || feature.partId === \"vanity_mirror\") { // vanity mirror is independent! it has Vanity Size and mirror shape meta\r\n return\r\n }\r\n\r\n if (feature.partId === \"vanity_cabinet\") {\r\n const nextVanityIsDouble = vanityParent.isDoubleVanity(feature);\r\n vanityParent.relatedItems.forEach(featureGroup => {\r\n if (feature.partId === featureGroup.partId || featureGroup.partId === \"vanity_mirror\") {\r\n // feature is already applied, no need to do anything\r\n return\r\n }\r\n if (featureGroup.layerPositions) {\r\n const isCountertopOrBacksplash = featureGroup.partId === \"vanity_countertop\" || featureGroup.partId === \"vanity_backsplash\";\r\n\r\n Object.keys(featureGroup.layerPositions).forEach(position => {\r\n if (isCountertopOrBacksplash) {\r\n if (position === feature.metaData.layerPosition || (position !== \"C\" && feature.metaData.layerPosition !== \"C\")) {\r\n setLayerPosition(position, featureGroup);\r\n } else {\r\n featureGroup.layerPositions[position] = null; // erase sibling positions\r\n }\r\n } else {\r\n if (position === \"C\" && (nextVanityIsDouble && feature.metaData.layerPosition === \"C\"\r\n || (!nextVanityIsDouble && nextSideMeta !== \"C\"))) {\r\n featureGroup.layerPositions[position] = null; // erase sibling positions\r\n } else if (position !== \"C\" && !nextVanityIsDouble && feature.metaData.layerPosition === \"C\") {\r\n featureGroup.layerPositions[position] = null; // erase sibling positions\r\n } else {\r\n setLayerPosition(position, featureGroup);\r\n }\r\n }\r\n })\r\n }\r\n })\r\n return\r\n }\r\n\r\n if (nextSideMeta === currentSideMeta) {\r\n return\r\n }\r\n if (!((currentSideMeta !== \"C\" && nextSideMeta === \"C\") || (nextSideMeta !== \"C\" && currentSideMeta === \"C\"))) {\r\n return // no need to change anything\r\n }\r\n\r\n vanityParent.relatedItems.forEach(featureGroup => {\r\n if (feature.partId === featureGroup.partId) {\r\n // feature is already applied, no need to do anything\r\n return\r\n }\r\n if (featureGroup.layerPositions) {\r\n Object.keys(featureGroup.layerPositions).forEach(position => {\r\n if ((position !== \"C\" && feature.metaData.layerPosition === \"C\") || (feature.metaData.layerPosition !== \"C\" && position === \"C\")) {\r\n if (featureGroup.getParent().vanity_type === \"vanity_cabinet\"\r\n && (featureGroup.partId === \"vanity_cabinet\")\r\n && (feature.metaData.layerPosition !== \"C\" && position === \"C\")\r\n && (featureGroup.layerPositions[\"C\"] && !featureGroup.layerPositions[\"L\"] && !featureGroup.layerPositions[\"R\"])\r\n && featureGroup.layerPositions[\"C\"].metaData[\"MatchingFeature\"]\r\n && featureGroup.layerPositions[\"C\"].metaData[\"MatchingFeature\"].includes(METADATA.NO)\r\n && featureGroup.layerPositions[\"C\"].metaData[\"VanityWidth\"]\r\n && featureGroup.layerPositions[\"C\"].metaData[\"VanityWidth\"] === 64) {\r\n return; // do not erase 64 vanity if we are trying to apply L sink, it can be used with 64 vanity size\r\n }\r\n featureGroup.layerPositions[position] = null; // erase sibling positions\r\n } else {\r\n if (nextSideMeta === position && featureGroup.layerPositions[position]) {\r\n // feature is already applied, no need to search for it\r\n return\r\n }\r\n setLayerPosition(position, featureGroup);\r\n }\r\n })\r\n }\r\n })\r\n}\r\n\r\n/**\r\n * Simple navigation feature click\r\n * @param feature {object}\r\n * @param updateLocalStorage {boolean}\r\n * @param forceClick {boolean}\r\n * @param updateVanityPositions {boolean}\r\n // * @param fromUrl {boolean}\r\n * @returns {boolean}\r\n */\r\nexport const navFeatureCLick = (feature, updateLocalStorage = true, forceClick = false, updateVanityPositions = true) => {\r\n const parent = feature.getParent();\r\n const featureIsLocked = getFeatureIsLocked(feature);\r\n if (featureIsLocked && !forceClick) {\r\n feature.handleClick(forceClick); // update active locked feature or active not in visualizer feature\r\n return false\r\n }\r\n\r\n const currentActiveFeature = parent.activeFeature;\r\n const asBathroom = getCurrentRoomType() === LOOK_ROOM_TYPES.as;\r\n if (asBathroom) {\r\n if (feature.partId === \"vanity_sink\" && (document.kvConfig.visualizerType === \"bvLook\")) {\r\n feature.handleClick(forceClick, true);\r\n } else if (feature.partId === \"vanity_cabinet\" && (document.kvConfig.visualizerType === \"bvLook\") && !updateVanityPositions) {\r\n feature.handleClick(forceClick, false); // do not click again on the sink, we came from the sink click\r\n } else {\r\n feature.handleClick(forceClick); // first set custom types (for vanity)\r\n }\r\n }\r\n if (!feature.notAvailableInVisualizer && parent.layerPositions && feature.metaData.layerPosition) { // prevent clicking on disabled item if same sku is opened for enabled feature\r\n // if (fromUrl && Object.keys(parent.layerPositions).some(layerPosition => !parent.layerPositions[layerPosition])) {\r\n // return false\r\n // }\r\n Object.keys(parent.layerPositions).forEach(position => {\r\n if (position === feature.metaData.layerPosition) {\r\n parent.layerPositions[position] = feature\r\n } else if ((position !== \"C\" && feature.metaData.layerPosition === \"C\") || (feature.metaData.layerPosition !== \"C\" && position === \"C\")) {\r\n parent.layerPositions[position] = null; // erase sibling positions\r\n } else {\r\n const sameFeature = parent.getMatchingPositionFeature(position, feature, null, parent.getActiveFeatureConditions(feature));\r\n // console.log(\"sameFeature\", sameFeature);\r\n parent.layerPositions[position] = sameFeature || null; // if no feature found - erase previous\r\n }\r\n });\r\n }\r\n if (parent.disabled) {\r\n parent.disabled = false;\r\n parent.disabledClick();\r\n }\r\n\r\n if (feature.partId === \"vanity_cabinet\" && (document.kvConfig.visualizerType === \"bvLook\") && !updateVanityPositions) {\r\n feature.handleClick(forceClick, false); // do not click again on the sink, we came from the sink click\r\n } else {\r\n feature.handleClick(forceClick); // update active feature or active not in visualizer feature\r\n }\r\n\r\n if (updateLocalStorage) {\r\n const layout = getCurrentLayout();\r\n store.dispatch(addLayoutHistory(layout.getActiveFeaturesAsObject(false, false, true)))\r\n }\r\n if (parent.layerPositions && feature.metaData.layerPosition && updateVanityPositions && !feature.notAvailableInVisualizer) {\r\n updateVanitySides(feature, currentActiveFeature);\r\n updateMirrorAndWallsCrop(feature);\r\n }\r\n}\r\n\r\n/**\r\n * For delete buttons\r\n * @param feature {object}\r\n * @param featureParent {object}\r\n * @param checkDisabledOnly {boolean}\r\n * @returns {boolean}\r\n */\r\nexport const checkIfFeatureDisabled = (feature, featureParent, checkDisabledOnly = false) => {\r\n if (!featureParent) {\r\n featureParent = feature.getParent();\r\n }\r\n const isDisabled = featureParent.layerPositions\r\n ? Object.keys(featureParent.layerPositions).every(pos => !featureParent.layerPositions[pos])\r\n : featureParent.disabled;\r\n return checkDisabledOnly ? isDisabled : isDisabled && featureParent.canBeDisabled\r\n}\r\n\r\n/**\r\n * Returns active features list for\r\n * @param withLayerPositions {boolean} return all positions features\r\n * @param withDisabled {boolean} return feature positions even disabled\r\n * @param showAllGroups {boolean} returns all layout feature groups\r\n * @param showAllQtCategories {boolean} returns quotingTool featureGroups\r\n * @param displayInMenu {boolean} whether to display in look menu\r\n * @returns {array} array of objects\r\n */\r\nexport const getLookList = (withLayerPositions = false,\r\n withDisabled = false,\r\n showAllGroups = false,\r\n showAllQtCategories = false,\r\n displayInMenu = false) => {\r\n const layout = getCurrentLayout();\r\n\r\n let featureGroups = [];\r\n\r\n if (showAllGroups) {\r\n layout.getFeatures().forEach(parent => {\r\n parent.relatedItems.forEach(featureGroup => {\r\n if (!featureGroup.activeFeature) {\r\n featureGroup.setDefault(layout, true);\r\n }\r\n if (!featureGroup.activeFeature) {\r\n return\r\n }\r\n featureGroups.push({\r\n selectionGroup: parent.partName,\r\n partId: featureGroup.partId,\r\n quantity: 0,\r\n cartFeature: featureGroup.activeFeature,\r\n featureGroup,\r\n })\r\n })\r\n });\r\n return featureGroups\r\n }\r\n\r\n if (((document.kvConfig.toolVersion !== 6 || showAllQtCategories) && layout.qtCategories)) {\r\n layout.qtCategories.forEach((qtCategory) => {\r\n qtCategory.defaultSubParts.forEach(subPart => {\r\n if (document.kvConfig.visualizerType === \"kvScene\") {\r\n if ((subPart.part.partId === \"center_island_edge\" && layout.type === 3)\r\n || (subPart.part.partId === \"crown_molding\" && (layout.type !== 1 && layout.type !== 4))) {\r\n return\r\n }\r\n }\r\n if (!featureGroups.some(parentObject => parentObject.partId === subPart.part.partId)) {\r\n featureGroups.push({\r\n selectionGroup: subPart.part.getParent().partName,\r\n partId: subPart.part.partId,\r\n quantity: 0,\r\n cartFeature: subPart.part.activeFeature, // it can be null here! it's ok since we need to show featureGroups from another layouts (for shop)\r\n featureGroup: subPart.part\r\n })\r\n }\r\n })\r\n })\r\n return featureGroups\r\n }\r\n\r\n let featureGroupsObjects = layout.getActiveFeatures(false, withLayerPositions, withDisabled);\r\n // console.log(\"parentGroups before wizard clean\", featureGroupsObjects);\r\n\r\n if (displayInMenu) {\r\n const {wizardList} = store.getState().wizardState;\r\n if (Array.isArray(wizardList) && wizardList.length) {\r\n wizardList.forEach(wizardItem => {\r\n if (wizardItem.hideItems && Array.isArray(wizardItem.wizardGroups) && wizardItem.wizardGroups.length) {\r\n featureGroupsObjects = featureGroupsObjects.filter(parentObject => {\r\n return wizardItem.wizardGroups.every(wizardGroup => {\r\n return (parentObject.featureGroup.dbName || parentObject.featureGroup.partName) !== wizardGroup.groupName\r\n })\r\n })\r\n }\r\n })\r\n }\r\n }\r\n\r\n const parentGroups = groupBy(featureGroupsObjects, 'selectionGroup');\r\n // console.log(\"parentGroups\", parentGroups);\r\n\r\n if (!Object.keys(parentGroups).length) {\r\n return null\r\n }\r\n\r\n const visType = getCommonVisualizerType();\r\n const sortByParents = visType === \"bathroom\"\r\n ? [\"Vanity\", \"Shower\", \"Shower Tub Combo\", \"Shower Accessories\", \"Bathtub\", \"Toilet\", \"Floor\", \"Walls\", \"Window\"]\r\n : visType === \"kitchen\"\r\n ? [\"Countertop\", \"CenterIsland\", \"Cabinet\", \"Appliances\", \"Walls\", \"Floor\"]\r\n : Object.keys(parentGroups);\r\n\r\n sortByParents.forEach(parentKey => {\r\n featureGroups = [...featureGroups, ...(parentGroups[parentKey] || [])]\r\n });\r\n\r\n if (getCurrentRoomType(layout) === LOOK_ROOM_TYPES.as) {\r\n const vanityParent = layout.parts[\"Vanity\"];\r\n featureGroups = featureGroups.filter(parentObject => {\r\n if (parentObject.partId === \"vanity_ws_towel_bar\" && vanityParent.vanity_type !== VANITY_TYPES.vanity_washstand) {\r\n return false\r\n } else if ((parentObject.partId === \"vanity_middle\" || parentObject.partId === \"vanity_legs\") && vanityParent.vanity_type !== VANITY_TYPES.vanity_cabinet) {\r\n return false\r\n }\r\n return !(vanityParent && Object.keys(VANITY_TYPES).includes(parentObject.partId) && vanityParent.vanity_type !== parentObject.partId);\r\n })\r\n }\r\n // console.log(\"featureGroups\", featureGroups);\r\n\r\n // simple hardcoded sort\r\n return featureGroups.filter(parentObject => parentObject.cartFeature)\r\n}\r\n\r\n/**\r\n * Returns look navigation list height\r\n * @param lmFeatureParent {object}\r\n * @param lookViewType {number}\r\n * @param lookParentKeys {array}\r\n * @returns {number}\r\n */\r\nexport const getLookListHeight = (lmFeatureParent, lookViewType, lookParentKeys) => {\r\n const opened = lookParentKeys.includes(lmFeatureParent.partId);\r\n // const featuresLength = parentGroups[parentKey].length;\r\n let featuresLength = 1;\r\n if (lmFeatureParent.layerPositions) {\r\n if (POSSIBLE_ONE_POSITION.includes(lmFeatureParent.partId)) {\r\n featuresLength = 0;\r\n Object.keys(lmFeatureParent.layerPositions).forEach(position => {\r\n if (lmFeatureParent.getMatchingPositionFeature(position)) {\r\n featuresLength += 1;\r\n }\r\n });\r\n } else {\r\n featuresLength = Object.keys(lmFeatureParent.layerPositions).length\r\n }\r\n }\r\n let listHeight = 0;\r\n const styleNotificationIsVisible = getStyleAlertIsVisibleForGroup(lmFeatureParent);\r\n if (opened) {\r\n switch (lookViewType) {\r\n case 1:\r\n default:\r\n listHeight = 104 * featuresLength; // feature height 88 + feature margin 16\r\n break;\r\n case 2:\r\n listHeight = (172 + 22) * Math.ceil(featuresLength / 2); // feature height 156 + feature margin 16 + featureName 22\r\n break;\r\n case 3:\r\n listHeight = (280 + 22 + 16) * featuresLength; // feature height 280 + feature margin 16 + featureName 22\r\n break;\r\n }\r\n if (styleNotificationIsVisible) {\r\n listHeight += 96 // 80 + 8 + 8 margins\r\n }\r\n }\r\n return listHeight\r\n}\r\n\r\nconst disallowedSkus = [\"athtub\"];\r\n\r\n/**\r\n * @param feature {featureInterface}\r\n * @returns {boolean}\r\n */\r\nexport const checkIfFeatureCanBeAddedToTheCart = (feature) => {\r\n return (document.kvConfig.visualizerOnly || isVisibleForNavigation(feature, true)) && !disallowedSkus.some(sku => feature.dbFeature.sharedFeatureName.includes(sku))\r\n}\r\n\r\n/**\r\n * Creates cart items list depending on quotingTool features\r\n * @param qtActiveCategory {string} current active quote category name\r\n * @param loadByTheDefault {object} loadByTheDefault object from localstorage\r\n * @returns {array} array of cart items\r\n */\r\nexport const createCartList = (qtActiveCategory, loadByTheDefault = null) => {\r\n const featureGroups = getLookList(true);\r\n let cartItems = [];\r\n if (featureGroups && featureGroups.length) {\r\n featureGroups.forEach(featureGroup => {\r\n if ((getCurrentRoomType() === LOOK_ROOM_TYPES.as) && featureGroup.featureGroup.hideLayerCondition && featureGroup.featureGroup.hideLayerCondition()) {\r\n return\r\n }\r\n const existingCartItem = cartItems.find(cItem => {\r\n if (!featureGroup.cartFeature) {\r\n return null\r\n }\r\n return (cItem.partId === featureGroup.cartFeature.partId)\r\n && cItem.cartFeature.dbFeature.sharedFeatureName && featureGroup.cartFeature.dbFeature.sharedFeatureName\r\n && (cItem.cartFeature.dbFeature.sharedFeatureName === featureGroup.cartFeature.dbFeature.sharedFeatureName)\r\n });\r\n let quantity = 1;\r\n let loadByTheDefaultCItem = null;\r\n if (loadByTheDefault && loadByTheDefault.cartState && Array.isArray(loadByTheDefault.cartState.cartItems)){\r\n loadByTheDefaultCItem = loadByTheDefault.cartState.cartItems.find(cItem => {\r\n const foundFeature = featureGroup.featureGroup.getFeatureById(cItem.cartFeature.dbFeatureId, true)\r\n if (foundFeature) {\r\n return foundFeature.dbFeature.sharedFeatureName && featureGroup.cartFeature.dbFeature.sharedFeatureName\r\n && (foundFeature.dbFeature.sharedFeatureName === featureGroup.cartFeature.dbFeature.sharedFeatureName)\r\n }\r\n return cItem.cartFeature.dbFeatureId === featureGroup.cartFeature.dbFeature.id\r\n })\r\n if (loadByTheDefaultCItem) {\r\n quantity = loadByTheDefaultCItem.quantity;\r\n } else {\r\n quantity = 0\r\n }\r\n }\r\n\r\n if (existingCartItem && quantity) {\r\n if (!loadByTheDefaultCItem) {\r\n existingCartItem.quantity += quantity;\r\n }\r\n } else if (featureGroup.cartFeature && checkIfFeatureCanBeAddedToTheCart(featureGroup.cartFeature) && quantity) {\r\n const newCartItem = getCartItemObject(featureGroup.cartFeature, quantity, qtActiveCategory);\r\n newCartItem.addedBy = CART_ITEM_ADDED_BY.auto;\r\n cartItems.push(newCartItem);\r\n const relatedFeatures = getBundledFeatures(featureGroup.cartFeature);\r\n relatedFeatures.forEach((relatedFeature) => {\r\n let relatedItemQuantity = 1;\r\n if (loadByTheDefault && loadByTheDefault.cartState && Array.isArray(loadByTheDefault.cartState.cartItems)) {\r\n const alreadyAddedRelatedFeature = loadByTheDefault.cartState.cartItems.find(cartItem => {\r\n return cartItem.cartFeature.dbFeatureId === relatedFeature.dbFeature.id\r\n });\r\n if (alreadyAddedRelatedFeature) {\r\n relatedItemQuantity = alreadyAddedRelatedFeature.quantity\r\n }\r\n }\r\n const cartItem = getCartItemObject(relatedFeature, relatedItemQuantity, qtActiveCategory);\r\n cartItem.relatedProductParent = featureGroup.cartFeature;\r\n cartItem.addedBy = CART_ITEM_ADDED_BY.auto;\r\n cartItems.push(cartItem);\r\n })\r\n }\r\n })\r\n }\r\n return cartItems\r\n}\r\n\r\n/**\r\n * Returns layer center\r\n * @param coords {object} metadata object // {min_x: 0.2109375, min_y: 1.3685185185185185, max_x: 1.9994791666666667, max_y: 2}\r\n * @param canvasElement {$ElementType} canvas\r\n * @param isMobile {boolean} on mobile we have different menu position\r\n * @returns {object}\r\n */\r\nexport const getLayerCenter = (coords, canvasElement, isMobile = false) => {\r\n if (!coords) {\r\n return null\r\n }\r\n let {clientWidth, clientHeight} = canvasElement;\r\n const COORDS_MAX = 1;\r\n // const openedMenuWidth = 712;\r\n // console.log(\"clientWidth\", clientWidth);\r\n // console.log(\"clientWidth - openedMenuWidth\", openedMenuWidth);\r\n // const threeQuater = clientWidth - (clientWidth / 4);\r\n // const featureViewWidth = (clientWidth - openedMenuWidth) / 2;\r\n let centerXPercentage = ((coords.min_x + ((coords.max_x - coords.min_x) / 2)) * 100) / COORDS_MAX;\r\n const centerYPercentage = ((coords.min_y + ((coords.max_y - coords.min_y) / 2)) * 100) / COORDS_MAX; // 1.5 ⋅ 100 : 2 = 75%\r\n // console.log(\"centerXPercentage\", centerXPercentage);\r\n // let scrollPercentage = 0;\r\n let x = 0;\r\n // if (isMobile) {\r\n //\r\n // const menuWidth = 320;\r\n // const shiftX = clientWidth - (clientWidth * centerXPercentage / 100);\r\n // const containerScrolled = shiftX < menuWidth;\r\n //\r\n // const startZeroPosition = IS_PRODUCT_JOURNEY ? 15 : 13;\r\n //\r\n // scrollPercentage = centerXPercentage < startZeroPosition\r\n // ? 0\r\n // : centerXPercentage > 54\r\n // ? centerXPercentage - ((100 - centerXPercentage) / 3) // 80 + 5 = 85\r\n // // ? centerXPercentage // 80 + 5 = 85\r\n // : centerXPercentage - ((35 - centerXPercentage) - ((centerXPercentage / 100) * (35 - centerXPercentage))) // 1) calculate percent of scroll from 75 2) 61 - 12%;\r\n // if (containerScrolled && (centerXPercentage > 50) && (centerXPercentage < 60)) {\r\n // scrollPercentage = centerXPercentage - ((100 - centerXPercentage) / 5)\r\n // }\r\n // x = (clientWidth * scrollPercentage) / 100;\r\n // } else {\r\n const zoomPercentage = 75;\r\n if (centerXPercentage < zoomPercentage) {\r\n\r\n const openedMenuWidth = IS_PRODUCT_JOURNEY ? 412 : 360;\r\n // const featureViewWidth = IS_PRODUCT_JOURNEY ? clientWidth - openedMenuWidth : (clientWidth - openedMenuWidth - 64); // 64 is sidebar\r\n const featureMinX = (clientWidth * (coords.min_x * 100 / COORDS_MAX)) / 100;\r\n const featureMaxX = (clientWidth * (coords.max_x * 100 / COORDS_MAX)) / 100;\r\n const featureCenter = featureMinX + (featureMaxX - featureMinX) / 2;\r\n // console.log(\"clientWidth\", clientWidth);\r\n // console.log(\"featureViewWidth\", featureViewWidth);\r\n // console.log(\"centerXPercentage\", centerXPercentage);\r\n // console.log(\"centerXPercentage\", centerXPercentage);\r\n // console.log(\"featureMinX\", featureMinX);\r\n // console.log(\"featureMaxX\", featureMaxX);\r\n const gPointPercent = 40; // don't ask me why, just because it is magic number\r\n const shiftX = clientWidth - (clientWidth * centerXPercentage / 100);\r\n if (IS_PRODUCT_JOURNEY && isMobile && (shiftX > GROHE_CONFIG.sidebarWidth.mobile)) {\r\n x = featureCenter - (clientWidth * (gPointPercent - centerXPercentage)) / 100;\r\n } else {\r\n x = featureCenter - (clientWidth * (gPointPercent - centerXPercentage)) / 100 - (openedMenuWidth / 2);\r\n }\r\n } else {\r\n x = clientWidth;\r\n }\r\n // }\r\n // console.log(\"scrollPercentage\", scrollPercentage);\r\n\r\n const y = (clientHeight * centerYPercentage) / 100; // 1920 ⋅ 75 : 100\r\n\r\n // console.log(\"getLayerCenter\", {x, y});\r\n // console.log(\"getLayerCenter\", {x, y, isMobile, featureX: centerXPercentage, clientWidth});\r\n return {x, y, isMobile, featureX: centerXPercentage, clientWidth}\r\n}\r\n\r\n/**\r\n * Returns layer center\r\n * @param coords {object} metadata object // {min_x: 0.2109375, min_y: 1.3685185185185185, max_x: 1.9994791666666667, max_y: 2}\r\n * @param canvasElement {$ElementType} canvas\r\n * @returns {object}\r\n */\r\nexport const getCoordsCenter = (coords, canvasElement) => {\r\n let {clientWidth, clientHeight} = canvasElement;\r\n const COORDS_MAX = 1;\r\n let centerXPercentage = ((coords.min_x + ((coords.max_x - coords.min_x) / 2)) * 100) / COORDS_MAX;\r\n const centerYPercentage = ((coords.min_y + ((coords.max_y - coords.min_y) / 2)) * 100) / COORDS_MAX; // 1.5 ⋅ 100 : 2 = 75%\r\n\r\n const x = (clientWidth * centerXPercentage) / 100;\r\n const y = (clientHeight * centerYPercentage) / 100; // 1920 ⋅ 75 : 100\r\n\r\n // console.log(\"getLayerCenter\", {x, y});\r\n return {x, y}\r\n}\r\n\r\n/**\r\n * Returns layer center\r\n * @returns {object}\r\n */\r\nexport const getCropCoordsCenter = (feature) => {\r\n if (feature.metaData[\"CropCoords\"]) {\r\n const parsedCoords = getFeatureCropCoors(feature);\r\n // const {clientWidth, clientHeight} = canvasElement;\r\n const clientWidth = 1920;\r\n const clientHeight = 1080;\r\n\r\n const changed = {\r\n min_x: parsedCoords[0] / clientWidth,\r\n min_y: parsedCoords[1] / clientHeight,\r\n max_x: parsedCoords[2] / clientWidth,\r\n max_y: parsedCoords[3] / clientHeight,\r\n }\r\n // if (feature.partId) {\r\n // console.log(\"original\", feature.metaData[\"Coords\"]);\r\n // console.log(\"changed\", changed);\r\n // }\r\n return changed\r\n }\r\n return feature.metaData[\"Coords\"]\r\n}\r\n\r\n/**\r\n * Returns bool\r\n * @param lookFeature {object} feature\r\n * @param fromStyleAlertIcon {boolean}\r\n * @returns {array} not matching features\r\n */\r\nexport const getStyleAlertNotMatchingFeatures = (lookFeature, fromStyleAlertIcon = false) => {\r\n let notMatchingFeatures = [];\r\n if (lookFeature) {\r\n const featureGroup = lookFeature.getParent();\r\n\r\n if (fromStyleAlertIcon && !featureGroup.confirmedChange) {\r\n return notMatchingFeatures\r\n }\r\n\r\n const currentFeatureName = lookFeature.getSplittedFeatureName();\r\n // console.log(\"currentFeatureName\", currentFeatureName);\r\n const wallsPartIds = [\"left_wall\", \"front_wall\", \"right_wall\"];\r\n if (wallsPartIds.includes(lookFeature.partId)) {\r\n const layout = getCurrentLayout();\r\n wallsPartIds.forEach(wallPartId => {\r\n const wallGroup = layout.getFeatureGroupByPartId(wallPartId);\r\n if (wallGroup && wallGroup.activeFeature && (wallGroup.activeFeature.getSplittedFeatureName() !== currentFeatureName)) {\r\n // console.log(\"wallGroup.activeFeature.getSplittedFeatureName()\", wallGroup.activeFeature.getSplittedFeatureName());\r\n\r\n notMatchingFeatures.push(wallGroup.activeFeature);\r\n }\r\n })\r\n } else if (featureGroup.layerPositions && lookFeature.metaData.layerPosition) {\r\n Object.keys(featureGroup.layerPositions).forEach(position => {\r\n const feature = featureGroup.layerPositions[position];\r\n if (feature && (feature.dbFeature.id !== lookFeature.dbFeature.id)\r\n && (feature.getSplittedFeatureName() !== currentFeatureName)) {\r\n notMatchingFeatures.push(feature)\r\n }\r\n })\r\n }\r\n }\r\n return notMatchingFeatures\r\n}\r\n\r\n/**\r\n * Returns bool\r\n * @param featureGroup {object} featureGroup\r\n * @returns {boolean}\r\n */\r\nexport const getStyleAlertIsVisibleForGroup = (featureGroup) => {\r\n let alertIsVisible = false;\r\n if (featureGroup.layerPositions) {\r\n let names = [];\r\n Object.keys(featureGroup.layerPositions).forEach(position => {\r\n const feature = featureGroup.layerPositions[position];\r\n if (feature) {\r\n const featureName = feature.getSplittedFeatureName();\r\n names.push(featureName)\r\n }\r\n });\r\n alertIsVisible = Object.keys(featureGroup.layerPositions).some(position => {\r\n const feature = featureGroup.layerPositions[position];\r\n if (feature) {\r\n const featureName = feature.getSplittedFeatureName();\r\n return names.some(name => name !== featureName)\r\n }\r\n return false\r\n })\r\n }\r\n return alertIsVisible\r\n}\r\n\r\n/**\r\n * Returns array of not matched features partIds\r\n * @returns {array}\r\n */\r\nexport const getAllNotMatchingPartIds = () => {\r\n const layout = getCurrentLayout();\r\n const allFeatures = layout.getActiveFeatures(false);\r\n return allFeatures\r\n .filter(feature => getStyleAlertNotMatchingFeatures(feature.cartFeature).length)\r\n .map(feature => feature.partId);\r\n}\r\n\r\n/**\r\n * zooms canvas to default position\r\n * @param imageCanvas {object}\r\n * @param setCanvasScale {function}\r\n */\r\nexport const zoomCanvasOut = (imageCanvas, setCanvasScale) => {\r\n if (imageCanvas && imageCanvas.current && imageCanvas.current.pinchZoom) {\r\n imageCanvas.current.pinchZoom.zoomToCenter(null, 1);\r\n // removed as we don't see crown molding on unzoom, decided not to unzoom to floor\r\n // const scrollCheck = document.body.scrollHeight - document.body.clientHeight;\r\n // if (!scrollCheck || (scrollCheck > (document.documentElement.scrollTop + 1))) {\r\n // $(\"html, body\").animate({scrollTop: document.body.scrollHeight}, 1000);\r\n // }\r\n setCanvasScale(1);\r\n }\r\n}\r\n\r\n/**\r\n * creates all available rooms and room scenes\r\n * @param returnAllLayouts {boolean}\r\n * @returns objects {array}\r\n */\r\nexport const getRoomLayouts = (returnAllLayouts = false) => {\r\n const newLooks = [];\r\n const layout = getCurrentLayout();\r\n const layoutNames = Object.keys(layout.layoutNames).filter(key => key !== \"All\");\r\n const parents = layout.getFeatures();\r\n const isAsBathroom = getCurrentRoomType() === LOOK_ROOM_TYPES.as;\r\n parents.forEach(parent => {\r\n parent.relatedItems.forEach(relItem => {\r\n layoutNames.forEach(layoutName => {\r\n const features = relItem.featuresList[layoutName];\r\n for (let i = 0; i < features.length; i++) {\r\n const feature = features[i];\r\n const roomLayout = feature.dbFeature.metaData[\"RoomLayout\"];\r\n const roomScene = feature.dbFeature.metaData[\"RoomScene\"];\r\n if (document.kvConfig.toolVersion === 4) {\r\n if (feature.dbFeature.s3Bindings && Array.isArray(roomLayout) && !newLooks.some(look => look.lookLayout === layoutName)) {\r\n newLooks.push({\r\n lookLayout: layoutName,\r\n lookScene: \"1\",\r\n })\r\n }\r\n } else if (feature.dbFeature.s3Bindings && Array.isArray(roomLayout) && Array.isArray(roomScene) && roomLayout.length && roomScene.length) {\r\n if (!newLooks.some(look => (look.lookLayout === roomLayout[0]) && (look.lookScene === roomScene[0]))\r\n && (!isAsBathroom || (roomScene[0] === \"1\"))) {\r\n newLooks.push({\r\n lookLayout: roomLayout[0],\r\n lookScene: roomScene[0],\r\n })\r\n }\r\n }\r\n }\r\n })\r\n })\r\n });\r\n console.log(\"newLooks\", newLooks);\r\n if (returnAllLayouts || (document.kvConfig.toolVersion === 4) || (\r\n document.kvConfig.userId === 140000\r\n || document.kvConfig.userId === 140001\r\n || window.location.href.includes(\"quote_bathroom_2022\")\r\n || window.location.href.includes(\"qc_main_bathroom_set_2022\"))) {\r\n return newLooks\r\n }\r\n const currentName = layout.getCurrentLayoutName();\r\n // if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n // return newLooks\r\n // }\r\n return newLooks.filter(look => look.lookLayout === currentName)\r\n}\r\n\r\n/**\r\n * parses passed URL, and returns look ID, look category and sku\r\n * @param checkURL {string}\r\n * @returns parsedUrl {object}\r\n */\r\nexport const getParsedLookUrl = (checkURL = window.location.href) => {\r\n const regexForRoomPreset = /\\/look(.*?)$/;\r\n let lookIdFromUrl = checkURL.includes(\"/look\") ? checkURL.match(regexForRoomPreset)[1] : null;\r\n\r\n if (!lookIdFromUrl) {\r\n return {}\r\n }\r\n\r\n let featureGroupFromUrl = \"\";\r\n let skuFromUrl = \"\";\r\n\r\n let splittedLookPath = lookIdFromUrl.split(\"/\");\r\n if (lookIdFromUrl && splittedLookPath.length) {\r\n lookIdFromUrl = +splittedLookPath[0].replace(\"-\", \"\");\r\n featureGroupFromUrl = splittedLookPath[2] ? splittedLookPath[1] : null;\r\n skuFromUrl = splittedLookPath[2] || splittedLookPath[1];\r\n }\r\n // console.log(\"{lookIdFromUrl, featureGroupFromUrl, skuFromUrl}\", {lookIdFromUrl, featureGroupFromUrl, skuFromUrl});\r\n\r\n return {lookIdFromUrl, featureGroupFromUrl, skuFromUrl}\r\n}\r\n\r\n/**\r\n * compares currect and common coords - gives max & min values\r\n * @param currentCoords {object}\r\n * @param commonCoords {object}\r\n * @returns {object}\r\n */\r\nexport const compareCoords = (currentCoords, commonCoords) => {\r\n if (currentCoords) {\r\n [\"min_x\",\"min_y\",].forEach(coordProp => {\r\n if (!commonCoords[coordProp] || (commonCoords[coordProp] > currentCoords[coordProp])) {\r\n commonCoords[coordProp] = currentCoords[coordProp];\r\n }\r\n });\r\n [\"max_x\", \"max_y\"].forEach(coordProp => {\r\n if (!commonCoords[coordProp] || (commonCoords[coordProp] < currentCoords[coordProp])) {\r\n commonCoords[coordProp] = currentCoords[coordProp];\r\n }\r\n });\r\n }\r\n return commonCoords\r\n}\r\n\r\n/**\r\n * compares currect and common coords - gives max & min values\r\n * @param feature {featureInterface}\r\n * @param isWizard {boolean}\r\n * @returns {object}\r\n */\r\nexport const getFeatureCoords = (feature, isWizard = false) => {\r\n if (document.kvConfig.visualizerType === \"kvScene\"\r\n && feature.metaData[\"RoomLayout\"] && feature.metaData[\"RoomLayout\"].includes('Layout1')\r\n && feature.metaData[\"RoomScene\"] && feature.metaData[\"RoomScene\"].includes('1')) {\r\n if ((feature.partId === \"top_cabinet\" || feature.partId === \"bottom_cabinet\")) {\r\n return feature.metaData[\"Coords\"]\r\n ? Object.assign({}, feature.metaData[\"Coords\"], {max_x: 0.2}) // do not zoom to right part of it\r\n : {min_x: 0, min_y: 0, max_x: 0.2, max_y: 0.38}\r\n } else if (feature.partId === \"crown_molding\") {\r\n return isWizard\r\n ? {min_x: 0.5, min_y: 0, max_x: 0.7, max_y: 0.1}\r\n : {min_x: 0.4, min_y: 0, max_x: 0.6, max_y: 0.1} // do not zoom to left part of it\r\n }\r\n\r\n }\r\n if (document.kvConfig.visualizerType === \"bvLook\" && feature.metaData[\"Coords\"]) {\r\n\r\n if (feature.partId === \"shower_wall\") {\r\n if (feature.metaData[\"RoomLayout\"] && feature.metaData[\"RoomLayout\"].includes('Layout18')) {\r\n return Object.assign({}, feature.metaData[\"Coords\"], {max_x: feature.metaData[\"Coords\"].max_x / 1.8})\r\n }\r\n }\r\n }\r\n return feature.metaData[\"Coords\"]\r\n}\r\n\r\n/**\r\n * parses passed URL, and returns look ID, look category and sku\r\n * @param featureGroup {object}\r\n * @param clickedFeature {object}\r\n * @param canvasElement {$ElementType} canvas\r\n * @param layerPosition {string}\r\n * @returns parsedUrl {object}\r\n */\r\nexport const getCommonCoords = (featureGroup, clickedFeature = null, canvasElement = null, layerPosition = \"\") => {\r\n\r\n const layout = getCurrentLayout();\r\n let zoomFeatureGroup;\r\n switch (featureGroup.partId) {\r\n case \"edge_profile\":\r\n zoomFeatureGroup = layout.getFeatureGroupByPartId(\"countertop\") || featureGroup;\r\n break;\r\n case \"center_island_edge\":\r\n zoomFeatureGroup = layout.getFeatureGroupByPartId(\"center_island_countertop\") || featureGroup;\r\n break;\r\n default:\r\n zoomFeatureGroup = featureGroup\r\n break;\r\n }\r\n\r\n let commonCoords = clickedFeature ? clickedFeature.metaData.Coords || {} : {};\r\n if (!clickedFeature && layerPosition) {\r\n clickedFeature = zoomFeatureGroup.getMatchingPositionFeature(layerPosition);\r\n }\r\n\r\n const navItems = layout.designNavigationItems({part: zoomFeatureGroup}, {}, \"\", clickedFeature, true);\r\n\r\n for (let i = 0; i < navItems.length; i++) {\r\n const currentFeature = navItems[i].part;\r\n let currentCoords = getCropCoordsCenter(currentFeature, canvasElement);\r\n commonCoords = compareCoords(currentCoords, commonCoords);\r\n }\r\n if ((getCurrentRoomType() === LOOK_ROOM_TYPES.as) && [\"front_wall\", \"right_wall\"].some(partId => zoomFeatureGroup.partId === partId)) {\r\n commonCoords.min_x = 0.8 // because of the reflection in mirror, it sets min_x to 0.1, so the menu is not scrolling on open\r\n }\r\n return commonCoords\r\n}\r\n\r\n/**\r\n * toggles array val\r\n * @param array {array}\r\n * @param value {any}\r\n * @returns array {array}\r\n */\r\nexport const toggleArrayValue = (array, value) => {\r\n let newArray = [...array];\r\n let index = newArray.indexOf(value);\r\n (index >= 0) ? newArray.splice(index, 1) : newArray.push(value);\r\n return newArray;\r\n};\r\n\r\n/**\r\n * Checks if it is needed to show a context menu\r\n * @param partId {string}\r\n * @param layerPosition {string}\r\n * @param fabricatorData {object}\r\n * @returns object\r\n */\r\nexport const checkForContextMenuCommon = (partId, layerPosition, fabricatorData) => {\r\n const returnObject = {\r\n allButtons: [], // {partId: \"\", translateId: \"\", isWizard: true, wizardId: sting|number, hasSubMenu: false}\r\n showButtons: [] // {partId: \"\", translateId: \"\", isWizard: true, wizardId: sting|number, hasSubMenu: false}\r\n }\r\n if (!partId) {\r\n return returnObject\r\n }\r\n const isBathroom = getCommonVisualizerType() === \"bathroom\";\r\n if (isBathroom && (fabricatorData && fabricatorData.isEncore)) {\r\n return returnObject\r\n }\r\n const allContextMenus = isBathroom ? ALL_CONTEXT_MENU : ALL_CONTEXT_MENU_KITCHEN;\r\n if (!allContextMenus.includes(partId)) {\r\n return returnObject\r\n }\r\n // if (imageCanvas.current && imageCanvas.current.setHoveredLayer) {\r\n // imageCanvas.current.renderGreenLayerByZindex(hoveredLayer.zIndex);\r\n\r\n let whereToCheck = isBathroom\r\n ? [CONTEXT_MENU_VANITY_BUTTONS, CONTEXT_MENU_BATHTUB_BUTTONS, CONTEXT_MENU_SPLIT_WALL, CONTEXT_MENU_SHOWER_ALL,\r\n CONTEXT_MENU_SHOWER_OTHER]\r\n : [CONTEXT_MENU_KITCHEN_CENTER_ISLAND, CONTEXT_MENU_KITCHEN_COUNTERTOPS];\r\n\r\n if (isBathroom && IS_QKB_UI) {\r\n whereToCheck.push(CONTEXT_MENU_SHOWER_ACCESSORIES);\r\n }\r\n\r\n let checkArray = whereToCheck.find(contextMenuArray => contextMenuArray.includes(partId)) || [];\r\n\r\n if (!checkArray.length) {\r\n return returnObject\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n checkArray.forEach(checkPartId => {\r\n if (checkPartId === \"vanity_legs\" && layout.parts[\"Vanity\"] && layout.parts[\"Vanity\"].vanity_type !== VANITY_TYPES.vanity_cabinet) {\r\n return\r\n } else if (document.kvConfig.visualizerType === \"kvScene\" && checkPartId === \"center_island_edge\" && layout.type === 3) {\r\n return\r\n }\r\n if (layout.disabledClickablePartIds.includes(checkPartId) || hardCodelyRemovedClicking(checkPartId, layout)) {\r\n return;\r\n }\r\n const featureGroup = layout.getFeatureGroupByPartId(checkPartId);\r\n\r\n if (!isBathroom) {\r\n if (featureGroup && featureGroup.features.length > 0) {\r\n returnObject.allButtons.push({\r\n partId: featureGroup.partId,\r\n translateId: featureGroup.translateId,\r\n });\r\n }\r\n return;\r\n }\r\n\r\n const forFeature = featureGroup && layerPosition && featureGroup.layerPositions && featureGroup.layerPositions[layerPosition]\r\n ? featureGroup.layerPositions[layerPosition]\r\n : null;\r\n const withQuotingToolFeatures = layout.partIdExistInQtCategory(checkPartId);\r\n if (featureGroup && layout.hasNavItemsLength({part: featureGroup}, {}, \"\", forFeature, withQuotingToolFeatures)\r\n && ((featureGroup.partId !== \"vanity_countertop\") || featureGroup.activeFeature)) {\r\n returnObject.allButtons.push({\r\n partId: featureGroup.partId,\r\n translateId: featureGroup.translateId,\r\n });\r\n }\r\n });\r\n\r\n if (!returnObject.allButtons.length) {\r\n return returnObject\r\n }\r\n\r\n // wizard item check\r\n const {wizardState, bathroomVisualizerState, fabricatorState} = store.getState();\r\n const {wizardList, wizardIsActive} = wizardState;\r\n const {activePreset} = bathroomVisualizerState;\r\n\r\n returnObject.showButtons = returnObject.allButtons.sort((a) => partId === a.partId ? -1 : 1);\r\n\r\n const activeVanityType = layout.parts[\"Vanity\"] && layout.parts[\"Vanity\"].vanity_type ? layout.parts[\"Vanity\"].vanity_type : VANITY_TYPES.vanity_cabinet;\r\n const isVanity = isBathroom && CONTEXT_MENU_VANITY_BUTTONS.includes(partId);\r\n const isShower = isBathroom && (CONTEXT_MENU_SHOWER_ALL.includes(partId) || CONTEXT_MENU_SHOWER_OTHER.includes(partId));\r\n const isCenterIsland = !isBathroom && CONTEXT_MENU_KITCHEN_CENTER_ISLAND.includes(partId);\r\n let existingWizardItem = null;\r\n\r\n if (isVanity && (getCurrentRoomType(layout) === LOOK_ROOM_TYPES.as)) {\r\n returnObject.showButtons = returnObject.allButtons.filter(button => {\r\n return !CONTEXT_MENU_VANITY_ONLY.includes(button.partId) || CONTEXT_MENU_VANITY_ONLY.includes(button.partId) && button.partId === partId\r\n });\r\n if (!returnObject.showButtons.some(testBtn => CONTEXT_MENU_VANITY_ONLY.includes(testBtn.partId))) {\r\n returnObject.showButtons.push({\r\n partId: activeVanityType,\r\n translateId: activeVanityType === \"vanity_cabinet\" ? \"visualizer.bathroom.vanity.vanity\" : \"visualizer.bathroom.vanity.\" + activeVanityType,\r\n hasSubMenu: true,\r\n });\r\n }\r\n if (!IS_QKB_UI) {\r\n const sinkIndex = returnObject.showButtons.findIndex(button => button.partId === \"vanity_sink\");\r\n if (sinkIndex > -1) {\r\n const sinkParent = layout.getFeatureGroupByPartId(\"vanity_sink\");\r\n const isPedestal = sinkParent.activeFeature && sinkParent.activeFeature.metaData[\"MountType\"] && sinkParent.activeFeature.metaData[\"MountType\"].includes(\"ST\");\r\n returnObject.showButtons.splice(isPedestal ? sinkIndex : sinkIndex + 1, 0, {\r\n partId: \"vanity_pedestal_sink\",\r\n translateId: \"visualizer.bathroom.vanity.vanity_pedestal_sink\",\r\n });\r\n }\r\n }\r\n const backsplashIndex = returnObject.showButtons.findIndex(button => button.partId === \"vanity_backsplash\");\r\n if (backsplashIndex > -1) {\r\n const backsplashParent = layout.getFeatureGroupByPartId(\"vanity_backsplash\");\r\n // console.log(\"backsplashParent\", backsplashParent);\r\n if (backsplashParent && backsplashParent.hideLayerCondition()) {\r\n returnObject.showButtons.splice(backsplashIndex, 1);\r\n }\r\n }\r\n\r\n if (Array.isArray(wizardList) && wizardList.length && (!IS_QKB_UI || wizardIsActive)) {\r\n existingWizardItem = getExistingWizardForGroups(CONTEXT_MENU_VANITY_ONLY, wizardList, activePreset);\r\n if (existingWizardItem) {\r\n const vanityButtonIndex = returnObject.showButtons.findIndex(button => CONTEXT_MENU_VANITY_ONLY.includes(button.partId));\r\n if (vanityButtonIndex > -1) {\r\n const vanityWizardButton = {\r\n partId: \"vanity_wizard-\" + existingWizardItem.id,\r\n translateId: activeVanityType === \"vanity_cabinet\" ? \"visualizer.bathroom.vanity.vanity\" : \"visualizer.bathroom.vanity.\" + activeVanityType,\r\n isWizard: true,\r\n wizardId: existingWizardItem.id,\r\n };\r\n fabricatorState.isAmericanStandard\r\n ? returnObject.showButtons.splice(vanityButtonIndex, 1, vanityWizardButton)\r\n : returnObject.showButtons.unshift(vanityWizardButton)\r\n }\r\n if (fabricatorState.isAmericanStandard) {\r\n returnObject.showButtons = returnObject.showButtons.filter(button => !button.partId.includes(\"sink\")) //LX-791\r\n }\r\n }\r\n }\r\n\r\n } else if (isShower && Array.isArray(wizardList) && wizardList.length) {\r\n existingWizardItem = getExistingWizardForGroups([...CONTEXT_MENU_SHOWER_ALL, ...CONTEXT_MENU_SHOWER_OTHER], wizardList, activePreset);\r\n if (existingWizardItem) {\r\n const showerWizardButton = {\r\n partId: \"shower_wizard-\" + existingWizardItem.id,\r\n translateId: \"visualizer.bathroom.shower.shower\",\r\n isWizard: true,\r\n wizardId: existingWizardItem.id,\r\n };\r\n if (fabricatorState.isLixil) {\r\n returnObject.showButtons = [showerWizardButton]\r\n } else {\r\n returnObject.showButtons.push(showerWizardButton)\r\n }\r\n }\r\n } else if (isCenterIsland && Array.isArray(wizardList) && wizardList.length) {\r\n existingWizardItem = getExistingWizardForGroups(CONTEXT_MENU_KITCHEN_CENTER_ISLAND, wizardList, activePreset);\r\n if (existingWizardItem) {\r\n const counteropWizardButton = {\r\n partId: \"counterop_wizard-\" + existingWizardItem.id,\r\n translateId: \"wizard.contextMenu.wizardBuild\",\r\n isWizard: true,\r\n wizardId: existingWizardItem.id,\r\n };\r\n returnObject.showButtons.push(counteropWizardButton)\r\n }\r\n }\r\n\r\n if (isBathroom && isShower && IS_QKB_UI && CONTEXT_MENU_SHOWER_ACCESSORIES.some(accPartId => {\r\n const accFg = layout.getFeatureGroupByPartId(accPartId);\r\n return accFg && layout.hasNavItemsLength({part: accFg})\r\n })) {\r\n const accessoriesButton = {\r\n partId: \"accessories\",\r\n translateId: \"visualizer.bathroom.accessories\",\r\n hasSubMenu: true,\r\n };\r\n returnObject.showButtons.push(accessoriesButton);\r\n }\r\n\r\n if (IS_QKB_UI && document.kvConfig.visualizerOnly) {\r\n // remove wizard, as we can't jump to the quotingtool\r\n returnObject.showButtons = returnObject.showButtons.filter(button => !button.isWizard)\r\n } else if (existingWizardItem && existingWizardItem.hideContext) {\r\n returnObject.showButtons = returnObject.showButtons.filter(button => button.isWizard) // wizard only\r\n }\r\n\r\n return returnObject;\r\n};\r\n\r\nexport const getOptionStyles = (filterValue) => { // we have the logic with additionalImages in the FeatureWizardBody component\r\n let styles = {};\r\n let thumbnail = (Array.isArray(filterValue.additionalImages) && filterValue.additionalImages.length)\r\n ? filterValue.additionalImages[0].imageUrl\r\n : s3FilterImagePath(filterValue.icon);\r\n if (thumbnail) {\r\n styles.backgroundImage = \"url(\" + thumbnail + \")\";\r\n }\r\n if (!thumbnail) {\r\n styles.backgroundColor =\r\n filterValue.value && filterValue.value.includes(\"BLACK\")\r\n ? \"black\"\r\n : filterValue.value && filterValue.value.includes(\"BRONZE\")\r\n ? \"#3f270f\"\r\n : filterValue.value && filterValue.value.includes(\"NICKEL\")\r\n ? \"#727472\"\r\n : filterValue.value;\r\n }\r\n return styles\r\n};\r\n","//********* SQFT *********//\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const enableSquareFootage = (isSquareFootageEnabled) => ({\r\n type: types.ENABLE_SQUARE_FOOTAGE,\r\n payload: {isSquareFootageEnabled}\r\n});\r\n\r\nexport const setSquareFootageGroup = (SQFTGroup) => ({\r\n type: types.SET_SQUARE_FOOTAGE_GROUP,\r\n payload: {SQFTGroup}\r\n});\r\n\r\nexport const setSQFTGroup = (SQFTGroup) => ({\r\n type: types.SET_SQUARE_FOOTAGE_GROUP,\r\n payload: {SQFTGroup}\r\n});\r\n\r\nexport const setSQFTViewMode = (SQFTViewMode) => ({\r\n type: types.SET_SQFT_VIEW_MODE,\r\n payload: {SQFTViewMode}\r\n});\r\n\r\nexport const loadSQFT = () => ({\r\n type: types.LOAD_SQFT,\r\n payload: {sqftLoaded: true}\r\n});\r\n\r\nexport const updateSQFT = (sqftUpdateType) => ({\r\n type: types.UPDATE_SQFT,\r\n payload: {sqftUpdateType}\r\n});\r\n\r\nexport const updateSQFTCalculations = (updateCalculations) => ({\r\n type: types.UPDATE_SQFT_CALCULATIONS,\r\n payload: {updateCalculations}\r\n});\r\n\r\nexport const setSquareFeet = (squareFeet) => ({\r\n type: types.SET_SQFT_SQUARE_FEET,\r\n payload: {squareFeet}\r\n});\r\n\r\nexport const toggleChangeLayoutPopup = (changeLayoutPopupOpened = false, layoutToApply = \"\", applyLayoutOnSqft = false) => ({\r\n type: types.TOGGLE_CHANGE_LAYOUT_POPUP,\r\n payload: {changeLayoutPopupOpened, layoutToApply, applyLayoutOnSqft}\r\n});\r\n\r\nexport const sendLayoutChangeOnSqft = (setNewLayoutOnSqft) => ({\r\n type: types.SET_NEW_LAYOUT_ON_SQFT,\r\n payload: {setNewLayoutOnSqft}\r\n});\r\n\r\nexport const setSqftMeasureUnit = (measureUnit) => ({\r\n type: types.SET_SQFT_MEASURE_UNIT,\r\n payload: {measureUnit}\r\n});\r\n\r\nexport const changeSqftFeaturesPopup = (sqftFeaturesPopup) => ({\r\n type: types.CHANGE_SQFT_FEATURES_POPUP,\r\n payload: {sqftFeaturesPopup}\r\n});\r\n\r\nexport const setSqftFromFeature = (sqftFromFeature) => ({\r\n type: types.SQT_SQFT_FROM_FEATURE,\r\n payload: {sqftFromFeature}\r\n});\r\n\r\nexport const setSqftCabinetsGlb = (cabinetsGlb) => ({\r\n type: types.SET_CABINETS_GLB,\r\n payload: {cabinetsGlb}\r\n});\r\n\r\nexport const setCabinetsARBlobUrl = (cabinetsARBlobUrl) => ({\r\n type: types.SET_CABINETS_AR_BLOB_URL,\r\n payload: {cabinetsARBlobUrl}\r\n});\r\n\r\nexport const setAPIErrorMessage = (apiErrorMessage) => ({\r\n type: types.SET_API_ERROR_MESSAGE,\r\n payload: {apiErrorMessage}\r\n});\r\n","import {baseNewImagesPath, baseDashboardImagesPath} from \"../../assets\";\r\n\r\nexport const bathTubThumbnail = `${baseNewImagesPath}images/bv_icons_new/Icons_Bathtub.svg`;\r\nexport const ceilingThumbnail = `${baseNewImagesPath}images/bv_icons_new/Icons_Ceiling.svg`;\r\nexport const floorThumbnail = `${baseNewImagesPath}images/bv_icons_new/Icons_Floor.svg`;\r\nexport const showerThumbnail = `${baseNewImagesPath}images/bv_icons_new/shower_icon_new.svg`;\r\nexport const showerAccessoriesThumbnail = `${baseNewImagesPath}images/bv_icons_new/accesories.svg`;\r\nexport const showerOLDThumbnail = `${baseNewImagesPath}images/bv_icons_new/Icons_Shower.svg`;\r\nexport const showerTubComboThumbnail = `${baseNewImagesPath}images/bv_icons_new/shower-tub_icon.svg`;\r\nexport const custom60in30X8Shower = `${baseNewImagesPath}images/bv_icons_new/custom-a-60in-30x8.svg`;\r\nexport const custom30in30X8Shower = `${baseNewImagesPath}images/bv_icons_new/custom-a-30in-30x8.svg`;\r\nexport const custom60in15X4Shower = `${baseNewImagesPath}images/bv_icons_new/custom-b-60in-15x4.svg`;\r\nexport const custom30in15X4Shower = `${baseNewImagesPath}images/bv_icons_new/custom-b-30in-15x4.svg`;\r\nexport const custom60inPonyShower = `${baseNewImagesPath}images/bv_icons_new/custom-c-60in-pony.svg`;\r\nexport const custom30inPonyShower = `${baseNewImagesPath}images/bv_icons_new/custom-c-30in-pony.svg`;\r\nexport const toiletThumbnail = `${baseNewImagesPath}images/bv_icons_new/toilet_backend.svg`;\r\nexport const vanityThumbnail = `${baseNewImagesPath}images/bv_icons_new/Icons_Vanity-05.svg`;\r\nexport const wallsThumbnail = `${baseNewImagesPath}images/bv_icons_new/Icons_Wall.svg`;\r\nexport const windowThumbnail = `${baseNewImagesPath}images/bathroom-icons/Window_Coverings.svg`;\r\nexport const largeLayout = `${baseNewImagesPath}images/bv-assets/thumbnail-config01.png`;\r\nexport const smallLayout = `${baseNewImagesPath}images/bv-assets/thumbnail-config02.png`;\r\nexport const largeLayoutShadow = `${baseNewImagesPath}images/bv-assets/Lg-Global-Shadow.png`;\r\nexport const smallLayoutShadow = `${baseNewImagesPath}images/bv-assets/Sm-Global-Shadow.png`;\r\nexport const shower30inWallShadow = `${baseNewImagesPath}images/bv-assets/Lg-Ex R-Shadow Overlay 30X45[For=LG-Ex-R].png`;\r\nexport const floorPlaceholder = `${baseNewImagesPath}images/bv-assets/placeholders/All-Floor-Placeholder.png`;\r\nexport const ceilingPlaceholder = `${baseNewImagesPath}images/bv-assets/placeholders/All-Ceiling-Placeholder.png`;\r\n\r\nexport const showerWallSmallRoomPlaceholder = `${baseNewImagesPath}images/bv-assets/placeholders/SM-Shower Wall-Placeholder[For=Shower=(Custom_Kit1_Kit3_Steam)=ShowerSize=30in].png`;\r\nexport const showerWallSmallRoomPlaceholder60in = `${baseNewImagesPath}images/bv-assets/placeholders/SM-Shower Wall-Placeholder[For=Shower=(Custom_Kit1_Kit3_Steam)=ShowerSize=60in].png`;\r\nexport const showerFloorSmallRoomPlaceholder = `${baseNewImagesPath}images/bv-assets/placeholders/SM-ShowerFloor-Placeholder[For=Shower=(Custom)=ShowerSize=30in].png`;\r\nexport const showerFloorSmallRoomPlaceholder60in = `${baseNewImagesPath}images/bv-assets/placeholders/SM-ShowerFloor-Placeholder[For=Shower=(Custom)=ShowerSize=60in].png`;\r\nexport const showerPanSmallRoomPlaceholder = `${baseNewImagesPath}images/bv-assets/placeholders/SM-ShowerPan-Placeholder[For=Shower=(Custom)=ShowerSize=30in].png`;\r\nexport const showerPanSmallRoomPlaceholder60in = `${baseNewImagesPath}images/bv-assets/placeholders/SM-ShowerPan-Placeholder[For=Shower=(Custom)=ShowerSize=60in].png`;\r\n\r\nexport const LayoutThumbnails = {\r\n Large: largeLayout,\r\n Small: smallLayout,\r\n};\r\n\r\nexport const homePage = {\r\n vanity_cabinet: `${baseNewImagesPath}images/home/section-images/vanity-bases.jpg`,\r\n vanity: `${baseNewImagesPath}images/home/section-images/vanity-bases.jpg`,\r\n vanity_countertop: `${baseNewImagesPath}images/home/section-images/countertops.jpg`,\r\n vanity_sink: `${baseNewImagesPath}images/home/section-images/sinks.jpg`,\r\n vanity_faucet: `${baseNewImagesPath}images/home/section-images/faucets.jpg`,\r\n vanity_mirror: `${baseNewImagesPath}images/home/section-images/mirrors.jpg`,\r\n vanity_backsplash: `${baseNewImagesPath}images/home/section-images/backsplash.png`,\r\n vanity_handle: `${baseNewImagesPath}images/home/section-images/handle.png`,\r\n shower_body: `${baseNewImagesPath}images/home/section-images/shower-glass.jpg`,\r\n shower_fixture: `${baseNewImagesPath}images/home/section-images/shower-fixtures.jpg`,\r\n shower_interior_wall: `${baseNewImagesPath}images/home/section-images/shower-wall.jpg`,\r\n shower_interior_wall_accent: `${baseNewImagesPath}images/home/section-images/shower-accent.png`,\r\n shower_floor: `${baseNewImagesPath}images/home/section-images/shower-flooring.jpg`,\r\n shower_door: `${baseNewImagesPath}images/home/section-images/shower-door.png`,\r\n shower_pan: `${baseNewImagesPath}images/home/section-images/shower-pan.png`,\r\n shower_pan_combo: `${baseNewImagesPath}images/home/section-images/shower-pan.png`,\r\n shower_door_handle: `${baseNewImagesPath}images/home/section-images/shower-handles.jpg`,\r\n threshold: `${baseNewImagesPath}images/home/section-images/threshold.png`,\r\n bathtub: `${baseNewImagesPath}images/home/section-images/bathtubs.jpg`,\r\n bathtub_fixture: `${baseNewImagesPath}images/home/section-images/bathtub-fixtures.jpg`,\r\n toilet: `${baseNewImagesPath}images/home/section-images/toilets.jpg`,\r\n floor: `${baseNewImagesPath}images/home/section-images/flooring.jpg`,\r\n ceiling: `${baseNewImagesPath}images/home/section-images/ceilings.jpg`,\r\n window: `${baseNewImagesPath}images/home/section-images/window-coverings.jpg`,\r\n lighting: `${baseNewImagesPath}images/home/section-images/lighting-fixtures.jpg`,\r\n towel: `${baseNewImagesPath}images/home/section-images/towel-racks.jpg`,\r\n wall_a: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n wall_b: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n wall_c: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n left_shower_wall: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n right_shower_wall: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n accent_wall: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n pony_wall: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n walls: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n wall: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n jetted_tub: `${baseNewImagesPath}images/home/section-images/jetted-tub.png`,\r\n replacement_tub: `${baseNewImagesPath}images/home/section-images/replacement-tub.png`,\r\n bathtub_liner: `${baseNewImagesPath}images/home/section-images/tub-liner.png`,\r\n walk_in_tub: `${baseNewImagesPath}images/home/section-images/walk-in-tub.png`,\r\n //kitchen\r\n dishwasher: `${baseNewImagesPath}images/home/section-images/dishwasher.png`,\r\n hood: `${baseNewImagesPath}images/home/section-images/hood.png`,\r\n fridge: `${baseNewImagesPath}images/home/section-images/fridge.png`,\r\n range: `${baseNewImagesPath}images/home/section-images/range.png`,\r\n microwave: `${baseNewImagesPath}images/home/section-images/microwave.png`,\r\n crown_molding: `${baseNewImagesPath}images/home/section-images/crown-molding.png`,\r\n left_wall: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n right_wall: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n popout_wall: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n backsplash: `${baseNewImagesPath}images/home/section-images/backsplash.png`,\r\n sink: `${baseNewImagesPath}images/home/section-images/sinks.jpg`,\r\n faucet: `${baseNewImagesPath}images/home/section-images/faucets.jpg`,\r\n countertop: `${baseNewImagesPath}images/home/section-images/countertops.jpg`,\r\n center_island_countertop: `${baseNewImagesPath}images/home/section-images/countertops.jpg`,\r\n center_island_sink: `${baseNewImagesPath}images/home/section-images/sinks.jpg`,\r\n center_island_faucet: `${baseNewImagesPath}images/home/section-images/faucets.jpg`,\r\n center_island_cabinet: `${baseNewImagesPath}images/home/section-images/vanity-bases.jpg`,\r\n center_island_handle: `${baseNewImagesPath}images/home/section-images/handle-kitchen.png`,\r\n center_island_chairs: `${baseNewImagesPath}images/home/section-images/chairs.png`,\r\n top_handle: `${baseNewImagesPath}images/home/section-images/handle-kitchen.png`,\r\n bottom_handle: `${baseNewImagesPath}images/home/section-images/handle-kitchen.png`,\r\n top_cabinet: `${baseNewImagesPath}images/home/section-images/icon-cabinet-upper.png`,\r\n bottom_cabinet: `${baseNewImagesPath}images/home/section-images/icon-cabinet-lower.png`,\r\n cutout: `${baseNewImagesPath}images/home/section-images/cutout.png`,\r\n cutouts: `${baseNewImagesPath}images/home/section-images/cutout.png`,\r\n edge_profile: `${baseNewImagesPath}images/home/section-images/edge.png`,\r\n edge_profiles: `${baseNewImagesPath}images/home/section-images/edge.png`,\r\n edge: `${baseNewImagesPath}images/home/section-images/edge.png`,\r\n center_island_edge: `${baseNewImagesPath}images/home/section-images/edge.png`,\r\n room: `${baseNewImagesPath}images/home/section-images/room.png`,\r\n kitchen_floor: `${baseNewImagesPath}images/home/section-images/flooring.jpg`,\r\n walls_ceiling: `${baseNewImagesPath}images/home/section-images/ceilings.jpg`,\r\n};\r\n\r\nexport const shareImage = {\r\n Bathroom: \"https://qc-cdn.s3.amazonaws.com/social-networks/BathRoomVisualizer_Facebook_QC.jpeg\",\r\n bvLook: \"https://qc-cdn.s3.amazonaws.com/social-networks/BathRoomVisualizer_Facebook_Lixil.jpg\",\r\n Kitchen: \"https://s3.amazonaws.com/qc-cdn/fabricator-presets-screenshots/cd49f0acc72e40f1a912830cf0385b83.png\"\r\n};\r\nexport const shareImageRebath = \"https://qc-cdn.s3.amazonaws.com/social-networks/BathRoomVisualizer_Facebook_ReBath.jpeg\";\r\n\r\nconst normalizeIconFileName = (featureGroupName) => {\r\n return ((featureGroupName || ''))\r\n .toLowerCase()\r\n .replace(/\\s/g, '-')\r\n .replace(\".svg\", \"\") + '.svg';\r\n};\r\n\r\nconst featureGroupNameToIcon = {\r\n '10 year sealer': 'sealer.svg',\r\n 'cabinet': 'cabinets.svg',\r\n 'top mount sink cutout': 'topmount-sink-cutout.svg',\r\n 'under mount sink cutout': 'undermount-sink-cutout.svg',\r\n 'counter top removal': 'countertop-removal.svg',\r\n 'cooktop cutout': 'range-top-cutout.svg',\r\n 'cutout': 'cutouts.svg',\r\n 'faucet': 'faucets.svg',\r\n 'floor': 'flooring.svg',\r\n 'shower-walls': 'shower-wall.svg',\r\n 'shower walls': 'shower-wall.svg',\r\n 'fixture': 'shower-fixture.svg',\r\n 'range-hood-x': 'range-hood.svg',\r\n 'range-hood-z': 'range-hood.svg',\r\n 'refridgerator': 'refrigerator.svg',\r\n 'removal': 'countertop-removal.svg',\r\n 'room(s) installed': 'room.svg',\r\n 'sink': 'sinks.svg',\r\n 'backsplash-thickness': 'slabs.svg',\r\n 'backsplash thickness': 'slabs.svg',\r\n 'edge': 'edge-profile.svg',\r\n 'island countertop': 'center-island-countertop.svg',\r\n 'hook bag': 'garage-hook.svg',\r\n 'slatwall': 'slat_wall.svg',\r\n 'overhead rack': 'overhead_rack.svg',\r\n 'cabinet leg': 'cabinet_leg.svg',\r\n};\r\n\r\nexport function getFeatureGroupIconURL(featureGroupName) {\r\n const name = ((featureGroupName || '')).toLowerCase();\r\n return (name in featureGroupNameToIcon)\r\n ? baseDashboardImagesPath + featureGroupNameToIcon[name]\r\n : baseDashboardImagesPath + normalizeIconFileName(name);\r\n}\r\n\r\nexport function getFeatureGroupIconStyles(featureGroup, activeTheme) {\r\n let\r\n backgroundImage = \"\",\r\n backgroundSize = \"150%\",\r\n backgroundPosition = \"\";\r\n\r\n if (!featureGroup.customImageUrl) {\r\n backgroundImage = getFeatureGroupIconURL(featureGroup.partName, activeTheme);\r\n } else {\r\n backgroundImage = featureGroup.customImageUrl;\r\n if (featureGroup.customImageUrl.includes(\"backsplash-new\")) {\r\n backgroundSize = \"80%\";\r\n backgroundPosition = \"left 25% center\";\r\n } else if (featureGroup.customImageUrl.includes(\"enabled/countertop.svg\")) {\r\n backgroundSize = \"\" // auto\r\n }\r\n }\r\n if (activeTheme === \"caes\" || activeTheme === \"moderno\" || activeTheme === \"as\"|| activeTheme === \"nhance\") {\r\n backgroundImage = getDashboardThemeIcon(backgroundImage, activeTheme);\r\n }\r\n if (backgroundImage.includes(\"enabled/top-cabinet.svg\")) {\r\n backgroundSize = \"60%\"\r\n } else if (backgroundImage.includes(\"enabled/bottom-cabinet.svg\")) {\r\n backgroundSize = \"80%\"\r\n } else if (backgroundImage.includes(\"enabled/slabs.svg\")) {\r\n backgroundSize = \"90%\"\r\n } else if (backgroundImage.includes(\"enabled/center-island-countertop.svg\")) {\r\n backgroundSize = \"95%\"\r\n } else if (backgroundImage.includes(\"enabled/garage-hook.svg\")) {\r\n backgroundSize = \"65%\"\r\n }\r\n switch (featureGroup.partId) {\r\n case \"cabinet_leg\":\r\n case \"hook_bag\":\r\n case \"overhead_rack\":\r\n case \"slat_wall\":\r\n backgroundSize = null; // we set it in scss\r\n break;\r\n default:\r\n break;\r\n }\r\n return {\r\n backgroundImage: `url(${backgroundImage})`,\r\n backgroundSize,\r\n backgroundPosition,\r\n }\r\n}\r\n\r\nexport function getDashboardThemeIcon(backgroundImage, activeTheme) {\r\n const imageSplitted = backgroundImage.split(\"enabled/\");\r\n if (imageSplitted[1]) {\r\n backgroundImage = `${baseNewImagesPath}images-${activeTheme}/dashboard-icons/${imageSplitted[1]}`\r\n }\r\n return backgroundImage\r\n}\r\n\r\n\r\n","import flatMap from \"lodash/flatMap\";\r\nimport lastIndexOf from \"lodash/lastIndexOf\";\r\nimport trim from \"lodash/trim\";\r\n\r\nimport JsonApi from \"./jsonApi\";\r\nimport store from \"../store\";\r\nimport {\r\n capitalizeFirstLetters,\r\n getQuotePriceWithTaxes,\r\n getTotalPrice,\r\n} from \"../misc/helpers\";\r\nimport {\r\n setJobId,\r\n setDefaultInstallations,\r\n setFabricatorData,\r\n loadFilters,\r\n setStonePricing,\r\n setBathroomVisualizerPresets,\r\n setProjectDocumentsIds,\r\n loadMobileNav,\r\n setFabricatorTaxes, setLoadedPresets, toggleUseFabricatorCostPrices\r\n} from \"../actions/actionFunctions\";\r\n\r\nimport {renderErrorPopup} from \"./api-popups\";\r\nimport {loaderDisable} from \"../bvcomponents/ui/loaderView\";\r\nimport {QuoteRequestType} from \"../bvcomponents/visComponents/constants\";\r\nimport * as actionTypes from '../actions/actionTypes';\r\nimport Config, {getCommonVisualizerType, IS_OFFLINE_MODE, IS_QKB_UI} from \"../config\";\r\nimport {setFabricatorSubscriptions} from \"../actions/initialFlowFunctions\";\r\nimport {setDiscountSections} from \"../actions/priceWorksheetActions\";\r\nimport {getCurrentReceipt, setReceiptUrl} from \"../actions/printFunctions\";\r\nimport {getEmployees} from \"./user-api\";\r\n// import {getParsedLookUrl} from \"../bvcomponents/look/lookNavigation/lookFunctions\";\r\nimport {setWizardList} from \"../actions/wizardFunctions\";\r\nimport {setAllFeaturesLoaded} from \"../actions/serverFunctions\";\r\nimport {updatePresetsArray} from \"../misc/presetsFunctions\";\r\nimport {getCompressedCartItem} from \"../misc/backendFunctions\";\r\nimport {updateCurrentQuote} from \"../misc/quotesFunctions\";\r\nimport {getParsedWizardList} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\nimport {setMarkUpLogic} from \"../actions/shoppingCartFunctions\";\r\nimport {parseMarkUp} from \"../misc/priceFunctions\";\r\nimport {getMarkUpForFeatures} from \"./features-api\";\r\nimport {setResponseFeaturesMarkUp} from \"../misc/markUpFunctions\";\r\nimport {shouldUseContractSigning} from \"../bvcomponents/popups/contractSign/contractsFunctions\";\r\nimport {\r\n getCustomDepositAmount,\r\n getPriceWorkSheetSaveValues,\r\n isSaveOnlyDiscount\r\n} from \"../bvcomponents/priceWorksheet/discountFunctions\";\r\n\r\n\r\nexport const getSaveQuoteFastData = async (forTempSave = false) => {\r\n const state = store.getState();\r\n const {userState, quotesState, instState, serverState, priceWorksheetState, cartState, printState,\r\n contractSigningState, fabricatorState} = state;\r\n let needToRevertBackCostPrices = fabricatorState.settings.useFabricatorCostPrices;\r\n if (needToRevertBackCostPrices) {\r\n store.dispatch(toggleUseFabricatorCostPrices(false)); // always use retail prices\r\n }\r\n const updatedQuotes = await updateCurrentQuote();\r\n const totalPrice = getTotalPrice();\r\n const grandTotal = getQuotePriceWithTaxes(totalPrice);\r\n const records = updatedQuotes.map((quoteObject, quoteIndex) => {\r\n let record = Object.assign({}, quoteObject);\r\n record.bvImage = record.staticCanvasImage || record.bvImage;\r\n let recordData = Object.assign({}, quoteObject.data, {\r\n activeQuoteIndex: quotesState.activeQuoteIndex,\r\n contractSigningValues: contractSigningState.pagesCustomFieldsValue,\r\n contractsValues: contractSigningState.contractsValues,\r\n savedInvoiceNumberOfPages: contractSigningState.savedInvoiceNumberOfPages,\r\n needToUpdateContract: contractSigningState.needToUpdateContract,\r\n receiptSignature: printState.receiptSignature,\r\n priceWorkSheetLogic: getPriceWorkSheetSaveValues(priceWorksheetState),\r\n })\r\n record.data = forTempSave ? recordData : JSON.stringify(recordData);\r\n record.sqFtCalcImage = quoteObject.sqFtCalcData ? quoteObject.sqFtCalcData.canvasImage : null;\r\n record.sFtCalcDataJson = quoteObject.sqFtCalcData ? JSON.stringify(\r\n Object.assign({}, quoteObject.sqFtCalcData, {\r\n canvasImage: undefined // remove canvasImage as we don't need to pass it twice\r\n })\r\n ) : null;\r\n delete record.sqFtCalcData;\r\n delete record.quoteId;\r\n const recordCartItems = [...cartState.cartItems.filter(ci => ci.cartFeature && ci.cartFeature.dbFeature && (ci.currentQuote === quoteIndex))]\r\n // record.cartItems = recordCartItems; // why do we need it here ??? that doesnt make any sense\r\n record.features = recordCartItems.map(ci => getCompressedCartItem(ci));\r\n if (forTempSave) {\r\n delete record.bvImage\r\n }\r\n return record\r\n });\r\n const discountSections = [...priceWorksheetState.discountSections.map(discountSection => Object.assign({}, discountSection))]\r\n .filter(discountSection => {\r\n discountSection.discounts = [...discountSection.discounts]\r\n .filter(discount => discount.selected)\r\n .map(discount => Object.assign({}, discount, { oldDeleted: undefined }));\r\n return discountSection.discounts.some(discount => discount.selected);\r\n });\r\n const total = {\r\n materialCost: totalPrice.materialPrice,\r\n installationCost: totalPrice.installationPrice,\r\n installationTaxes: totalPrice.installationTaxes, // installation tax amount\r\n materialTaxes: totalPrice.materialTaxes, // material tax amount\r\n priceTaxes: totalPrice.priceTaxes, // all tax amount\r\n totalWithTaxes: getQuotePriceWithTaxes(totalPrice),\r\n customDeposit: getCustomDepositAmount(priceWorksheetState.discountSections, grandTotal),\r\n }\r\n if (needToRevertBackCostPrices) {\r\n store.dispatch(toggleUseFabricatorCostPrices(true)); // revert back\r\n }\r\n return {\r\n jobId: document.kvConfig.jobId || serverState.jobId,\r\n fromBV: true,\r\n fabricatorId: document.kvConfig.userId,\r\n notes: [],\r\n documents: [],\r\n employeeId: +userState.userInfo.employeeId,\r\n shareUrl: serverState.shareUrl,\r\n discountSections,\r\n installations: flatMap(instState.instList, i => i.services.filter(service => service.selected)),\r\n subId: document.subId && document.subId.toString ? document.subId.toString() : null,\r\n total,\r\n records\r\n };\r\n};\r\n\r\nexport const saveQuoteFast = async () => {\r\n if (document.kvConfig.canSaveQuote === false || document.kvConfig.devMode || window.postMessageIsExecuting) {\r\n return null;\r\n }\r\n const savedFastData = await getSaveQuoteFastData();\r\n //console.log(\"save quote fast request\", savedFastData);\r\n return JsonApi.saveQuoteFast(savedFastData)\r\n};\r\n\r\n/**\r\n * Saves the quote\r\n * @param submit {boolean}\r\n * @param yesNoConsultationRequest {boolean}\r\n * @param quoteRequestType {string}\r\n * @param fromCheckOutPage {boolean}\r\n * @param assignQuotePopupCustomer {object}\r\n * @param assignQuotePopupEmployee {object}\r\n * @param showContractSignOnError {boolean}\r\n * @param showReceipt {boolean}\r\n * @return {*}\r\n */\r\nexport const saveQuote = async ({\r\n submit,\r\n yesNoConsultationRequest = false,\r\n quoteRequestType = QuoteRequestType.RegularDesign,\r\n fromCheckOutPage = false,\r\n assignQuotePopupCustomer = null,\r\n assignQuotePopupEmployee = null,\r\n showContractSignOnError = false,\r\n showReceipt = true,\r\n }) => {\r\n if (document.kvConfig.canSaveQuote === false) {\r\n return null;\r\n }\r\n const formData = new FormData();\r\n const state = store.getState();\r\n const {userState, serverState, fabricatorState, cartState, contractSigningState, unlockCalculationsState} = state;\r\n const {fabricatorTaxes} = fabricatorState;\r\n const fabricatorSettings = fabricatorState.settings;\r\n let needToRevertBackCostPrices = fabricatorSettings.useFabricatorCostPrices;\r\n if (needToRevertBackCostPrices) {\r\n store.dispatch(toggleUseFabricatorCostPrices(false)); // always use retail prices\r\n }\r\n const savedFastData = await getSaveQuoteFastData();\r\n if (assignQuotePopupEmployee) {\r\n savedFastData.employeeId = assignQuotePopupEmployee.id;\r\n }\r\n const sendConsumerEmail = serverState.agreeEmailCheckbox && (!fabricatorSettings.sureTax || userState.isPhoneNumberValidated);\r\n const data = {\r\n ...savedFastData,\r\n yesNoConsultationRequest,\r\n submit,\r\n fromCheckOutPage,\r\n sendConsumerEmail,\r\n customerEmail: (assignQuotePopupCustomer ? assignQuotePopupCustomer.email : null) || userState.email || userState.userInfo.email,\r\n salesPerson: assignQuotePopupEmployee ? assignQuotePopupEmployee.fullName : userState.userInfo.salesPersonFullName,\r\n salesPersonEmail: userState.userInfo.salesPersonEmail,\r\n leadOriginatorId: (window.salesPerson ? window.salesPerson.rawVal / ( Math.floor(Math.PI * 1000)) : 0),\r\n postalCode: userState.userInfo.postal,\r\n isNewUser: !(document.kvConfig.jobId || serverState.jobId),\r\n state: cartState.state,\r\n fromTool: getCommonVisualizerType() === \"kitchen\"\r\n ? document.kvConfig.toolVersion === 5 || document.kvConfig.toolVersion === 6 ? \"KV5\" : \"KV4\"\r\n : document.kvConfig.toolVersion === 5 || document.kvConfig.toolVersion === 6 ? \"BV5\" :\"BV\",\r\n toolVersion: document.kvConfig.toolVersion,\r\n visualizerType: capitalizeFirstLetters(getCommonVisualizerType()),\r\n navigationType: document.kvConfig.navigationType,\r\n quoteRequestType,\r\n currency: fabricatorSettings.currency,\r\n installationTaxesRate: (fabricatorTaxes && fabricatorTaxes.laborRate) || 0,\r\n materialTaxesRate: (fabricatorTaxes && fabricatorTaxes.materialRate) || 0,\r\n notes: [],\r\n fromDashboard: document.kvConfig.isBackend,\r\n callFabricator: document.kvConfig.callFabricatorOnSave || false,\r\n language: serverState.language,\r\n documents: serverState.documents.filter(doc => !doc.uploaded).map((d) => {\r\n return {\r\n documentId: d.documentId || 0, // database ID\r\n name: d.name,\r\n text: d.text,\r\n created: d.created,\r\n uid: d.uid,\r\n fileContent: Config.kioskStandAlone ? d.file.dataUri : null\r\n };\r\n }),\r\n markUpLogic: JSON.stringify(cartState.markUpLogic),\r\n };\r\n document.kvConfig.callFabricatorOnSave = false;\r\n\r\n if (Config.isDevMode()) {\r\n console.log(\"saveQuote request data:\", data);\r\n }\r\n\r\n serverState.documents.forEach(doc => {\r\n formData.append(\"files\", doc.file, doc.name);\r\n });\r\n\r\n formData.append('json', JSON.stringify(data));\r\n\r\n let employeeSelected = null;\r\n if (data.employeeId) {\r\n const employeesList = userState.employeesListReceived\r\n ? userState.employeesList\r\n : await getEmployees(false) || []; // just in case, we should never reach here, because requests are in both user popups\r\n employeeSelected = employeesList.find(emp => +emp.id === data.employeeId);\r\n }\r\n let receipt = null, receiptCost = null;\r\n if (!document.kvConfig.visualizerOnly) {\r\n const pdfReceipt = await getCurrentReceipt(assignQuotePopupCustomer, employeeSelected);\r\n receipt = await pdfReceipt.toBlob();\r\n formData.append(\"receipt\", receipt);\r\n }\r\n if (needToRevertBackCostPrices) {\r\n store.dispatch(toggleUseFabricatorCostPrices(true)); // revert back\r\n const pdfReceipt2 = await getCurrentReceipt(assignQuotePopupCustomer, employeeSelected);\r\n receiptCost = await pdfReceipt2.toBlob();\r\n formData.append(\"receiptCost\", receiptCost);\r\n }\r\n\r\n return JsonApi.saveQuote(document.kvConfig.kioskMode ? data : formData)\r\n .then(async (response) => {\r\n const responseData = typeof response.data === 'object' ? response.data : JSON.parse(response.data);\r\n store.dispatch(setJobId(responseData.jobId));\r\n if (responseData.documents && responseData.documents.length) {\r\n store.dispatch(setProjectDocumentsIds(responseData.documents));\r\n }\r\n\r\n const showContractSignPopup = shouldUseContractSigning(fabricatorSettings, contractSigningState.contractsList);\r\n\r\n const showLeadCaptureShoppingCart = fabricatorSettings.leadCaptureShoppingCart && !unlockCalculationsState.unlockCalculationsTutorialIsFinished;\r\n const showDepositPopup = fabricatorSettings.enableDeposit && (!fabricatorSettings.leadCaptureShoppingCart || unlockCalculationsState.unlockCalculationsTutorialIsFinished)\r\n\r\n let receiptUrl = \"\";\r\n if (receipt) {\r\n const pdfReceipt = await getCurrentReceipt(assignQuotePopupCustomer, employeeSelected);\r\n receipt = await pdfReceipt.toBlob();\r\n receiptUrl = URL.createObjectURL(receipt);\r\n }\r\n\r\n if (receipt && showReceipt && !showDepositPopup && !showLeadCaptureShoppingCart\r\n && (!showContractSignPopup || contractSigningState.signedDocumentUrl) && !fabricatorSettings.hasPaymentGateway) {\r\n window.open(receiptUrl, \"_blank\");\r\n responseData.receiptPrinted = true;\r\n }\r\n store.dispatch(setReceiptUrl(receiptUrl)); // always remember the URL (in case it is needed)\r\n\r\n responseData.total = data.total;\r\n\r\n return responseData;\r\n })\r\n .catch(error => {\r\n const retryFunction = saveQuote.bind(this, {\r\n submit,\r\n yesNoConsultationRequest,\r\n quoteRequestType,\r\n fromCheckOutPage,\r\n assignQuotePopupCustomer,\r\n assignQuotePopupEmployee,\r\n });\r\n renderErrorPopup(\"Server \"+new Error(error), \"\", retryFunction, showContractSignOnError);\r\n loaderDisable();\r\n throw new Error(error);\r\n })\r\n};\r\n\r\nexport const loadFiltersOnly = async () => {\r\n const response = await JsonApi.getFilterGroups();\r\n if (response && Array.isArray(response.data)) {\r\n store.dispatch(loadFilters(response.data));\r\n }\r\n return Promise.resolve()\r\n}\r\n\r\nexport const getBathroomVisualizerData = (featuresCount = 30, loadVisualizerOnly = false, forVisualizer) => {\r\n const featuresToReceive = IS_OFFLINE_MODE ? 100000 : featuresCount;\r\n return JsonApi.getBathroomVisualizerData(featuresToReceive, forVisualizer)\r\n .then(responseData => {\r\n // console.log('responseData', responseData.data);\r\n if (!responseData.data || responseData.data.error) {\r\n const errorMessage = !responseData.data ? \"No response data received\" : responseData.data.error;\r\n renderErrorPopup(\"Server error: \"+errorMessage);\r\n loaderDisable();\r\n throw new Error(errorMessage);\r\n } else {\r\n if (!loadVisualizerOnly) {\r\n store.dispatch(loadFilters(responseData.data.filterGroups || []));\r\n // store.dispatch(setFabricatorData(responseData.data.fabricatorData)); // we set it in the subscriptions response\r\n store.dispatch(setDefaultInstallations(responseData.data.installations));\r\n }\r\n store.dispatch(setStonePricing(responseData.data.stonePricing));\r\n if (responseData.data.defaults) {\r\n responseData.data.defaults = updatePresetsArray(responseData.data.defaults, forVisualizer);\r\n // const {lookIdFromUrl} = getParsedLookUrl(); // why do we need that?? set the same lookId on each preset? really?\r\n // if (lookIdFromUrl) {\r\n // presets = presets.map(preset => {\r\n // preset.lookId = lookIdFromUrl;\r\n // return preset\r\n // })\r\n // }\r\n store.dispatch(setBathroomVisualizerPresets(responseData.data.defaults, forVisualizer));\r\n }\r\n if (responseData.data.wizardData || responseData.data.wizardDataV2) {\r\n const wizardList = getParsedWizardList(responseData.data, false, forVisualizer);\r\n store.dispatch(setWizardList(wizardList));\r\n }\r\n //store.dispatch(setBathroomVisualizerFeatures(responseData.data.features));\r\n // this causes bathroomVisualizer to be super slow.... how to store huge arrays in redux store? No answer for now\r\n // for now, features are kept in layout dataObject.... sad, but at least it works much faster\r\n\r\n if (featuresCount === 100000) {\r\n store.dispatch(setAllFeaturesLoaded(document.kvConfig.visualizerType));\r\n store.dispatch(setLoadedPresets(responseData.data.defaults.map(preset => preset.id)));\r\n }\r\n\r\n return responseData.data\r\n }\r\n })\r\n .catch((error) => {\r\n loaderDisable();\r\n console.log('getBathroomVisualizerData', error);\r\n });\r\n};\r\n\r\nexport const getBvPresets = () => {\r\n return JsonApi.getDisplayRoom()\r\n .then(responseData => {\r\n // console.log('getBvPresets:', responseData);\r\n if (!responseData.data || responseData.data.error) {\r\n store.dispatch(setBathroomVisualizerPresets([]));\r\n console.error(\"get bvPresets error: No response data received\");\r\n return [];\r\n } else {\r\n const bvPresets = JSON.parse(responseData.data);\r\n store.dispatch(setBathroomVisualizerPresets(bvPresets));\r\n return bvPresets\r\n }\r\n })\r\n .catch((error) => {\r\n loaderDisable();\r\n console.log('getDisplayRoom', error);\r\n });\r\n};\r\n\r\nexport const getJobIdPreset = (jobId, editToken) => {\r\n return JsonApi.getBVJobData(jobId, editToken);\r\n};\r\n\r\nconst skipRequestsFor = [\"Attachment\", \"Decor\", \"Decore\"];\r\n\r\nconst updateFeaturesWithMarkUp = async (featuresResponse) => {\r\n const {fabricatorState} = store.getState();\r\n if (fabricatorState.settings.useMarkUpFeaturesRequests && featuresResponse\r\n && Array.isArray(featuresResponse) && featuresResponse.length) {\r\n if (skipRequestsFor.some(groupName => {\r\n return featuresResponse.every(dbFeature => dbFeature.groupName === groupName)\r\n })) {\r\n return featuresResponse\r\n }\r\n const markUpResponse = await getMarkUpForFeatures(featuresResponse);\r\n setResponseFeaturesMarkUp(featuresResponse, markUpResponse);\r\n }\r\n return featuresResponse\r\n}\r\n\r\nexport const getBvFeatures = async (arrayOfIds, arrayOfSkus = null, requestSharedFeatureNames = false, forVisualizer) => {\r\n const featuresResponse = await JsonApi.getBathroomVisualizerFeatures(arrayOfIds, arrayOfSkus, requestSharedFeatureNames, forVisualizer);\r\n await updateFeaturesWithMarkUp(featuresResponse ? featuresResponse.data : [])\r\n return featuresResponse\r\n};\r\n\r\nexport const getBvGroups = (visualizerType) => {\r\n return JsonApi.getBathroomVisualizerGroups(visualizerType)\r\n};\r\n\r\n/**\r\n * Main request to get features for feature group\r\n * @param groupName {string}\r\n * @param page {number}\r\n * @param pageSize {number}\r\n * @param filterValues {array}\r\n * @param searchText {string}\r\n * @param layoutAbbreviation {string}\r\n * @param axiosController {object}\r\n * @param requestOldFeatures {boolean}\r\n * @param visualizerType {string}\r\n * @returns {Promise<{data: []}>}\r\n */\r\nexport const getBvGroupFeatures = async (groupName, page, pageSize, filterValues, searchText = \"\", layoutAbbreviation, axiosController, requestOldFeatures, visualizerType) => {\r\n const featuresResponse = await JsonApi.getBathroomVisualizerGroupFeatures(groupName, page, pageSize, filterValues, searchText, layoutAbbreviation, axiosController, requestOldFeatures, visualizerType)\r\n await updateFeaturesWithMarkUp(featuresResponse);\r\n return featuresResponse\r\n};\r\nexport const getBvGroupFilterValues = async (groupName, filterId, withStoneFilters) => {\r\n const filterResponse = await JsonApi.getBathroomVisualizerGroupFilterValues(groupName, filterId, withStoneFilters);\r\n console.log(\"filterResponse\", filterResponse);\r\n if (filterResponse.data.error) {\r\n const {error} = filterResponse.data;\r\n renderErrorPopup(error);\r\n return {data: []}\r\n }\r\n return filterResponse\r\n};\r\n\r\nexport const submitPayment = (paymentInfo, useNewHoc = false) => { // submit is used in the WithPaymentSubmit HOC, all info is there\r\n const state = store.getState();\r\n const {serverState} = state;\r\n return JsonApi.submitPayment(useNewHoc ? paymentInfo : {\r\n ...paymentInfo,\r\n country: paymentInfo.country.name,\r\n fabricatorId: document.kvConfig.userId,\r\n jobId: document.kvConfig.jobId || serverState.jobId\r\n })\r\n .then(response => {\r\n store.dispatch({\r\n type: actionTypes.SUBMIT_PAYMENT_RESPONSE, // why do we need it? not used at all\r\n payload: response.data\r\n });\r\n if (useNewHoc) {\r\n const res = response.data;\r\n if (res.transactionResponse && res.transactionResponse.responseCode === '1') {\r\n // showQuoteSavedNotification();\r\n window.checkoutSuccess = true;\r\n const receiptUrl = store.getState().printState.receiptUrl;\r\n if (receiptUrl) {\r\n window.open(receiptUrl, \"_blank\");\r\n }\r\n } else {\r\n let msg = '';\r\n if (res && (res.transactionResponse && res.transactionResponse.errors && res.transactionResponse.errors.length > 0) || res.error) {\r\n msg = res.transactionResponse.errors[0].errorText || res.error;\r\n } else if (res && res.message && res.message.messageDetails.length > 0) {\r\n msg = res.message.messageDetails[0].text;\r\n }\r\n\r\n let sepIdx = lastIndexOf(msg, '-');\r\n if (sepIdx >= 0) {\r\n msg = trim(msg.substr(sepIdx + 1));\r\n }\r\n\r\n renderErrorPopup(msg, \"Card Error\");\r\n }\r\n }\r\n return response.data;\r\n })\r\n .catch(error => {\r\n renderErrorPopup(\"Server \"+new Error(error));\r\n loaderDisable();\r\n throw new Error(error);\r\n })\r\n};\r\n\r\nexport const getQtCategories = (layoutName, visualizerType) => {\r\n return JsonApi.getQtCategories(layoutName, visualizerType)\r\n .then(response => {\r\n if (!response.data || response.data.error || !Array.isArray(response.data)) {\r\n // store.dispatch(setQtCategories([]));\r\n console.error(\"get bvPresets error: No response data received\");\r\n return [];\r\n } else {\r\n const qtCategories = response.data.filter(qtCategory => {\r\n if (qtCategory.useWizard && IS_QKB_UI) {\r\n return true\r\n }\r\n return (qtCategory.name !== \"All\") && Array.isArray(qtCategory.featureGroups) && qtCategory.featureGroups.length\r\n });\r\n if (Config.isDevMode()) {\r\n console.log('qtCategories-->', qtCategories);\r\n }\r\n // store.dispatch(setQtCategories(qtCategories)); // with features inside featureGroups it becomes HUUUGE\r\n return qtCategories\r\n }\r\n })\r\n .catch(error => {\r\n renderErrorPopup(\"Server \"+new Error(error));\r\n loaderDisable();\r\n throw new Error(error);\r\n })\r\n};\r\n\r\nexport const getFabricatorSubscriptions = (fabricatorId = document.kvConfig.userId) => {\r\n return JsonApi.getFabricatorSubscriptions(fabricatorId)\r\n .then(response => {\r\n if (!response || !response.data || response.data.error) {\r\n console.error(\"getFabricatorSubscriptions error: No response data received\");\r\n } else {\r\n // console.log(\"response getFabricatorSubscriptions\", response);\r\n if (Array.isArray(response.data.subscriptions)) {\r\n store.dispatch(setFabricatorSubscriptions(response.data.subscriptions));\r\n }\r\n if (response.data.fabricatorTaxes) {\r\n store.dispatch(setFabricatorTaxes(response.data.fabricatorTaxes));\r\n }\r\n if (document.kvConfig.isCaesarStone && response.data.fabricatorData\r\n && response.data.fabricatorData.fabricatorName === \"QC Master Account CAN\") {\r\n response.data.fabricatorData.wasCreatedFromFabricator = \"QC Master Account CAN\";\r\n }\r\n const globalMarkUp = response.data.fabricatorData && response.data.fabricatorData.globalMarkUp\r\n ? parseMarkUp(response.data.fabricatorData.globalMarkUp)\r\n : \"\";\r\n if (globalMarkUp) {\r\n store.dispatch(setMarkUpLogic(globalMarkUp)) // also it can be restored with the cartState on job open\r\n }\r\n store.dispatch(setFabricatorData(response.data.fabricatorData));\r\n }\r\n })\r\n .catch(error => {\r\n // console.error(+new Error(error));\r\n renderErrorPopup(\"Server Error. Check Subscription Status\", \"\", getFabricatorSubscriptions.bind(this, fabricatorId));\r\n loaderDisable();\r\n throw new Error(error);\r\n })\r\n};\r\n\r\nexport const getDiscounts = (fabricatorId = document.kvConfig.userId) => {\r\n return JsonApi.getFabricatorDiscounts(fabricatorId)\r\n .then(response => {\r\n if (!response || !response.data || response.data.error) {\r\n console.error(\"getFabricatorDiscounts error: No response data received\");\r\n } else {\r\n console.log(\"response getFabricatorDiscounts\", response);\r\n if (Array.isArray(response.data)) {\r\n const discountSections = response.data\r\n .map(discountSection => {\r\n discountSection.discounts = Array.isArray(discountSection.discounts)\r\n ? discountSection.discounts.filter(dis => dis.enabled)\r\n : [];\r\n discountSection.discounts = discountSection.discounts.map(discount => {\r\n if (isSaveOnlyDiscount(discount)) {\r\n discount.selected = true;\r\n }\r\n return discount\r\n })\r\n return discountSection\r\n })\r\n .filter(discountSection => discountSection.discounts.length)\r\n store.dispatch(setDiscountSections(discountSections));\r\n }\r\n }\r\n });\r\n};\r\n\r\nexport const getNavigationButtons = (testConnection = false) => {\r\n let forTool = \"\";\r\n switch(document.kvConfig.visualizerType) {\r\n case \"Bathroom\":\r\n case \"BV\":\r\n case \"bvScene\":\r\n case \"bvLook\":\r\n forTool = \"bv\";\r\n break;\r\n case \"Kitchen\":\r\n case \"kvScene\":\r\n forTool = \"kv\";\r\n break;\r\n default:\r\n forTool = document.kvConfig.visualizerType;\r\n break;\r\n }\r\n return JsonApi.getMenuNavigation(forTool, testConnection)\r\n .then(menuData => {\r\n if (document.kvConfig.kioskMode || testConnection) {\r\n return false\r\n }\r\n store.dispatch(loadMobileNav(menuData.data));\r\n return menuData\r\n })\r\n .catch(error => {\r\n if (testConnection) {\r\n renderErrorPopup(error, \"\", getNavigationButtons.bind(this, true));\r\n }\r\n return error\r\n });\r\n};\r\n\r\nexport const copySqftImagesToAnotherJob = (fabricatorId = document.kvConfig.userId, postData) => {\r\n return JsonApi.copySqftImages(fabricatorId, postData)\r\n .then(response => response.data)\r\n .catch(error => {\r\n renderErrorPopup(\"Server \"+new Error(error));\r\n loaderDisable();\r\n throw new Error(error);\r\n })\r\n};\r\n","export const COLORS = {\r\n red: \"#d0021b\",\r\n // red: \"#FF0012\",\r\n gray: \"#9b9b9b\",\r\n gray2: \"#979797\",\r\n gray3: \"#b8b8b8\",\r\n gray4: \"#5e5e5e\",\r\n light: \"#e1e1e1\",\r\n white: \"#ffffff\",\r\n grohe: \"#292929\",\r\n};\r\n\r\nconst COLOR_THEMES = {\r\n \"qc\": {\r\n primary: \"#4A90E2\",\r\n primary_hover: \"#3483de\", //darken(#4A90E2, 5%),\r\n active: \"#9FC522\",\r\n active_hover: \"#8daf1e\", //darken(#9FC522, 5%),\r\n assetsPath: \"../images\",\r\n },\r\n \"caes\": {\r\n primary: \"#58595b\",\r\n primary_hover: \"#4b4c4e\", //darken(#58595b, 5%),\r\n active: \"#f46c42\",\r\n active_hover: \"#f3592a\", //darken(#f46c42, 5%),\r\n assetsPath: \"../images-caes\",\r\n },\r\n // \"as\": {\r\n // primary: \"#36919B\",\r\n // primary_hover: \"#4CABB5\", //darken(#58595b, 5%),\r\n // active: \"#004D58\",\r\n // active_hover: \"#4CABB5\", //darken(#f46c42, 5%),\r\n // assetsPath: \"../images-caes\",\r\n // },\r\n \"moderno\": {\r\n primary: \"#343434\",\r\n primary_hover: \"#1b1b1b\", //darken(#58595b, 5%),\r\n active: \"#d0021b\",\r\n active_hover: \"#9d0214\", //darken(#f46c42, 5%),\r\n assetsPath: \"../images-moderno\",\r\n },\r\n \"look\": {\r\n primary: \"#000000\",\r\n primary_hover: \"#0b1f37\", //darken(#58595b, 5%),\r\n active: \"#3984BE\",\r\n active_hover: \"#3376aa\", //darken(#f46c42, 5%),\r\n assetsPath: \"../images\",\r\n },\r\n \"grohe\": {\r\n primary: \"#000000\", // \"#0F2B4C\",\r\n primary_hover: \"#0b1f37\", //darken(#58595b, 5%),\r\n active: \"#3984BE\",\r\n active_hover: \"#3376aa\", //darken(#f46c42, 5%),\r\n assetsPath: \"../images\",\r\n },\r\n \"as\": {\r\n primary: \"#000000\", // \"#0F2B4C\",\r\n primary_hover: \"#0b1f37\", //darken(#58595b, 5%),\r\n active: \"#E70026\",\r\n active_hover: \"#ce0022\", //darken(#f46c42, 5%),\r\n assetsPath: \"../images-as\",\r\n },\r\n \"nhance\": {\r\n primary: \"#000000\", // \"#0F2B4C\",\r\n primary_hover: \"#0b1f37\", //darken(#58595b, 5%),\r\n active: \"#ef7038\",\r\n active_hover: \"#ed5f20\", //darken(#f46c42, 5%),\r\n assetsPath: \"../images-nhance\",\r\n },\r\n}\r\n\r\nexport const GROHE_FILTER_COLORS = {\r\n \"GROHE CHROME\": \"#f4f4f3\", // R:244 G:244 B:243\r\n \"GROHE POLISHED NICKEL\": \"#e4e0cb\", // R:228 B:224 G:203\r\n \"GROHE HARD GRAPHITE\": \"#605754\", // R:96 G:87 B:84\r\n \"GROHE BRUSHED NICKEL\": \"#c8beb1\", // R:200 G:190 B:177\r\n \"GROHE BRUSHED COOL SUNRISE\": \"#bb9759\" // R:187 G:151 B:89\r\n};\r\n\r\nexport default COLOR_THEMES\r\n","export const LayoutType = {\r\n Small: 0,\r\n Large: 1\r\n};\r\n\r\nexport const LayoutAbbreviation = {\r\n All: \"ALL\",\r\n Small: \"SM\",\r\n Large: \"LG\"\r\n};\r\n\r\nexport const CountsType = {\r\n allLayoutFeaturesCount: \"All\", // not used\r\n largeLayoutFeaturesCount: \"Large\",\r\n smallLayoutFeaturesCount: \"Small\",\r\n totalFeaturesCount: \"Total\" // not used\r\n};\r\n\r\nexport const BathTubType = {\r\n Custom60in: 'Custom60in',\r\n FreeStanding: 'BathTubFreeStanding'\r\n};\r\n\r\nexport const VanityTypes = {\r\n Complete: 'Complete',\r\n Custom: 'Custom'\r\n};\r\n\r\nexport const ShowerType = {\r\n Custom: 0,\r\n Complete: 1\r\n};\r\n\r\nexport const ShowerBodyType = {\r\n Glass: 0,\r\n Door: 1\r\n};\r\n\r\nexport const ShowerTypes = {\r\n Custom: 'Custom',\r\n Complete: 'Complete',\r\n All: 'All'\r\n};\r\n\r\nexport const PartMenuType = {\r\n Simple: 0, // i.e. Toilet - doesn't have any sub-items\r\n Complex: 1, // i.e. Vanity - has sub-menu items, Sink, Faucet Mirror\r\n};\r\n\r\nexport function bathTubTypeToString(bathTypeType) {\r\n switch (bathTypeType) {\r\n case BathTubType.Custom60in:\r\n return 'Custom';\r\n case BathTubType.FreeStanding:\r\n return 'Complete';\r\n }\r\n}\r\nexport function bathTubStringToType(bathtubString) {\r\n switch (bathtubString) {\r\n case 'custom':\r\n return BathTubType.Custom60in;\r\n case 'complete':\r\n return BathTubType.FreeStanding;\r\n }\r\n}\r\n\r\nexport const ShowerComboTubType = {\r\n bathtub_liner: \"bathtub_liner\",\r\n replacement_tub: \"replacement_tub\",\r\n walk_in_tub: \"walk_in_tub\",\r\n jetted_tub: \"jetted_tub\",\r\n};\r\n\r\nexport const vanityWizardFilters = [\"Size\", \"DoorStyle\", \"Material\", \"Color\"];\r\n\r\nexport const showerWizardFilters = [\"Material\", \"DuraBathColor\", \"SlabColor\", \"TileColor\", \"TilePattern\", \"AcrylicPattern\", \"AcrylicColor\"];\r\n\r\nexport const NotQCVanityDoorStylesFilters = [\"Centennial\", \"Hudson\", \"Northbrook\", \"Osage\", \"Quebec\", \"Riverside\", \"Villager\", \"Zurich\"];\r\n","const ActionTypes = {\r\n GET_CANVAS_SCALE: \"GET_CANVAS_SCALE\",\r\n CANVAS_SCALE_CHANGED: \"CANVAS_SCALE_CHANGED\",\r\n RESET_CANVAS: \"RESET_CANVAS\",\r\n ENABLE_PINCH_ZOOM: \"ENABLE_PINCH_ZOOM\",\r\n DISABLE_PINCH_ZOOM: \"DISABLE_PINCH_ZOOM\",\r\n CHANGE_LAYOUT: \"CHANGE_LAYOUT\",\r\n UPDATE_ALL_ITEMS: \"UPDATE_ALL_ITEMS\",\r\n USER_IS_LOGGED_IN: \"USER_IS_LOGGED_IN\",\r\n USER_POPUP_CLOSED: \"USER_POPUP_CLOSED\",\r\n REMOVE_GREEN_ZONE_ON_CANVAS: \"REMOVE_GREEN_ZONE_ON_CANVAS\",\r\n FEATURE_IS_CLICKED: \"FEATURE_IS_CLICKED\",\r\n OPEN_MOBILE_NAVIGATION: \"OPEN_MOBILE_NAVIGATION\",\r\n CHANGE_MOBILE_MENU_CONTENT_TYPE: \"CHANGE_MOBILE_MENU_CONTENT_TYPE\",\r\n UPDATE_QUOTING_TOOL: \"UPDATE_QUOTING_TOOL\",\r\n /*** OLD QT ACTIONS***/\r\n SHOW_NUMERIC_KBD: \"SHOW_NUMERIC_KBD\",\r\n OVERLAY_CLICK: \"OVERLAY_CLICK\",\r\n SHOW_SUMMARY: null,\r\n SHOW_DOCUSIGN: 'SHOW_DOCUSIGN'\r\n}\r\nexport default ActionTypes;\r\n","import {getCurrentLayout} from \"../../appLayout\";\r\nimport {\r\n getDistanceFromPointToInfiniteLine,\r\n getDistanceFromPointToLine,\r\n getIntersectCords,\r\n getMidPoint,\r\n getPointDistance,\r\n getPointField, isPointInsideShape,\r\n orientation\r\n} from \"./sqftHelper\";\r\nimport workspace from \"../components/canvas/core/workspace\";\r\nimport sqftShape from \"../components/canvas/core/shapes/sqftShape\";\r\nimport sqftConfig from \"../components/canvas/store/sqftConfig\";\r\nimport store from \"../../../store\";\r\nimport {SHAPE_PART_ID, SQFT_APPLIANCES} from \"../constants\";\r\nimport {getRoomName} from \"../../../misc/helpers\";\r\nimport NumberText from \"../components/canvas/core/workspace/text/numberText\";\r\nimport SqftStore from \"../components/canvas/store/sqftStore\";\r\nimport workspaceControllers from \"../components/canvas/store/workspaceControllers\";\r\nimport Wall from \"../components/canvas/core/shapes/wall\";\r\nimport sqftImageManager from \"../components/canvas/store/sqftImageManager\";\r\nimport {getNavItemsFromTheWizard} from \"./sqftHelperUi\";\r\nimport {getIntersectionCordsV2} from \"./coordinatesHelper\";\r\nimport sqftEventManager from \"../components/canvas/store/sqftEventManager\";\r\nimport {getFontSizeFromContext} from \"../components/canvas/store/canvasHelper\";\r\nimport EventManager from \"../components/canvas/store/sqftEventManager\";\r\n\r\nexport const DIRECTIONS = {\r\n EAST: \"east\",\r\n WEST: \"west\",\r\n NORTH: \"north\",\r\n SOUTH: \"south\",\r\n NORTHEAST: \"northeast\",\r\n NORTHWEST: \"northwest\",\r\n SOUTHEAST: \"southeast\",\r\n SOUTHWEST: \"southwest\",\r\n UNDEFINED: \"undefined\"\r\n};\r\n\r\nexport default class ShapeHelper {\r\n\r\n /**\r\n * @param {sqftShape} activeShape\r\n * @return {object} {sqftShape.id: [intersectionPoints]}\r\n */\r\n static getIntersectionsWithOtherShapes(activeShape) {\r\n let activeShapeLines = activeShape.getLines();\r\n let shapes = workspace.getShapes();\r\n let intersectionPoints = {};\r\n activeShapeLines.forEach((activeShapeLine) => {\r\n shapes.forEach(function(shape) {\r\n if (shape instanceof sqftShape && !shape.isHidden && shape.id !== activeShape.id) {\r\n let testShapeLines = shape.getLines();\r\n testShapeLines.forEach((testShapeLine) => {\r\n let pointFieldActiveShapeLineFrom = getPointField(activeShapeLine.from.x, activeShapeLine.from.y, activeShapeLine);\r\n let pointFieldActiveShapeLineTo = getPointField(activeShapeLine.to.x, activeShapeLine.to.y, activeShapeLine);\r\n let pointFieldTestShapeLineFrom = getPointField(testShapeLine.from.x, testShapeLine.from.y, testShapeLine);\r\n let pointFieldTestShapeLineTo = getPointField(testShapeLine.to.x, testShapeLine.to.y, testShapeLine);\r\n\r\n let intersectionCords = getIntersectCords(\r\n pointFieldActiveShapeLineFrom.x, pointFieldActiveShapeLineFrom.y,\r\n pointFieldActiveShapeLineTo.x, pointFieldActiveShapeLineTo.y,\r\n pointFieldTestShapeLineFrom.x, pointFieldTestShapeLineFrom.y,\r\n pointFieldTestShapeLineTo.x, pointFieldTestShapeLineTo.y,\r\n false\r\n );\r\n\r\n if (intersectionCords) {\r\n // ctx.beginPath();\r\n // ctx.arc(intersectionCords.x, intersectionCords.y, 10, 0, 2 * Math.PI);\r\n // ctx.stroke();\r\n //debugger // eslint-disable-line no-debugger\r\n (intersectionPoints[shape.id] = intersectionPoints[shape.id] || []).push(intersectionCords);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n\r\n return intersectionPoints;\r\n }\r\n\r\n /**\r\n * @param {sqftShape} shape1\r\n * @param {sqftShape} shape2\r\n * @return {object} {sqftShape.id: [intersectionPoints]}\r\n */\r\n static getTwoShapesIntersections(shape1, shape2 ) {\r\n let activeShapeLines = shape1.getLines();\r\n let intersectionPoints = {};\r\n let testShapeLines = shape2.getLines();\r\n activeShapeLines.forEach((activeShapeLine) => {\r\n testShapeLines.forEach((testShapeLine) => {\r\n let pointFieldActiveShapeLineFrom = getPointField(activeShapeLine.from.x, activeShapeLine.from.y, activeShapeLine);\r\n let pointFieldActiveShapeLineTo = getPointField(activeShapeLine.to.x, activeShapeLine.to.y, activeShapeLine);\r\n let pointFieldTestShapeLineFrom = getPointField(testShapeLine.from.x, testShapeLine.from.y, testShapeLine);\r\n let pointFieldTestShapeLineTo = getPointField(testShapeLine.to.x, testShapeLine.to.y, testShapeLine);\r\n\r\n let intersectionCords = getIntersectionCordsV2(\r\n pointFieldActiveShapeLineFrom.x, pointFieldActiveShapeLineFrom.y,\r\n pointFieldActiveShapeLineTo.x, pointFieldActiveShapeLineTo.y,\r\n pointFieldTestShapeLineFrom.x, pointFieldTestShapeLineFrom.y,\r\n pointFieldTestShapeLineTo.x, pointFieldTestShapeLineTo.y,\r\n false\r\n );\r\n\r\n if (intersectionCords) {\r\n // const ctx = sqftEventManager.getCtx();\r\n // ctx.beginPath();\r\n // ctx.arc(intersectionCords.x, intersectionCords.y, 10, 0, 2 * Math.PI);\r\n // ctx.stroke();\r\n //debugger // eslint-disable-line no-debugger\r\n (intersectionPoints[shape2.id] = intersectionPoints[shape2.id] || []).push(intersectionCords);\r\n }\r\n });\r\n });\r\n\r\n return intersectionPoints;\r\n }\r\n\r\n static checkIfShapeContainsAnother(shape1, shape2) {\r\n let shape1Pos = shape1.getCenter();\r\n let shape1PosField = getPointField(shape1Pos.x, shape1Pos.y, shape1);\r\n // here will will check only shape center point\r\n for (let vertex of [shape1PosField]) {\r\n if (isPointInsideShape(vertex, shape2)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * @param {sqftShape} activeShape\r\n * @return {object} {sqftShape.id: {lineDirection: [{point: point, distance: int}]}}\r\n */\r\n static getDistancesToShapes(activeShape) {\r\n let activeShapeLines = activeShape.getLines();\r\n let shapes = workspace.getShapes();\r\n let distances = {};\r\n activeShapeLines.forEach((activeShapeLine) => {\r\n let pointFieldActiveShapeLineFrom = getPointField(activeShapeLine.from.x, activeShapeLine.from.y, activeShapeLine);\r\n\r\n shapes.forEach(function(shape) {\r\n if (shape instanceof sqftShape && !shape.isHidden && shape.id !== activeShape.id) {\r\n let testShapeLines = shape.getLines();\r\n testShapeLines.forEach((testShapeLine) => {\r\n let pointFieldTestShapeLineFrom = getPointField(testShapeLine.from.x, testShapeLine.from.y, testShapeLine);\r\n let pointFieldTestShapeLineTo = getPointField(testShapeLine.to.x, testShapeLine.to.y, testShapeLine);\r\n\r\n let distance = getDistanceFromPointToLine(\r\n pointFieldActiveShapeLineFrom.x, pointFieldActiveShapeLineFrom.y,\r\n pointFieldTestShapeLineFrom.x, pointFieldTestShapeLineFrom.y,\r\n pointFieldTestShapeLineTo.x, pointFieldTestShapeLineTo.y\r\n );\r\n\r\n if (distance || distance === 0) {\r\n let lineDirection = shape.getAngleDirection(testShapeLine);\r\n let diff = Math.abs(distance);\r\n\r\n if (diff < sqftConfig.SNAP_OFFSET) {\r\n let lineMidPoint = getMidPoint(pointFieldTestShapeLineFrom, pointFieldTestShapeLineTo);\r\n let result = {\r\n shape: shape,\r\n line: activeShapeLine,\r\n point: pointFieldActiveShapeLineFrom,\r\n distance,\r\n diff,\r\n diffX: pointFieldActiveShapeLineFrom.x - lineMidPoint.x,\r\n diffY: pointFieldActiveShapeLineFrom.y - lineMidPoint.y,\r\n }\r\n distances[shape.id] = distances[shape.id] || {};\r\n (distances[shape.id][lineDirection.orientation] = distances[shape.id][lineDirection.orientation] || []).push(result);\r\n }\r\n }\r\n });\r\n }\r\n });\r\n });\r\n\r\n return distances;\r\n }\r\n\r\n /**\r\n * @param {sqftShape} activeShape\r\n * @return {object} {sqftShape.id: {lineDirection: [{point: point, distance: int}]}}\r\n */\r\n static getDistancesToWalls(activeShape) {\r\n let activeShapeLines = activeShape.getLines();\r\n let walls = workspaceControllers.walls.getResources();\r\n let distances = {};\r\n activeShapeLines.forEach((activeShapeLine) => {\r\n let pointFieldActiveShapeLineFrom = getPointField(activeShapeLine.from.x, activeShapeLine.from.y, activeShapeLine);\r\n\r\n walls.forEach(function(wall) {\r\n if (wall instanceof Wall) {\r\n //todo\r\n let testShapeLines = wall.getBordersOfWallLines();\r\n //let testShapeLines = wall.getLines();\r\n //console.log(\"testShapeLines\", testShapeLines);\r\n activeShape.testShapeLines = testShapeLines;\r\n\r\n testShapeLines.forEach((testShapeLine) => {\r\n let pointFieldTestShapeLineFrom = testShapeLine.from.getPointField();\r\n let pointFieldTestShapeLineTo = testShapeLine.to.getPointField();\r\n\r\n let distance = getDistanceFromPointToLine(\r\n pointFieldActiveShapeLineFrom.x, pointFieldActiveShapeLineFrom.y,\r\n pointFieldTestShapeLineFrom.x, pointFieldTestShapeLineFrom.y,\r\n pointFieldTestShapeLineTo.x, pointFieldTestShapeLineTo.y\r\n );\r\n\r\n if (distance) {\r\n const lineOrientation = ShapeHelper.getLineOrientation(testShapeLine.from, testShapeLine.to, true);\r\n //console.log(\"lineOrientation\",lineOrientation);\r\n let diff = Math.abs(distance);\r\n\r\n if (diff < sqftConfig.SNAP_OFFSET) {\r\n let lineMidPoint = getMidPoint(pointFieldTestShapeLineFrom, pointFieldTestShapeLineTo);\r\n let result = {\r\n shape: wall,\r\n line: activeShapeLine,\r\n point: pointFieldActiveShapeLineFrom,\r\n distance,\r\n diff,\r\n diffX: pointFieldActiveShapeLineFrom.x - lineMidPoint.x,\r\n diffY: pointFieldActiveShapeLineFrom.y - lineMidPoint.y,\r\n }\r\n distances[wall.id] = distances[wall.id] || {};\r\n (distances[wall.id][lineOrientation] = distances[wall.id][lineOrientation] || []).push(result);\r\n //console.log(\"diff\", diff);\r\n }\r\n }\r\n });\r\n }\r\n });\r\n });\r\n\r\n return distances;\r\n }\r\n\r\n /**\r\n * @param {object} pointFieldActivePoint {x, y}\r\n * @return {object} {sqftShape.id: {lineDirection: [{point: point, distance: int}]}}\r\n */\r\n static getDistancesToPoint(pointFieldActivePoint) {\r\n let shapes = workspace.getShapes();\r\n let distances = {};\r\n //let pointFieldActivePoint = getPointField(activePoint.x, activePoint.y);\r\n shapes.forEach(function(shape) {\r\n if (shape instanceof sqftShape && !shape.isHidden) {\r\n let testShapeLines = shape.getLines();\r\n testShapeLines.forEach((testShapeLine) => {\r\n let pointFieldTestShapeLineFrom = getPointField(testShapeLine.from.x, testShapeLine.from.y, testShapeLine);\r\n let pointFieldTestShapeLineTo = getPointField(testShapeLine.to.x, testShapeLine.to.y, testShapeLine);\r\n\r\n let distance = getDistanceFromPointToInfiniteLine(\r\n pointFieldActivePoint.x, pointFieldActivePoint.y,\r\n pointFieldTestShapeLineFrom.x, pointFieldTestShapeLineFrom.y,\r\n pointFieldTestShapeLineTo.x, pointFieldTestShapeLineTo.y\r\n );\r\n\r\n if (distance) {\r\n let lineDirection = shape.getAngleDirection(testShapeLine);\r\n let diff = distance;\r\n switch (lineDirection.orientation) {\r\n case 'vertical':\r\n diff = pointFieldActivePoint.x > pointFieldTestShapeLineFrom.x ? distance : -distance\r\n break;\r\n case 'horizontal':\r\n diff = pointFieldActivePoint.y > pointFieldTestShapeLineFrom.y ? distance : -distance\r\n break;\r\n //todo rotated - set diff distance from tested point to line(beam)\r\n default:\r\n break;\r\n }\r\n\r\n if (distance < sqftConfig.SNAP_OFFSET) {\r\n let result = {\r\n shape: shape,\r\n line: testShapeLine,\r\n point: pointFieldActivePoint,\r\n distance,\r\n diff,\r\n }\r\n distances[shape.id] = distances[shape.id] || {};\r\n (distances[shape.id][lineDirection.orientation] = distances[shape.id][lineDirection.orientation] || []).push(result);\r\n }\r\n }\r\n });\r\n }\r\n });\r\n\r\n return distances;\r\n }\r\n\r\n /**\r\n * @param {sqftShape} activeShape\r\n * @return {object} {sqftShape.id: {lineDirection: [{point: point, distance: int}]}}\r\n */\r\n static getDistancesToSlabImages(activeShape) {\r\n let activeShapeLines = activeShape.getLines();\r\n let croppedSlabImages = store.getState().sqftSlabState.croppedSlabImages;\r\n let distances = {};\r\n activeShapeLines.forEach((activeShapeLine) => {\r\n let pointFieldActiveShapeLineFrom = getPointField(activeShapeLine.from.x, activeShapeLine.from.y, activeShapeLine);\r\n\r\n croppedSlabImages.forEach(function(movableImage) {\r\n if (!movableImage.isHidden) {\r\n let testImagePoints = movableImage.getLinePointsPointField();\r\n for (let i = 0; i <= testImagePoints.length - 1; i++) {\r\n let from = testImagePoints[i];\r\n let to = testImagePoints[i === testImagePoints.length - 1 ? 0 : i + 1] ;\r\n let distance = getDistanceFromPointToLine(\r\n pointFieldActiveShapeLineFrom.x, pointFieldActiveShapeLineFrom.y,\r\n from.x, from.y,\r\n to.x, to.y,\r\n );\r\n const lineOrientation = ShapeHelper.getLineOrientation(from, to);\r\n let diff = Math.abs(distance);\r\n\r\n if (diff < sqftConfig.SNAP_OFFSET) {\r\n let lineMidPoint = getMidPoint(from, to);\r\n let result = {\r\n shape: movableImage,\r\n line: activeShapeLine,\r\n point: pointFieldActiveShapeLineFrom,\r\n distance,\r\n diff,\r\n diffX: pointFieldActiveShapeLineFrom.x - lineMidPoint.x,\r\n diffY: pointFieldActiveShapeLineFrom.y - lineMidPoint.y,\r\n }\r\n distances[movableImage.id] = distances[movableImage.id] || {};\r\n (distances[movableImage.id][lineOrientation] = distances[movableImage.id][lineOrientation] || []).push(result);\r\n }\r\n }\r\n }\r\n });\r\n });\r\n\r\n return distances;\r\n }\r\n\r\n /**\r\n * @param {sqftShape} activeShape\r\n * @return {object} {sqftShape.id: {lineDirection: [{point: point, distance: int}]}}\r\n */\r\n static getDistancesToImages(activeShape) {\r\n let activeShapeLines = activeShape.getLines();\r\n let appliances = sqftImageManager.getAppliances();\r\n let slabImages = sqftImageManager.getSlabImages();\r\n const images = slabImages.concat(appliances);\r\n let distances = {};\r\n activeShapeLines.forEach((activeShapeLine) => {\r\n let pointFieldActiveShapeLineFrom = getPointField(activeShapeLine.from.x, activeShapeLine.from.y, activeShapeLine);\r\n\r\n images.forEach(function(movableImage) {\r\n if (!movableImage.isHidden && movableImage.id !== activeShape.id) {\r\n let testImagePoints = movableImage.getLinePointsPointField();\r\n for (let i = 0; i <= testImagePoints.length - 1; i++) {\r\n let from = testImagePoints[i];\r\n let to = testImagePoints[i === testImagePoints.length - 1 ? 0 : i + 1] ;\r\n let distance = getDistanceFromPointToLine(\r\n pointFieldActiveShapeLineFrom.x, pointFieldActiveShapeLineFrom.y,\r\n from.x, from.y,\r\n to.x, to.y,\r\n );\r\n const lineOrientation = ShapeHelper.getLineOrientation(from, to);\r\n let diff = Math.abs(distance);\r\n\r\n if (diff < sqftConfig.SNAP_OFFSET) {\r\n let lineMidPoint = getMidPoint(from, to);\r\n let result = {\r\n shape: movableImage,\r\n line: activeShapeLine,\r\n point: pointFieldActiveShapeLineFrom,\r\n distance,\r\n diff,\r\n diffX: pointFieldActiveShapeLineFrom.x - lineMidPoint.x,\r\n diffY: pointFieldActiveShapeLineFrom.y - lineMidPoint.y,\r\n }\r\n distances[movableImage.id] = distances[movableImage.id] || {};\r\n (distances[movableImage.id][lineOrientation] = distances[movableImage.id][lineOrientation] || []).push(result);\r\n }\r\n }\r\n }\r\n });\r\n });\r\n\r\n return distances;\r\n }\r\n\r\n static getLineOrientation(point1, point2, usePointsV2 = false) {\r\n const x1 = usePointsV2 ? point1.modelCorePoint.getPosX() : point1.x\r\n const x2 = usePointsV2 ? point2.modelCorePoint.getPosX() : point2.x\r\n const y1 = usePointsV2 ? point1.modelCorePoint.getPosY() : point1.y\r\n const y2 = usePointsV2 ? point2.modelCorePoint.getPosY() : point2.y\r\n let slope = (y1 - y2) / (x1 - x2);\r\n let xDiff = Math.round(Math.abs(x2 - x1));\r\n let yDiff = Math.round(Math.abs(y2 - y1));\r\n if (xDiff === 0) {\r\n return \"vertical\";\r\n } else if (yDiff === 0) {\r\n return \"horizontal\";\r\n } else {\r\n if (slope >= 0) { //southeast and northwest\r\n if (x2 > x1) {\r\n return \"SOUTHEAST\";\r\n } else {\r\n return \"NORTHWEST\";\r\n }\r\n } else {\r\n if (x2 > x1) {\r\n return \"NORTHEAST\";\r\n } else {\r\n return \"SOUTHWEST\";\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * find all snapping possibilities\r\n * @param {object} itemBounds\r\n * @return {object} {sqftShape.id: [intersectionPoints]}\r\n */\r\n static getSnappingPossibilities(itemBounds) {\r\n if (Object.keys(itemBounds).length === 0) {\r\n return []\r\n }\r\n let resultV = [], resultH = [];\r\n for (let i in itemBounds) {\r\n if (itemBounds[i].vertical) {\r\n itemBounds[i].vertical.forEach((itemBound) => {\r\n resultV.push({\r\n shape: itemBound.shape,\r\n line: itemBound.line,\r\n point: itemBound.point,\r\n offset: itemBound.distance,\r\n diff: itemBound.diffX,\r\n orientation: \"vertical\",\r\n });\r\n });\r\n }\r\n if (itemBounds[i].horizontal) {\r\n itemBounds[i].horizontal.forEach((itemBound) => {\r\n resultH.push({\r\n shape: itemBound.shape,\r\n line: itemBound.line,\r\n point: itemBound.point,\r\n offset: itemBound.distance,\r\n diff: itemBound.diffY,\r\n orientation: \"horizontal\",\r\n });\r\n });\r\n }\r\n }\r\n\r\n let guides = [];\r\n\r\n // find closest snap\r\n let minV = resultV.sort((a, b) => a.diff - b.diff)[0];\r\n let minH = resultH.sort((a, b) => a.diff - b.diff)[0];\r\n if (minV) {\r\n guides.push(minV);\r\n }\r\n if (minH) {\r\n guides.push(minH);\r\n }\r\n if (guides.length > 0) {\r\n //debugger // eslint-disable-line no-debugger\r\n }\r\n return guides;\r\n }\r\n\r\n /**\r\n * Find all snapping possibilities for the same part ID\r\n * @param {object} itemBounds\r\n * @param partId\r\n * @return {object} {sqftShape.id: [intersectionPoints]}\r\n */\r\n static getItemBoundsForTheSamePartIdIfExist(itemBounds, partId) {\r\n if (Object.keys(itemBounds).length === 0) {\r\n return {};\r\n }\r\n\r\n const newItemBounds = {};\r\n\r\n for (let key in itemBounds) {\r\n if (itemBounds.hasOwnProperty(key)) {\r\n let verticalElements = [];\r\n let horizontalElements = [];\r\n\r\n if (itemBounds[key].vertical) {\r\n verticalElements = itemBounds[key].vertical.filter(verticalElement => verticalElement.shape.partId === partId);\r\n }\r\n\r\n if (itemBounds[key].horizontal) {\r\n horizontalElements = itemBounds[key].horizontal.filter(horizontalElement => horizontalElement.shape.partId === partId);\r\n }\r\n\r\n if (verticalElements.length > 0 || horizontalElements.length > 0) {\r\n newItemBounds[key] = {\r\n vertical: verticalElements.length > 0 ? verticalElements : undefined,\r\n horizontal: horizontalElements.length > 0 ? horizontalElements : undefined\r\n };\r\n }\r\n }\r\n }\r\n\r\n return newItemBounds;\r\n }\r\n\r\n /**\r\n * find all snapping possibilities\r\n * @param {object} itemBounds\r\n * @return {object} {sqftShape.id: [intersectionPoints]}\r\n */\r\n static getSnappingPossibilitiesToLines(itemBounds) {\r\n if (Object.keys(itemBounds).length === 0) {\r\n return []\r\n }\r\n let resultV = [], resultH = [];\r\n for (let i in itemBounds) {\r\n if (itemBounds[i].vertical) {\r\n itemBounds[i].vertical.forEach((itemBound) => {\r\n resultV.push({\r\n line: itemBound.line,\r\n point: itemBound.point,\r\n distance: itemBound.distance,\r\n diff: itemBound.diff,\r\n orientation: \"vertical\",\r\n });\r\n });\r\n }\r\n if (itemBounds[i].horizontal) {\r\n itemBounds[i].horizontal.forEach((itemBound) => {\r\n resultH.push({\r\n line: itemBound.line,\r\n point: itemBound.point,\r\n diff: itemBound.diff,\r\n orientation: \"horizontal\",\r\n });\r\n });\r\n }\r\n }\r\n\r\n let guides = [];\r\n\r\n // find closest snap\r\n let minV = resultV.sort((a, b) => a.distance - b.distance)[0];\r\n let minH = resultH.sort((a, b) => a.distance - b.distance)[0];\r\n if (minV) {\r\n guides.push(minV);\r\n }\r\n if (minH) {\r\n guides.push(minH);\r\n }\r\n\r\n if (guides.length > 0) {\r\n //debugger // eslint-disable-line no-debugger\r\n }\r\n return guides;\r\n }\r\n\r\n static getMinLengthToPoints(shape, points) {\r\n let shapeLines = shape.getLines();\r\n let minLength = null;\r\n let pointDistances = [];\r\n points.forEach(function(point) {\r\n shapeLines.forEach(function(line) {\r\n let pointField = getPointField(line.from.x, line.from.y, line)\r\n let pointDistance = getPointDistance(pointField, point);\r\n\r\n pointDistances.push(pointDistance);\r\n if (minLength === null || pointDistance < minLength) {\r\n minLength = pointDistance\r\n }\r\n })\r\n })\r\n pointDistances.sort((a, b) => a - b);\r\n //console.log(\"pointDistances\", pointDistances);\r\n\r\n return pointDistances ? pointDistances : null\r\n }\r\n\r\n static getInnerCornerPoints(shape) {\r\n let lines = shape.getLines(),\r\n points = [];\r\n\r\n for (let i = 0; i < lines.length; i++) {\r\n if (lines[i].to.angle > 0 || lines[i].to.arcLength > 0) {\r\n let dir = shape.getAngleDirection(lines[i]);\r\n if (this.isAngleInner(dir)) {\r\n points.push(lines[i].to);\r\n }\r\n }\r\n }\r\n\r\n return points\r\n }\r\n\r\n static isAngleInner(dir) {\r\n let isInner = false;\r\n switch(dir.facing) {\r\n case \"nw\":\r\n if (dir.orientation === \"horizontal\") {\r\n isInner = true\r\n }\r\n break;\r\n case \"ne\":\r\n if (dir.orientation === \"vertical\") {\r\n isInner = true\r\n }\r\n break;\r\n case \"se\":\r\n if (dir.orientation === \"horizontal\") {\r\n isInner = true\r\n }\r\n break;\r\n case \"sw\":\r\n if (dir.orientation === \"vertical\") {\r\n isInner = true\r\n }\r\n\r\n break;\r\n }\r\n\r\n return isInner;\r\n }\r\n\r\n //deprecated (old rotation function) use getCenterPoint\r\n static getShapeCenter(lines, isSlabMode) {\r\n let max_x = 0, min_x = 0, max_y = 0, min_y = 0;\r\n for(let i = 0; i < lines.length; i++) {\r\n let rotatePointX = isSlabMode ? lines[i].from.posSlab.x : lines[i].from.x;\r\n let rotatePointY = isSlabMode ? lines[i].from.posSlab.y : lines[i].from.y;\r\n if (max_x < rotatePointX)\r\n max_x = rotatePointX;\r\n if (min_x > rotatePointX)\r\n min_x = rotatePointX;\r\n if (max_y < rotatePointY)\r\n max_y = rotatePointY;\r\n if (min_y > rotatePointY)\r\n min_y = rotatePointY;\r\n }\r\n\r\n return {x: ((max_x - min_x) / 2) + min_x, y: ((max_y - min_y) / 2) + min_y};\r\n }\r\n\r\n static getCenterPoint(points) {\r\n let xCords = points.map (point => point.x);\r\n let yCords = points.map (point => point.y);\r\n let cx = (Math.min (...xCords) + Math.max (...xCords)) / 2;\r\n let cy = (Math.min (...yCords) + Math.max (...yCords)) / 2;\r\n\r\n return {x: cx, y: cy};\r\n }\r\n\r\n static getAbsolutePosFromSnapPossibilities = (snapPossibilities, pos) => {\r\n if (snapPossibilities.length > 0) {\r\n let scale = sqftConfig.scale;\r\n let absolutePos = {...pos};\r\n let snapWithShape = null;\r\n snapPossibilities.forEach((snap) => {\r\n switch (snap.orientation) {\r\n case \"horizontal\":\r\n absolutePos.y -= snap.diff / scale\r\n break;\r\n case \"vertical\":\r\n absolutePos.x -= snap.diff / scale\r\n break;\r\n }\r\n snapWithShape = snap.shape;\r\n })\r\n return [absolutePos, snapWithShape]\r\n }\r\n return [null, null]\r\n }\r\n}\r\n\r\n/**\r\n * get line length number text from 2 point\r\n */\r\nexport const getLineLengthNumberText = (pointFrom, pointTo, parent, changeValueCallback) => {\r\n const midPoint = getMidPoint(pointFrom.getPosition(), pointTo.getPosition()),\r\n lineOrientation = getLineOrientation(pointFrom, pointTo),\r\n //todo line direction\r\n lineDirection = {newDirection: \"west\"},//getPointDirection(pointFrom, pointTo, nextPoint, prevPoint),\r\n distance = getPointDistance(pointFrom, pointTo);\r\n\r\n let yOffset = 0,\r\n xOffset = 0;\r\n\r\n switch (lineOrientation) {\r\n case orientation.HORIZONTAL: {\r\n yOffset = lineDirection.newDirection === \"west\" ? 36 + 10 : -36;\r\n break;\r\n }\r\n case orientation.VERTICAL: {\r\n xOffset = (lineDirection.newDirection === \"south\" ? 36 + 10 : -36 - 10);\r\n break;\r\n }\r\n //TODO rotation\r\n case orientation.NORTHWEST: { break; }\r\n case orientation.NORTHEAST: { break; }\r\n case orientation.SOUTHWEST: { break; }\r\n case orientation.SOUTHEAST: { break; }\r\n default: break;\r\n }\r\n\r\n let pos = {\r\n x: midPoint.x,\r\n y: midPoint.y,\r\n xOffset: xOffset,\r\n yOffset: yOffset,\r\n orientation: lineOrientation,\r\n betweenPoints: {\r\n pointFrom: pointFrom,\r\n pointTo: pointTo,\r\n }\r\n };\r\n\r\n let design = {\r\n shouldRenderFrameBorder: true,\r\n isLength: true\r\n };\r\n\r\n return new NumberText(distance, pos, design, parent, changeValueCallback);\r\n}\r\n\r\nexport const getPointDirection = (aP, bP, cP, lineBeforeFrom) => { // line1.from , line1.to, line2.to, lineBefore.from\r\n var\r\n mAC = getMidPoint(aP, cP),\r\n vDir,\r\n hDir,\r\n orientation = ShapeHelper.getLineOrientation(aP,bP),\r\n newDirection = '',\r\n cornerMargins = {\r\n fromTop : 0,\r\n fromLeft : 0,\r\n fromRight : 0,\r\n fromBottom : 0,\r\n },\r\n dirX = 'forward',\r\n dirY = 'forward';\r\n\r\n if (aP.x > bP.x) {\r\n dirX = 'backward';\r\n }\r\n if (aP.y < bP.y) {\r\n dirY = 'backward';\r\n }\r\n if (bP.y >= mAC.y) {\r\n vDir = \"n\";\r\n } else {\r\n vDir = \"s\";\r\n }\r\n if (bP.x >= mAC.x) { // 155 - 118\r\n hDir = \"w\";\r\n } else {\r\n hDir = \"e\";\r\n }\r\n\r\n var point1X = aP.x - (aP.x % 1),\r\n point1Y = aP.y - (aP.y % 1),\r\n point2X = bP.x - (bP.x % 1),\r\n point2Y = bP.y - (bP.y % 1),\r\n point3X = cP.x - (cP.x % 1),\r\n point3Y = cP.y - (cP.y % 1),\r\n pointBeforeX = lineBeforeFrom.x - (lineBeforeFrom.x % 1),\r\n pointBeforeY = lineBeforeFrom.y - (lineBeforeFrom.y % 1); // remove all after dot for proper compare\r\n\r\n if (orientation === \"horizontal\") {\r\n newDirection = (point1X > point2X) ? \"west\" : \"east\"\r\n }\r\n\r\n if (orientation === \"vertical\") {\r\n newDirection = (point1Y > point2Y) ? \"north\" : \"south\"\r\n }\r\n\r\n if ((point1X === point2X) && (point2Y === point3Y) && (point1X < pointBeforeX) && (newDirection === \"south\")\r\n || (point1X === point2X) && (point2Y === point3Y) && (point2X > cP.x) && (newDirection === \"north\")) {\r\n cornerMargins.fromTop = true\r\n }\r\n if ((point1Y === point2Y) && (point2X === point3X) && (point3Y > point2Y) && (point1X > point2X)\r\n ||(point1Y === point2Y) && (pointBeforeX === point1X) && (pointBeforeY < point1Y) && (point2X > point1X)) {\r\n cornerMargins.fromLeft = true\r\n }\r\n if ((point1Y === point2Y) && (point1X === pointBeforeX) && (pointBeforeY > point1Y) && (point1X > point2X)\r\n ||(point1Y === point2Y) && (point2X === point3X) && (point2Y > point3Y) && (point2X > point1X)) {\r\n cornerMargins.fromRight = true\r\n }\r\n if ((point1X === point2X) && (point2Y === point3Y) && (point1Y < point2Y) && (point3X > point2X)\r\n ||(point1X === point2X) && (point1Y === pointBeforeY) && (point1X > pointBeforeX) && (point1Y > point2Y)) {\r\n cornerMargins.fromBottom = true\r\n }\r\n\r\n return {\r\n facing: vDir + hDir,\r\n direction: {x: dirX, y: dirY},\r\n cornerMargins : cornerMargins,\r\n orientation : orientation,\r\n newDirection : newDirection\r\n }\r\n\r\n}\r\n\r\n/**\r\n * get line length number text from 2 point\r\n */\r\nexport const getLineLengthNumberTextV2 = (pointFrom, pointTo, parent, changeValueCallback) => {\r\n const midPoint = getMidPoint(pointFrom.getPosition(), pointTo.getPosition()),\r\n lineOrientation = getLineOrientation(pointFrom, pointTo),\r\n lineDirection = getLineDirection(pointFrom, pointTo),\r\n distance = getPointDistance(pointFrom, pointTo);\r\n\r\n let yOffset = 0,\r\n xOffset = 0;\r\n\r\n switch (lineOrientation) {\r\n case orientation.HORIZONTAL: {\r\n const ctx = sqftEventManager.getCtx();\r\n const fontSize = getFontSizeFromContext(ctx);\r\n yOffset = lineDirection === DIRECTIONS.WEST ? fontSize : -fontSize;\r\n\r\n break;\r\n }\r\n case orientation.VERTICAL: {\r\n xOffset = (lineDirection === DIRECTIONS.SOUTH ? + 10 : - 10);\r\n break;\r\n }\r\n //TODO rotation\r\n case orientation.NORTHWEST: { break; }\r\n case orientation.NORTHEAST: { break; }\r\n case orientation.SOUTHWEST: { break; }\r\n case orientation.SOUTHEAST: { break; }\r\n default: break;\r\n }\r\n\r\n let pos = {\r\n x: midPoint.x,\r\n y: midPoint.y,\r\n xOffset: xOffset,\r\n yOffset: yOffset,\r\n orientation: lineOrientation,\r\n betweenPoints: {\r\n pointFrom: pointFrom,\r\n pointTo: pointTo,\r\n }\r\n };\r\n\r\n let design = {\r\n shouldRenderFrameBorder: false,\r\n isLength: true,\r\n priority: EventManager.priorities.SEGMENT\r\n };\r\n\r\n return new NumberText(distance, pos, design, parent, changeValueCallback);\r\n}\r\n\r\n/**\r\n * get line length number text from 2 point\r\n */\r\nexport const getLineLengthNumberTextV2ForTheImage = (pointFrom, pointTo, parent, changeValueCallback, shouldOnlyRenderText = false) => {\r\n const midPoint = getMidPoint(pointFrom.getPosition(), pointTo.getPosition()),\r\n lineOrientation = getLineOrientation(pointFrom, pointTo),\r\n lineDirection = getLineDirection(pointFrom, pointTo),\r\n distance = getPointDistance(pointFrom, pointTo);\r\n\r\n let yOffset = 0,\r\n xOffset = 0;\r\n const ctx = sqftEventManager.getCtx();\r\n const fontSize = getFontSizeFromContext(ctx);\r\n\r\n switch (lineOrientation) {\r\n case orientation.HORIZONTAL: {\r\n yOffset = lineDirection === DIRECTIONS.WEST ? fontSize : fontSize;\r\n\r\n break;\r\n }\r\n case orientation.VERTICAL: {\r\n xOffset = (lineDirection === DIRECTIONS.SOUTH ? - 0 : 0);\r\n yOffset = lineDirection === DIRECTIONS.WEST ? fontSize : fontSize;\r\n\r\n break;\r\n }\r\n //TODO rotation\r\n case orientation.NORTHWEST: { break; }\r\n case orientation.NORTHEAST: { break; }\r\n case orientation.SOUTHWEST: { break; }\r\n case orientation.SOUTHEAST: { break; }\r\n default: break;\r\n }\r\n\r\n let pos = {\r\n x: midPoint.x,\r\n y: midPoint.y,\r\n xOffset: xOffset,\r\n yOffset: yOffset,\r\n orientation: lineOrientation,\r\n betweenPoints: {\r\n pointFrom: pointFrom,\r\n pointTo: pointTo,\r\n }\r\n };\r\n\r\n let design = {\r\n shouldOnlyRenderText: shouldOnlyRenderText,\r\n shouldRenderFrameBorder: false,\r\n isLength: true,\r\n eventsPriority: EventManager.priorities.IMAGE_LINE\r\n };\r\n\r\n return new NumberText(distance, pos, design, parent, changeValueCallback);\r\n}\r\n\r\nexport const getLineDirection = (pointA, pointB, shouldRound = false) => {\r\n let deltaX, deltaY;\r\n if (shouldRound) {\r\n deltaX = Math.round10(pointB.x, -1) - Math.round10(pointA.x, -1);\r\n deltaY = Math.round10(pointB.y, -1) - Math.round10(pointA.y, -1);\r\n } else {\r\n deltaX = pointB.x - pointA.x;\r\n deltaY = pointB.y - pointA.y;\r\n }\r\n\r\n if (deltaX > 0 && deltaY === 0) {\r\n return DIRECTIONS.EAST;\r\n } else if (deltaX < 0 && deltaY === 0) {\r\n return DIRECTIONS.WEST;\r\n } else if (deltaY > 0 && deltaX === 0) {\r\n return DIRECTIONS.SOUTH;\r\n } else if (deltaY < 0 && deltaX === 0) {\r\n return DIRECTIONS.NORTH;\r\n } else if (deltaX > 0 && deltaY < 0) {\r\n return DIRECTIONS.NORTHEAST;\r\n } else if (deltaX < 0 && deltaY < 0) {\r\n return DIRECTIONS.NORTHWEST;\r\n } else if (deltaX > 0 && deltaY > 0) {\r\n return DIRECTIONS.SOUTHEAST;\r\n } else if (deltaX < 0 && deltaY > 0) {\r\n return DIRECTIONS.SOUTHWEST;\r\n } else {\r\n return DIRECTIONS.UNDEFINED;\r\n }\r\n}\r\n\r\n/**\r\n * @Deprecated. Use getLineDirection instead\r\n */\r\nexport const getLineOrientation = (pointFrom, pointTo) => {\r\n let slope = getSlope(pointFrom, pointTo),\r\n xDiff = Math.round(Math.abs(pointTo.x - pointFrom.x)),\r\n yDiff = Math.round(Math.abs(pointTo.y - pointFrom.y));\r\n\r\n if (xDiff === 0) {\r\n return orientation.VERTICAL;\r\n } else if (yDiff === 0) {\r\n return orientation.HORIZONTAL;\r\n } else {\r\n if (slope >= 0) { //southeast and northwest\r\n if (pointTo.x > pointFrom.x) {\r\n return orientation.SOUTHEAST;\r\n } else {\r\n return orientation.NORTHWEST;\r\n }\r\n } else {\r\n if (pointTo.x > pointFrom.x) {\r\n return orientation.NORTHEAST;\r\n } else {\r\n return orientation.SOUTHWEST;\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport const getSlope = (pointFrom, pointTo) => {\r\n let x1 = pointFrom.x,\r\n x2 = pointTo.x,\r\n y1 = pointFrom.y,\r\n y2 = pointTo.y;\r\n\r\n return (y1 - y2) / (x1 - x2);\r\n}\r\n\r\nexport const getSlopeV2 = (pointFrom, pointTo) => {\r\n if (pointTo.x - pointFrom.x !== 0) {\r\n return (pointTo.y - pointFrom.y) / (pointTo.x - pointFrom.x);\r\n }\r\n return Number.MAX_VALUE;\r\n}\r\n\r\n/**\r\n * @param {{from: {x:number, y: number}, to: {x:number, y: number}}} line1\r\n * @param {{from: {x:number, y: number}, to: {x:number, y: number}}} line2\r\n * get angle between two lines https://www.geeksforgeeks.org/angle-between-a-pair-of-lines/\r\n */\r\nexport const getAngleBetweenTwoLines = (line1, line2) => {\r\n const slopeLine1 = getSlopeV2(line1.from, line1.to);\r\n const slopeLine2 = getSlopeV2(line2.from, line2.to);\r\n\r\n return getAngleBetweenTwoSlopes(slopeLine1, slopeLine2);\r\n}\r\n\r\nexport const getAngleBetweenTwoSlopes = (M1, M2) => {\r\n // Store the tan value of the angle\r\n let angle = Math.abs((M2 - M1) / (1 + M1 * M2));\r\n\r\n // Calculate tan inverse of the angle\r\n let ret = Math.atan(angle);\r\n\r\n // Convert the angle from\r\n // radian to degree\r\n\r\n return (ret * 180) / Math.PI;\r\n}\r\n\r\n/**\r\n * @param {{x:number, y: number}} point1\r\n * @param {{x:number, y: number}} point2\r\n */\r\nexport const getVectorByPoints = (point1, point2) => {\r\n return {x: point2.x - point1.x, y: point2.y - point1.y}\r\n}\r\n\r\n/**\r\n * @param {{from: {x:number, y: number}, to: {x:number, y: number}}} line1\r\n * @param {{from: {x:number, y: number}, to: {x:number, y: number}}} line2\r\n */\r\nexport const getAngleBetweenTwoLinesV2 = (line1, line2) => {\r\n const vector1 = getVectorByPoints(line1.to, line1.from);\r\n const vector2 = getVectorByPoints(line2.from, line2.to);\r\n //const pointDistance = Math.sqrt(Math.pow(vectorLine2.x - vectorLine1.x, 2) + Math.pow(vectorLine2.y - vectorLine1.y, 2));\r\n const cosAngle = (vector1.x + vector2.x + vector1.y + vector2.y)\r\n / Math.sqrt(Math.pow(vector1.x, 2) + Math.pow(vector1.y, 2))\r\n * Math.sqrt(Math.pow(vector2.x, 2) + Math.pow(vector2.y, 2));\r\n\r\n //todo\r\n //console.log(\"cosAngle\", cosAngle);\r\n return Math.acos (cosAngle)\r\n}\r\n\r\n/**\r\n * Calculates the angle ABC ()\r\n *\r\n * A first point, ex: {x: 0, y: 0}\r\n * C second point\r\n * B center point\r\n **/\r\nexport const getAngleBetween3Points = (A, B, C) => {\r\n let AB = Math.sqrt(Math.pow(B.x - A.x,2)+ Math.pow(B.y - A.y,2));\r\n let BC = Math.sqrt(Math.pow(B.x - C.x,2)+ Math.pow(B.y - C.y,2));\r\n let AC = Math.sqrt(Math.pow(C.x - A.x,2)+ Math.pow(C.y - A.y,2));\r\n const angleInRadians = Math.acos((BC*BC+AB*AB-AC*AC)/(2*BC*AB));\r\n\r\n return (angleInRadians * 180) / Math.PI\r\n}\r\n\r\nexport const getEdgeFeatureGroup = () => {\r\n if (!SqftStore.edgeFeatureGroups) {\r\n SqftStore.edgeFeatureGroups = {};\r\n }\r\n\r\n const visualizerType = document.kvConfig.visualizerType;\r\n\r\n // Check if the edgeFeatureGroup for the current visualizerType is already cached\r\n if (!SqftStore.edgeFeatureGroups[visualizerType]) {\r\n const mainNeeded = \"edge_profile\";\r\n const oppositeNeeded = \"center_island_edge\";\r\n const layout = getCurrentLayout(visualizerType);\r\n\r\n let featureGroup = layout.getSubPartFromQtCategories(mainNeeded);\r\n if (!featureGroup) {\r\n featureGroup = layout.getSubPartFromQtCategories(oppositeNeeded);\r\n }\r\n if (!featureGroup) {\r\n featureGroup = layout.parts[\"Countertop\"] && layout.parts[\"Countertop\"].edge\r\n ? { part: layout.parts[\"Countertop\"].edge }\r\n : null;\r\n }\r\n if (!featureGroup) {\r\n let fg = layout.getFeatureGroupByPartId(\"edge_profile\");\r\n if (fg) {\r\n featureGroup = {part: fg};\r\n }\r\n }\r\n\r\n // Cache the result for the current visualizerType\r\n SqftStore.edgeFeatureGroups[visualizerType] = featureGroup;\r\n }\r\n\r\n return SqftStore.edgeFeatureGroups[visualizerType];\r\n};\r\n\r\nexport const getEdgeFeatures = (edgeFeatureGroup) => {\r\n if (!edgeFeatureGroup) {\r\n edgeFeatureGroup = getEdgeFeatureGroup();\r\n }\r\n if (!edgeFeatureGroup) {\r\n return []\r\n }\r\n const state = store.getState();\r\n const {wizardIsActive} = state.wizardState;\r\n\r\n if (SqftStore.edgeFeatures.length === 0) {\r\n let navItems\r\n\r\n if (wizardIsActive) {\r\n navItems = getNavItemsFromTheWizard(edgeFeatureGroup);\r\n } else {\r\n const layout = getCurrentLayout();\r\n navItems = layout.designNavigationItems(edgeFeatureGroup,\r\n {},\r\n \"\",\r\n false,\r\n \"all\",\r\n [],\r\n { firstFeature: null, firstConditions: null },\r\n )\r\n }\r\n\r\n SqftStore.edgeFeatures = edgeFeatureGroup\r\n ? navItems\r\n : [];\r\n }\r\n\r\n return SqftStore.edgeFeatures\r\n};\r\n\r\n\r\n/**\r\n * countertopPartName will be center_island_countertop if it not exists in the room or at all in qtCategories the same\r\n * for center_island_countertop, it will return countertop if center_island_countertop not exists\r\n * @returns {[string, string]} countertopPartName, centerIslandPartName\r\n */\r\nexport const getCountertopPartNames = (intl = null) => {\r\n const state = store.getState();\r\n const {quotes, activeQuoteIndex} = state.quotesState;\r\n const fabricatorData = state.fabricatorState;\r\n const activeRoomId = state.sqftMenuState.activeRoomId;\r\n const cartItems = state.cartState.cartItems;\r\n intl = intl ? intl : workspace.intl;\r\n const roomName = getRoomName(activeQuoteIndex, cartItems, quotes, intl.messages, intl.locale, fabricatorData);\r\n void roomName; //todo remove\r\n const room = activeRoomId ? activeRoomId : document.kvConfig.visualizerType\r\n const layout = getCurrentLayout();\r\n\r\n let countertopNavItem = layout.getSubPartFromQtCategories(SHAPE_PART_ID.countertop, room);\r\n let centerIslandNavItem = layout.getSubPartFromQtCategories(SHAPE_PART_ID.center_island_countertop, room);\r\n\r\n if (!countertopNavItem && !centerIslandNavItem) {\r\n countertopNavItem = layout.getSubPartFromQtCategories(SHAPE_PART_ID.countertop);\r\n centerIslandNavItem = layout.getSubPartFromQtCategories(SHAPE_PART_ID.center_island_countertop);\r\n }\r\n\r\n //try to assign vanity countertop if countertop or center_island_countertop not exist\r\n if (!countertopNavItem && !centerIslandNavItem) {\r\n countertopNavItem = centerIslandNavItem = layout.getSubPartFromQtCategories(SHAPE_PART_ID.vanity_countertop);\r\n }\r\n\r\n const countertopPartName = countertopNavItem ? countertopNavItem.part.partId : SHAPE_PART_ID.center_island_countertop;\r\n const centerIslandPartName = centerIslandNavItem ? centerIslandNavItem.part.partId : SHAPE_PART_ID.countertop;\r\n\r\n return [countertopPartName, centerIslandPartName];\r\n}\r\n\r\n/**\r\n * Test if shape part ids are equal, parentPartId is added for the spacers\r\n * @param shape\r\n * @param testShape\r\n * @return {boolean}\r\n */\r\nexport const canShapeBeAutoShifted = (shape, testShape) => {\r\n const isShapePlacedOnTheFloor = getIsShapePlacedOnTheFloor(shape);\r\n const isShapePlacedOnTheWall = getIsShapePlacedOnTheWall(shape);\r\n\r\n const isTestShapePlacedOnTheFloor = getIsShapePlacedOnTheFloor(testShape);\r\n const isTestShapePlacedOnTheWall = getIsShapePlacedOnTheWall(testShape);\r\n\r\n return (shape.id !== testShape.id &&\r\n (isShapePlacedOnTheWall && isTestShapePlacedOnTheWall)\r\n || (isShapePlacedOnTheFloor && isTestShapePlacedOnTheFloor)\r\n )\r\n}\r\n\r\nexport const getIsShapePlacedOnTheFloor = (shape) => {\r\n return (shape.partId === SHAPE_PART_ID.tall_cabinet_boxes\r\n || shape.parentPartId === SHAPE_PART_ID.tall_cabinet_boxes\r\n || shape.partId === SHAPE_PART_ID.lower_cabinet_boxes\r\n || shape.parentPartId === SHAPE_PART_ID.lower_cabinet_boxes\r\n || shape.subType === SHAPE_PART_ID.fridge\r\n || shape.subType === SHAPE_PART_ID.stove\r\n || shape.subType === SQFT_APPLIANCES.range\r\n || shape.subType === SQFT_APPLIANCES.sink\r\n || shape.subType === SQFT_APPLIANCES.doubleSink\r\n || shape.subType === SQFT_APPLIANCES.dishwasher\r\n || shape.subType === SQFT_APPLIANCES.iceMachine\r\n || shape.subType === SQFT_APPLIANCES.oven\r\n || shape.subType === SQFT_APPLIANCES.stovetop\r\n || shape.subType === SQFT_APPLIANCES.trashCompactor\r\n || shape.subType === SQFT_APPLIANCES.wineFridge\r\n)}\r\n\r\nexport const getIsShapePlacedOnTheWall = (shape) => {\r\n return (shape.partId === SHAPE_PART_ID.upper_cabinet_boxes\r\n || shape.parentPartId === SHAPE_PART_ID.upper_cabinet_boxes\r\n || shape.subType === SQFT_APPLIANCES.hood\r\n)}\r\n","import React from \"react\";\r\n\r\nexport const SaveIcon = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n};\r\n\r\nexport const ProductsIconAnimated = () => (\r\n \r\n icon-forklift\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const TimingIconAnimated = () => (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n);\r\n\r\nexport const EditIcon = (props) => (\r\n \r\n \r\n \r\n);\r\n\r\nexport const EyeBallIcon = (props) => (\r\n \r\n icons/EyeEnabledOn\r\n Created with Sketch.\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const ScreenshotIcon = (props) => (\r\n \r\n icon-screenshot@2x\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const PlusIcon = (props) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const LookLayoutIcon = (props) => (\r\n \r\n \r\n \r\n);\r\n\r\n\r\nexport const LookExitIcon = (props) => (\r\n \r\n \r\n \r\n);\r\n\r\nexport const LookCoBrowseIcon = (props) => (\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const LookShareIcons = {\r\n facebook: ,\r\n pinterest: (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n // twitter: ,\r\n};\r\n\r\nexport const LookExpandIcon = () => (\r\n \r\n);\r\n\r\nexport const LookMinimizeIcon = () => (\r\n \r\n);\r\n\r\nexport const LookCartIcon = () => (\r\n \r\n);\r\n\r\nexport const LookRoomIdeasIcon = () => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const Look3DIcon = () => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const LookAugmentRealityIcon = () => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const LookIconHover = () => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const LookIconNavigate = () => (\r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const LookIntroIcon = () => (\r\n \r\n \r\n \r\n \r\n)\r\n\r\nexport const groheIcon = (\r\n \r\n {/**/}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n)\r\n\r\nexport const AmericanStandardIcon = (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n)\r\n\r\nexport const GroheListIcon = () => (\r\n \r\n)\r\n\r\nexport const GroheFilterIcon = () => (\r\n \r\n \r\n \r\n)\r\n\r\nexport const GroheGridIcon = () => (\r\n \r\n)\r\n\r\nexport const GroheArchitectureIcon = () => (\r\n \r\n \r\n \r\n)\r\n\r\nexport const GroheLockIcon = () => (\r\n // \r\n \r\n // />\r\n // \r\n)\r\n\r\nexport const GroheLockIconSmall = () => (\r\n // \r\n \r\n // \r\n)\r\nexport const GroheNoteAddIcon = () => (\r\n \r\n \r\n \r\n)\r\n\r\nexport const GroheBoxIcon = () => (\r\n \r\n \r\n \r\n \r\n \r\n)\r\n\r\nexport const GroheVehicleIcon = () => (\r\n \r\n)\r\n\r\nexport const GroheDownloadIcon = () => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n)\r\n\r\nexport const GroheSQFTIcon = () => (\r\n \r\n \r\n \r\n)\r\nexport const GroheInkPenIcon = () => (\r\n \r\n \r\n \r\n)\r\n","import * as types from \"./actionTypes\";\r\nimport {getCurrentLayout} from \"../bvcomponents/appLayout\";\r\nimport {getBvFeatures} from \"../api/server-api\";\r\nimport {IS_QKB_UI} from \"../config\";\r\nimport {\r\n changeWizardValuesToUseNewGroups,\r\n getConflictingWizardSteps, getNextWizardSteps,\r\n getWizardVisualizerType, isSameVisualizerWizard, switchCartItemsToNewWizardGroups\r\n} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\nimport {getUpdatedAllWizardValues} from \"../reducers/wizardReducer\";\r\nimport {changeAllCartItems} from \"./shoppingCartFunctions\";\r\nimport {navItemIsExcluded} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\n\r\nexport const setWizardIsActive = (wizardIsActive, visualizerType) => ({\r\n type: types.SET_WIZARD_IS_ACTIVE,\r\n payload: {wizardIsActive, visualizerType}\r\n});\r\n\r\nexport const setWizardConfig = (wizardConfig) => ({\r\n type: types.SET_WIZARD_CONFIG,\r\n payload: {wizardConfig}\r\n});\r\n\r\nexport const setWizardList = (wizardList) => ({\r\n type: types.SET_WIZARD_LIST,\r\n payload: {wizardList}\r\n});\r\n\r\nexport const setWizardActiveItem = (wizardActiveItem, quoteIndex = null) => {\r\n return (dispatch, getState) => {\r\n const {quotesState} = getState();\r\n\r\n dispatch({\r\n type: types.SET_WIZARD_ACTIVE_ITEM,\r\n payload: {\r\n wizardActiveItem,\r\n quoteIndex: Number.isInteger(quoteIndex) ? quoteIndex : quotesState.activeQuoteIndex,\r\n }\r\n })\r\n }\r\n};\r\n\r\nexport const setWizardShowFeatureSection = (wizardShowFeatureSection) => ({\r\n type: types.SET_WIZARD_SHOW_FEATURE_SECTION,\r\n payload: {wizardShowFeatureSection}\r\n});\r\n\r\nexport const setWizardActiveStep = (wizardActiveStep, currentWizardItem = null, currentQuoteIndex = null) => {\r\n return (dispatch, getState) => {\r\n const {quotesState, wizardState} = getState();\r\n\r\n const quoteIndex = Number.isInteger(currentQuoteIndex) ? currentQuoteIndex : quotesState.activeQuoteIndex;\r\n const wizardItem = currentWizardItem || wizardState.wizardActiveItem;\r\n\r\n let wizardConflictingSteps = wizardState.wizardConflictingSteps;\r\n let newWizValues = Object.assign({}, wizardState.wizardSelectedValues);\r\n if (!IS_QKB_UI) {\r\n Object.keys(wizardState.wizardSelectedValues).reverse().forEach(selectedKeyNumber => { // erase conflicting selected steps!\r\n if (selectedKeyNumber > wizardActiveStep) {\r\n delete newWizValues[selectedKeyNumber]\r\n }\r\n });\r\n }\r\n if (wizardState.wizardConflictingSteps.length) {\r\n wizardConflictingSteps = [];\r\n }\r\n let allWizardsValues = wizardState.allWizardsValues;\r\n if (wizardItem) {\r\n allWizardsValues = wizardState.allWizardsValues.map(wizObject => {\r\n if (wizObject.wizardItemId === wizardItem.id && wizObject.quoteIndex === quoteIndex\r\n && isSameVisualizerWizard(wizObject)) {\r\n wizObject.lastVisitedStep = wizardActiveStep // keep it up to date to be able to restore\r\n if (wizardState.wizardConflictingSteps.length) {\r\n wizObject.wizardSelectedValues = Object.assign({}, newWizValues)\r\n }\r\n }\r\n return wizObject\r\n })\r\n }\r\n\r\n dispatch({\r\n type: types.SET_WIZARD_ACTIVE_STEP,\r\n payload: {\r\n wizardActiveStep,\r\n wizardSelectedValues: newWizValues,\r\n wizardConflictingSteps,\r\n allWizardsValues,\r\n quoteIndex,\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport const clearWizardSelectedValue = (neededStep, currentWizardItem = null, currentQuoteIndex = null) => {\r\n return (dispatch, getState) => {\r\n const {quotesState, wizardState} = getState();\r\n\r\n const quoteIndex = Number.isInteger(currentQuoteIndex) ? currentQuoteIndex : quotesState.activeQuoteIndex;\r\n const wizardItem = currentWizardItem || wizardState.wizardActiveItem;\r\n\r\n let newWizValues = Object.assign({}, wizardState.wizardSelectedValues);\r\n Object.keys(wizardState.wizardSelectedValues).forEach(selectedKeyNumber => { // erase conflicting selected steps!\r\n if (+selectedKeyNumber === +neededStep) {\r\n delete newWizValues[selectedKeyNumber]\r\n }\r\n });\r\n let allWizardsValues = wizardState.allWizardsValues;\r\n if (wizardItem) {\r\n allWizardsValues = wizardState.allWizardsValues.map(wizObject => {\r\n if (wizObject.wizardItemId === wizardItem.id && wizObject.quoteIndex === quoteIndex\r\n && isSameVisualizerWizard(wizObject)) {\r\n if (wizardState.wizardConflictingSteps.length) {\r\n wizObject.wizardSelectedValues = Object.assign({}, newWizValues)\r\n }\r\n }\r\n return wizObject\r\n })\r\n }\r\n\r\n dispatch({\r\n type: types.SET_WIZARD_SELECTED_VALUES,\r\n payload: {\r\n wizardSelectedValues: newWizValues,\r\n allWizardsValues,\r\n quoteIndex,\r\n wizardConflictingSteps: wizardState.wizardConflictingSteps\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport const setWizardSelectedValues = (wizardSelectedValues, direct = false, wizardItem = null, currentQuoteIndex = null) => {\r\n return (dispatch, getState) => {\r\n const {quotesState, wizardState, cartState, fabricatorState} = getState();\r\n const {cartItems} = cartState;\r\n const wizardActiveItem = wizardItem || wizardState.wizardActiveItem;\r\n const quoteIndex = Number.isInteger(currentQuoteIndex) ? currentQuoteIndex : quotesState.activeQuoteIndex;\r\n\r\n let wizardConflictingSteps = wizardState.wizardConflictingSteps;\r\n\r\n if (!direct && Object.keys(wizardSelectedValues).length === 1) {\r\n const currentStep = Object.keys(wizardSelectedValues)[0];\r\n if (currentStep) {\r\n const wizardGroup = wizardSelectedValues[currentStep].wizardGroup;\r\n const selectedFeature = wizardSelectedValues[currentStep].selectedFeature;\r\n if (wizardGroup && wizardGroup.mergedGroups && selectedFeature) {\r\n const realWizardGroup = wizardGroup.mergedGroups.find(wizG => !navItemIsExcluded({part: selectedFeature}, wizG));\r\n if (realWizardGroup) {\r\n if ((realWizardGroup.id !== wizardSelectedValues[currentStep].wizardGroup.id)) {\r\n wizardSelectedValues[currentStep].wizardGroup = Object.assign({}, wizardGroup, {\r\n id: realWizardGroup.id\r\n });\r\n // console.log(\"accurateWizardGroup!\", wizardSelectedValues[currentStep].wizardGroup);\r\n }\r\n } else {\r\n console.log(\"how is that possible? wizardGroup.mergedGroups\", wizardGroup.mergedGroups, selectedFeature);\r\n }\r\n }\r\n }\r\n }\r\n\r\n let newWizValues = direct\r\n ? Object.assign({}, wizardSelectedValues)\r\n : Object.assign({}, wizardState.wizardSelectedValues, wizardSelectedValues);\r\n\r\n // console.log(\"newWizValues\", newWizValues);\r\n\r\n if (IS_QKB_UI && fabricatorState.settings.checkout && cartItems.length && !direct\r\n && wizardSelectedValues && Object.keys(wizardSelectedValues).length === 1) {\r\n\r\n const currentStep = +Object.keys(wizardSelectedValues)[0];\r\n const commonObject = {wizardActiveItem, quoteIndex, wizardSelectedValues};\r\n let newWizardSteps = getNextWizardSteps(wizardActiveItem, currentStep, newWizValues);\r\n\r\n // console.log(\"newWizardSteps\", newWizardSteps);\r\n // here we replace cartItems to match new selections! to prevent conflicting\r\n let {updatedWizardValues, shouldReassignValues} = changeWizardValuesToUseNewGroups(newWizValues, newWizardSteps);\r\n if (shouldReassignValues) {\r\n newWizValues = updatedWizardValues;\r\n // create new steps according to new values\r\n newWizardSteps = getNextWizardSteps(wizardActiveItem, currentStep, newWizValues);\r\n // console.log(\"newWizardSteps2!\", newWizardSteps);\r\n }\r\n // here we replace cartItems to match new selections! to prevent conflicting\r\n let {newCartItems, shouldReassign} = switchCartItemsToNewWizardGroups(\r\n newWizardSteps,\r\n commonObject,\r\n cartItems,\r\n );\r\n if (shouldReassign) {\r\n dispatch(changeAllCartItems([...newCartItems]))\r\n }\r\n\r\n wizardConflictingSteps = getConflictingWizardSteps(\r\n newWizValues,\r\n commonObject,\r\n newCartItems,\r\n newWizardSteps,\r\n );\r\n }\r\n\r\n if (wizardActiveItem) {\r\n // console.log(\"wizardConflictingSteps\", action.payload.wizardConflictingSteps);\r\n // this works for QKB UI only for now, we are not using it on lixil\r\n const allWizardsValues = wizardConflictingSteps.length // do not change them to be able to restore when wizard is closed\r\n ? wizardState.allWizardsValues\r\n : getUpdatedAllWizardValues(wizardState, quoteIndex, wizardActiveItem.id, newWizValues);\r\n\r\n dispatch({\r\n type: types.SET_WIZARD_SELECTED_VALUES,\r\n payload: {\r\n quoteIndex,\r\n wizardSelectedValues: newWizValues,\r\n allWizardsValues,\r\n wizardConflictingSteps\r\n }\r\n });\r\n\r\n return;\r\n }\r\n\r\n dispatch({\r\n type: types.SET_WIZARD_SELECTED_VALUES,\r\n payload: {\r\n wizardSelectedValues: newWizValues,\r\n wizardConflictingSteps,\r\n // direct,\r\n quoteIndex,\r\n // wizardActiveItem: wizardItem || wizardState.wizardActiveItem,\r\n // fabricatorState,\r\n // cartItems: cartState.cartItems\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport const setAllWizardSelectedValues = (wizardSelectedValues, quoteIndex, wizardItemId) => ({\r\n type: types.SET_ALL_WIZARD_SELECTED_VALUES,\r\n payload: {wizardSelectedValues, quoteIndex, wizardItemId}\r\n});\r\n\r\nconst getMissingWizardValuesFeatures = async (compressedAllWizardsValues) => {\r\n\r\n const missingFeatures = {};\r\n\r\n // 1) find missing features;\r\n compressedAllWizardsValues.forEach(wizardObject => {\r\n\r\n const visualizerType = getWizardVisualizerType(wizardObject, true);\r\n const layout = getCurrentLayout(visualizerType);\r\n\r\n if (!missingFeatures[visualizerType]) {\r\n missingFeatures[visualizerType] = [];\r\n }\r\n\r\n Object.keys(wizardObject.wizardSelectedValues).forEach(stepIndex => {\r\n const compressedFeature = wizardObject.wizardSelectedValues[stepIndex].selectedFeature;\r\n if (compressedFeature) {\r\n const featureGroup = layout.getFeatureGroupByPartId(compressedFeature.partId);\r\n if (!featureGroup && !missingFeatures[visualizerType].includes(compressedFeature.dbFeatureId)) {\r\n missingFeatures[visualizerType].push(compressedFeature.dbFeatureId);\r\n return\r\n }\r\n const loadedFeature = layout.getLoadedFeatureById(compressedFeature.dbFeatureId, featureGroup);\r\n if (!loadedFeature && !missingFeatures[visualizerType].includes(compressedFeature.dbFeatureId)) {\r\n missingFeatures[visualizerType].push(compressedFeature.dbFeatureId);\r\n }\r\n }\r\n });\r\n })\r\n\r\n // 2) get missing features from the backend;\r\n for (let visualizerType of Object.keys(missingFeatures)) {\r\n if (missingFeatures[visualizerType].length) {\r\n // loaderEnable();\r\n const featuresFromJob = await getBvFeatures(missingFeatures[visualizerType]);\r\n if (featuresFromJob && featuresFromJob.data) {\r\n // console.log(\"featuresFromJob\", featuresFromJob.data);\r\n const layout = getCurrentLayout(visualizerType);\r\n layout.loadNewFeatures(featuresFromJob.data);\r\n }\r\n // loaderDisable();\r\n }\r\n }\r\n return Promise.resolve()\r\n}\r\nconst getRestoredWizardValues = (compressedAllWizardsValues, wizardList) => {\r\n\r\n // 3) now we can set the values\r\n let allWizardsValues = [];\r\n compressedAllWizardsValues.forEach(wizardObject => {\r\n let wizardValues = {};\r\n const wizardItem = wizardList.find(wizItem => wizItem.id === wizardObject.wizardItemId);\r\n if (!wizardItem) {\r\n console.log(\"hmmm, it looks like the wizard was deleted, but it was active in the job\", wizardObject);\r\n return\r\n }\r\n\r\n const visualizerType = getWizardVisualizerType(wizardObject, true);\r\n const layout = getCurrentLayout(visualizerType);\r\n\r\n Object.keys(wizardObject.wizardSelectedValues).forEach(stepIndex => {\r\n\r\n const selectedWizardObject = Object.assign({}, wizardObject.wizardSelectedValues[stepIndex]);\r\n\r\n //3.1) copy all other values\r\n wizardValues[stepIndex] = selectedWizardObject.wizardGroup ? Object.assign({}, selectedWizardObject, {\r\n wizardGroup: Object.assign({}, selectedWizardObject.wizardGroup, {\r\n mergedGroups: selectedWizardObject.wizardGroup.mergedGroups ? [] : null\r\n })\r\n }) : Object.assign({}, selectedWizardObject)\r\n\r\n //3.2) update wizardGroup with all excluded features\r\n if (selectedWizardObject.wizardGroup) {\r\n const realWizardGroup = wizardItem.wizardGroups.find(wizGroup => wizGroup.id === selectedWizardObject.wizardGroup.id);\r\n if (realWizardGroup) {\r\n wizardValues[stepIndex].wizardGroup = realWizardGroup;\r\n } else {\r\n console.log(\"wizard was changed, wizard group not found\", selectedWizardObject.wizardGroup);\r\n wizardValues[stepIndex] = {};\r\n }\r\n if (selectedWizardObject.wizardGroup.mergedGroups && realWizardGroup) {\r\n selectedWizardObject.wizardGroup.mergedGroups.forEach(compressedWG => {\r\n const foundWg = wizardItem.wizardGroups.find(wizGroup => {\r\n return wizGroup.id === compressedWG.id && wizGroup.groupName === compressedWG.groupName\r\n });\r\n if (foundWg) {\r\n if (!wizardValues[stepIndex].wizardGroup.mergedGroups) {\r\n wizardValues[stepIndex].wizardGroup.mergedGroups = [];\r\n }\r\n wizardValues[stepIndex].wizardGroup.mergedGroups.push(Object.assign({}, foundWg, {mergedGroups: null})); // to prevent circular\r\n } else {\r\n console.log(\"WIZARD WAS CHANGED, merged wizard group can't be found!\", );\r\n }\r\n })\r\n }\r\n }\r\n\r\n //3.3) update selectedFeature\r\n if (selectedWizardObject.selectedFeature) {\r\n const featureGroup = layout.getFeatureGroupByPartId(selectedWizardObject.selectedFeature.partId);\r\n wizardValues[stepIndex].selectedFeature = featureGroup\r\n ? layout.getLoadedFeatureById(selectedWizardObject.selectedFeature.dbFeatureId, featureGroup)\r\n : null;\r\n }\r\n });\r\n allWizardsValues.push(Object.assign({}, wizardObject, {wizardSelectedValues: wizardValues}));\r\n })\r\n console.log(\"restoring allWizardsValues:\", allWizardsValues);\r\n return allWizardsValues\r\n}\r\n\r\nexport const updateAllWizardValues = (allWizardsValues) => ({\r\n type: types.RESTORE_ALL_WIZARD_SELECTED_VALUES,\r\n payload: {allWizardsValues}\r\n})\r\n\r\nexport const restoreAllWizardSelectedValues = (compressedAllWizardsValues) => {\r\n return async (dispatch, getState) => {\r\n const {wizardState} = getState();\r\n await getMissingWizardValuesFeatures(compressedAllWizardsValues);\r\n const valuesToRestore = getRestoredWizardValues(compressedAllWizardsValues, wizardState.wizardList);\r\n dispatch(updateAllWizardValues(valuesToRestore));\r\n }\r\n}\r\n\r\nexport const setWizardMissingFeatures = (groupName = \"\", wizardMissingFeatures = []) => ({\r\n type: types.SET_WIZARD_MISSING_FEATURES,\r\n payload: {\r\n groupName,\r\n wizardMissingFeatures\r\n }\r\n});\r\n\r\nexport const setWizardConflictPopupOpened = (wizardConflictPopupOpened) => ({\r\n type: types.SET_WIZARD_CONFLICT_POPUP_OPENED,\r\n payload: {wizardConflictPopupOpened}\r\n});\r\n\r\nexport const setWizardConflictSteps = (wizardConflictingSteps) => ({\r\n type: types.SET_WIZARD_CONFLICT_STEPS,\r\n payload: {wizardConflictingSteps}\r\n});\r\n\r\nexport const setWizardSqftCartItems = (wizardSqftCartItems) => ({\r\n type: types.SET_WIZARD_SQFT_CART_ITEMS,\r\n payload: {wizardSqftCartItems}\r\n});\r\n","import isEqual from \"lodash/isEqual\";\r\n\r\nimport {getFeatureIsActive, getFeatureParent, getSkuWithoutDot, isInStock} from \"./lookFunctions2\";\r\nimport {LOOK_NAVIGATION_LIST_TYPES, LOOK_WALLS_ONLY, METADATA} from \"../core/constants\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {getFeatureCost, getFeatureIsLocked, isIframe} from \"../../../misc/helpers\";\r\nimport store from \"../../../store\";\r\nimport {getFilterGroupValue, getFilterGroupValues} from \"../../../misc/utils\";\r\nimport {getFeatureOptions} from \"./lookFunctions\";\r\nimport {Vanity} from \"../core/parts/vanity\";\r\nimport {setLookWallsApplyTo} from \"../../../actions/lookFunctions\";\r\nimport {CABINET_GROUP, COUNTERTOP_GROUP, EDGE_GROUP} from \"../../kvComponent/core/constants\";\r\nimport {\r\n setCabinetsApplyTo, setCabinetsApplyToBathroom,\r\n setCountertopsApplyTo,\r\n setCountertopsApplyToBathroom, setEdgesApplyTo, setApplyToCommon\r\n} from \"../../../actions/navigationFunctions\";\r\nimport CountertopSwitchers from \"../../kvComponent/navigation/countertopSwitchers\";\r\nimport CabinetSwitchers from \"../../kvComponent/navigation/cabinetSwitchers\";\r\nimport Config, {getCommonVisualizerType} from \"../../../config\";\r\nimport {\r\n CABINET_GROUP_BATHROOM,\r\n COUNTERTOP_GROUP_BATHROOM,\r\n HANDLES_GROUP_BATHROOM, SHOWER_FLOOR_GROUP_BATHROOM\r\n} from \"../../bvSceneComponent/core/constants\";\r\nimport {loaderDisable, loaderEnable} from \"../../ui/loaderView\";\r\nimport {updateCanvasCount} from \"../../../actions/actionFunctions\";\r\nimport {getBvGroupFeatures} from \"../../../api/server-api\";\r\nimport {getAdditionalFeaturesOnScroll} from \"../../../api/look-api\";\r\n\r\nconst getFeaturePropertyToSort = (navItem, property) => {\r\n if (property === \"name\") {\r\n return navItem.part.getFeatureName()\r\n }\r\n if (property === \"SortPositionNum\") {\r\n return navItem.part.metaData[property] || 99999;\r\n }\r\n return navItem.part[property];\r\n}\r\n\r\nconst getNavItemsSortedByProperty = (navItems, property, property2) => {\r\n const order = \"asc\";\r\n // console.log(\"navItems - navItems\", navItems);\r\n navItems = navItems.sort((a,b) => {\r\n let prop1 = getFeaturePropertyToSort(a, property);\r\n let prop2 = getFeaturePropertyToSort(b, property);\r\n let prop3 = getFeaturePropertyToSort(a, property2);\r\n let prop4 = getFeaturePropertyToSort(b, property2);\r\n return order === \"asc\"\r\n ? (prop1 > prop2) ? 1 : (prop1 < prop2) ? -1 : (prop3 > prop4) ? 1 : (prop3 < prop4) ? -1 : 0\r\n : (prop1 < prop2) ? 1 : (prop1 > prop2) ? -1 : (prop3 < prop4) ? 1 : (prop3 > prop4) ? -1 : 0\r\n })\r\n // console.log(\"navItems\", navItems);\r\n return navItems\r\n};\r\n\r\n/**\r\n * sorts navItems\r\n * @param navItems {[object]}\r\n * @param isQuotingTool {boolean}\r\n * @returns {[object]}\r\n */\r\nexport const getSortedNavItems = (navItems, isQuotingTool = false) => {\r\n const {fabricatorState, userState} = store.getState();\r\n const {isPhoneNumberValidated} = userState;\r\n const fabricatorSettings = fabricatorState.settings;\r\n\r\n if ((fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) && !isPhoneNumberValidated) {\r\n const unLockedFeatures = navItems\r\n .filter(navItem => !getFeatureIsLocked(navItem.part))\r\n .map(navItem => {\r\n navItem.part.featurePrice = getFeatureCost(navItem.part, 1);\r\n return navItem\r\n })\r\n const lockedFeatures = navItems\r\n .filter(navItem => getFeatureIsLocked(navItem.part))\r\n .map(navItem => {\r\n navItem.part.featurePrice = getFeatureCost(navItem.part, 1);\r\n return navItem\r\n })\r\n navItems = fabricatorSettings.showPricing ? [\r\n ...getNavItemsSortedByProperty(unLockedFeatures, \"featurePrice\", \"name\"),\r\n ...getNavItemsSortedByProperty(lockedFeatures, \"featurePrice\", \"name\")\r\n ] : [...unLockedFeatures, ...lockedFeatures];\r\n } else if (navItems[0] && navItems[0].part.partId === \"crown_molding\" && navItems[0].part.getParent().sortNavigationItems) {\r\n navItems = navItems[0].part.getParent().sortNavigationItems(navItems);\r\n } else if (fabricatorSettings.showPricing && !fabricatorState.hideCheckoutBreakdownCost && !fabricatorState.hidePricesFromUser) {\r\n navItems = navItems.map(navItem => {\r\n navItem.part.featurePrice = getFeatureCost(navItem.part, 1);\r\n return navItem\r\n })\r\n navItems = getNavItemsSortedByProperty(navItems, \"featurePrice\", \"name\")\r\n } else {\r\n const propertyToSort = navItems.some(navItem => navItem.part.metaData[\"SortPositionNum\"]) ? \"SortPositionNum\" : \"name\";\r\n navItems = getNavItemsSortedByProperty(navItems, propertyToSort, \"\");\r\n navItems = navItems.sort((a, b) => isInStock(b.part) - isInStock(a.part));\r\n if (!isQuotingTool && navItems.some(navItem => navItem.part.useMatchesFailedNavigation)) {\r\n navItems = getNavItemsSortedByProperty(navItems, \"matchesMetaFailed\");\r\n }\r\n }\r\n if (isQuotingTool) {\r\n // navItems = getNavItemsSortedByProperty(navItems, \"notAvailableInVisualizer\", \"_customDisplayName\")\r\n const inVisFeatures = navItems.filter(navFeature => !navFeature.part.notAvailableInVisualizer);\r\n const notInVisFeatures = navItems.filter(navFeature => navFeature.part.notAvailableInVisualizer);\r\n navItems = [\r\n ...inVisFeatures,\r\n // ...getNavItemsSortedByProperty(notInVisFeatures, \"featurePrice\", \"name\")\r\n ...notInVisFeatures\r\n ];\r\n }\r\n return navItems\r\n};\r\n\r\n/**\r\n * reorder features, places selected and similar walls on the beginning\r\n * @param navItems {[object]}\r\n * @param lookActiveFeature {featureInterface}\r\n * @param lookActiveCategory {string}\r\n * @param featureGroup {featureGroupInterface}\r\n * @param isQuotingTool {boolean}\r\n * @param needToReplaceActiveFeature {boolean}\r\n * @returns {[object]}\r\n */\r\nexport const getReorderedItems = (\r\n navItems,\r\n lookActiveFeature,\r\n lookActiveCategory,\r\n featureGroup,\r\n isQuotingTool,\r\n needToReplaceActiveFeature = true\r\n) => {\r\n\r\n navItems = navItems.filter(feature => feature)//todo not sure why, but we in some cases have [undefined, item, item, item, undefined, undefined] etc... //need to fix this\r\n\r\n // let activeNavItem, activeNavItemIndex;\r\n const parentFeatureGroup = featureGroup || getFeatureParent(lookActiveFeature, lookActiveCategory);\r\n if (!parentFeatureGroup) {\r\n return navItems\r\n }\r\n const navItemsToChange = [];\r\n if (needToReplaceActiveFeature) {\r\n const activeNavItem = navItems.find(navItem => {\r\n if (!navItem) {\r\n return false\r\n }\r\n return getFeatureIsActive(navItem.part, lookActiveFeature, lookActiveCategory, featureGroup)\r\n })\r\n if (activeNavItem) {\r\n navItemsToChange.push(activeNavItem);\r\n }\r\n }\r\n const isWalls = LOOK_WALLS_ONLY.includes(parentFeatureGroup.partId);\r\n if (isWalls) {\r\n const layout = getCurrentLayout();\r\n const stoneFeatures = layout.getStonesActiveFeatures();\r\n // console.log(\"stoneFeatures\", stoneFeatures);\r\n\r\n stoneFeatures.forEach(cartItem => { // yes, the getStonesActiveFeatures method returns cat item objects for some reason :facepalm:\r\n if (cartItem && cartItem.cartFeature) {\r\n const stoneName = cartItem.cartFeature.getSplittedFeatureName();\r\n if (!navItemsToChange.some(navItem => navItem.part.getSplittedFeatureName() === stoneName)) {\r\n const existingInNavItems = navItems.find(navItem => navItem.part.getSplittedFeatureName() === stoneName);\r\n if (existingInNavItems) {\r\n navItemsToChange.unshift(existingInNavItems) // push to beginning\r\n }\r\n }\r\n }\r\n })\r\n }\r\n // console.log(\"navItemsToChange\", navItemsToChange);\r\n const sorted = getSortedNavItems(navItems, isQuotingTool);\r\n navItemsToChange.forEach((nItemToChange) => {\r\n const currentIndex = sorted.findIndex(navItem => navItem.part.dbFeature.id === nItemToChange.part.dbFeature.id)\r\n if (currentIndex > -1) {\r\n sorted.splice(currentIndex, 1);\r\n sorted.splice(0, 0, nItemToChange);\r\n }\r\n });\r\n // console.log(\"sorted\", sorted);\r\n return sorted\r\n\r\n};\r\n\r\n/**\r\n * Checks if list feature is currently active\r\n * @param navItems {[navItemInterface]}\r\n // * @param filterGroups {[filterGroupInterface]}\r\n * @returns {[navItemInterface]}\r\n */\r\nexport const getReplacedNavItemsWithUnlockedFeatures = (navItems) => {\r\n const {pricingLocked} = pricingIsLocked();\r\n if (!pricingLocked) {\r\n return navItems\r\n }\r\n\r\n return navItems.map(navItem => {\r\n if (!getFeatureIsLocked(navItem.part)) {\r\n return navItem\r\n }\r\n // const colorOptions = getFeatureOptions(navItem.part, filterGroups); // removed to optimize running getNavItems function multiple times\r\n // if needed - we can pass navItems to this function\r\n if (!navItem.colorOptions) {\r\n return navItem\r\n }\r\n const unlockedOption = navItem.colorOptions.find(option => {\r\n if (!option.feature) {\r\n return false\r\n }\r\n if (option.feature.dbFeature.id === navItem.part.dbFeature.id) {\r\n return false\r\n }\r\n return !getFeatureIsLocked(option.feature)\r\n })\r\n if (unlockedOption && !navItems.some(nItem => nItem.part.dbFeature.id === navItem.part.dbFeature.id)) {\r\n return {part: unlockedOption.feature}\r\n }\r\n return navItem\r\n })\r\n}\r\n\r\n/**\r\n * Checks if list feature is currently active\r\n * @param navItems {[navItemInterface]}\r\n * @returns {array}\r\n */\r\nexport const getDesignRecommendedNavItems = (navItems) => {\r\n\r\n const {filterState, bathroomVisualizerState} = store.getState();\r\n const {filterGroups} = filterState;\r\n const {activePreset} = bathroomVisualizerState;\r\n\r\n const desRecFilterGroup = filterGroups.find(group => group.name === \"Designer Recommended\");\r\n\r\n if (!desRecFilterGroup) {\r\n return []\r\n }\r\n\r\n return navItems.filter(navItem => {\r\n // if (navItem.part.dbFeature.sharedFeatureName === \"23486BEA\") {\r\n // debugger;//eslint-disable-line\r\n // }\r\n const desRecFeature = getFilterGroupValues(navItem.part, desRecFilterGroup);\r\n const desRecColorFeatures = getFeatureOptions(navItem.part, filterGroups, false, navItem.colorOptions || []);\r\n const desRecValues = [\r\n ...(desRecFeature || []),\r\n ...(desRecColorFeatures || []).map(colorOption => {\r\n return getFilterGroupValues(colorOption.feature, desRecFilterGroup)\r\n })\r\n ];\r\n return desRecValues && desRecValues.some(desRecValue => {\r\n if (Array.isArray(desRecValue)) {\r\n return desRecValue.some(filterId => {\r\n const filterValueObject = getFilterGroupValue(filterId, desRecFilterGroup);\r\n return filterValueObject && (+filterValueObject.value === activePreset)\r\n })\r\n }\r\n const filterValueObject = getFilterGroupValue(desRecValue, desRecFilterGroup);\r\n return filterValueObject && (+filterValueObject.value === activePreset)\r\n })\r\n });\r\n}\r\n\r\n/**\r\n * reorder features, places selected and similar walls on the beginning\r\n * @param navItems {[navItemInterface]}\r\n * @param lookActiveFeature {featureInterface}\r\n * @returns {[navItemsListInterface]}\r\n */\r\nexport const getNavigationItemsLists = (navItems, lookActiveFeature) => {\r\n\r\n if (!navItems.length) {\r\n return [{\r\n type: LOOK_NAVIGATION_LIST_TYPES.regular,\r\n navItems: [],\r\n }]\r\n }\r\n\r\n let navItemsList = [];\r\n\r\n const designRecommended = getDesignRecommendedNavItems(navItems);\r\n if (designRecommended.length) {\r\n navItemsList.push({\r\n type: LOOK_NAVIGATION_LIST_TYPES.designRec,\r\n navItems: getSortedNavItems(designRecommended),\r\n })\r\n }\r\n\r\n const others = designRecommended.length ? navItems.filter(navItem => {\r\n return designRecommended.every(designNavItem => designNavItem.part.dbFeature.id !== navItem.part.dbFeature.id)\r\n }) : navItems;\r\n\r\n if (!navItems[0]) { // some unexpected case\r\n return navItemsList\r\n }\r\n\r\n const featureGroup = navItems[0].part.getParent();\r\n\r\n switch (featureGroup.partId) {\r\n case \"vanity_faucet\": {\r\n const regularFeatures = {\r\n type: LOOK_NAVIGATION_LIST_TYPES.regular,\r\n navItems: [],\r\n };\r\n const vanityParent = featureGroup.getParent();\r\n const sinkParent = vanityParent.sink;\r\n\r\n others.forEach(navItem => {\r\n if (!sinkParent || !sinkParent.activeFeature || !navItem.part.metaData.MountHoles\r\n || (lookActiveFeature && isEqual(navItem.part.metaData.MountHoles, lookActiveFeature.metaData.MountHoles))) {\r\n if (!regularFeatures.navTranslate && navItem.part.metaData.MountHoles) {\r\n regularFeatures.navTranslate = \"look.features.other.faucet.\" + navItem.part.metaData.MountHoles[0]\r\n }\r\n regularFeatures.navItems.push(navItem);\r\n } else if (navItem.part.metaData.MountHoles) {\r\n const existingNonMatchingList = navItemsList.find(navItemsObject => {\r\n return navItemsObject.type === LOOK_NAVIGATION_LIST_TYPES.notMatchingMeta && navItemsObject.notMatchingMetaName === navItem.part.metaData.MountHoles[0];\r\n });\r\n if (existingNonMatchingList) {\r\n existingNonMatchingList.navItems.push(navItem)\r\n } else {\r\n navItemsList.push({\r\n type: LOOK_NAVIGATION_LIST_TYPES.notMatchingMeta,\r\n notMatchingMetaName: navItem.part.metaData.MountHoles[0],\r\n navItems: [navItem],\r\n navTranslate: \"look.features.other.faucet.\" + navItem.part.metaData.MountHoles[0]\r\n });\r\n }\r\n }\r\n })\r\n navItemsList.push(regularFeatures);\r\n break;\r\n }\r\n default: {\r\n navItemsList.push({\r\n type: LOOK_NAVIGATION_LIST_TYPES.regular,\r\n navItems: others,\r\n });\r\n break;\r\n }\r\n }\r\n\r\n return navItemsList\r\n};\r\n\r\nconst getSinksWidth = (nextSink) => {\r\n let maxWidth = 0;\r\n let maxTotalWidth = 0;\r\n if (nextSink.metaData[\"MatchingFeature\"].includes(METADATA.NO)) {\r\n const parent = nextSink.getParent();\r\n Object.keys(parent.layerPositions).forEach(position => {\r\n const positionFeature = parent.layerPositions[position];\r\n if (positionFeature && positionFeature.metaData[\"SinkWidth\"]) {\r\n maxTotalWidth += positionFeature.metaData[\"SinkWidth\"];\r\n }\r\n });\r\n if (nextSink.metaData[\"SinkWidth\"]) {\r\n maxWidth = nextSink.metaData[\"SinkWidth\"]\r\n }\r\n }\r\n // console.log(\"maxWidth\", maxWidth, maxTotalWidth);\r\n return {maxWidth, maxTotalWidth}\r\n}\r\n\r\nexport const findNextVanityTypeFeature = (nextSink, nextFeatureGroup) => {\r\n if (!nextSink.metaData[\"MatchingFeature\"] || nextSink.notAvailableInVisualizer) {\r\n return null\r\n }\r\n const nextSinkSku = getSkuWithoutDot(nextSink.dbFeature.sharedFeatureName);\r\n if (nextFeatureGroup && nextFeatureGroup.activeFeature\r\n && nextSink.metaData[\"MatchingFeature\"].includes(getSkuWithoutDot(nextFeatureGroup.activeFeature.dbFeature.sharedFeatureName))) { // it is already matching! return it\r\n // cases when vanity MatchingFeature - ['0328001', '0328004', '0328008'] and sink - '0329008'\r\n if (!nextFeatureGroup.activeFeature.metaData[\"MatchingFeature\"]\r\n || (nextFeatureGroup.activeFeature.metaData[\"MatchingFeature\"]\r\n && nextFeatureGroup.activeFeature.metaData[\"MatchingFeature\"].includes(nextSinkSku))) {\r\n return nextFeatureGroup.activeFeature\r\n }\r\n }\r\n\r\n const isQCSink = nextSink.metaData[\"MatchingFeature\"].includes(METADATA.NO);\r\n const {maxWidth, maxTotalWidth} = getSinksWidth(nextSink);\r\n\r\n const allVanities = [...nextFeatureGroup.features, ...nextFeatureGroup.featuresParts];\r\n let matchingVanities = allVanities.filter(testFeature => {\r\n if (!testFeature.metaData[\"MatchingFeature\"]) {\r\n return false\r\n }\r\n if (isQCSink) {\r\n if (!testFeature.metaData[\"MatchingFeature\"].includes(METADATA.NO)) {\r\n return false\r\n }\r\n if (!testFeature.metaData[\"VanityWidth\"]) {\r\n return true // just in case\r\n }\r\n if (nextSink.metaData.layerPosition !== \"C\") { // L or R should be only on double vanity or two separate\r\n return testFeature.metaData[\"VanityWidth\"] === 64\r\n || (testFeature.metaData[\"VanityWidth\"] === 24 && testFeature.metaData[\"VanityWidth\"] > maxWidth\r\n && (testFeature.metaData[\"layerPosition\"] !== \"C\"))\r\n }\r\n if (!maxWidth) {\r\n return true\r\n }\r\n return testFeature.metaData[\"VanityWidth\"] > maxWidth\r\n }\r\n return nextSink.metaData[\"MatchingFeature\"].includes(getSkuWithoutDot(testFeature.dbFeature.sharedFeatureName))\r\n && testFeature.metaData[\"MatchingFeature\"].includes(nextSinkSku)\r\n });\r\n // console.log(\"matchingVanities\", matchingVanities);\r\n if (matchingVanities.length > 1 && nextFeatureGroup.activeFeature) {\r\n // console.log(\"matchingVanities\", matchingVanities);\r\n const currentActiveFeature = matchingVanities.find(feature => feature.dbFeature.id === nextFeatureGroup.activeFeature.dbFeature.id);\r\n if (currentActiveFeature) {\r\n return currentActiveFeature\r\n }\r\n const currentSkuFeature = matchingVanities.find(feature => feature.dbFeature.sharedFeatureName === nextFeatureGroup.activeFeature.dbFeature.sharedFeatureName);\r\n if (currentSkuFeature) {\r\n return currentSkuFeature // to test\r\n }\r\n let currentSideFeatures = matchingVanities.filter(feature => isEqual(feature.metaData[\"Side\"], nextSink.metaData[\"Side\"]));\r\n if (!currentSideFeatures.length) {\r\n currentSideFeatures = matchingVanities.filter(feature => isEqual(feature.metaData[\"Side\"], nextFeatureGroup.activeFeature.metaData[\"Side\"]));\r\n }\r\n if (isQCSink && !currentSideFeatures.length && nextSink.metaData[\"Side\"]) {\r\n if (nextSink.metaData[\"Side\"][0] === \"C\") {\r\n console.log(\"NO VANITY FEATURES WITH C METADATA FOUND\", );\r\n } else if (maxTotalWidth) {\r\n currentSideFeatures = matchingVanities.filter(feature => {\r\n return feature.metaData[\"VanityWidth\"] && feature.metaData[\"VanityWidth\"] > maxTotalWidth\r\n });\r\n console.log(\"currentSideFeatures\", currentSideFeatures);\r\n }\r\n }\r\n const sameColors = currentSideFeatures.filter(feature => feature.getColorName() === nextFeatureGroup.activeFeature.getColorName());\r\n return sameColors[0] || currentSideFeatures[0] || matchingVanities[0]\r\n }\r\n return matchingVanities[0];\r\n}\r\n\r\nconst updateNonCompatibleListWithVanity = (nextSink, nonCompatibleList = []) => {\r\n const layout = getCurrentLayout();\r\n const vanityParent = layout.parts[Vanity.id];\r\n const currentVanityTypeFeatureGroup = vanityParent.relatedItems.find(relItem => relItem.partId === vanityParent.vanity_type);\r\n\r\n if (nextSink.metaData[\"CustomVanityType\"] && nextSink.metaData[\"CustomVanityType\"].includes(vanityParent.vanity_type)) {\r\n // for example currently we have Studio S vanity Cabinet, but it will be changed to Townsend\r\n if (currentVanityTypeFeatureGroup && currentVanityTypeFeatureGroup.activeFeature && nextSink.metaData[\"MatchingFeature\"]\r\n && !nextSink.metaData[\"MatchingFeature\"].includes(getSkuWithoutDot(currentVanityTypeFeatureGroup.activeFeature.dbFeature.sharedFeatureName))) {\r\n const nextVanity = findNextVanityTypeFeature(nextSink, currentVanityTypeFeatureGroup)\r\n // console.log(\"nextVanity\", nextVanity);\r\n if (nextVanity && currentVanityTypeFeatureGroup.activeFeature.dbFeature.id !== nextVanity.dbFeature.id) {\r\n nonCompatibleList.push({\r\n from: currentVanityTypeFeatureGroup.activeFeature,\r\n to: nextVanity,\r\n })\r\n }\r\n }\r\n } else {\r\n // console.log(\"next sink is not compatible, pls check\");\r\n if (nextSink.metaData[\"MountType\"].includes(\"ST\")) {\r\n if (!nonCompatibleList.some(fromToObject => fromToObject.to && fromToObject.to.dbFeature.id === nextSink.dbFeature.id)) {\r\n nonCompatibleList.push({\r\n from: currentVanityTypeFeatureGroup ? currentVanityTypeFeatureGroup.activeFeature : nextSink.getParent().activeFeature,\r\n to: nextSink,\r\n })\r\n }\r\n } else if (nextSink.metaData[\"CustomVanityType\"]) {\r\n const nextFeatureGroup = vanityParent.relatedItems.find(relItem => relItem.partId === nextSink.metaData[\"CustomVanityType\"][0]);\r\n if (nextFeatureGroup) {\r\n const nextVanity = findNextVanityTypeFeature(nextSink, nextFeatureGroup)\r\n // console.log(\"nextVanity\", nextVanity);\r\n const fromFeature = currentVanityTypeFeatureGroup\r\n ? currentVanityTypeFeatureGroup.activeFeature\r\n : nextSink.getParent().activeFeature; // if no vanity_type - it means that standalone sink is selected\r\n if (nextVanity) {\r\n nonCompatibleList.push({\r\n from: fromFeature,\r\n to: nextVanity,\r\n })\r\n }\r\n }\r\n }\r\n }\r\n return nonCompatibleList\r\n}\r\n\r\n/**\r\n * * when clicked on feature - search for same MountHoles sink (to keep selected faucet)\r\n * @param feature {featureInterface}\r\n * @returns {featureInterface}\r\n */\r\nexport const getNextSinkOnWashstandOrConsoleChange = (feature) => {\r\n const layout = getCurrentLayout();\r\n const vanityParent = layout.parts[Vanity.id];\r\n const sinkParent = vanityParent.sink;\r\n const isQcSink = sinkParent && sinkParent.activeFeature && sinkParent.activeFeature.metaData[\"MatchingFeature\"].includes(METADATA.NO)\r\n const forSinkConditions = [{\r\n propName: \"MatchingFeature\",\r\n propValue: isQcSink ? METADATA.NO : getSkuWithoutDot(feature.dbFeature.sharedFeatureName)\r\n }, {\r\n propName: \"FeatureSku\",\r\n propValue: isQcSink ? METADATA.NO : feature.metaData[\"MatchingFeature\"]\r\n }];\r\n if (isQcSink && feature.metaData[\"VanityWidth\"]) {\r\n // QC sink, we should check width\r\n forSinkConditions.push({\r\n propName: \"SinkWidth\",\r\n propValue: feature.metaData[\"VanityWidth\"],\r\n // propData: {\r\n // layerPosition: feature.metaData.layerPosition\r\n // }\r\n })\r\n }\r\n if (sinkParent && sinkParent.activeFeature && !sinkParent.activeFeature.matchesMetaForArrayOfConditions(forSinkConditions)) {\r\n const layout = getCurrentLayout();\r\n const navItems = layout.designNavigationItems({part: sinkParent}, [], \"\", sinkParent.activeFeature);\r\n const nextAvailableSinks = navItems.filter(navItem => navItem.part.matchesMetaForArrayOfConditions(forSinkConditions));\r\n const conditionsToMatch = [{\r\n propName: \"MountHoles\",\r\n propValue: sinkParent.activeFeature.metaData[\"MountHoles\"]\r\n }];\r\n return nextAvailableSinks.length\r\n ? nextAvailableSinks.find(navItem => navItem.part.matchesMetaForArrayOfConditions(conditionsToMatch)) || nextAvailableSinks[0]\r\n : null;\r\n }\r\n return null\r\n}\r\n\r\n/**\r\n * when clicked on washstand or console - search for the same MountHoles sink (to keep selected faucet)\r\n * @param feature {featureInterface}\r\n */\r\nexport const updateSinkWithNewFeature = (feature) => {\r\n const layout = getCurrentLayout();\r\n const vanityParent = layout.parts[Vanity.id];\r\n const sinkParent = vanityParent.sink;\r\n\r\n if (sinkParent && sinkParent.activeFeature) {\r\n const nextSink = getNextSinkOnWashstandOrConsoleChange(feature);\r\n if (nextSink) {\r\n const sinkFeature = nextSink.part;\r\n if (sinkParent.layerPositions && nextSink.part.metaData.layerPosition) {\r\n Object.keys(sinkParent.layerPositions).forEach(position => {\r\n if (position === sinkFeature.metaData.layerPosition) {\r\n sinkParent.layerPositions[position] = sinkFeature\r\n } else if (sinkParent.layerPositions[position]) { // only replace existing\r\n const sameFeature = sinkParent.getMatchingPositionFeature(position, sinkFeature);\r\n sinkParent.layerPositions[position] = sameFeature || null; // if no feature found - erase previous\r\n }\r\n })\r\n }\r\n sinkParent.activeFeature = sinkFeature;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * checks if feature needs a compatability alert\r\n * @param feature {featureInterface}\r\n * @returns {array}\r\n */\r\nexport const checkForCompatabilityAlert = (feature) => {\r\n if (feature.notAvailableInVisualizer) {\r\n return []\r\n }\r\n if (document.kvConfig.visualizerType !== \"bvLook\") {\r\n if (getCommonVisualizerType() === \"kitchen\") {\r\n switch (feature.partId) {\r\n case \"edge_profile\":\r\n case \"center_island_edge\": {\r\n const matchCounterTopObject = feature.getParent().getMatchingCounterTop(feature);\r\n if (matchCounterTopObject.matchingFeature && !matchCounterTopObject.hasSameName) {\r\n const countertopParent = feature.getParent().getParent().countertop;\r\n return [{\r\n from: countertopParent.activeFeature,\r\n to: matchCounterTopObject.matchingFeature,\r\n }]\r\n }\r\n return []\r\n }\r\n default:\r\n return []\r\n }\r\n }\r\n return []\r\n }\r\n const layout = getCurrentLayout();\r\n const vanityParent = layout.parts[Vanity.id];\r\n const faucetParent = vanityParent.faucet;\r\n const sinkParent = vanityParent.sink;\r\n let nonCompatibleList = [];\r\n\r\n switch (feature.partId) {\r\n case \"vanity_faucet\": {\r\n if (!sinkParent.activeFeature || !sinkParent.activeFeature.matchesMetaForArrayOfConditions(faucetParent.getActiveFeatureConditions(feature))) {\r\n const nextSink = feature.getSinkToClickFromMatchingSinks(sinkParent.activeFeature);\r\n if (nextSink) {\r\n // console.log(\"sink nextSink\", nextSink);\r\n nonCompatibleList.push({\r\n from: sinkParent.activeFeature,\r\n to: nextSink,\r\n });\r\n nonCompatibleList = updateNonCompatibleListWithVanity(nextSink, nonCompatibleList);\r\n return nonCompatibleList\r\n }\r\n }\r\n return []\r\n }\r\n case \"vanity_sink\": {\r\n const clickedSinkConditions = sinkParent.getActiveFeatureConditions(feature);\r\n if (!faucetParent.activeFeature || !faucetParent.activeFeature.matchesMetaForArrayOfConditions(clickedSinkConditions)) {\r\n const navItems = layout.designNavigationItems({part: faucetParent}, [], \"\", faucetParent.activeFeature);\r\n const nextFaucet = navItems.find(navItem => {\r\n return navItem.part.matchesMetaForArrayOfConditions(clickedSinkConditions);\r\n });\r\n console.log(\"nextFaucet\", nextFaucet);\r\n if (nextFaucet) {\r\n nonCompatibleList.push({\r\n from: faucetParent.activeFeature,\r\n to: nextFaucet.part,\r\n });\r\n }\r\n }\r\n nonCompatibleList = updateNonCompatibleListWithVanity(feature, nonCompatibleList);\r\n return nonCompatibleList\r\n }\r\n case \"vanity_cabinet\":\r\n case \"vanity_console\":\r\n case \"vanity_washstand\": {\r\n const nextSink = getNextSinkOnWashstandOrConsoleChange(feature);\r\n if (!sinkParent.activeFeature || (nextSink && nextSink.part.dbFeature.id !== sinkParent.activeFeature.dbFeature.id)) {\r\n if (nextSink) {\r\n // console.log(\"sink nextSink\", nextSink);\r\n nonCompatibleList.push({\r\n from: sinkParent.activeFeature,\r\n to: nextSink.part,\r\n });\r\n const clickedSinkConditions = sinkParent.getActiveFeatureConditions(nextSink.part);\r\n if (!faucetParent.activeFeature || !faucetParent.activeFeature.matchesMetaForArrayOfConditions(clickedSinkConditions)) {\r\n const navItems = layout.designNavigationItems({part: faucetParent}, [], \"\", faucetParent.activeFeature);\r\n const nextFaucet = navItems.find(navItem => {\r\n return navItem.part.matchesMetaForArrayOfConditions(clickedSinkConditions);\r\n });\r\n console.log(\"nextFaucet\", nextFaucet);\r\n if (nextFaucet) {\r\n nonCompatibleList.push({\r\n from: faucetParent.activeFeature,\r\n to: nextFaucet.part,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n return nonCompatibleList\r\n }\r\n case \"shower_arm\": {\r\n const showerArmFeatureGroup = feature.getParent();\r\n const showerParent = showerArmFeatureGroup.getParent();\r\n const showerHeadParent = showerParent.showerHead;\r\n if (!showerHeadParent || !feature.metaData[\"MountPosition\"]) {\r\n return nonCompatibleList\r\n }\r\n const clickedArmConditions = showerArmFeatureGroup.getArrayOfConditions().map(condition => {\r\n if (condition.propName === \"MountPosition\") {\r\n return {\r\n propName: \"MountPosition\",\r\n propValue: feature.metaData[\"MountPosition\"],\r\n }\r\n }\r\n return condition\r\n })\r\n if (!showerHeadParent.activeFeature || !showerHeadParent.activeFeature.matchesMetaForArrayOfConditions(clickedArmConditions)) {\r\n const navItems = layout.designNavigationItems({part: showerHeadParent}, [], \"\", showerHeadParent.activeFeature);\r\n const nextFaucet = navItems.find(navItem => {\r\n return navItem.part.matchesMetaForArrayOfConditions(clickedArmConditions);\r\n });\r\n console.log(\"next shower head\", nextFaucet);\r\n if (nextFaucet) {\r\n nonCompatibleList.push({\r\n from: showerHeadParent.activeFeature,\r\n to: nextFaucet.part,\r\n });\r\n }\r\n }\r\n return nonCompatibleList\r\n }\r\n default:\r\n return nonCompatibleList\r\n }\r\n};\r\n\r\n/**\r\n * returns fabricator settings price logic\r\n * @returns {object}\r\n */\r\nexport const pricingIsLocked = () => {\r\n const {isBackend, jobId, canSaveQuote} = document.kvConfig;\r\n const {fabricatorState, userState} = store.getState();\r\n const {isPhoneNumberValidated} = userState;\r\n const fabricatorSettings = fabricatorState.settings;\r\n\r\n return {\r\n showPrice: fabricatorSettings.showPricing && !fabricatorState.hideCheckoutBreakdownCost && !fabricatorState.hidePricesFromUser,\r\n pricingLocked: fabricatorSettings.leadCapture && !(isBackend && jobId && canSaveQuote) && !isPhoneNumberValidated,\r\n clickLeadCapture: fabricatorSettings.clickLeadCapture,\r\n isLixil: isIframe() && fabricatorState.isLixil\r\n }\r\n}\r\n\r\n\r\n\r\n/**\r\n * checks features and downloads by name if they are missing\r\n * @param missingFeatures {array}\r\n * @param updateCanvas {boolean}\r\n * @param originalPartId {string}\r\n */\r\nexport const getMissingFeaturesAndClickThem = async (missingFeatures = [], updateCanvas = false, originalPartId = \"\") => {\r\n if (!missingFeatures.length) {\r\n return Promise.resolve()\r\n }\r\n window.requestInProcess = true;\r\n loaderEnable();\r\n const layout = getCurrentLayout();\r\n const wallParent = layout.parts[\"Walls\"];\r\n\r\n const pageSize = 9999;\r\n for (let missingFeatureObject of missingFeatures) {\r\n const {relatedItem, navigationItemName, requestFromBackendName} = missingFeatureObject;\r\n const dbName = relatedItem.dbName || relatedItem.partName;\r\n if (relatedItem.additionalPartPartId && wallParent && wallParent.relatedItems.some(relItem => relItem.partId === relatedItem.partId)) {\r\n const cropResponse = await getBvGroupFeatures(dbName + \" Crop\", 0, pageSize, [], requestFromBackendName || navigationItemName);\r\n if (Array.isArray(cropResponse)) {\r\n relatedItem.setGroupFeatures(cropResponse, pageSize, false, \"\", null, true, false);\r\n }\r\n }\r\n if (relatedItem.partId !== originalPartId) { // we need to check crop for current wall! but no need to request the wall itself\r\n const response = await getBvGroupFeatures(dbName, 0, pageSize, [], requestFromBackendName || navigationItemName);\r\n relatedItem.setGroupFeatures(response, pageSize, false, \"\", null, true, false);\r\n }\r\n }\r\n for (let missingFeatureObject of missingFeatures) {\r\n const {relatedItem, navigationItemName, setCurrentFeature, requestFromBackendName} = missingFeatureObject;\r\n const featureFound = layout.designNavigationItems({part: relatedItem}).find(navItem => {\r\n return navItem.part.getSplittedFeatureName() === navigationItemName\r\n });\r\n if (featureFound) {\r\n if (setCurrentFeature) {\r\n relatedItem.activeFeatureBeforeAllWalls = relatedItem.activeFeature;\r\n }\r\n featureFound.part.clickFromAllWalls(true)\r\n }\r\n if (relatedItem.partId !== originalPartId) {\r\n if (!relatedItem.alreadyRequestedFeatureNames) {\r\n relatedItem.alreadyRequestedFeatureNames = [];\r\n }\r\n relatedItem.alreadyRequestedFeatureNames.push(requestFromBackendName || navigationItemName);\r\n }\r\n }\r\n\r\n window.requestInProcess = false;\r\n loaderDisable();\r\n if (updateCanvas) {\r\n store.dispatch(updateCanvasCount());\r\n }\r\n return Promise.resolve()\r\n}\r\n\r\nexport const getShowMatchRadio = (lookFeature) => {\r\n if (LOOK_WALLS_ONLY.includes(lookFeature.partId)) {\r\n return true\r\n }\r\n switch (getCommonVisualizerType()) {\r\n case \"kitchen\":\r\n case \"laundryroom\": {\r\n if (EDGE_GROUP.includes(lookFeature.partId)) {\r\n if (lookFeature.partId === \"edge_profile\") { // back countertop\r\n const layout = getCurrentLayout();\r\n return layout.parts[\"CenterIsland\"] && layout.parts[\"CenterIsland\"].countertop\r\n && !layout.parts[\"CenterIsland\"].countertop.disabled\r\n }\r\n return true\r\n }\r\n if (COUNTERTOP_GROUP.includes(lookFeature.partId) && !CountertopSwitchers.checkForTileBacksplash(lookFeature)) {\r\n return true\r\n }\r\n return CABINET_GROUP.includes(lookFeature.partId)\r\n }\r\n case \"bathroom\":\r\n return CABINET_GROUP_BATHROOM.includes(lookFeature.partId)\r\n || COUNTERTOP_GROUP_BATHROOM.includes(lookFeature.partId)\r\n || HANDLES_GROUP_BATHROOM.includes(lookFeature.partId)\r\n || SHOWER_FLOOR_GROUP_BATHROOM.includes(lookFeature.partId)\r\n default:\r\n return false\r\n }\r\n}\r\n\r\n/**\r\n * returns fabricator settings price logic\r\n * @param lookFeature {featureInterface}\r\n * @returns {allWallsLogicInterface} object\r\n */\r\nexport const getApplyToLogic = (lookFeature) => {\r\n if (!lookFeature || lookFeature.notAvailableInVisualizer) {\r\n return null\r\n }\r\n if (LOOK_WALLS_ONLY.includes(lookFeature.partId)) {\r\n const {lookState} = store.getState();\r\n return {\r\n type: \"walls\",\r\n translateId: \"look.allWalls\",\r\n setApplyToFunction: setLookWallsApplyTo,\r\n applyToArrayAll: LOOK_WALLS_ONLY,\r\n currentApplyToArray: lookState.lookWallsApplyTo,\r\n }\r\n }\r\n switch (getCommonVisualizerType()) {\r\n case \"kitchen\":\r\n case \"laundryroom\": {\r\n if (CABINET_GROUP.includes(lookFeature.partId)) {\r\n const {navigationState} = store.getState();\r\n return {\r\n type: \"cabinets\",\r\n translateId: \"look.allCabinets\",\r\n setApplyToFunction: setCabinetsApplyTo,\r\n applyToArrayAll: CABINET_GROUP,\r\n currentApplyToArray: navigationState.cabinetsApplyTo,\r\n }\r\n } else if (COUNTERTOP_GROUP.includes(lookFeature.partId)) {\r\n const {navigationState} = store.getState();\r\n return {\r\n type: \"countertops\",\r\n translateId: \"look.allCountertops\",\r\n setApplyToFunction: setCountertopsApplyTo,\r\n applyToArrayAll: COUNTERTOP_GROUP,\r\n currentApplyToArray: navigationState.countertopsApplyToArray,\r\n }\r\n } else if (EDGE_GROUP.includes(lookFeature.partId)) {\r\n const {navigationState} = store.getState();\r\n return {\r\n type: \"edges\",\r\n translateId: \"look.allCountertops\",\r\n setApplyToFunction: setEdgesApplyTo,\r\n applyToArrayAll: EDGE_GROUP,\r\n currentApplyToArray: navigationState.edgesApplyTo,\r\n }\r\n }\r\n break;\r\n }\r\n case \"bathroom\": {\r\n if (CABINET_GROUP_BATHROOM.includes(lookFeature.partId) && (document.kvConfig.visualizerType !== \"bvLook\")) {\r\n const {navigationState} = store.getState();\r\n return {\r\n type: \"cabinets\",\r\n translateId: \"look.allCabinets\",\r\n setApplyToFunction: setCabinetsApplyToBathroom,\r\n applyToArrayAll: CABINET_GROUP,\r\n currentApplyToArray: navigationState.cabinetsApplyToBathroom,\r\n }\r\n } else if (COUNTERTOP_GROUP_BATHROOM.includes(lookFeature.partId)) {\r\n const {navigationState} = store.getState();\r\n return {\r\n type: \"countertops\",\r\n translateId: \"look.allCountertops\",\r\n setApplyToFunction: setCountertopsApplyToBathroom,\r\n applyToArrayAll: COUNTERTOP_GROUP_BATHROOM,\r\n currentApplyToArray: navigationState.countertopsApplyToArrayBathroom,\r\n }\r\n } else if (HANDLES_GROUP_BATHROOM.includes(lookFeature.partId)) {\r\n const {navigationState} = store.getState();\r\n return {\r\n type: \"handles\",\r\n translateId: \"look.allCountertops\",\r\n setApplyToFunction: setApplyToCommon,\r\n applyToArrayAll: HANDLES_GROUP_BATHROOM,\r\n currentApplyToArray: navigationState.handlesApplyToBathroom,\r\n }\r\n } else if (SHOWER_FLOOR_GROUP_BATHROOM.includes(lookFeature.partId)) {\r\n const {navigationState} = store.getState();\r\n return {\r\n type: \"showerFloor\",\r\n translateId: \"look.allCountertops\",\r\n setApplyToFunction: setApplyToCommon,\r\n applyToArrayAll: SHOWER_FLOOR_GROUP_BATHROOM,\r\n currentApplyToArray: navigationState.showerFloorApplyToBathroom,\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return null\r\n}\r\n\r\n/**\r\n * returns fabricator settings price logic\r\n * @param wallFeature {featureInterface}\r\n * @param applyToLogic {allWallsLogicInterface}\r\n * @param setCurrentFeature {boolean}\r\n */\r\nexport const clickOnSimilarFeatures = async (wallFeature, applyToLogic, setCurrentFeature = false) => {\r\n const layout = getCurrentLayout();\r\n let {type, applyToArrayAll} = applyToLogic;\r\n\r\n const {navigationState, fabricatorState} = store.getState();\r\n if ((type === \"countertops\" && !navigationState.useFeaturesLightRequest.countertops)\r\n || (type === \"cabinets\" && !navigationState.useFeaturesLightRequest.cabinets)) {\r\n if (setCurrentFeature && !fabricatorState.isSolidSurface) {\r\n store.dispatch(applyToLogic.setApplyToFunction([], true, type));\r\n return Promise.resolve()\r\n }\r\n }\r\n\r\n if (type === \"countertops\") {\r\n const featureIsLocked = getFeatureIsLocked(wallFeature);\r\n return CountertopSwitchers.applyAllCountertops(wallFeature, !featureIsLocked, applyToArrayAll, setCurrentFeature);\r\n } else if (type === \"cabinets\") {\r\n const featureIsLocked = getFeatureIsLocked(wallFeature);\r\n return CabinetSwitchers.applyClickTo(wallFeature, !featureIsLocked, applyToArrayAll, setCurrentFeature)\r\n } else {\r\n const navigationItemName = wallFeature.getSplittedFeatureName();\r\n const requestFromBackendName = layout.isNewLayout ? wallFeature.getCountertopGroupsSplittedFeatureName() : wallFeature.getSplittedFeatureName();\r\n // we are looking and matching splitted feature name, because it includes filters, but we request original sharedFeatureName\r\n let missingFeatures = [];\r\n applyToArrayAll.forEach(wallPartId => {\r\n const subPart = layout.getSubPartByPartId(wallPartId);\r\n if (!subPart || (subPart.part.partId === wallFeature.partId)) {\r\n return null\r\n }\r\n const featureFound = layout.designNavigationItems(subPart).find(navItem => {\r\n return navItem.part.getSplittedFeatureName() === navigationItemName\r\n });\r\n if (featureFound) {\r\n if (setCurrentFeature) {\r\n subPart.part.activeFeatureBeforeAllWalls = subPart.part.activeFeature;\r\n }\r\n featureFound.part.clickFromAllWalls(true)\r\n } else if (!subPart.part.alreadyRequestedFeatureNames || !subPart.part.alreadyRequestedFeatureNames.includes(requestFromBackendName)) {\r\n // @param missingFeaturesArray {featureGroupInterface}\r\n // @param navigationItemName {string}\r\n // @param setCurrentFeature {boolean}\r\n missingFeatures.push({relatedItem: subPart.part, navigationItemName, setCurrentFeature, requestFromBackendName})\r\n }\r\n });\r\n if (missingFeatures.length) {\r\n missingFeatures.push({relatedItem: wallFeature.getParent(), navigationItemName, setCurrentFeature, requestFromBackendName})\r\n // we need to check crop for current wall! but no need to request the wall itself\r\n await getMissingFeaturesAndClickThem(missingFeatures, false, wallFeature.partId)\r\n }\r\n return Promise.resolve()\r\n }\r\n}\r\n\r\n/**\r\n * returns fabricator settings price logic\r\n * @param applyToArray {array}\r\n * @param onlyForOneFeatureGroup {object}\r\n */\r\nexport const setActiveFeaturesBeforeAllWalls = (applyToArray = [], onlyForOneFeatureGroup = null) => {\r\n if (onlyForOneFeatureGroup && onlyForOneFeatureGroup.activeFeature) {\r\n onlyForOneFeatureGroup.activeFeatureBeforeAllWalls = onlyForOneFeatureGroup.activeFeature;\r\n return\r\n }\r\n const layout = getCurrentLayout();\r\n applyToArray.forEach(partId => {\r\n const featureGroup = layout.getFeatureGroupByPartId(partId);\r\n if (featureGroup && featureGroup.activeFeature) {\r\n featureGroup.activeFeatureBeforeAllWalls = featureGroup.activeFeature;\r\n }\r\n })\r\n}\r\n\r\nexport const requestAfterRoomChange = async (layout) => {\r\n let promises = [];\r\n const layoutName = layout.getCurrentLayoutAbbreviation();\r\n layout.getFeatures().forEach(parent => {\r\n if (!Array.isArray(parent.relatedItems) || !parent.relatedItems.length) {\r\n return\r\n }\r\n parent.relatedItems.forEach(featureGroup => {\r\n if (featureGroup.allFeaturesReceived\r\n && featureGroup.nextFeaturesPageToLoadArray\r\n && featureGroup.nextFeaturesPageToLoadArray[layoutName]\r\n && !featureGroup.nextFeaturesPageToLoadArray[layoutName].page) {\r\n promises.push(getAdditionalFeaturesOnScroll(featureGroup))\r\n }\r\n })\r\n });\r\n return Promise.all(promises)\r\n}\r\n\r\n\r\n/**\r\n * returns fabricator settings price logic\r\n * @param roomPreset {object}\r\n * @param loadedPresets {array}\r\n */\r\nexport const applyNewPreset = async (roomPreset, loadedPresets) => {\r\n const layout = getCurrentLayout();\r\n if (loadedPresets.includes(roomPreset.id)) {\r\n layout.setActiveFeaturesFromObject(roomPreset, false, false, true, false);\r\n await requestAfterRoomChange(layout);\r\n } else {\r\n await layout.setItemsFromBvState(roomPreset); // requestAfterRoomChange inside\r\n }\r\n return Promise.resolve()\r\n}\r\n\r\nexport const isRoomLayoutsVisible = () => {\r\n return Config.isVisualizerManagement() || Config.isDevMode()\r\n}\r\n\r\n/**\r\n * returns feature group current items quantity depending on layer positions\r\n * @param lookActiveFeature {featureInterface}\r\n * @param featureGroup {featureGroupInterface}\r\n * @return number {number}\r\n */\r\nexport const getFeatureGroupFeaturesQuantity = (lookActiveFeature, featureGroup = null) => {\r\n let featureQuantity = 1;\r\n if (!featureGroup && lookActiveFeature && lookActiveFeature.getParent) {\r\n featureGroup = lookActiveFeature.getParent()\r\n }\r\n if (featureGroup) {\r\n const currentActiveFeature = lookActiveFeature || featureGroup.activeFeature || featureGroup.activeNotInVisualizerFeature\r\n if (currentActiveFeature && currentActiveFeature.dbFeature.defaultQuantity && currentActiveFeature.dbFeature.defaultQuantity !== 1) {\r\n featureQuantity = currentActiveFeature.dbFeature.defaultQuantity;\r\n } else if (featureGroup.layerPositions && (!currentActiveFeature || !currentActiveFeature.notAvailableInVisualizer)) {\r\n // if feature is not available in visualizer > set at least 1 instead of 0 (missing sink in the cart in solid surface wizard issue)\r\n featureQuantity = Object.keys(featureGroup.layerPositions)\r\n .filter(position => !!featureGroup.layerPositions[position]).length\r\n }\r\n }\r\n return featureQuantity\r\n}\r\n","import {Part} from \"./part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {LayoutType, ShowerComboTubType} from \"../constants\";\r\nimport { showerTubComboThumbnail, custom60inPonyShower, custom60in30X8Shower } from '../assets';\r\n\r\nimport BathTubLiner from \"../subparts/showerTubCombo/bathtubLiner\";\r\nimport ReplacementTub from \"../subparts/showerTubCombo/replacementTub\";\r\nimport WalkInTub from \"../subparts/showerTubCombo/walkInTub\";\r\nimport JettedTub from \"../subparts/showerTubCombo/jettedTub\";\r\nimport WallConfiguration from \"../subparts/showerTubCombo/wallConfiguration\";\r\nimport {fixDbFeatureProperties} from \"../../../../misc/helpers\";\r\n\r\nexport class ShowerTubCombo extends Part {\r\n static id = 'Shower Tub Combo';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.showerTubComboIsActive = false; // param needed to check if shower is still active or not\r\n this.menuType = PartMenuType.Complex;\r\n this.partThumbnail = showerTubComboThumbnail;\r\n this.partName = 'Shower Tub Combo';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo\";\r\n this.relatedItems = [];\r\n this.wallConfiguration = null;\r\n this.bathTubLiner = null;\r\n this.replacementTub = null;\r\n this.walkInTub = null;\r\n this.jettedTub = null;\r\n\r\n // Kohler hardcode, they don't have bathtub_liner\r\n this.bottomTub = (document.kvConfig && (document.kvConfig.userId === 133439))\r\n ? ShowerComboTubType.replacement_tub\r\n : ShowerComboTubType.bathtub_liner;\r\n this.leftShowerWallType = 'Pony';\r\n this.showerComboSize = '60in';\r\n\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Bathtub Liner\":\r\n relatedItemName = \"bathTubLiner\";\r\n RelatedItemClass = BathTubLiner;\r\n break;\r\n case \"Replacement Tub\":\r\n relatedItemName = \"replacementTub\";\r\n RelatedItemClass = ReplacementTub;\r\n break;\r\n case \"Walk In Tub\":\r\n relatedItemName = \"walkInTub\";\r\n RelatedItemClass = WalkInTub;\r\n break;\r\n case \"Jetted Tub\":\r\n relatedItemName = \"jettedTub\";\r\n RelatedItemClass = JettedTub;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setSpecificRules() {\r\n if (!this.wallConfiguration) {\r\n this.wallConfiguration = new WallConfiguration(true);\r\n this.wallConfiguration.counts = {\r\n allLayoutFeaturesCount: 0,\r\n largeLayoutFeaturesCount: 0,\r\n smallLayoutFeaturesCount: 0\r\n };\r\n this.relatedItems.unshift(this.wallConfiguration);\r\n this.wallConfiguration.getParent = () => this;\r\n }\r\n const wallConfigurations = [\r\n ShowerTubCombo.createCustomWallConfiguration(\r\n custom60inPonyShower,\r\n \"Pony Wall 60in\",\r\n \"Pony\",\r\n \"60in\",\r\n {\r\n \"ShowerSize\": ['60in'],\r\n \"CountertopSize\": [\"20in\", \"24in\", \"30in\", \"36in\", \"48in\", \"60in\", \"72in\"],\r\n },\r\n this,\r\n 100000\r\n ),\r\n ShowerTubCombo.createCustomWallConfiguration(\r\n custom60in30X8Shower,\r\n \"Full Wall 60in\",\r\n \"30X8\",\r\n \"60in\",\r\n {\r\n \"ShowerSize\": ['60in'],\r\n \"CountertopSize\": [\"20in\", \"24in\", \"30in\", \"36in\", \"48in\", \"60in\", \"72in\"],\r\n },\r\n this,\r\n 100001\r\n ),\r\n ];\r\n Object.keys(LayoutType).forEach(layoutType => {\r\n this.wallConfiguration.featuresList[layoutType] = wallConfigurations;\r\n this.wallConfiguration.counts[layoutType.toLowerCase() + \"LayoutFeaturesCount\"]++;\r\n });\r\n }\r\n\r\n static createCustomWallConfiguration(customThumbnail, name, leftShowerWallType, showerComboSize, metaData, parent, id) {\r\n const conf = new WallConfiguration();\r\n conf.partName = name;\r\n conf.showerBodyId = name.toLowerCase().replace(/ /gi, \"-\");\r\n conf.dbFeature = {};\r\n conf.featureName = name;\r\n conf.groupName = \"Wall Configuration\";\r\n conf.showerComboSize = showerComboSize;\r\n // conf.parent = parent;\r\n conf.getParent = () => parent.wallConfiguration;\r\n conf.metaData = metaData;\r\n conf.leftShowerWallType = leftShowerWallType;\r\n conf.customThumbnail = customThumbnail;\r\n conf.dbFeature = fixDbFeatureProperties({\r\n metaData,\r\n id,\r\n unlocked: true\r\n });\r\n return conf;\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n\r\n if (!this.showerTubComboIsActive) {\r\n return null\r\n }\r\n\r\n let res = [];\r\n this.getRelatedItems().forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n ? relatedItem.placeholderFeature.layer.addTo(res)\r\n : relatedItem.activeFeature ? relatedItem.activeFeature.layer.addTo(res) : null;\r\n });\r\n\r\n return res.length ? res : null;\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Shower Tub Combo', this)\r\n }\r\n\r\n subParts() {\r\n\r\n let subParts = [\r\n ...this.getRelatedItems().filter(item => item.visible).map(_ => new DesignNavigationItem(_.partName, _)),\r\n ...this.layout.parts.Shower.subParts().filter(subPart => {\r\n return (subPart.text === \"Fixture\")\r\n || (subPart.text === \"Shower Head\")\r\n || (subPart.text === \"Shower Walls\")\r\n || (subPart.text === \"Shower Walls Accent\")\r\n || (subPart.text === \"Shower Door\")\r\n || (subPart.text === \"Handle\")\r\n || (subPart.text === \"Pony Wall\")\r\n || (subPart.text === \"Pony Wall Cap\")\r\n || (subPart.text === \"Pony Wall Glass\")\r\n })\r\n ];\r\n\r\n if (this.bottomTub === ShowerComboTubType.walk_in_tub) {\r\n subParts = subParts.filter(subPart => {\r\n return subPart.part.partId !== \"shower_door\" && subPart.part.partId !== \"shower_door_handle\" && subPart.part.partId !== \"shower_fixture\"\r\n })\r\n }\r\n\r\n return subParts\r\n }\r\n\r\n getShowerRelatedItems() {\r\n return this.layout.parts.Shower.getRelatedItems().filter(relItem => {\r\n return (relItem.partId === \"shower_fixture\")\r\n || (relItem.partId === \"shower_head\")\r\n || (relItem.partId === \"shower_interior_wall\")\r\n || (relItem.partId === \"shower_interior_wall_accent\")\r\n || (relItem.partId === \"shower_door\")\r\n || (relItem.partId === \"shower_door_handle\")\r\n || (relItem.partId === \"pony_wall\")\r\n || (relItem.partId === \"pony_wall_cap\")\r\n || (relItem.partId === \"pony_wall_glass\")\r\n })\r\n }\r\n\r\n setShowerTubCombo() {\r\n this.showerTubComboIsActive = true;\r\n if (this.layout.type === LayoutType.Small) {\r\n const showerParent = this.layout.parts.Shower;\r\n if (showerParent.showerBody && showerParent.showerBody.disabled) { // switch on all Shower features\r\n showerParent.showerBody.disabled = false;\r\n showerParent.showerBody.disabledClick();\r\n this.showerTubComboIsActive = true;\r\n }\r\n }\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false\r\n }\r\n\r\n handleSubPartClick() {}\r\n\r\n setZIndex(zIndexes) {\r\n if (!this.showerTubComboIsActive) {\r\n return null\r\n }\r\n\r\n if(zIndexes)\r\n this.relatedItems.forEach(_ => _.setZIndex(zIndexes));\r\n }\r\n\r\n setActiveTub(bottomTub) {\r\n this.bottomTub = bottomTub;\r\n }\r\n\r\n showerSize() {\r\n return this.showerComboSize\r\n }\r\n\r\n showerDimensions() {\r\n return this.leftShowerWallType\r\n }\r\n\r\n setShowerSize(leftShowerWallType, showerComboSize) {\r\n this.leftShowerWallType = leftShowerWallType;\r\n this.showerComboSize = showerComboSize;\r\n }\r\n\r\n setDefault() {\r\n // this.relatedItems.forEach(relatedItem => relatedItem.setDefault(layout));\r\n }\r\n\r\n}\r\n","// import $ from \"jquery\";\r\n// import sqftShape from \"./../core/shapes/sqftShape\";\r\nimport sqftConfig from \"./../store/sqftConfig\";\r\nimport sqftStore from \"./sqftStore\";\r\nimport workspace from \"../core/workspace\";\r\nimport {\r\n BACKSPLASH_LABELS, CABINET_BOXES,\r\n COUNTERTOP_LABELS,\r\n isDisabledInPopupShouldBeHidden,\r\n MOVABLE_IMAGE_TYPES,\r\n RESOURCE_ATTACHED_TO_TYPE,\r\n SHAPE_PART_ID,\r\n SIDEBAR_NAVIGATION_BUTTONS,\r\n SQFT_CHILD_FEATURE_GROUP_PART_IDS,\r\n SQFT_SHAPES_THAT_ADD_OVERHANG\r\n} from \"../../../constants\";\r\nimport sqftShape from \"../core/shapes/sqftShape\";\r\nimport MovableImage from \"../core/shapes/movableImage\";\r\nimport slabWorkspace from \"../core/slab/slabWorkspace\";\r\nimport {getPointField} from \"../../../helpers/sqftHelper\";\r\nimport ShapeRotatable from \"../core/shapes/shapeParts/shapeRotatable\";\r\nimport ChangeValuePopup from \"../../popup/parts/ChangeValuePopup\";\r\nimport {\r\n addChangeValuePopup,\r\n changeValuePopup,\r\n deleteChangeValuePopup,\r\n //setSQFTActiveButton,\r\n //setSQFTMenuOpened\r\n} from \"../../../../../actions/sqftMenuFunctions\";\r\nimport store from \"../../../../../store\";\r\nimport SqftStore from \"./sqftStore\";\r\nimport {updateSQFTCalculations} from \"../../../../../actions/sqftFunctions\";\r\nimport {isSFTCabinetsGroup} from \"../../../helpers/sqftNavigationHelper\";\r\nimport Rectangle from \"../core/shapes/layouts/rectangle\";\r\nimport {initTitle} from \"../core/controls/labels/labelsHelper\";\r\nimport {SLAB_IMAGE_TYPES} from \"../../../../../reducers/sqftSlabReducer\";\r\nimport sqftShapeIntersectionsManager from \"./sqftShapeIntersectionsManager\";\r\nimport {getCurrentLayout} from \"../../../../appLayout\";\r\nimport {SHAPE_PART_IDS_VISIBLE_ONLY_IN_THE_SLAB_MODE} from \"../../../constantsFeature\";\r\nimport {\r\n areCollinearAndOverlap,\r\n convexHull, removeConsecutiveDuplicates,\r\n roundShapePoints,\r\n unifyShapePoints\r\n} from \"../../../helpers/coordinatesHelper\";\r\n\r\nconst sqftShapeManager = {\r\n shapes: [],\r\n objIds: 0,\r\n addShape: function(segments, shapeType, historyPosition, partId, fromLayout = null, shapeParams = {}) {\r\n const shapeId = workspace.addShape(segments, shapeType, historyPosition, partId, fromLayout, shapeParams);\r\n\r\n const state = store.getState();\r\n const updateCalculations = state.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n\r\n return shapeId\r\n },\r\n addPlaceholderShape: function(width, height) {\r\n const state = store.getState();\r\n const shouldUseSlabPricing = state.sqftSlabState.isSlabPricingEnabled;\r\n const shapeSegments = new Rectangle(width, height);\r\n const shapeId = sqftShapeManager.addShape(shapeSegments, 'square', null, SHAPE_PART_ID.slabPlaceHolder);\r\n const shape = sqftShapeManager.getShapeById(shapeId);\r\n sqftShapeIntersectionsManager.updateShapesIntersections();\r\n sqftShapeIntersectionsManager.updateSlabPlaceholderFeatureId();\r\n shape.deregisterLineEvents();\r\n shape.setSlabPricing(shouldUseSlabPricing);\r\n initTitle('PLACEHOLDER', SLAB_IMAGE_TYPES.placeholder, shape);\r\n },\r\n getShapeById: function(shapeId) {\r\n return workspace.getShapeById(shapeId);\r\n },\r\n getShapeByIds: function(ids) {\r\n return workspace.getShapes().filter(shape => ids.includes(shape.id));\r\n },\r\n hasSameFeatureId(shapes) {\r\n if (shapes.length === 0) return true;\r\n\r\n const firstFeatureId = shapes[0].featureId;\r\n for (let obj of shapes) {\r\n if (obj.featureId !== firstFeatureId) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n hasSameSharedFeatureName(shapes) {\r\n if (shapes.length === 0) return true;\r\n\r\n const firstFeatureId = shapes[0].featureId;\r\n const layout = getCurrentLayout();\r\n const currentShapeFeature = layout.getFeatureById(firstFeatureId, true);\r\n if (currentShapeFeature) {\r\n const currentShapeFeatureSharedName = currentShapeFeature.dbFeature.sharedFeatureName;\r\n for (let testShape of shapes) {\r\n const testShapeFeature = layout.getFeatureById(testShape.featureId, true);\r\n if (testShapeFeature && testShapeFeature.dbFeature.sharedFeatureName !== currentShapeFeatureSharedName) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n removeShapeById: function(shapeId) {\r\n return workspace.removeShapeById(shapeId);\r\n },\r\n setShapeFeature: function (shapeId, visualizerFeature) {\r\n if (visualizerFeature && visualizerFeature.dbFeature) {\r\n let shape = workspace.getShapeById(shapeId);\r\n\r\n if (shape instanceof sqftShape || shape instanceof MovableImage) {\r\n shape.setFeatureId(visualizerFeature.dbFeature.id);\r\n } else if (shape && shape.type === RESOURCE_ATTACHED_TO_TYPE.backsplash) {\r\n const sqftShape = workspace.getShapeById(shape.attachedToParentId);\r\n const line = sqftShape.getLineById(shape.attachedToId);\r\n if (line) {\r\n line.setBacksplashFeatureId(visualizerFeature.dbFeature.id);\r\n }\r\n }\r\n }\r\n },\r\n setShapeFeatureId: function (shapeId, featureId) {\r\n let shape = workspace.getShapeById(shapeId);\r\n\r\n if (shape instanceof sqftShape || shape instanceof MovableImage) {\r\n shape.setFeatureId(featureId);\r\n }\r\n },\r\n setShapeRelatedParentFeatureId: function (shapeId, featureId) {\r\n let shape = workspace.getShapeById(shapeId);\r\n\r\n if (shape instanceof sqftShape || shape instanceof MovableImage) {\r\n shape.relatedParentFeatureId = featureId;\r\n }\r\n },\r\n getCounterTopShapes() {\r\n const shapes = workspace.getShapes();\r\n\r\n return shapes.filter(function(shape) {\r\n const counterTopLabel = Object.keys(COUNTERTOP_LABELS).find(cLabel => cLabel === shape.type);\r\n if (counterTopLabel) {\r\n return true\r\n }\r\n return !shape.type\r\n && !SHAPE_PART_IDS_VISIBLE_ONLY_IN_THE_SLAB_MODE.includes(shape.partId)\r\n });\r\n },\r\n getBacksplashLabeledShapes() {\r\n const shapes = workspace.getShapes();\r\n\r\n return shapes.filter(shp => Object.keys(BACKSPLASH_LABELS).includes(shp.partId));\r\n },\r\n getCabinetShapes(partIds = CABINET_BOXES) {\r\n const shapes = workspace.getShapes();\r\n\r\n return shapes.filter(shp => Object.values(partIds).includes(shp.partId));\r\n },\r\n hideSeamShapes: function() {\r\n let shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (\r\n shape.isWithShapePieces !== undefined\r\n && shape.isWithShapePieces()\r\n && (isDisabledInPopupShouldBeHidden() ? !shape.isDisabledInPopup : true)\r\n ) {\r\n shape.hideShapePieces()\r\n }\r\n })\r\n },\r\n restoreSeamShapes: function() {\r\n let shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (shape.isWithShapePieces !== undefined\r\n && !shape.isWithShapePieces()\r\n && shape.isHidden\r\n && (isDisabledInPopupShouldBeHidden() ? !shape.isDisabledInPopup : true)\r\n ) {\r\n shape.reInitEvents()\r\n }\r\n })\r\n },\r\n hideSlabShapes: function() {\r\n let shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (shape.partId === SHAPE_PART_ID.slabPlaceHolder) {\r\n shape.deregisterEvents();\r\n }\r\n })\r\n },\r\n restoreSlabShapes: function() {\r\n let shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (shape.partId === SHAPE_PART_ID.slabPlaceHolder) {\r\n shape.reInitEvents();\r\n shape.deregisterLineEvents();\r\n shape.reInitLineTitleEvents();\r\n }\r\n })\r\n },\r\n hideMiteredSections: function() {\r\n const lines = workspace.getLines();\r\n for (const line of lines) {\r\n if (line.isWithMitered()) {\r\n line.miteredOverlay.deregisterEvents();\r\n }\r\n }\r\n },\r\n restoreMiteredSections: function() {\r\n const lines = workspace.getLines();\r\n for (const line of lines) {\r\n if (line.isWithMitered()) {\r\n line.miteredOverlay.reInitEvents();\r\n }\r\n }\r\n },\r\n resetShapeChangesInTheSlabMode: function (shape) {\r\n shape.updateSlabPoints();\r\n shape.removeShapePieces();\r\n shape.setShapePieces([]);\r\n shape.shapeSlab.setRotationDegreesSlab(0);\r\n slabWorkspace.slabAdditionalShapes.removeAllActiveBacksplashesAttachedToShape(shape);\r\n },\r\n checkForUpdateSlabPoints: function() {\r\n let shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (shape instanceof sqftShape\r\n && ![SHAPE_PART_ID.seamPiece, SHAPE_PART_ID.slabPlaceHolder].includes(shape.partId)\r\n ) {\r\n if (shape.isPointsChanged) {\r\n shape.isPointsChanged = false;\r\n sqftShapeManager.resetShapeChangesInTheSlabMode(shape);\r\n }\r\n }\r\n })\r\n },\r\n checkForUpdateSlabPosition: function() {\r\n let shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (shape instanceof sqftShape\r\n && ![SHAPE_PART_ID.seamPiece, SHAPE_PART_ID.slabPlaceHolder].includes(shape.partId)\r\n ) {\r\n if (shape.isPositionChanged) {\r\n shape.updateSlabPosition();\r\n shape.isPositionChanged = false;\r\n slabWorkspace.slabAdditionalShapes.removeAllActiveBacksplashesAttachedToShape(shape);\r\n }\r\n }\r\n })\r\n },\r\n hideCorePieceShapes: function() {\r\n let shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (shape.isWithShapePieces !== undefined\r\n && shape.isWithShapePieces()\r\n && !shape.isHidden\r\n && ![SHAPE_PART_ID.seamPiece, SHAPE_PART_ID.slabPlaceHolder].includes(shape.partId)\r\n && (isDisabledInPopupShouldBeHidden() ? !shape.isDisabledInPopup : true)\r\n ) {\r\n shape.deregisterEvents()\r\n }\r\n })\r\n },\r\n restoreCorePieceShapes: function() {\r\n let shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (shape.isWithShapePieces !== undefined\r\n && shape.isWithShapePieces()\r\n && shape.isHidden\r\n && ![SHAPE_PART_ID.seamPiece, SHAPE_PART_ID.slabPlaceHolder].includes(shape.partId)\r\n && (isDisabledInPopupShouldBeHidden() ? !shape.isDisabledInPopup : true)\r\n ) {\r\n shape.reInitEvents()\r\n }\r\n })\r\n },\r\n hideShapeParts: function(shouldSkipSlabPlaceHolders = true) {\r\n let shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (shape instanceof sqftShape\r\n && (isDisabledInPopupShouldBeHidden() ? !shape.isDisabledInPopup : true)\r\n && (shouldSkipSlabPlaceHolders && shape.partId !== SHAPE_PART_ID.slabPlaceHolder)\r\n ) {\r\n shape.deregisterPartEvents()\r\n }\r\n })\r\n },\r\n restoreShapeParts: function() {\r\n let shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (shape instanceof sqftShape\r\n && ![SHAPE_PART_ID.seamPiece, SHAPE_PART_ID.slabPlaceHolder].includes(shape.partId)\r\n && (isDisabledInPopupShouldBeHidden() ? !shape.isDisabledInPopup : true)\r\n ) {\r\n shape.reInitPartEvents()\r\n }\r\n })\r\n },\r\n // reInitMeasurementsInTheSlabMode: function() {\r\n // const state = store.getState();\r\n // const isMeasurementVisibleInSlabMode = state.sqftSlabState.isMeasurementVisibleInSlabMode;\r\n // if (isMeasurementVisibleInSlabMode) {\r\n // initAllLineLength()\r\n // }\r\n // },\r\n undoSeam: function() {\r\n let seamHistory = sqftStore.getSeamHistory();\r\n if (seamHistory.length <= 0) {\r\n return\r\n }\r\n let latestShape = seamHistory.pop();\r\n for (let i = latestShape.shapePieces.length - 1; i >= 0; i--) {\r\n let shp = workspace.getShapeById(latestShape.shapePieces[i]);\r\n workspace.removeShape(shp);\r\n }\r\n latestShape.setShapePieces([]);\r\n latestShape.reInitEvents();\r\n },\r\n resetAllSeams: function() {\r\n this.restoreCorePieceShapes();\r\n this.hideShapeParts();\r\n let shapes = workspace.getShapes();\r\n for (let i = shapes.length - 1; i >= 0; i--) {\r\n if (shapes[i] instanceof sqftShape) {\r\n if (shapes[i].partId === SHAPE_PART_ID.seamPiece) {\r\n workspace.removeShape(shapes[i]);\r\n } else if (shapes[i].isWithShapePieces()) {\r\n shapes[i].setShapePieces([])\r\n }\r\n }\r\n }\r\n sqftStore.setSeamHistory([])\r\n },\r\n getVisibleCenter: function () {\r\n // console.log('sqftStore.ctxCenter', sqftStore.ctxCenter);\r\n // console.log('sqftStore.canvas', sqftStore.canvas);\r\n // console.log('sqftStore.scale', sqftConfig.scale);\r\n return {\r\n x: (sqftStore.ctxCenter.x + (sqftStore.canvas.width / 2)) / sqftConfig.scale,\r\n y: (sqftStore.ctxCenter.y + (sqftStore.canvas.height / 2)) / sqftConfig.scale\r\n }\r\n },\r\n getMinMax: (segments) => {\r\n let minX = null, maxX = 0;\r\n let minY = null, maxY = 0;\r\n for (let i = 0; i < segments.length; i++) {\r\n let s = segments[i];\r\n if (minX === null || s.from.x < minX)\r\n minX = s.from.x;\r\n if (s.from.x > maxX)\r\n maxX = s.from.x;\r\n if (minY === null || s.from.y < minY)\r\n minY = s.from.y;\r\n if (s.from.y > maxY)\r\n maxY = s.from.y\r\n }\r\n return {\r\n width: maxX - minX,\r\n height: maxY - minY,\r\n x: {\r\n min: minX,\r\n max: maxX\r\n },\r\n y: {\r\n min: minY,\r\n max: maxY\r\n }\r\n };\r\n },\r\n getMinMaxWorkspacePoints: (workspace, isIncludeBumpout = true) => {\r\n let from;\r\n let to;\r\n let minX = null;\r\n let maxX = null;\r\n let minY = null;\r\n let maxY = null;\r\n let offset = workspace.getOffset();\r\n let shapes = workspace.getShapes();\r\n for (let i = 0; i < shapes.length; i++) {\r\n let shape = shapes[i];\r\n if (shape.getLines) {\r\n let lines = shape.getLines();\r\n for (let n = 0; n < lines.length; n++) {\r\n from = lines[n].from.getPointField();\r\n to = lines[n].to.getPointField();\r\n\r\n if (minX === null) {\r\n minX = from.x < to.x ? from.x : to.x;\r\n maxX = from.x > to.x ? from.x : to.x;\r\n minY = from.y < to.y ? from.y : to.y;\r\n maxY = from.y > to.y ? from.y : to.y;\r\n }\r\n\r\n if (isIncludeBumpout && lines[n].isWithBumpout && lines[n].isWithBumpout()) {\r\n [minX, maxX, minY, maxY] = sqftShapeManager.getMinMaxBumpoutPoints(lines[n], minX, maxX, minY, maxY);\r\n }\r\n\r\n minX = from.x < minX ? from.x : minX;\r\n maxX = from.x > maxX ? from.x : maxX;\r\n minX = to.x < minX ? to.x : minX;\r\n maxX = to.x > maxX ? to.x : maxX;\r\n\r\n minY = from.y < minY ? from.y : minY;\r\n maxY = from.y > maxY ? from.y : maxY;\r\n minY = to.y < minY ? to.y : minY;\r\n maxY = to.y > maxY ? to.y : maxY;\r\n }\r\n }\r\n }\r\n\r\n return {\r\n minX : minX - offset.x,\r\n maxX : maxX - offset.x,\r\n minY : minY - offset.y,\r\n maxY : maxY - offset.y\r\n }\r\n },\r\n disableRotatableStateForAllShapes: () => {\r\n const shapes = workspace.getShapes();\r\n for (const shape of shapes) {\r\n if (shape instanceof sqftShape && shape.shapeRotatable) {\r\n sqftShapeManager.disableRotatableState(shape);\r\n }\r\n }\r\n },\r\n canShapeBeRotated: (shape) => {\r\n const isShapeCanBeRotated = shape instanceof sqftShape\r\n && shape.shapePieces.length === 0\r\n && !shape.isDisabledInPopup\r\n && !(shape.isWithBumpout() || shape.isWithMitered())\r\n ;\r\n const isMovableImageCanBeRotated = shape instanceof MovableImage && shape.type !== MOVABLE_IMAGE_TYPES.slabImage;\r\n return isShapeCanBeRotated || isMovableImageCanBeRotated\r\n },\r\n closeRotatablePopups: () => {\r\n const shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (shape.getIsRotatable && shape.getIsRotatable()) {\r\n sqftShapeManager.disableRotatableState(shape);\r\n }\r\n })\r\n },\r\n disableRotatableState: (shape) => {\r\n shape.setIsRotatable(false);\r\n shape.shapeRotatable.reInitShapePoints();\r\n shape.shapeRotatable.destroy();\r\n shape.shapeRotatable = null;\r\n store.dispatch(deleteChangeValuePopup('shape' + shape.id));\r\n },\r\n setShapeAsRotatable: (shape) => {\r\n const isSlabMode = SqftStore.isSlabMode();\r\n // todo fix rotation of slab images in slab mode\r\n if (shape instanceof MovableImage && shape.type === MOVABLE_IMAGE_TYPES.slabImage && isSlabMode) {\r\n return\r\n }\r\n shape.shapeRotatable = new ShapeRotatable(shape);\r\n shape.setIsRotatable(true);\r\n const shapeOffset = shape.getOffset();\r\n const isCabinet = isSFTCabinetsGroup();\r\n let changeValuePopupPosition;\r\n if (isCabinet) {\r\n const shapeHeight = shape instanceof MovableImage ? shape.getHeight(): shape.shapeCabinet.getShapeHeight();\r\n const shapeWidth = shape instanceof MovableImage ? shape.getWidth() : shape.shapeCabinet.getShapeWidth();\r\n changeValuePopupPosition = {left: shapeOffset.x, top: shapeOffset.y - (shapeHeight + shapeWidth) * sqftConfig.scale / 2}\r\n } else {\r\n changeValuePopupPosition = {left: shapeOffset.x, top: shapeOffset.y}\r\n }\r\n\r\n const changeRotatedDegreeValuePopup = new ChangeValuePopup(\r\n 'shape' + shape.id,\r\n 0,\r\n 360,\r\n () => {\r\n sqftConfig.workspace.menuItemActive = SIDEBAR_NAVIGATION_BUTTONS.move\r\n sqftShapeManager.disableRotatableState(shape);\r\n //store.dispatch(setSQFTMenuOpened(''));\r\n //store.dispatch(setSQFTActiveButton(SIDEBAR_NAVIGATION_BUTTONS.rotate));\r\n },\r\n () => {\r\n const state = store.getState();\r\n const valuePopup = state.sqftMenuState.changeValuePopups.find(valuePopup => valuePopup.id === 'shape' + shape.id);\r\n shape.rotate(1, shape.Direction.LEFT, isSlabMode);\r\n const newValuePopup = {...valuePopup, value: isSlabMode ? shape.rotatedDegreesSlab : shape.rotatedDegrees};\r\n store.dispatch(changeValuePopup(newValuePopup));\r\n },\r\n () => {\r\n const state = store.getState();\r\n const valuePopup = state.sqftMenuState.changeValuePopups.find(valuePopup => valuePopup.id === 'shape' + shape.id);\r\n const value = (isSlabMode ? shape.rotatedDegreesSlab : shape.rotatedDegrees) - 1 < 0 ? 359 : -1 ;\r\n shape.rotate(value, shape.Direction.LEFT, isSlabMode);\r\n store.dispatch(changeValuePopup({...valuePopup, value: isSlabMode ? shape.rotatedDegreesSlab : shape.rotatedDegrees}));\r\n },\r\n (e) => {\r\n const state = store.getState();\r\n const valuePopup = state.sqftMenuState.changeValuePopups.find(valuePopup => valuePopup.id === 'shape' + shape.id);\r\n const value = parseInt(e.target.value);\r\n if (Number.isInteger(value) && 359 > value > 0) {\r\n shape.rotate(value - (isSlabMode ? shape.rotatedDegreesSlab : shape.rotatedDegrees), shape.Direction.LEFT, isSlabMode);\r\n isSlabMode ? shape.rotatedDegreesSlab = value : shape.rotatedDegrees = value;\r\n store.dispatch(changeValuePopup({...valuePopup, value: value}));\r\n }\r\n },\r\n isSlabMode ? shape.rotatedDegreesSlab : shape.rotatedDegrees,\r\n changeValuePopupPosition\r\n );\r\n store.dispatch(addChangeValuePopup(changeRotatedDegreeValuePopup));\r\n },\r\n\r\n rotateShapeTo90Deg: (shape) => {\r\n // Check if the slab mode is active\r\n const isSlabMode = SqftStore.isSlabMode();\r\n const state = store.getState();\r\n\r\n // Find the corresponding popup for changing shape values\r\n const valuePopup = state.sqftMenuState.changeValuePopups.find(valuePopup => valuePopup.id === 'shape' + shape.id);\r\n\r\n // Determine the current rotation angle\r\n const currentRotation = isSlabMode ? shape.rotatedDegreesSlab : shape.rotatedDegrees;\r\n\r\n\r\n if ([0, 90, 180, 270, 360].includes(currentRotation)) {\r\n // Calculate the new rotation angle, adding 90 degrees and ensuring it wraps around after 360\r\n const newRotation = (currentRotation + 90) % 360;\r\n\r\n // Rotate the shape by the difference between the new and current rotation angles\r\n shape.rotate(newRotation - currentRotation, shape.Direction.LEFT, isSlabMode);\r\n\r\n // Update the shape's rotation angle based on whether slab mode is active\r\n if (isSlabMode) {\r\n shape.rotatedDegreesSlab = newRotation;\r\n } else {\r\n shape.rotatedDegrees = newRotation;\r\n }\r\n\r\n store.dispatch(changeValuePopup({...valuePopup, value: newRotation}));\r\n }\r\n },\r\n\r\n getShapeCornerPoints: () => {\r\n //todo\r\n },\r\n getMinMaxBumpoutPoints: (line, minX, maxX, minY, maxY, isPointOnField) => {\r\n let bumpoutPoints = line.bumpoutOverlay.getBumpoutPoints();\r\n let pointField;\r\n if (isPointOnField) {\r\n pointField = getPointField(bumpoutPoints.dragPoint.x, bumpoutPoints.dragPoint.y, line.getParent())\r\n } else {\r\n pointField = bumpoutPoints.dragPoint\r\n }\r\n minX = pointField.x < minX ? pointField.x : minX;\r\n maxX = pointField.x > maxX ? pointField.x : maxX;\r\n minY = pointField.y < minY ? pointField.y : minY;\r\n maxY = pointField.y > maxY ? pointField.y : maxY;\r\n\r\n return [minX, maxX, minY, maxY]\r\n },\r\n getMinMaxShapesPointsOnWorkspace: (shapes, shouldGetRegularPosition = false) => {\r\n if (shapes.length > 0) {\r\n let shapesPoints = [];\r\n shapes.forEach(shp => {\r\n if (shp.getPointsPosOnWorkspace) {\r\n shapesPoints.push(...shp.getPointsPosOnWorkspace(shouldGetRegularPosition));\r\n }\r\n });\r\n let pointsMinMax = sqftShapeManager.getMinMaxPoints(shapesPoints, false);\r\n\r\n //console.log(\"shapesMinMax\", pointsMinMax);\r\n\r\n return [\r\n {x: pointsMinMax.minX, y: pointsMinMax.minY},\r\n {x: pointsMinMax.maxX, y: pointsMinMax.minY},\r\n {x: pointsMinMax.maxX, y: pointsMinMax.maxY},\r\n {x: pointsMinMax.minX, y: pointsMinMax.maxY}\r\n ];\r\n }\r\n return []\r\n },\r\n getShapesConvexHullPointsOnWorkspace: (shapes) => {\r\n if (shapes.length > 0) {\r\n let shapesPoints = [];\r\n shapes.forEach(shp => {\r\n shapesPoints.push(...shp.getPointsPosOnWorkspace());\r\n });\r\n return convexHull(shapesPoints);\r\n }\r\n return []\r\n },\r\n getShapesConvexHullPointsPointField: (shapes) => {\r\n if (shapes.length > 0) {\r\n let shapesPoints = [];\r\n shapes.forEach(shp => {\r\n shapesPoints.push(...shp.getPointsPointField());\r\n });\r\n return convexHull(shapesPoints);\r\n }\r\n return []\r\n },\r\n getShapesContourPointsOnWorkspace: (shapes, shoudRemoveRepeatingPoints = true) => {\r\n if (shapes.length > 0) {\r\n const shapesPointsOnWorkspace = shapes.map(shp => {\r\n return shp.getPointsPosOnWorkspace();\r\n });\r\n const unifiedPoints = unifyShapePoints(shapesPointsOnWorkspace);\r\n if (shoudRemoveRepeatingPoints) {\r\n removeConsecutiveDuplicates(unifiedPoints);\r\n }\r\n return unifiedPoints\r\n }\r\n return []\r\n },\r\n getShapesOverhangOnWorkspace: (contourPoints, snappedShapes, minOverlap = 2) => {\r\n const shapes = workspace.getShapes();\r\n const overhangShapes = shapes.filter(shp => {\r\n const canShapeCreateOverhang = SQFT_SHAPES_THAT_ADD_OVERHANG.includes(shp.subType) || SQFT_SHAPES_THAT_ADD_OVERHANG.includes(shp.partId);\r\n const isShapeInsideSnappedShapes = snappedShapes.includes(shp);\r\n return canShapeCreateOverhang && !isShapeInsideSnappedShapes\r\n }\r\n );\r\n let results = new Array(contourPoints.length ? contourPoints.length - 1 : 0).fill(true);\r\n\r\n if (overhangShapes.length > 0) {\r\n for (const overhangShape of overhangShapes) {\r\n const pointsPosOnWorkspace = overhangShape.getPointsPosOnWorkspace();\r\n const roundedPoints = roundShapePoints(pointsPosOnWorkspace);\r\n roundedPoints.push(roundedPoints[0]); //close polygon\r\n\r\n for (let i = 0; i < contourPoints.length - 1; i++) {\r\n const cp1 = contourPoints[i];\r\n const cp2 = contourPoints[i + 1];\r\n for (let j = 0; j < roundedPoints.length - 1; j++) {\r\n const rp1 = roundedPoints[j];\r\n const rp2 = roundedPoints[j + 1];\r\n if (areCollinearAndOverlap(cp1, cp2, rp1, rp2, minOverlap)) {\r\n results[i] = false;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n //debugger // eslint-disable-line no-debugger\r\n return results\r\n },\r\n getShapesContourPointsPointField: (shapes) => {\r\n if (shapes.length > 0) {\r\n const shapesPointField = shapes.map(shp => {\r\n return shp.getPointsPointField();\r\n });\r\n return unifyShapePoints(shapesPointField);\r\n }\r\n return []\r\n },\r\n getMinMaxShapePoints: (shape, isIncludeBumpout = true, isPointOnField = true) => {\r\n let from;\r\n let to;\r\n let minX = null;\r\n let maxX = null;\r\n let minY = null;\r\n let maxY = null;\r\n let lines = shape.getLines();\r\n //let offset = workspace.getOffset();\r\n\r\n for (let n = 0; n < lines.length; n++) {\r\n if (isPointOnField) {\r\n from = getPointField(lines[n].from.x, lines[n].from.y, shape);\r\n to = getPointField(lines[n].to.x, lines[n].to.y, shape);\r\n } else {\r\n from = lines[n].from;\r\n to = lines[n].to;\r\n }\r\n\r\n if (minX === null) {\r\n minX = from.x < to.x ? from.x : to.x;\r\n maxX = from.x > to.x ? from.x : to.x;\r\n minY = from.y < to.y ? from.y : to.y;\r\n maxY = from.y > to.y ? from.y : to.y;\r\n }\r\n\r\n if (isIncludeBumpout && lines[n].isWithBumpout()) {\r\n [minX, maxX, minY, maxY] = sqftShapeManager.getMinMaxBumpoutPoints(lines[n], minX, maxX, minY, maxY , isPointOnField);\r\n }\r\n\r\n minX = from.x < minX ? from.x : minX;\r\n maxX = from.x > maxX ? from.x : maxX;\r\n minX = to.x < minX ? to.x : minX;\r\n maxX = to.x > maxX ? to.x : maxX;\r\n\r\n minY = from.y < minY ? from.y : minY;\r\n maxY = from.y > maxY ? from.y : maxY;\r\n minY = to.y < minY ? to.y : minY;\r\n maxY = to.y > maxY ? to.y : maxY;\r\n }\r\n\r\n return {\r\n minX : minX,\r\n maxX : maxX,\r\n minY : minY,\r\n maxY : maxY\r\n }\r\n },\r\n getMinMaxPoints: (points, isPointOnField = true) => {\r\n let point;\r\n let minX = null;\r\n let maxX = null;\r\n let minY = null;\r\n let maxY = null;\r\n\r\n for (let n = 0; n < points.length; n++) {\r\n if (isPointOnField) {\r\n point = getPointField(points[n].x, points[n].y, points[n].getGrandParent ? points[n].getGrandParent(): workspace);\r\n } else {\r\n point = points[n];\r\n }\r\n\r\n if (minX === null) {\r\n minX = point.x;\r\n maxX = point.x;\r\n minY = point.y;\r\n maxY = point.y;\r\n }\r\n\r\n minX = point.x < minX ? point.x : minX;\r\n maxX = point.x > maxX ? point.x : maxX;\r\n minY = point.y < minY ? point.y : minY;\r\n maxY = point.y > maxY ? point.y : maxY;\r\n }\r\n\r\n return {\r\n minX : minX,\r\n maxX : maxX,\r\n minY : minY,\r\n maxY : maxY\r\n }\r\n },\r\n setIsDisabledShapeInPopup: (id, isDisabledInPopup) => {\r\n let shape = sqftShapeManager.getShapeById(id);\r\n if (shape) {\r\n shape.isDisabledInPopup = isDisabledInPopup;\r\n if (isDisabledInPopupShouldBeHidden()) {\r\n if (isDisabledInPopup && shape.deregisterEvents) {\r\n shape.deregisterEvents()\r\n shape.shapeSlab.resetShapeSeams();\r\n } else if (shape.reInitEvents) {\r\n shape.reInitEvents();\r\n }\r\n }\r\n }\r\n },\r\n getSnappedShapes: (snappedShapeGroup) => {\r\n const shapes = workspace.getShapes();\r\n return shapes.filter(shp => {\r\n return !!(shp.shapeAbsolute && (shp.shapeAbsolute.getSnappedShapeGroup() === snappedShapeGroup))\r\n })\r\n },\r\n\r\n changeShapesFeatureIDIfColorWasChanged: (feature) => {\r\n if (feature && feature.partId) {\r\n const shapes = workspace.getShapes();\r\n const partId = Object.keys(SQFT_CHILD_FEATURE_GROUP_PART_IDS).includes(feature.partId)\r\n ? SQFT_CHILD_FEATURE_GROUP_PART_IDS[feature.partId]\r\n : feature.partId;\r\n\r\n //also include spacers\r\n const filteredShapes = shapes.filter(shape => shape.partId === partId || shape.parentPartId === partId );\r\n filteredShapes.forEach((shape) => {\r\n if (shape instanceof sqftShape) {\r\n shape.changeFeatureIdIfColorWasChanged(feature);\r\n }\r\n })\r\n }\r\n },\r\n updateShapeColorSet: (shapeId) => {\r\n const shape = workspace.getShapeById(shapeId);\r\n if (shape instanceof sqftShape) {\r\n shape.updateColorSet();\r\n }\r\n },\r\n updateMinMaxMiteredPoints: (shape) => {\r\n const lines = shape.getLines();\r\n for (const line of lines) {\r\n if (line.isWithMitered()) {\r\n line.miteredOverlay.updateMinMaxPoints();\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport default sqftShapeManager\r\n","//********* NAVIGATION *********//\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const toggleDesktopNavigation = (desktopNavigationOpened = false) => ({\r\n type: types.TOGGLE_DESKTOP_NAVIGATION,\r\n payload: {desktopNavigationOpened}\r\n});\r\n\r\nexport const setNavigationViewType = (navigationViewType = 3) => ({\r\n type: types.SET_NAVIGATION_VIEW_TYPE,\r\n payload: {navigationViewType}\r\n});\r\n\r\nexport const setActiveNavigationNames = (activeNavigationParentName, activeNavigationChildName) => ({\r\n type: types.SET_ACTIVE_NAVIGATION_NAMES,\r\n payload: {activeNavigationParentName, activeNavigationChildName}\r\n});\r\n\r\nexport const setNavigationLoading = (navigationLoadingActive) => ({\r\n type: types.SET_NAVIGATION_LOADING,\r\n payload: {navigationLoadingActive}\r\n});\r\n\r\n// MODULE\r\nexport const setModuleContextMenuType = (moduleContextMenuType) => ({\r\n type: types.SET_MODULE_CONTEXT_MENU_TYPE,\r\n payload: {moduleContextMenuType}\r\n});\r\nexport const setModuleContextMenuDirection = (moduleContextMenuDirection) => ({\r\n type: types.SET_MODULE_CONTEXT_MENU_DIRECTION,\r\n payload: {moduleContextMenuDirection}\r\n});\r\nexport const setModuleContextMenuModule = (moduleContextMenuModule) => ({\r\n type: types.SET_MODULE_CONTEXT_MENU_MODULE,\r\n payload: {moduleContextMenuModule}\r\n});\r\nexport const setModuleContextMenuModulePart = (moduleContextMenuModulePart) => ({\r\n type: types.SET_MODULE_CONTEXT_MENU_MODULE_PART,\r\n payload: {moduleContextMenuModulePart}\r\n});\r\n\r\n// CABINET MODULE FILTERS\r\nexport const setActiveNavigationFilter = (activeNavigationFilter) => ({\r\n type: types.SET_ACTIVE_NAVIGATION_FILTER,\r\n payload: {activeNavigationFilter}\r\n});\r\nexport const setActiveNavigationFilterStepIndex = (activeNavigationFilterStepIndex) => ({\r\n type: types.SET_ACTIVE_NAVIGATION_FILTER_STEP_INDEX,\r\n payload: {activeNavigationFilterStepIndex}\r\n});\r\nexport const setCabinetNavigationFilterCompleted = (cabinetNavigationFilterCompleted) => ({\r\n type: types.SET_CABINET_NAVIGATION_FILTER_COMPLETED,\r\n payload: {cabinetNavigationFilterCompleted}\r\n});\r\n\r\n//COUNTERTOP WIZARD\r\nexport const setCountertopNavigationFilterCompleted = (countertopNavigationFilterCompleted) => ({\r\n type: types.SET_COUNTERTOP_NAVIGATION_FILTER_COMPLETED,\r\n payload: {countertopNavigationFilterCompleted}\r\n});\r\nexport const setCountertopWizard = (countertopWizard) => ({\r\n type: types.SET_COUNTERTOP_WIZARD,\r\n payload: {countertopWizard}\r\n});\r\nexport const setCabinetsApplyTo = (cabinetsApplyTo) => ({\r\n type: types.SET_CABINETS_APPLY_TO,\r\n payload: {cabinetsApplyTo}\r\n});\r\nexport const setCabinetsApplyToBathroom = (cabinetsApplyToBathroom) => ({\r\n type: types.SET_CABINETS_APPLY_TO_BATHROOM,\r\n payload: {cabinetsApplyToBathroom}\r\n});\r\nexport const setCountertopsApplyTo = (countertopsApplyTo, newArrayLogic = false) => ({\r\n type: types.SET_COUNTERTOPS_APPLY_TO,\r\n payload: {countertopsApplyTo, newArrayLogic}\r\n});\r\nexport const setCountertopsApplyToBathroom = (countertopsApplyToBathroom, newArrayLogic = false) => ({\r\n type: types.SET_COUNTERTOPS_APPLY_TO_BATHROOM,\r\n payload: {countertopsApplyToBathroom, newArrayLogic}\r\n});\r\nexport const setApplyToCommon = (arrayToChange, isNewNotUsed, type) => {\r\n let arrayPropertyToChange = \"test\";\r\n switch (type) {\r\n case \"handles\":\r\n arrayPropertyToChange = \"handlesApplyToBathroom\";\r\n break;\r\n case \"showerFloor\":\r\n arrayPropertyToChange = \"showerFloorApplyToBathroom\";\r\n break;\r\n default:\r\n console.error(\"setApplyTo function no type passed\", type);\r\n break;\r\n }\r\n return {\r\n type: types.SET_APPLY_TO_COMMON,\r\n payload: {\r\n [arrayPropertyToChange]: arrayToChange,\r\n }\r\n }\r\n};\r\nexport const setEdgesApplyTo = (edgesApplyTo) => ({\r\n type: types.SET_EDGES_APPLY_TO,\r\n payload: {edgesApplyTo}\r\n});\r\n\r\n// TOGGLE DISABLED RADIO\r\nexport const toggleUpdateDisableFeatureGroupRadio = (updateDisableFeatureGroupRadio) => ({\r\n type: types.UPDATE_DISABLE_FEATURE_GROUP_RADIO,\r\n payload: {updateDisableFeatureGroupRadio}\r\n});\r\n\r\n// TOGGLE DISABLED RADIO\r\nexport const toggleNavItemPositionModal = (navItemPositionModal) => ({\r\n type: types.TOGGLE_NAV_ITEM_POSITION_MODAL,\r\n payload: {navItemPositionModal}\r\n});\r\n\r\nexport const setUseFeaturesLightRequest = (useFeaturesLightRequest) => ({\r\n type: types.SET_USE_FEATURES_LIGHT_REQUEST,\r\n payload: {useFeaturesLightRequest}\r\n});\r\n","import {getFeatureCost, isIE} from \"./helpers\";\r\nimport Config, {IS_LIXIL_SERVERS} from \"../config\";\r\nimport graniteTransformationUkSubDomains from \"./graniteTransformationUkSubDomains\";\r\n\r\nexport const LOWES_DISCLAIMER_EN = \"This cost includes your selection of material, edge profile, faucet cut-outs, templating, installation plus any other options you have selected. All quotes are subject to changes. No quote shall be final until the time of template. Quotes only reflect the selections, information and the amount of materials you have entered in the estimator tool. After your purchase a certified Contractor will go on site to verify all dimensions and details of your order. Price adjustments will be possible thereafter. All expenses not covered in this quote, like possible extra trip charges, 2nd story fees, oversize piece/difficult access charges,high rise installation charge which are out of program installation costs, permit fees or any other expense not captured in this quote will be added at time of template. Projects under 27 SF incur a surcharge. All quotes are valid for 30 days. ALL 3D DESIGN IMAGES ARE FOR INSPIRATIONAL PURPOSES ONLY. See a kitchen associate or Call 1-844-454-1454 to finalize your purchase.\"\r\n\r\nexport const getFabricatorLogo = (fabricatorData) => {\r\n const hardCodedLogo = `https://qc-cdn.s3.amazonaws.com/Logos/Quote-Kitchen-and-Bath.jpg`;\r\n const hardCodedLowesLogo = `https://qc-cdn.s3.amazonaws.com/Logos/lowes.png`;\r\n const hardCodedRenoDepotLogo = `https://qc-cdn.s3.amazonaws.com/Logos/reno-depot.png`;\r\n const hardCodedRonaLogo = `https://qc-cdn.s3.amazonaws.com/Logos/rona.png`;\r\n\r\n if (isIE()) {\r\n if (fabricatorData.isRenoDepot) {\r\n return hardCodedRenoDepotLogo\r\n } else if (fabricatorData.isRona) {\r\n return hardCodedRonaLogo\r\n } else if (fabricatorData.isLowes) {\r\n return hardCodedLowesLogo\r\n }\r\n return hardCodedLogo\r\n }\r\n\r\n if (Config.isDevMode() && fabricatorData.logoUrl && !fabricatorData.logoUrl.includes(\"http\") && document.kvConfig.domain) {\r\n return document.kvConfig.domain + fabricatorData.logoUrl\r\n }\r\n\r\n return fabricatorData.logoUrl || hardCodedLogo\r\n}\r\n\r\nexport const hardCodeIsLowes = () => {\r\n const subDomains = [\"mdp_surfaces\", \"lowes_\", \"/rona.\", \"rona_\", \"rnodpt\", \"reno_depot\"];\r\n if (Config.isDevMode() && (document.kvConfig.userId === 139043)) {\r\n return true;\r\n }\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain))\r\n};\r\n\r\nexport const hardCodeIsAmericanImport = () => {\r\n const subDomains = ['americanimport', 'americanstandard2020'];\r\n if (Config.isDevMode() && (document.kvConfig.userId === 140460 || document.kvConfig.userId === 155479)) { //American Import //American Standard 2020\r\n return true;\r\n }\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain));\r\n};\r\n\r\nexport const hardCodeIsAmericanStandard = () => {\r\n const subDomains = ['americanstandard'];\r\n if (Config.isDevMode() && (document.kvConfig.userId === 139882 || document.kvConfig.userId === 251108)) { //American Standard 2020 // Cory\r\n return true;\r\n }\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain));\r\n};\r\n\r\nexport const hardCodeIsRona = () => {\r\n const subDomains = [\"/rona.\", \"rona_\"];\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain))\r\n};\r\n\r\nexport const hardCodeIsRenoDepot = () => {\r\n const subDomains = [\"rnodpt\", \"reno_depot\"];\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain))\r\n};\r\n\r\nexport const hardCodeIsCaesarStone = () => {\r\n const domains = [\"quotetops.com\", \"quotekitchencountertops.com\"];\r\n return document.kvConfig.isCaesarStone || domains.some(domain => window.location.href.includes(domain))\r\n};\r\n\r\nexport const hardCodeIsModerno = () => {\r\n const subDomains = [\"moderno\"];\r\n return subDomains.some(subDomain => window.location.href.toLowerCase().includes(subDomain))\r\n};\r\n\r\nexport const hardCodeIsPorcelanosa = () => {\r\n const subDomains = [\"porcelanosa\"];\r\n return subDomains.some(subDomain => window.location.href.toLowerCase().includes(subDomain))\r\n};\r\n\r\nexport const hardCodeIsMcDermott = () => {\r\n const subDomains = [\"mcdermott_\", \"mts_\"];\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain))\r\n};\r\n\r\nexport const hardCodeIsFlexFinish = () => {\r\n const subDomains = [\"flexfinish\", \"flexfinish2\", \"flex_finish\"];\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain))\r\n};\r\n\r\nexport const hardCodeIsGraniteTransformation = () => {\r\n const subDomains = [\"granite_transformations\", \"trend_transformations\"];\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain))\r\n};\r\n\r\nexport const hardCodeIsGraniteTransformationUK = () => {\r\n return graniteTransformationUkSubDomains.some(subDomain => window.location.href.includes(subDomain))\r\n};\r\n\r\nexport const hardCodeIsLixil = () => {\r\n return [139247, 139616, 139882].some(userId => document.kvConfig.userId === userId) || [\"grohe\", \"grohe2\", \"americanstandard\"].some(subDomain => {\r\n return window.location.host && window.location.host.split && (window.location.host.split('.')[0] === subDomain)\r\n })\r\n}\r\n\r\nexport const hardCodeIsAgent = () => {\r\n return document.kvConfig.userId === 140203 || (\r\n window.location.host && window.location.host.split && (window.location.host.split('.')[0] === \"agent\")\r\n )\r\n}\r\n\r\nexport const hardCodeIsTorrco = () => {\r\n return document.kvConfig.userId === 140298 || document.kvConfig.userId === 140299 || (\r\n window.location.host && window.location.host.includes && window.location.host.includes(\"torrco\")\r\n )\r\n}\r\n\r\nexport const hardCodeIsCoburn = () => {\r\n return document.kvConfig.userId === 140590 || document.kvConfig.userId === 140558 || (\r\n window.location.host && window.location.host.includes && window.location.host.includes(\"coburns_\")\r\n )\r\n}\r\n\r\nexport const hardCodeIsSolidSurface = () => {\r\n return document.kvConfig.userId === 245802 || (\r\n window.location.host && window.location.host.includes && window.location.host.includes(\"solidsurface\")\r\n )\r\n}\r\n\r\nexport const hardCodeIsLakesideSurfaces = () => {\r\n return document.kvConfig.userId === 252014 || (\r\n window.location.host && window.location.host.includes && window.location.host.includes(\"lakeside_surfaces\")\r\n )\r\n}\r\n\r\nexport const hardCodeIsDeStefano = () => {\r\n return document.kvConfig.userId === 260280 || (\r\n window.location.host && window.location.host.includes && window.location.host.includes(\"de_stefano\")\r\n ) || window.location.href.includes(\"fab_subdomain=de_stefano\")\r\n}\r\n\r\nexport const hardCodeIsNhance = () => {\r\n return document.kvConfig.userId === 268895 || (\r\n window.location.host && window.location.host.includes && window.location.host.includes(\"nhance\")\r\n ) || window.location.href.includes(\"fab_subdomain=nhance\")\r\n}\r\n\r\nexport const hardCodeIsEncore = () => {\r\n return document.kvConfig.userId === 267710 || (\r\n window.location.host && window.location.host.includes && window.location.host.includes(\"encore\")\r\n ) || window.location.href.includes(\"fab_subdomain=encore\")\r\n}\r\n\r\nexport const isEncore = hardCodeIsEncore();\r\n\r\nexport const hardCodeIsFloform = () => {\r\n const subDomains = [\"floform\"];\r\n return subDomains.some(subDomain => window.location.href.toLowerCase().includes(subDomain))\r\n}\r\n\r\nexport const hardCodeIsDeluxegarage = () => {\r\n const subDomains = [\"deluxegarage\"];\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain))\r\n}\r\n\r\nexport const hardCodeIsRenuit = () => {\r\n const subDomains = [\"renuit\"];\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain))\r\n}\r\n\r\nexport const isCabinetsFabricator = () => {\r\n return [256713, 246203, 256713].some(userId => document.kvConfig.userId === userId)\r\n}\r\n\r\nexport const isProd = () => {\r\n const subDomains = [\"quotekitchenandbath\", \"quotekitchencountertops\"];\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain))\r\n}\r\n\r\nexport const getHardCodedFloFormShopCartCost = (cartItems) => {\r\n let materialTotalCost = 0;\r\n cartItems\r\n .filter(cartItem => {\r\n return cartItem.partId === \"center_island_countertop\"\r\n || cartItem.partId === \"countertop\"\r\n || (cartItem.partId === \"backsplash\" && (\r\n (cartItem.fromWizardGroupId === \"18\")\r\n || (cartItem.fromWizardGroupId === \"12\")\r\n || (cartItem.fromWizardGroupId === \"11\")\r\n || (cartItem.fromWizardGroupId === \"187\")\r\n || (cartItem.fromWizardGroupId === \"196\")\r\n || (cartItem.fromWizardGroupId === \"206\")\r\n ))\r\n })\r\n .forEach(cartItem => {\r\n materialTotalCost += getFeatureCost(cartItem.cartFeature, cartItem.quantity, cartItem.fromQtCategory);\r\n });\r\n // console.log(\"materialTotalCost\", materialTotalCost);\r\n return materialTotalCost * 0.1;\r\n}\r\n\r\nexport const isCafeCountetops = document.kvConfig.userId === 264613 || (\r\n window.location.host && window.location.host.includes && window.location.host.includes(\"cafecounterops\")\r\n);\r\n\r\nexport const hardCodeIsFabricator = (subDomain = \"\", fabId = null) => {\r\n if (!subDomain && !fabId) {\r\n return false\r\n }\r\n return (fabId && (document.kvConfig.userId === fabId)) || (\r\n window.location.host && window.location.host.includes && window.location.host.includes(subDomain)\r\n ) || window.location.href.includes(\"fab_subdomain=\" + subDomain)\r\n}\r\n\r\n\r\nexport const fabricatorsHardcodeObject = {\r\n // isRebath: document.kvConfig.userId === 71520 // removed as we don't use rebath at all\r\n // || window.location.href.includes(\"rebath\")\r\n // || window.location.href.includes(\"re-bath\"),\r\n // isRebath: window.location.href.includes(\"rebath\")\r\n // || window.location.href.includes(\"re-bath\")\r\n // || (action.payload.companyName && (action.payload.companyName.toLowerCase().includes(\"rebath\")\r\n // || action.payload.companyName.toLowerCase().includes(\"re-bath\")))\r\n // || (action.payload.name && (action.payload.name.toLowerCase().includes(\"rebath\")\r\n // || action.payload.name.toLowerCase().includes(\"re-bath\"))),\r\n isLowes: hardCodeIsLowes(),\r\n isRona: hardCodeIsRona(),\r\n isRenoDepot: hardCodeIsRenoDepot(),\r\n isAmericanImport: hardCodeIsAmericanImport(),\r\n isAmericanStandard: hardCodeIsAmericanStandard(),\r\n isCaesarStone: hardCodeIsCaesarStone(),\r\n isGraniteTransformation: hardCodeIsGraniteTransformation(),\r\n isGraniteTransformationUK: hardCodeIsGraniteTransformationUK(),\r\n isModerno: hardCodeIsModerno(),\r\n isMcDermott: hardCodeIsMcDermott(),\r\n isFlexFinish: hardCodeIsFlexFinish(),\r\n isLixil: hardCodeIsLixil(),\r\n isTorrco: hardCodeIsTorrco(),\r\n isCoburn: hardCodeIsCoburn(),\r\n isSolidSurface: hardCodeIsSolidSurface(),\r\n isLakesideSurfaces: hardCodeIsLakesideSurfaces(),\r\n isDeStefano: hardCodeIsDeStefano(),\r\n isNhance: hardCodeIsNhance(),\r\n isEncore: hardCodeIsEncore(),\r\n isGrohe: IS_LIXIL_SERVERS && hardCodeIsFabricator(\"grohe\", 139247),\r\n}\r\n","import {SpacersController} from \"./controllers/SpacersController\";\r\nimport {HandlesController} from \"./controllers/HandlesController\";\r\nimport {WallsController} from \"./controllers/WallsController\";\r\nimport {ShapeColorsController} from \"./controllers/ShapeColorsController\";\r\nimport {WaterfallController} from \"./controllers/line/WaterfallController\";\r\nimport {RemovedFeaturesController} from \"./controllers/RemovedFeaturesController\";\r\nimport {SnappedShapeGroupsController} from \"./controllers/SnappedShapeGroupsController\";\r\nimport {SelectedShapesController} from \"./controllers/SelectedShapesController\";\r\nimport {CrownMoldingController} from \"./controllers/line/CrownMoldingController\";\r\nimport {Images3dController} from \"./controllers/Images3dController\";\r\nimport {HingesController} from \"./controllers/HingesController\";\r\nimport {WORKSPACE_RESOURCES} from \"../../../constants\";\r\n\r\nexport const groupedDataInControllers = [\r\n WORKSPACE_RESOURCES.hinge\r\n]\r\n\r\nexport const controllersConfig = {\r\n exportableControllers: [\r\n 'walls',\r\n 'snappedShapeGroups',\r\n 'handles',\r\n WORKSPACE_RESOURCES.hinge,\r\n ],\r\n};\r\n\r\nexport const WORKSPACE_CONTROLLERS_THAT_WILL_ADD_FEATURES = [\r\n //WORKSPACE_RESOURCES.handles\r\n WORKSPACE_RESOURCES.hinge\r\n]\r\n\r\nconst workspaceControllers = {\r\n walls: new WallsController(),\r\n crownMolding: new CrownMoldingController(),\r\n spacer: new SpacersController(),\r\n handles: new HandlesController(),\r\n hinge: new HingesController(),\r\n shapeColors: new ShapeColorsController(),\r\n waterfall: new WaterfallController(),\r\n removedFeatures: new RemovedFeaturesController(),\r\n snappedShapeGroups: new SnappedShapeGroupsController(),\r\n selectedShapes: new SelectedShapesController(),\r\n images3d: new Images3dController(),\r\n};\r\n\r\nexport const getControllersExportData = () => {\r\n const exportData = {};\r\n controllersConfig.exportableControllers.forEach(controllerName => {\r\n const controller = workspaceControllers[controllerName];\r\n if (controller && typeof controller.exportData === 'function') {\r\n exportData[controllerName] = controller.exportData();\r\n }\r\n });\r\n\r\n return exportData;\r\n};\r\n\r\nexport const importControllersData = (data) => {\r\n if (data) {\r\n Object.keys(data).forEach(controllerName => {\r\n const controller = workspaceControllers[controllerName];\r\n if (controller && typeof controller.importData === 'function') {\r\n controller.importData(data[controllerName]);\r\n }\r\n });\r\n }\r\n};\r\n\r\nexport default workspaceControllers\r\n","import {useCallback, useEffect, useMemo, useRef, useState} from \"react\";\r\nimport sqftEventManager from \"../bvcomponents/sqft/components/canvas/store/sqftEventManager\";\r\nimport {checkIfLookFeaturesReceived} from \"../api/look-api\";\r\nimport store from \"../store\";\r\nimport {updateNavigationCount} from \"../actions/lookFunctions\";\r\nimport Config from \"../config\";\r\nimport {getRoomLayouts} from \"../bvcomponents/look/lookNavigation/lookFunctions\";\r\nimport {isProd} from \"./fabricatorHardcode\";\r\n\r\nexport const usePrevious = (value) => {\r\n const ref = useRef();\r\n useEffect(() => {\r\n ref.current = value;\r\n });\r\n return ref.current;\r\n}\r\n\r\nexport const useIsMounted = () => {\r\n const isMountedRef = useRef(true);\r\n const isMounted = useCallback(() => isMountedRef.current, []);\r\n\r\n useEffect(() => {\r\n return () => void (isMountedRef.current = false);\r\n }, []);\r\n\r\n return isMounted;\r\n}\r\n\r\nexport const IsMountedComponent = (props) => {\r\n const {children} = props;\r\n const isMountedComponent = useIsMounted();\r\n return typeof children === 'function' ? children(isMountedComponent) : children;\r\n}\r\n\r\nexport const useOutsideClick = (ref, callback, useSQFTCanvas = false) => {\r\n const handleClick = e => {\r\n if (ref.current && !ref.current.contains(e.target)) {\r\n callback(e);\r\n }\r\n };\r\n\r\n const handleClickThroughCanvasEvents = (mousePos, e) => {\r\n if (ref.current && !ref.current.contains(e.target)) {\r\n callback(e);\r\n }\r\n return false;\r\n };\r\n\r\n useEffect(() => {\r\n if (useSQFTCanvas) {\r\n const objectName = { name: 'helperOutsideClickHook' };\r\n\r\n document.addEventListener(sqftEventManager.events.CLICK, handleClick);\r\n //document.addEventListener(sqftEventManager.events.TOUCH_START, handleClick);\r\n sqftEventManager.addEvent(\r\n sqftEventManager.events.MOUSE_DOWN,\r\n handleClickThroughCanvasEvents,\r\n objectName,\r\n sqftEventManager.priorities.OVERALL\r\n );\r\n\r\n return () => {\r\n document.removeEventListener(sqftEventManager.events.CLICK, handleClick);\r\n //document.removeEventListener(sqftEventManager.events.TOUCH_START, handleClick);\r\n sqftEventManager.removeEvent(objectName);\r\n };\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [ref, callback, useSQFTCanvas]);\r\n};\r\n\r\nexport const useOutsideClickSimple = (ref, callback, excludedClassNames = null) => {\r\n const handleClick = event => {\r\n if (ref.current && !ref.current.contains(event.target)) {\r\n if (excludedClassNames && excludedClassNames.some(className => {\r\n return event.target.classList.contains(className) || event.target.closest(\".\"+className)\r\n })) {\r\n return\r\n }\r\n callback(event);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n document.addEventListener(\"click\", handleClick);\r\n\r\n return () => {\r\n document.removeEventListener(\"click\", handleClick);\r\n };\r\n });\r\n};\r\n\r\nexport const useProgressiveImage = (imageUrl) => {\r\n\r\n const [thumbnailLoaded, setThumbnailLoaded] = useState(false)\r\n const isMounted = useIsMounted();\r\n\r\n useEffect(() => {\r\n const image = new Image();\r\n image.onload = () => {\r\n if (isMounted()) {\r\n setThumbnailLoaded(true)\r\n }\r\n };\r\n image.onerror = () => {\r\n if (isMounted()) {\r\n setThumbnailLoaded(true)\r\n }\r\n };\r\n try {\r\n image.src = imageUrl;\r\n if (image.complete) {\r\n if (isMounted()) {\r\n setThumbnailLoaded(true)\r\n }\r\n }\r\n } catch (e) {\r\n if (isMounted()) {\r\n setThumbnailLoaded(true)\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [imageUrl])\r\n\r\n return thumbnailLoaded\r\n}\r\n\r\nlet requestInProgressTimeoutId = null;\r\n\r\nexport const useFeaturesChecker = (featureGroup, visualizersLoadedLength) => {\r\n\r\n const [featuresLoaded, setFeaturesLoaded] = useState(featureGroup ? featureGroup.allFeaturesReceived : false)\r\n const isMounted = useIsMounted();\r\n\r\n const checkFeatures = () => {\r\n if (!featureGroup.allFeaturesReceived) {\r\n if (featureGroup.requestInProgress) {\r\n const callRecursiveFeaturesCheck = () => {\r\n console.log(\"callRecursiveFeaturesCheck\", featureGroup);\r\n if (featureGroup.allFeaturesReceived) {\r\n clearTimeout(requestInProgressTimeoutId);\r\n store.dispatch(updateNavigationCount());\r\n if (isMounted()) {\r\n setFeaturesLoaded(true)\r\n }\r\n return\r\n }\r\n requestInProgressTimeoutId = setTimeout(callRecursiveFeaturesCheck, 1000); // check every second for response\r\n };\r\n setTimeout(callRecursiveFeaturesCheck, 1000); // first time\r\n } else {\r\n checkIfLookFeaturesReceived(featureGroup).then(() => {\r\n // store.dispatch(updateFeatureGroupCount());\r\n store.dispatch(updateNavigationCount());\r\n if (isMounted()) {\r\n setFeaturesLoaded(true)\r\n }\r\n })\r\n }\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (!featureGroup || !visualizersLoadedLength) {\r\n return false\r\n }\r\n if (!featureGroup.allFeaturesReceived) {\r\n checkFeatures()\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [featureGroup, visualizersLoadedLength])\r\n\r\n return featuresLoaded\r\n}\r\n\r\nexport const useShowRoomLayoutsButton = (activePreset, isMobile, visualizersLoadedLength) => {\r\n return useMemo(() => {\r\n if (!visualizersLoadedLength) {\r\n return false\r\n }\r\n if (isMobile) {\r\n return false\r\n }\r\n if (Config.isVisualizerManagement()) {\r\n return true\r\n }\r\n if (isProd()) { // hided room scenes for production URLs\r\n return false\r\n }\r\n return getRoomLayouts().length > 1\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [activePreset, visualizersLoadedLength, isMobile])\r\n};\r\n","import invert from 'lodash/invert';\r\n\r\nimport {splitFeatureName} from \"../../../misc/utils\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport {Part} from \"./part\";\r\nimport store from '../../../store';\r\nimport {LayoutAbbreviation, LayoutType} from \"./constants\";\r\nimport {getFeatureIsLocked} from \"../../../misc/helpers\";\r\nimport {SIDE_POSITIONS} from \"../../look/core/constants\";\r\n\r\n/**\r\n * Used for Complex parts such as Vanity, to perform some base functionality for related items\r\n */\r\nexport class IntermediatePart extends Part {\r\n\r\n constructor(isChild) {\r\n super(false, isChild);\r\n this.disabled = false;\r\n this.defaultDisabled = false; // used after reset click\r\n this.canBeDisabled = false;\r\n }\r\n\r\n /**\r\n * This will be called on feature creation\r\n * @param dbFeature\r\n */\r\n load(dbFeature) {\r\n if (this.layerPositions) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] && dbFeature.metaData[\"Side\"][0] !== \"0\"\r\n ? dbFeature.metaData[\"Side\"][0]\r\n : SIDE_POSITIONS[0];\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === SIDE_POSITIONS[0] ? 1 : 2;\r\n const instance = new this.constructor(false, partNumber);\r\n return this.load_(dbFeature, instance, true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n return this.load_(dbFeature, new this.constructor());\r\n }\r\n\r\n /**\r\n * This will be called by the underlying vanity feature with a concrete instance of the part\r\n * @param dbFeature\r\n * @param part {Part}\r\n * @param setParent {boolean}\r\n * @param features\r\n */\r\n load_(dbFeature, part, setParent = true, features = 'features') {\r\n\r\n const featureList = features + \"List\";\r\n\r\n const {displayName} = dbFeature;\r\n let {featureName} = splitFeatureName(displayName);\r\n if (!featureName && dbFeature.groupName && dbFeature.displayName) {\r\n featureName = dbFeature.displayName.replace(dbFeature.groupName + \" - \", \"\")\r\n }\r\n // console.log('displayName:', displayName);\r\n\r\n if (setParent) {\r\n part.getParent = () => this;\r\n if (dbFeature.galleryImages) {\r\n const featured = dbFeature.galleryImages.find(galImage => galImage.featured);\r\n if (featured) {\r\n this.featuredImage = featured.url\r\n }\r\n dbFeature.galleryImages = dbFeature.galleryImages.sort((a, b) => b.default - a.default)\r\n }\r\n }\r\n\r\n if (!dbFeature.sharedFeatureName) {\r\n console.error(\"No sharedFeatureName property:\", dbFeature);\r\n }\r\n\r\n part.partName = featureName;\r\n part.metaData = dbFeature.metaData || {};\r\n\r\n if (dbFeature.s3Bindings && dbFeature.s3Bindings.length) {\r\n // dbFeature.s3Bindings = dbFeature.s3Bindings.filter(binding => binding.visualizer === \"Fireplace\")\r\n }\r\n\r\n part.dbFeature = dbFeature || {};\r\n if (!part.dbFeature.filterValueIDs) {\r\n part.dbFeature.filterValueIDs = {}\r\n }\r\n part.notAvailableInVisualizer = !dbFeature.s3Bindings || !dbFeature.s3Bindings.length;\r\n\r\n if (part.metaData.RoomLayout) {\r\n const roomLayout = part.metaData.RoomLayout;\r\n if (roomLayout.includes(LayoutAbbreviation.All)) {\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n } else if (Array.isArray(roomLayout) && roomLayout.length) {\r\n roomLayout.forEach(roomLayoutAbbreviation => {\r\n const layoutName = invert(LayoutAbbreviation)[roomLayoutAbbreviation];\r\n if (layoutName) { // Prevent bad roomLayout Metadata\r\n this[featureList][layoutName].push(part);\r\n }\r\n });\r\n } else { // single value\r\n const layoutName = invert(LayoutAbbreviation)[roomLayout];\r\n if(layoutName) {\r\n this[featureList][layoutName].push(part);\r\n }\r\n }\r\n }\r\n\r\n if (part.notAvailableInVisualizer || !part.metaData.RoomLayout) {\r\n part.notAvailableInVisualizer = true;\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n }\r\n\r\n // Object.keys(LayoutType).forEach(layoutName => {\r\n // this[features+\"List\"][layoutName].push(part);\r\n // });\r\n\r\n this.loadFeatureCommon(part);\r\n\r\n return part\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions()\r\n }\r\n\r\n // navigationSubItems(filters, searchText, forFeature, filterGroups, firstOpenedFeature, firstOpenedConditions) { // to do\r\n navigationSubItems(filters, searchText) {\r\n // const featuresList = (forFeature && forFeature.metaData.layerPosition === SIDE_POSITIONS[1]) ? this.featuresParts : this.features;\r\n const filteredAvailableFeatures = this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters, this.features), searchText);\r\n let featuresToDisplay = this.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n // console.log(\"filterGroups\", filterGroups);\r\n return this.returnUniqueNavFeatures(featuresToDisplay)\r\n }\r\n\r\n navigationSubItemsWithFilter(propName, propValue, featuresToCheck = this.features) {\r\n return featuresToCheck.filter((feature) => {\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n }).map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n navigationSubItemsWithFilterMultipleConditions(arrayOfConditions, featuresToCheck = this.features) {\r\n // console.log('arrayOfConditions', arrayOfConditions);\r\n // console.log('featuresToCheck', featuresToCheck);\r\n return featuresToCheck.filter((feature) => {\r\n return feature.notAvailableInVisualizer || arrayOfConditions.every((conditionObject) => {\r\n const {propName, propValue} = conditionObject;\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n });\r\n })\r\n }\r\n\r\n setDefault(layout, setNotInVisFeature = false) {\r\n this.setFeatureGroupDefault(layout, setNotInVisFeature)\r\n }\r\n\r\n setLayerPositions = (activeFeature = this.activeFeature) => {\r\n if (!activeFeature) {\r\n return\r\n }\r\n const layout = this.getParent().layout;\r\n const conditions = this.getArrayOfConditions();\r\n if (layout && this.defaultLayerLayoutPositions && this.defaultLayerLayoutPositions[layout.type]) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.defaultLayerLayoutPositions[layout.type] === key\r\n && (!this.layerPositions[key] || !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n } else if (activeFeature.dbFeature.metaData[\"layerPosition\"] !== key) {\r\n this.layerPositions[key] = null;\r\n }\r\n })\r\n } else {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (layout.initialized) {\r\n if ((activeFeature.dbFeature.metaData[\"layerPosition\"] === key)\r\n && (this.layerPositions[key] && !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n // } else if (this.setAllLayerPositions) {\r\n } else if (this.layerPositions[key]) { // here we have to change vanity cabinet to console for example\r\n const matchingPositionFeature = this.getMatchingPositionFeature(key);\r\n if (matchingPositionFeature) {\r\n this.layerPositions[key] = matchingPositionFeature;\r\n }\r\n }\r\n } else { // first time we should set everything by the default! // missing layers issue\r\n if ((activeFeature.dbFeature.metaData[\"layerPosition\"] === key)\r\n && (!this.layerPositions[key] || !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n // } else if (this.setAllLayerPositions) {\r\n } else {\r\n const matchingPositionFeature = this.getMatchingPositionFeature(key);\r\n if (matchingPositionFeature) {\r\n this.layerPositions[key] = matchingPositionFeature;\r\n }\r\n }\r\n }\r\n })\r\n }\r\n }\r\n\r\n toggleLayerPositions() {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n this.layerPositions[key] = this.disabled ? null : this.getMatchingPositionFeature(key)\r\n })\r\n }\r\n\r\n getMatchingPositionFeature = (position = \"\", fromFeature = this.activeFeature, fromLayout = null) => {\r\n if (fromFeature) { //just in case\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n let arrayOfConditions = this.getArrayOfConditions();\r\n if (fromFeature.metaData[\"SkuName\"]) {\r\n arrayOfConditions.push({\r\n propName: \"SkuName\",\r\n propValue: fromFeature.metaData[\"SkuName\"]\r\n })\r\n }\r\n if (fromLayout) {\r\n let roomLayoutMeta = arrayOfConditions.find(condition => condition.propName === \"RoomLayout\");\r\n let roomSceneMeta = arrayOfConditions.find(condition => condition.propName === \"RoomScene\");\r\n if (roomLayoutMeta) {\r\n roomLayoutMeta.propValue = fromLayout.getCurrentLayoutAbbreviation();\r\n }\r\n if (roomSceneMeta) {\r\n roomSceneMeta.propValue = fromLayout.scene;\r\n }\r\n }\r\n const skuNamesPartIds = [\"shower_door\", \"walk_in_tub\", \"shower_pan_combo\"];\r\n const whereToFind = (!this.layerPositions || (position === Object.keys(this.layerPositions)[0])) ? this.features : this.featuresParts;\r\n return whereToFind.find((feature) => {\r\n return (skuNamesPartIds.includes(this.partId) || name1 === feature.getSplittedFeatureName())\r\n && feature.matchesMetaForArrayOfConditions(arrayOfConditions) && feature.metaData[\"layerPosition\"] === position\r\n });\r\n }\r\n return null\r\n };\r\n\r\n getArrayOfConditions() {\r\n const layout = this.getParent().layout;\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: layout.getCurrentLayoutAbbreviation()\r\n }, {\r\n propName: 'RoomScene',\r\n propValue: layout.scene\r\n }];\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n if (this.hasAdditionalParts) {\r\n this.checkIfFeaturePartIsMatching();\r\n }\r\n return this._setLayers(layout);\r\n }\r\n this.setDefault(layout);\r\n return this._setLayers(layout);\r\n }\r\n showLayerPositionsModal() {\r\n return false\r\n }\r\n\r\n clickFromAllWalls(ignoreLocked) {\r\n if (this && this.dbFeature && this.dbFeature.sharedFeatureName) {\r\n console.log(`${this.partId}:`, this.dbFeature.sharedFeatureName);\r\n }\r\n this.handleClick(ignoreLocked, \"all_walls\");\r\n }\r\n\r\n tryToSetTheSameFeature(filteredFeatures = [], partName = \"\") {\r\n if (this.activeFeature && this.activeFeature.partName) {\r\n let splittedFromTheLayoutName = partName\r\n ? this.removeLayoutFromPartName(partName)\r\n : this.activeFeature.getMatchingFeatureName();\r\n this.activeFeature = filteredFeatures.find(feature => {\r\n return feature.getMatchingFeatureName() === splittedFromTheLayoutName\r\n });\r\n if (this.activeFeature) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * @param ignoreLocked {boolean} // false by the default, is used by wizard ONLY\r\n */\r\n handleClick(ignoreLocked = false) {\r\n const parent = this.getParent();\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n parent.firstClick[activeQuoteIndex] = true; // allow to show active item\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (featureIsLocked) {\r\n parent.activeLockedFeature = this;\r\n } else {\r\n if (parent.activeLockedFeature) {\r\n parent.activeLockedFeature = null;\r\n }\r\n this.featureClick();\r\n }\r\n }\r\n\r\n featureClick() {\r\n const parent = this.getParent();\r\n parent.placeholderChanged = true;\r\n if (this.notAvailableInVisualizer) {\r\n parent.activeNotInVisualizerFeature = this; // do not change the activeFeature (in order to keep the layer)\r\n } else if (parent.activeNotInVisualizerFeature) {\r\n parent.activeNotInVisualizerFeature = null; // remove it from other searches and so on\r\n parent.activeFeature = this;\r\n } else {\r\n parent.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n hideLayers() {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.src = '';\r\n }\r\n if (Array.isArray(this.activeFeatureParts) && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.src = '';\r\n }\r\n })\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.src = '';\r\n }\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.src = '';\r\n }\r\n })\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n\r\n const getZIndex = (feature, partId = null) => {\r\n return feature.metaData[\"ZSorting\"] ? feature.metaData[\"ZSorting\"] * 1000 : zIndexes[partId || this.partId];\r\n }\r\n\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n const feature = this.layerPositions[key];\r\n if (feature) {\r\n feature.layer.zIndex = getZIndex(feature) + keyIndex*10;\r\n }\r\n })\r\n } else if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = getZIndex(this.activeFeature);\r\n if (this.hasAdditionalParts && this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart, keyIndex) => {\r\n activeFeaturePart.layer.zIndex = getZIndex(activeFeaturePart, this.additionalPartPartId) + (keyIndex + 1) * 10;\r\n });\r\n }\r\n }\r\n }\r\n\r\n removeEdgeFromPartName(partName) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n if (edgeFilterGroup && edgeFilterGroup.values && edgeFilterGroup.values.length) {\r\n const edgeFilterGroupValues = edgeFilterGroup.values.sort((a,b) => {\r\n return a.value && b.value && (b.value.length - a.value.length)\r\n }); // 1st should be \"Full Bullnose\", then simple \"Bullnose\"\r\n edgeFilterGroupValues.forEach((filterGroupValue) => { // arrayOf {id: 293, value: \"Eased\", displayText: \"Eased\", parent_id: null, icon: \"\", …}\r\n partName = partName.split(\" \"+filterGroupValue.value).join(\"\");\r\n });\r\n }\r\n return partName\r\n }\r\n\r\n getCountertopGroupsSplittedFeatureName = () => {\r\n if (this._countertopGroupsCustomDisplayName == null) {\r\n this._countertopGroupsCustomDisplayName = this.dbFeature.sharedFeatureName;\r\n }\r\n return this._countertopGroupsCustomDisplayName\r\n };\r\n\r\n getSplittedFeatureName = () => {\r\n if (this._customDisplayName == null) {\r\n this._customDisplayName = this.dbFeature.sharedFeatureName || this.partName || \"\";\r\n }\r\n return this._customDisplayName\r\n };\r\n\r\n getMatchingFeatureName = () => {\r\n return this.getSplittedFeatureName()\r\n };\r\n\r\n getModuleFeatureName = () => {\r\n // return this.partName.split(\" M_\")[0];\r\n return this.partName.split(\" M\")[0];\r\n };\r\n\r\n featureIsMatchingFilters(currentFeature, activeFilters, filters = []) {\r\n return filters.every(filter => {\r\n return activeFilters[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id].includes(activeFilters[filter.id][0])\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n let activeFeaturePart;\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n // if (this.partId === \"right_wall\") {\r\n // arrayOfConditions = arrayOfConditions.filter(condition => condition.propName !== \"MirrorSize\");\r\n // }\r\n if (this.getAdditionalPartsConditions) {\r\n arrayOfConditions = this.getAdditionalPartsConditions(arrayOfConditions); // modify or extend parts conditions\r\n }\r\n activeFeatureParts = this.featuresParts.filter((feature) => name1 === feature.getSplittedFeatureName());\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n if (activeFeatureParts.length) {\r\n activeFeaturePart = activeFeatureParts.find((feature) => {\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n if (!activeFeaturePart) {\r\n activeFeaturePart = activeFeatureParts[0];\r\n }\r\n }\r\n activeFeatureParts = activeFeaturePart ? [activeFeaturePart] : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n checkIfFeaturePartIsMatching() {\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n const activeFeatureConditions = this.getActiveFeatureConditions();\r\n const name1 = this.activeFeature.getSplittedFeatureName();\r\n const activeFeaturePart = this.activeFeatureParts[0];\r\n if (!(activeFeaturePart.matchesMetaForArrayOfConditions(activeFeatureConditions)\r\n && name1 === activeFeaturePart.getSplittedFeatureName())) {\r\n this.activeFeatureParts = this.setActiveFeatureParts(this.activeFeature, activeFeatureConditions);\r\n }\r\n } else {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n }\r\n\r\n}\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport CircularProgress from \"@mui/material/CircularProgress\";\r\n\r\nimport COLOR_THEMES from \"../../colorThemes\";\r\nimport LoadingBar from '../../lib/react-redux-loading-bar';\r\n\r\nconst MaterialSpinner = (props) => {\r\n const {activeTheme, color, size, withCounter} = props;\r\n\r\n const style = {'color': color || COLOR_THEMES[activeTheme].active}\r\n\r\n if (size) { // in order not to break others with size auto\r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n\r\n return (\r\n
\r\n {withCounter ? : null}\r\n \r\n
\r\n )\r\n};\r\n\r\nMaterialSpinner.propTypes = {\r\n color: PropTypes.string,\r\n size: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n withCounter: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n activeTheme: store.serverState.activeTheme,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(MaterialSpinner)\r\n","import * as PropTypes from \"prop-types\";\r\nimport {filterValueInterface} from \"./filterInterface\";\r\nimport {featureInterface} from \"./featureInterface\";\r\n\r\n// ITEM -> GROUP\r\n// ITEM -> GROUP -> SECTION -> STEP // not used\r\n\r\nexport const WIZARD_GROUP_TYPES = {\r\n group: \"group\",\r\n filter: \"filter\",\r\n custom: \"custom\",\r\n}\r\n\r\nexport const wizardGroupInterface = {\r\n id: PropTypes.string.isRequired,\r\n nodeType: PropTypes.oneOf(Object.keys(WIZARD_GROUP_TYPES)).isRequired,\r\n groupName: PropTypes.string.isRequired,\r\n filterGroupId: PropTypes.number,\r\n scopeImageUrl: PropTypes.string,\r\n customDisplayName: PropTypes.string,\r\n enabled: PropTypes.bool.isRequired,\r\n title: PropTypes.string,\r\n description: PropTypes.string,\r\n featuresExcluded: PropTypes.array,\r\n featuresIncluded: PropTypes.array,\r\n useIncluded: PropTypes.bool,\r\n filtersExcluded: PropTypes.array,\r\n productCartTitle: PropTypes.string,\r\n productCartDescription: PropTypes.string,\r\n uploadedImageUrl: PropTypes.string,\r\n noAvailableFilters: PropTypes.bool,\r\n notRequired: PropTypes.bool,\r\n mergedGroups: PropTypes.array, // same parent logic\r\n wizardGroupIcon: PropTypes.string,\r\n hideInCartAndReceipt: PropTypes.bool,\r\n multipleAddToCart: PropTypes.bool,\r\n inputFields: PropTypes.array, // {id: \"\", checked: bool, oneLine: bool}\r\n headerTitle: PropTypes.string, // {id: \"\", checked: bool}\r\n headerSubTitle: PropTypes.string, // {id: \"\", checked: bool}\r\n visibleInVisualizers: PropTypes.array, //[\"kitchen\", \"laundryroom\", etc]\r\n hideForCustomers: PropTypes.bool, // eyeball\r\n skipProductInfo: PropTypes.bool,\r\n hidePriceNoCart: PropTypes.bool,\r\n skipLockDontApply: PropTypes.bool,\r\n};\r\n\r\nexport const wizardNodeInterface = {\r\n id: PropTypes.string.isRequired,\r\n type: PropTypes.string.isRequired,\r\n position: PropTypes.object.isRequired,\r\n style: PropTypes.object,\r\n data: PropTypes.shape({\r\n wizardGroup: PropTypes.shape(wizardGroupInterface)\r\n }),\r\n};\r\n\r\nexport const wizardEdgeInterface = {\r\n id: PropTypes.string.isRequired,\r\n source: PropTypes.string.isRequired,\r\n target: PropTypes.string.isRequired,\r\n disabled: PropTypes.bool,\r\n};\r\n\r\nexport const wizardItemInterface = {\r\n id: PropTypes.number,\r\n visualizer: PropTypes.string,\r\n name: PropTypes.string,\r\n description: PropTypes.string,\r\n customImageUrl: PropTypes.string,\r\n uploadedImageUrl: PropTypes.string,\r\n enabled: PropTypes.bool,\r\n hideItems: PropTypes.bool,\r\n selected: PropTypes.bool,\r\n // wizardSteps: PropTypes.arrayOf(PropTypes.shape(wizardStepInterface)),\r\n // wizardSections: PropTypes.arrayOf(PropTypes.shape(wizardSectionInterface)),\r\n wizardGroups: PropTypes.arrayOf(PropTypes.shape(wizardGroupInterface)),\r\n wizardNodes: PropTypes.arrayOf(PropTypes.shape(wizardNodeInterface)),\r\n wizardEdges: PropTypes.arrayOf(PropTypes.shape(wizardEdgeInterface)),\r\n disabledScenes: PropTypes.arrayOf(PropTypes.number),\r\n startTitle: PropTypes.string,\r\n startDescription: PropTypes.string,\r\n};\r\n\r\nexport const wizardSelectedValueInterface = {\r\n partId: PropTypes.string,\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n selectedFilter: PropTypes.shape(filterValueInterface),\r\n selectedFeature: PropTypes.shape(featureInterface),\r\n quantity: PropTypes.number,\r\n singleFeature: PropTypes.bool,\r\n};\r\n\r\nexport const wizardAllObjectInterface = {\r\n quoteIndex: PropTypes.number.isRequired,\r\n lastVisitedStep: PropTypes.number,\r\n isLastActiveWizard: PropTypes.bool,\r\n wizardItemId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n visualizer: PropTypes.string, // common name, same as in the wizard item\r\n wizardSelectedValues: PropTypes.object, // {0: wizardSelectedValueInterface, 1: wizardSelectedValueInterface}\r\n};\r\n\r\nexport const wizardConflictingObjectInterface = {\r\n stepIndex: PropTypes.number.isRequired,\r\n wizardGroupId: PropTypes.string.isRequired,\r\n cartItemId: PropTypes.string.isRequired\r\n}\r\n","import {Part} from \"../part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {vanityThumbnail} from \"../../../bvComponent/core/assets\";\r\nimport {METADATA, VANITY_TYPES, LOOK_ROOM_TYPES} from \"../constants\";\r\n\r\nimport VanityHandle from \"../subparts/vanity/vanityHandle\";\r\nimport VanityCabinet from \"../subparts/vanity/vanityCabinet\";\r\nimport VanityCountertop from \"../subparts/vanity/vanityCountertop\";\r\nimport VanityBacksplash from \"../subparts/vanity/vanityBacksplash\";\r\nimport Mirror from \"../subparts/vanity/mirror\";\r\nimport Sink from \"../subparts/vanity/sink\";\r\nimport VanityFaucet from \"../subparts/vanity/faucet\";\r\nimport Ptrap from \"../subparts/vanity/pTrap\";\r\nimport VanityWashstand from \"../subparts/vanity/vanityWashstand\";\r\nimport VanityMiddle from \"../subparts/vanity/vanityMiddle\";\r\nimport DrawerPull from \"../subparts/vanity/drawerPull\";\r\nimport WSTowelBar from \"../subparts/vanity/wsTowelBar\";\r\nimport VanityLegs from \"../subparts/vanity/vanityLegs\";\r\nimport VanityConsole from \"../subparts/vanity/vanityConsole\";\r\nimport {getSkuWithoutDot} from \"../../lookNavigation/lookFunctions2\";\r\nimport {getCurrentRoomType} from \"../../../appLayout\";\r\nimport DoorHandle from \"../subparts/vanity/doorHandle\";\r\nimport DrawerHandle from \"../subparts/vanity/drawerHandle\";\r\n\r\nexport class Vanity extends Part {\r\n static id = 'Vanity';\r\n\r\n static Types = {\r\n Complete: 'Complete',\r\n Custom: 'Custom'\r\n };\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Vanity';\r\n this.translateId = \"visualizer.bathroom.vanity\";\r\n this.partThumbnail = vanityThumbnail;\r\n this.activeSubType_ = Vanity.Types.Custom;\r\n this.relatedItems = [];\r\n this.placeholdersNeeded = false; // only Vanity property\r\n\r\n // vanity parts\r\n this.vanityCabinet = null;\r\n this.completeVanity = null;\r\n this.countertop = null;\r\n this.sink = null;\r\n this.faucet = null;\r\n this.vanityBacksplash = null;\r\n this.vanityHandle = null;\r\n this.mirror = null;\r\n this.vanityPTrap = null;\r\n this.vanityWashstand = null;\r\n this.vanityMiddle = null;\r\n this.drawerPull = null;\r\n this.wsTowelBar = null;\r\n this.vanityLegs = null;\r\n this.vanityLegs = null;\r\n this.vanityConsole = null;\r\n this.doorHandle = null;\r\n this.drawerHandle = null;\r\n\r\n this.vanity_type = VANITY_TYPES.vanity_cabinet;\r\n this.relatedGroupNames = [\"Sink\", \"Mirror\", \"Countertop\", \"Faucet\", \"VanityBacksplash\", \"Vanity Handle\", \"Vanity\",\r\n \"Ptrap\", \"Washstand\", \"Vanity Middle\", \"Drawer Pull\", \"WS Towel Bar\", \"Vanity Legs\", \"Console\", \"Door Handle\",\r\n \"Drawer Handle\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Sink\":\r\n relatedItemName = \"sink\";\r\n RelatedItemClass = Sink;\r\n break;\r\n case \"Mirror\":\r\n relatedItemName = \"mirror\";\r\n RelatedItemClass = Mirror;\r\n break;\r\n case \"Countertop\":\r\n case \"Vanitie Countertop\":\r\n relatedItemName = \"countertop\";\r\n RelatedItemClass = VanityCountertop;\r\n break;\r\n case \"Faucet\":\r\n relatedItemName = \"faucet\";\r\n RelatedItemClass = VanityFaucet;\r\n break;\r\n case \"VanityBacksplash\":\r\n case \"BackSplash\":\r\n case \"Backsplash\":\r\n relatedItemName = \"vanityBacksplash\";\r\n RelatedItemClass = VanityBacksplash;\r\n break;\r\n case \"Vanity Handle\":\r\n relatedItemName = \"vanityHandle\";\r\n RelatedItemClass = VanityHandle;\r\n break;\r\n case \"Door Handle\":\r\n relatedItemName = \"doorHandle\";\r\n RelatedItemClass = DoorHandle;\r\n break;\r\n case \"Drawer Handle\":\r\n relatedItemName = \"drawerHandle\";\r\n RelatedItemClass = DrawerHandle;\r\n break;\r\n case \"Vanity\":\r\n case \"Vanitie\": {\r\n relatedItemName = \"vanityCabinet\";\r\n RelatedItemClass = VanityCabinet;\r\n break;\r\n }\r\n case \"Ptrap\": {\r\n relatedItemName = \"vanityPTrap\";\r\n RelatedItemClass = Ptrap;\r\n break;\r\n }\r\n case \"Washstand\": {\r\n relatedItemName = \"vanityWashstand\";\r\n RelatedItemClass = VanityWashstand;\r\n break;\r\n }\r\n case \"Vanity Middle\": {\r\n relatedItemName = \"vanityMiddle\";\r\n RelatedItemClass = VanityMiddle;\r\n break;\r\n }\r\n case \"Drawer Pull\": {\r\n relatedItemName = \"drawerPull\";\r\n RelatedItemClass = DrawerPull;\r\n break;\r\n }\r\n case \"WS Towel Bar\": {\r\n relatedItemName = \"wsTowelBar\";\r\n RelatedItemClass = WSTowelBar;\r\n break;\r\n }\r\n case \"Vanity Legs\": {\r\n relatedItemName = \"vanityLegs\";\r\n RelatedItemClass = VanityLegs;\r\n break;\r\n }\r\n case \"Console\": {\r\n relatedItemName = \"vanityConsole\";\r\n RelatedItemClass = VanityConsole;\r\n break;\r\n }\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName === \"sink\") {\r\n const faucetIndex = this.relatedItems.findIndex(relItem => relItem.partName === 'Faucet');\r\n faucetIndex ? this.relatedItems.splice(faucetIndex, 0, this.sink) : this.relatedItems.push(this.sink);\r\n } else if (relatedItemName === \"completeVanity\") {\r\n this.relatedItems.unshift(this.completeVanity); // cabinet needs to be first in the list.\r\n } else if (relatedItemName === \"vanityCabinet\") {\r\n this.relatedItems.unshift(this.vanityCabinet); // cabinet needs to be first in the list.\r\n } else {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n if (loadFeature) {\r\n this[relatedItemName].load(dbFeature);\r\n }\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n getRelatedItems() {\r\n return this.relatedItems.filter(item => item.visible.includes(this.activeSubType_));\r\n }\r\n\r\n subTypes() {\r\n return this.vanityCabinet && this.completeVanity ? [Vanity.Types.Custom, Vanity.Types.Complete] : [];\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return this.activeSubType_ === Vanity.Types.Complete;\r\n }\r\n\r\n activeSubType() {\r\n return this.activeSubType_;\r\n }\r\n\r\n subParts() {\r\n const relatedItems = this.getRelatedItems();\r\n const excluded = [];\r\n const vanityPart = relatedItems.find(navItem => navItem.partId === \"vanity_cabinet\");\r\n if (vanityPart && vanityPart.activeFeature\r\n && vanityPart.activeFeature.metaData[\"VanityHandle\"]\r\n && vanityPart.activeFeature.metaData[\"VanityHandle\"].includes(\"None\")) {\r\n excluded.push(\"vanity_handle\")\r\n }\r\n return relatedItems\r\n .filter(item => !excluded.includes(item.partId))\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n // subPartsWithAccentWall() {\r\n // const vanityAccent = this.layout.parts.Walls.vanityAccent;\r\n // return [new DesignNavigationItem(vanityAccent.partName, vanityAccent),\r\n // ...this.getRelatedItems().map(_ => new DesignNavigationItem(_.partName, _))];\r\n // }\r\n\r\n handleSubTypeClick(subType) {\r\n this.activeSubType_ = subType;\r\n this.getRelatedItems().forEach((relatedItem) => {\r\n if (!relatedItem.activeFeature) {\r\n relatedItem.setDefault()\r\n }\r\n });\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n return this.subParts()[0]\r\n }\r\n\r\n setDefault(layout) {\r\n this.getRelatedItems().forEach(_ => _.setDefault(layout));\r\n }\r\n\r\n counterTopSize(forFeatureGroup) {\r\n let vanitySize = this.getCounterTopSize() || \"24\"; // we have left and right mirror for \"L\" & \"R\" or single for \"C\"\r\n if ((vanitySize === \"72\" || (Array.isArray(vanitySize) && vanitySize[0] === (\"72\")))\r\n && forFeatureGroup && !(forFeatureGroup.partId === \"vanity_backsplash\" || forFeatureGroup.partId === \"vanity_countertop\")) {\r\n return [\"64\"]; // use 64 for everything except counterop and backsplash\r\n }\r\n return vanitySize\r\n }\r\n\r\n getCounterTopSize() {\r\n const currentVanityTypeFeatureGroup = this.relatedItems.find(relItem => relItem.partId === this.vanity_type);\r\n if (currentVanityTypeFeatureGroup && !currentVanityTypeFeatureGroup.activeFeature) {\r\n this.vanityCabinet.setDefault()\r\n }\r\n return (currentVanityTypeFeatureGroup && currentVanityTypeFeatureGroup.activeFeature)\r\n ? currentVanityTypeFeatureGroup.activeFeature.dbFeature.metaData[\"VanitySize\"]\r\n : null;\r\n }\r\n\r\n isDoubleVanity(feature = null) {\r\n if (this.vanity_type !== VANITY_TYPES.vanity_cabinet || !this.vanityCabinet) {\r\n return false\r\n }\r\n const checkFeature = feature || this.vanityCabinet.activeFeature;\r\n return checkFeature && checkFeature.metaData[\"VanityWidth\"] && (checkFeature.metaData[\"VanityWidth\"] === 64)\r\n }\r\n\r\n toggleVanityParts(disabled) {\r\n this.getRelatedItems().forEach(relItem => {\r\n if (relItem.partId === \"vanity_sink\" || relItem.partId === \"vanity_faucet\"\r\n || relItem.partId === \"vanity_countertop\" || relItem.partId === \"vanity_cabinet\"\r\n || relItem.partId === \"vanity_handle\" || relItem.partId === \"vanity_backsplash\") {\r\n relItem.disabled = disabled;\r\n }\r\n });\r\n }\r\n\r\n getActiveSkuFromRelatedItem(partId) {\r\n const relatedItem = this.relatedItems.find(relItem => relItem.partId === partId);\r\n return relatedItem && relatedItem.activeFeature && relatedItem.activeFeature.dbFeature.sharedFeatureName\r\n ? getSkuWithoutDot(relatedItem.activeFeature.dbFeature.sharedFeatureName)\r\n : null\r\n }\r\n\r\n getActiveMatchingMetaFromRelatedItem(partId, metaName = \"MatchingFeature\") {\r\n const relatedItem = this.relatedItems.find(relItem => relItem.partId === partId);\r\n return relatedItem && relatedItem.activeFeature\r\n ? relatedItem.activeFeature.metaData[metaName]\r\n : null\r\n }\r\n\r\n setCustomVanitySinkMetaData = (feature) => {\r\n switch (feature.dbFeature.lixilProductSubCategory) {\r\n case \"Pedestal Bathroom Sinks\":\r\n return \"Pedestal\"\r\n case \"Above Counter Sinks with Vessel\":\r\n case \"Countertop Bathroom Sinks\":\r\n return \"Top Mount\"\r\n case \"Undermount Bathroom Sinks\":\r\n case \"Undermount Sinks\":\r\n return \"Undermount\"\r\n default:\r\n return \"\"\r\n }\r\n }\r\n\r\n setSpecificRules(isAsBathroomState = false) {\r\n console.log(\"setSpecificRules\", isAsBathroomState);\r\n if (getCurrentRoomType(this.layout) === LOOK_ROOM_TYPES.as || isAsBathroomState) {\r\n const sinkFeatureGroup = this.relatedItems.find(relItem => relItem.partId === \"vanity_sink\");\r\n this.relatedItems.forEach(relItem => {\r\n Object.keys(relItem.featuresList).forEach(layoutName => {\r\n [...relItem.featuresList[layoutName], ...relItem.featuresPartsList[layoutName]].map(feature => {\r\n feature.dbFeature.metaData[\"FeatureSku\"] = [getSkuWithoutDot(feature.dbFeature.sharedFeatureName)];\r\n if (relItem.partId === \"vanity_sink\" && Array.isArray(feature.dbFeature.metaData[\"MatchingFeature\"])) {\r\n feature.dbFeature.metaData[\"CustomSinkSubCategory\"] = this.setCustomVanitySinkMetaData(feature);\r\n feature.metaData[\"CustomSinkSubCategory\"] = this.setCustomVanitySinkMetaData(feature);\r\n let sinkTypes = [];\r\n feature.dbFeature.metaData[\"MatchingFeature\"].forEach(currentSku => {\r\n Object.keys(VANITY_TYPES).forEach(partId => {\r\n const featureGroup = this.relatedItems.find(relItem => relItem.partId === partId);\r\n if (featureGroup) {\r\n const feature = [...featureGroup.featuresList[layoutName], ...featureGroup.featuresPartsList[layoutName]].find(testFeature => {\r\n return getSkuWithoutDot(testFeature.dbFeature.sharedFeatureName) === currentSku\r\n });\r\n if (feature) {\r\n sinkTypes.push(feature.partId)\r\n }\r\n } else {\r\n console.log(\"no feature group found to apply sink metadata\", partId);\r\n }\r\n })\r\n });\r\n if (feature.dbFeature.metaData[\"MatchingFeature\"] && feature.dbFeature.metaData[\"MatchingFeature\"].includes(METADATA.NO)) {\r\n sinkTypes.push(VANITY_TYPES.vanity_cabinet);\r\n feature.dbFeature.metaData[\"FeatureSku\"] = [METADATA.ALL];\r\n feature.metaData[\"FeatureSku\"] = [METADATA.ALL];\r\n }\r\n // if (!sinkTypes.length && feature.dbFeature.metaData[\"MountType\"] && feature.dbFeature.metaData[\"MountType\"].includes('ST')) {\r\n // sinkTypes.push(METADATA.ALL)\r\n // }\r\n feature.dbFeature.metaData[\"CustomVanityType\"] = sinkTypes; // create custom metadata\r\n feature.metaData[\"CustomVanityType\"] = sinkTypes; // create custom metadata\r\n }\r\n if (relItem.partId === \"vanity_cabinet\" && Array.isArray(feature.dbFeature.metaData[\"MatchingFeature\"]) && sinkFeatureGroup) {\r\n let sinkTypes = [];\r\n feature.dbFeature.metaData[\"MatchingFeature\"].forEach(currentSku => {\r\n const sinkFeature = [...sinkFeatureGroup.featuresList[layoutName], ...sinkFeatureGroup.featuresPartsList[layoutName]].find(testFeature => {\r\n return getSkuWithoutDot(testFeature.dbFeature.sharedFeatureName) === currentSku\r\n });\r\n if (sinkFeature) {\r\n const type = this.setCustomVanitySinkMetaData(sinkFeature);\r\n if (!sinkTypes.includes(type)) {\r\n sinkTypes.push(this.setCustomVanitySinkMetaData(sinkFeature))\r\n }\r\n }\r\n });\r\n feature.dbFeature.metaData[\"CustomSinkSubCategory\"] = sinkTypes; // create custom metadata\r\n feature.metaData[\"CustomSinkSubCategory\"] = sinkTypes; // create custom metadata\r\n }\r\n // console.log(\"feature.metaData[\\\"CustomVanityType\\\"]\", feature.metaData[\"CustomVanityType\"]);\r\n // console.log(\"feature\", feature);\r\n return feature\r\n })\r\n })\r\n })\r\n }\r\n this.needToUpdateCustomMetadata = false;\r\n }\r\n\r\n updateVanityParts() {\r\n if (getCurrentRoomType(this.layout) === LOOK_ROOM_TYPES.as) {\r\n this.relatedItems.forEach(relatedItem => {\r\n if (relatedItem.hideLayerCondition) {\r\n relatedItem.disabled = relatedItem.hideLayerCondition();\r\n }\r\n });\r\n }\r\n }\r\n\r\n}\r\n\r\n","export const LayoutType = {\r\n Layout1: 1,\r\n Layout2: 2,\r\n Layout3: 3,\r\n Layout4: 4,\r\n Layout5: 5,\r\n Layout6: 6,\r\n};\r\n\r\nexport const LayoutAbbreviation = {\r\n All: \"ALL\",\r\n Layout1: \"Layout1\",\r\n Layout2: \"Layout2\",\r\n Layout3: \"Layout3\",\r\n Layout4: \"Layout4\",\r\n Layout5: \"Layout5\",\r\n Layout6: \"Layout6\",\r\n};\r\n\r\nexport const LayoutAbbreviations = [\r\n \"Layout1\",\r\n \"Layout2\",\r\n \"Layout3\",\r\n \"Layout4\",\r\n \"Layout5\",\r\n \"Layout6\",\r\n];\r\nexport const LayoutAbbreviationsToRemove = [\r\n \"Layout6\",\r\n \"Layout5\",\r\n \"Layout4\",\r\n \"Layout3\",\r\n \"Layout2\",\r\n \"Layout1\",\r\n];\r\n\r\nexport const METADATA = {\r\n ALL: \"ALL\",\r\n sinkUTypes: [\"U\", \"ST\", \"FM\", \"SM\"],\r\n FloorWithIsland: \"default\",\r\n NO: \"NO\",\r\n};\r\n\r\nexport const PLACEMENTS = {\r\n Island: \"Island\",\r\n Countertop: \"Countertop\"\r\n};\r\n\r\nexport const KVSCENE_BACKSPLASH_TYPES = [\"4 inch\", \"6 inch\", \"8 inch\", \"Full\"];\r\n\r\nexport const DECORS_MAX = 25;\r\n\r\nconst oldKitchenCabinetsLogicProfiles = [\r\n \"americasdream\",\r\n \"stonely_inc\",\r\n \"215mercury\",\r\n \"sci_surfaces\",\r\n \"lakeside_surfaces_\",\r\n \"true_blue_surfaces_\",\r\n \"bellezza_surfaces\",\r\n \"premier_cabinet_paintin_llc\",\r\n \"premier_cabinet_paintin_llc_v5\",\r\n \"american_kitchen_and_stone\",\r\n \"arizona_granite\",\r\n \"a_granito_world\",\r\n \"stonecraft\",\r\n \"wallstone_cabinetry_countertops\",\r\n \"jg_countertops_llc\",\r\n \"the_granite_guys\",\r\n \"blue_line_construction\",\r\n \"blue_line_construction_2023\",\r\n \"williams_kitchen_bath\",\r\n \"xpresbathshower\",\r\n \"eastern_surfaces\",\r\n \"wallstone_cabinetry_countertops_rebuild\",\r\n \"the_granite_guys_rebuild\",\r\n \"south_florida_remodelers\",\r\n \"artemisa\",\r\n \"kitchen_doctors_kbf\",\r\n \"home_essentials\",\r\n \"amc_building_supply_v5\",\r\n \"amc_countertops_v5\",\r\n \"cafe_countertops\",\r\n \"gmd_surfaces\",\r\n \"colonial_bath\",\r\n \"carpetmart\",\r\n];\r\n\r\nexport const hasOldCabinetLogic = () => {\r\n if (!window.location.host || (typeof window.location.host !== \"string\")) {\r\n return false\r\n }\r\n if (document.kvConfig.userId === 246030) {\r\n return true\r\n }\r\n const subDomain = window.location.host.split('.')[0];\r\n if (window.location.host.includes(\"quotekandb.com\")) {\r\n return subDomain === \"moderno_demo_3011\" || subDomain === \"erpizo\" || subDomain === \"multitool\"\r\n }\r\n return subDomain.includes(\"porcelanosa_\") || window.location.href.includes(\"fab_subdomain=porcelanosa_\")\r\n || oldKitchenCabinetsLogicProfiles.some(profile => {\r\n return (profile === subDomain) || window.location.href.includes(\"fab_subdomain=\" + profile)\r\n })\r\n}\r\n\r\nexport const useOldCabinetLogic = hasOldCabinetLogic();\r\n","import orderBy from \"lodash/orderBy\";\r\n\r\nimport {Part} from \"./part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {ShowerType, ShowerBodyType} from \"../constants\";\r\nimport {showerThumbnail} from '../assets';\r\n\r\n// import store from \"../../../../store\";\r\n\r\nimport {ShowerTubCombo} from \"./showerTubCombo\";\r\nimport Shadow from \"../subparts/shadow\";\r\n\r\nimport ShowerFixture from \"../subparts/shower/showerFixture\";\r\nimport ShowerGlass from \"../subparts/shower/showerGlass\";\r\n// import ShowerOverlay from \"../subparts/shower/showerOverlay\";\r\nimport ShowerBody from \"../subparts/shower/showerBody\";\r\nimport ShowerInteriorWall from \"../subparts/shower/showerInteriorWall\";\r\nimport ShowerInteriorWallAccent from \"../subparts/shower/showerInteriorWallAccent\";\r\nimport ShowerDoor from \"../subparts/shower/showerDoor\";\r\nimport ShowerPanCombo from \"../subparts/shower/showerPanCombo\";\r\nimport ShowerDoorHandle from \"../subparts/shower/showerDoorHandle\";\r\nimport PonyWallCap from \"../subparts/shower/ponyWallCap\";\r\nimport PonyWallGlass from \"../subparts/shower/ponyWallGlass\";\r\nimport ShowerFloor from \"../subparts/shower/showerFloor\";\r\nimport Threshold from \"../subparts/shower/threshold\";\r\nimport ShowerDrain from \"../subparts/shower/showerDrain\";\r\nimport ShowerHead from \"../subparts/shower/showerHead\";\r\n\r\nexport class Shower extends Part {\r\n static id = 'Shower';\r\n\r\n static Type = {\r\n Custom: 'Custom',\r\n Complete: 'Complete',\r\n Combo: 'Combo',\r\n All: 'All'\r\n };\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partThumbnail = showerThumbnail;\r\n this.partName = 'Shower';\r\n this.translateId = \"visualizer.bathroom.shower\";\r\n this.relatedItems = [];\r\n this.activeSubType_ = Shower.Type.Custom;\r\n\r\n this.customBodyType = ShowerBodyType.Glass;\r\n\r\n this.showerBody = null;\r\n this.showerGlass = null;\r\n this.showerInteriorWall = null;\r\n this.showerInteriorWallAccent = null;\r\n\r\n // old\r\n this.showerFloor = null;\r\n this.showerOverlay = null;\r\n // old\r\n\r\n this.showerPanCombo = null;\r\n this.threshold = null;\r\n this.showerFixture = null;\r\n this.showerBodySelectedByUser = false;\r\n this.showerDoor = null;\r\n this.showerDoorHandle = null;\r\n\r\n this.ponyWallCap = null;\r\n this.ponyWallGlass = null;\r\n\r\n this.shadows = null;\r\n\r\n this.showerBody = new ShowerBody(true);\r\n this.showerBody.getParent = () => this;\r\n this.showerBody.type = Shower.Type.All;\r\n this.showerBody.counts = {\r\n allLayoutFeaturesCount: 0,\r\n largeLayoutFeaturesCount: 0,\r\n smallLayoutFeaturesCount: 0\r\n };\r\n this.relatedItems.push(this.showerBody);\r\n\r\n this.showerFloorIsActive = false;\r\n\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n relatedItemType = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Shower Pan\":\r\n if (!dbFeature.displayName.includes('Neo Angle')) {\r\n relatedItemName = \"showerPanCombo\";\r\n RelatedItemClass = ShowerPanCombo;\r\n relatedItemType = Shower.Type.Custom;\r\n }\r\n break;\r\n case \"Shower Wall\":\r\n case \"ShowerInteriorWall\": // OLD\r\n relatedItemName = \"showerInteriorWall\";\r\n RelatedItemClass = ShowerInteriorWall;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Wall Accent\":\r\n relatedItemName = \"showerInteriorWallAccent\";\r\n RelatedItemClass = ShowerInteriorWallAccent;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Door\":\r\n case \"Shower_Door\":\r\n if (!dbFeature.displayName.includes(\"Neo Angle\")) {\r\n relatedItemName = \"showerDoor\";\r\n RelatedItemClass = ShowerDoor;\r\n relatedItemType = Shower.Type.Custom;\r\n }\r\n break;\r\n case \"Shower Door Handle\":\r\n relatedItemName = \"showerDoorHandle\";\r\n RelatedItemClass = ShowerDoorHandle;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"ShowerPan\":\r\n relatedItemName = \"threshold\";\r\n RelatedItemClass = Threshold;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"ShowerFloor\":\r\n relatedItemName = \"showerFloor\";\r\n RelatedItemClass = ShowerFloor;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Fixture\":\r\n relatedItemName = \"showerFixture\";\r\n RelatedItemClass = ShowerFixture;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Shower Drain\":\r\n relatedItemName = \"showerDrain\";\r\n RelatedItemClass = ShowerDrain;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Head\":\r\n relatedItemName = \"showerHead\";\r\n RelatedItemClass = ShowerHead;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Shadow\":\r\n if (\r\n dbFeature.displayName.includes(\"Shower Shadow - Interior Wall\")\r\n || dbFeature.displayName.includes(\"Shower Shadow - Floor\")\r\n || dbFeature.displayName.includes(\"Shower Shadow - Pan\")\r\n || dbFeature.displayName.includes(\"Shower Shadow - Pony Wall Cap\")\r\n ) {\r\n relatedItemName = \"shadows\";\r\n RelatedItemClass = Shadow;\r\n relatedItemType = Shower.Type.All;\r\n }\r\n break;\r\n case \"Pony Wall Cap\":\r\n relatedItemName = \"ponyWallCap\";\r\n RelatedItemClass = PonyWallCap;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Pony Wall Glass\":\r\n relatedItemName = \"ponyWallGlass\";\r\n RelatedItemClass = PonyWallGlass;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Shower Glass\":\r\n if (!this.showerBody) {\r\n this.showerBody = new ShowerBody(true);\r\n this.relatedItems.push(this.showerBody);\r\n }\r\n relatedItemName = \"showerGlass\";\r\n RelatedItemClass = ShowerGlass;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n // case \"Shower Overlay\":\r\n // relatedItemName = \"showerOverlay\";\r\n // RelatedItemClass = ShowerOverlay;\r\n // relatedItemType = Shower.Type.Custom;\r\n // break;\r\n case \"Shower Body\":\r\n relatedItemName = \"showerBody\";\r\n RelatedItemClass = ShowerBody;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].type = relatedItemType;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setSpecificRules() {}\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n let res = [];\r\n const relatedItems = this.getRelatedItems();\r\n // console.log('relatedItems', relatedItems);\r\n relatedItems.forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n });\r\n if (this.showerDoor && !this.showerDoor.activeFeature) { // we need it cause shower door is relying on shPanCombo\r\n this.showerDoor.setLayers(layout);\r\n }\r\n if (this.showerDoorHandle && !this.showerDoorHandle.activeFeature) {\r\n this.showerDoorHandle.setLayers(layout);\r\n }\r\n relatedItems.forEach(relatedItem => {\r\n\r\n (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n ? relatedItem.placeholderFeature.layer.addTo(res)\r\n : relatedItem.activeFeature && relatedItem.activeFeature.layer ? relatedItem.activeFeature.layer.addTo(res) : null\r\n\r\n // NN(relatedItem.activeFeature, (activeFeature) => activeFeature.layer.addTo(res));\r\n\r\n if ((relatedItem instanceof ShowerBody || relatedItem instanceof ShowerInteriorWallAccent)\r\n && relatedItem.activeFeatureParts && relatedItem.activeFeatureParts.length) {\r\n relatedItem.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart && !activeFeaturePart.disabled && activeFeaturePart.layer && activeFeaturePart.layer.addTo(res);\r\n })\r\n }\r\n if (relatedItem instanceof ShowerInteriorWall && relatedItem.activeFeatureParts && relatedItem.placeholderChanged && relatedItem.activeFeatureParts.length) {\r\n relatedItem.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart && !activeFeaturePart.disabled && activeFeaturePart.layer && activeFeaturePart.layer.addTo(res);\r\n })\r\n }\r\n\r\n if (relatedItem.shadowFeature && relatedItem.shadowFeature.layer) {\r\n relatedItem.shadowFeature.layer.addTo(res)\r\n }\r\n\r\n });\r\n\r\n return res.length ? res : null;\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Shower', this)\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n return filteredAvailableFeatures.filter(f => this.activeSubType_ === Shower.Type.Complete ? f.type === ShowerType.Complete : f.type !== ShowerType.Complete)\r\n .map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n subTypes() {\r\n return this.showerBody && (this.showerBody.features.some(showerBodyFeature => showerBodyFeature.type === 0)\r\n && this.showerBody.features.some(showerBodyFeature => showerBodyFeature.type === 1)) ? [\r\n Shower.Type.Custom,\r\n Shower.Type.Complete,\r\n ] : []\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return true;\r\n }\r\n\r\n activeSubType() {\r\n return this.activeSubType_;\r\n }\r\n\r\n handleSubTypeClick(subType, handleNavigationItemClick) {\r\n this.activeSubType_ = subType;\r\n this.showerBody.setDefault(); // set default custom shower\r\n if (handleNavigationItemClick) {\r\n handleNavigationItemClick(this.showerBody.navigationSubItems()[0]) // set default custom shower\r\n }\r\n }\r\n\r\n getRelatedItems() {\r\n const relatedItems = orderBy(this.relatedItems, 'layerPriority');\r\n if (this.showerTubComboIsActive()) {\r\n return relatedItems\r\n }\r\n return relatedItems.filter((relatedItem) => {\r\n return relatedItem.type === this.activeSubType_ || relatedItem.type === Shower.Type.All\r\n })\r\n }\r\n\r\n subParts() {\r\n const activeShowerGroup = this.getActiveShowerGroup();\r\n const ponyWallIsActive = activeShowerGroup.showerDimensions() === \"Pony\";\r\n return this.getRelatedItems()\r\n .filter(item => {\r\n if (item.isPonyWallPart) {\r\n item.visible = ponyWallIsActive\r\n }\r\n return item.visible\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n // return filter(this.relatedItems, {visible: true}).map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n //\r\n // toggleShowerParts(disabled, keepLeftWall) {\r\n // this.getRelatedItems().forEach((relItem) => {\r\n // console.log('relItem', relItem);\r\n // if (\r\n // relItem.partId !== \"shower_interior_wall\"\r\n // && relItem.partId !== \"shower_interior_wall_accent\"\r\n // && relItem.partId !== \"shower_fixture\"\r\n // && relItem.partId !== \"shower_door\"\r\n // && relItem.partId !== \"shower_door_handle\"\r\n // && relItem.partId !== \"pony_wall\"\r\n // && relItem.partId !== \"pony_wall_cap\"\r\n // && relItem.partId !== \"pony_wall_glass\"\r\n // ) {\r\n // relItem.disabled = disabled;\r\n // }\r\n // });\r\n // if (!keepLeftWall) {\r\n // this.layout.parts.Walls.wallExL.disabled = disabled;\r\n // }\r\n // }\r\n\r\n setDefault(layout) {\r\n const relatedItems = orderBy(this.relatedItems, 'layerPriority');\r\n relatedItems.forEach(_ => _.setDefault(layout));\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n return this.subParts()[0]\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n /**\r\n * Gets the current shower size from metaValues.\r\n */\r\n showerSize() {\r\n if (!this.showerBody || !this.showerBody.activeFeature) {\r\n return null;\r\n }\r\n let showerSizeValues = this.showerBody.activeFeature.metaData[\"ShowerSize\"];\r\n if (!showerSizeValues || !showerSizeValues.length) {\r\n if (this.showerBody.activeFeature.partName.includes(\"Complete\")) {\r\n showerSizeValues = ['30in'];\r\n } else {\r\n console.warn('No Shower size.');\r\n }\r\n } else if (showerSizeValues[0] === \"-\") {\r\n showerSizeValues[0] = this.showerBody.activeFeature.partName.includes(\"60in\") ? \"60in\" : \"30in\"\r\n }\r\n\r\n return showerSizeValues[0];\r\n }\r\n\r\n /**\r\n * Gets the current shower dimensions from showerBody\r\n */\r\n showerDimensions() {\r\n if (!this.showerBody)\r\n return \"Full\";\r\n return this.showerBody.activeFeature ? this.showerBody.activeFeature.showerDimensions : null;\r\n // \"Full\" : \"Half\";\r\n }\r\n\r\n isComplete() {\r\n if (!this.showerBody) {\r\n return true;\r\n } else if (this.showerTubComboIsActive()) {\r\n return false;\r\n } else {\r\n return this.showerBody.activeFeature && this.showerBody.activeFeature.showerBodyType !== Shower.Type.Custom;\r\n }\r\n }\r\n\r\n showerTubComboIsActive() {\r\n const comboPart = this.layout.parts[ShowerTubCombo.id];\r\n return comboPart && comboPart.showerTubComboIsActive\r\n }\r\n\r\n getActiveShowerGroup() { // user for taking sizes, etc...\r\n return this.showerTubComboIsActive() ? this.layout.parts[ShowerTubCombo.id] : this;\r\n }\r\n}\r\n\r\n","import {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport {getStringFeatureName} from \"../../misc/helpers\";\r\nimport {truncate} from \"../sqft/helpers/sqftHelper\";\r\n\r\nconst FeatureName = (props) => {\r\n const {feature, intl, fabricatorData, maxLength, filterGroups, useCollectionName} = props;\r\n let stringFeatureName = getStringFeatureName(feature, intl.messages, intl.locale, fabricatorData, filterGroups, useCollectionName);\r\n return parseInt(maxLength) === maxLength ? truncate(stringFeatureName, maxLength) : stringFeatureName;\r\n};\r\n\r\nFeatureName.propTypes = {\r\n maxLength: PropTypes.number,\r\n feature: PropTypes.object.isRequired,\r\n useCollectionName: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {filterGroups} = store.filterState;\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n filterGroups,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(FeatureName)\r\n)\r\n\r\n","import PropTypes from \"prop-types\";\r\nimport {featureInterface} from \"../../interfaces/featureInterface\";\r\n\r\nexport const CART_ITEM_ADDED_BY = {\r\n user: \"user\",\r\n auto: \"auto\",\r\n}\r\n\r\nexport const cartItemInterface = {\r\n id: PropTypes.string, // unique id used on frontend\r\n isEmpty: PropTypes.bool,\r\n isMinimumCharge: PropTypes.bool, // is used for lowes, added when countertops sqft is lower than 23\r\n isMinimumChargeItems: PropTypes.bool, // is used for lowes, between 23 and 27 countertops sqft\r\n selectionGroup: PropTypes.string,\r\n partId: PropTypes.string.isRequired,\r\n currentQuote: PropTypes.number,\r\n cartFeature: PropTypes.shape(featureInterface),\r\n quantity: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), // empty input case\r\n displayFakeQuantity: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), // for slab (countertop group)\r\n sqftId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), // if feature was added from SQFT\r\n unit: PropTypes.string, // was added for SQFT,\r\n qtCatName: PropTypes.string, // was added for SQFT,\r\n relatedProductParent: PropTypes.shape(featureInterface), //\r\n addedBy: PropTypes.oneOf([CART_ITEM_ADDED_BY.auto, CART_ITEM_ADDED_BY.user]), // can be user or auto (if cart list were created by the default(see createCartList function in lookVisualizer.js))\r\n isRemoved: PropTypes.bool,\r\n keepOnLookUpdate: PropTypes.bool, // in case it was added from wizard List - we don't need to remove it on look update cart items logic\r\n shippingName: PropTypes.string,\r\n shippingTime: PropTypes.string,\r\n shippingCost: PropTypes.number,\r\n fromWizardId: PropTypes.number, // wizard item id\r\n fromWizardStep: PropTypes.number, // wizard step (index)\r\n fromWizardGroupId: PropTypes.string, // wizard group\r\n isAddedFromDisplayLogic: PropTypes.bool, // if cart item was added automatically\r\n fromVisualizerType: PropTypes.string,\r\n fromQtCategory: PropTypes.string, // category name (to proper switch)\r\n bundleParentId: PropTypes.string, // parent cart item id (hash)\r\n};\r\n","import JsonApi from \"./jsonApi\";\r\nimport {getBvFeatures, getBvGroupFeatures, getSaveQuoteFastData} from \"./server-api\";\r\nimport {getCurrentLayout, getCurrentRoomType} from \"../bvcomponents/appLayout\";\r\nimport {COUNTERTOP_GROUP, CABINET_GROUP, EDGE_GROUP} from \"../bvcomponents/kvComponent/core/constants\";\r\nimport store from \"../store\";\r\nimport {updateNavigationCount} from \"../actions/lookFunctions\";\r\nimport {COUNTERTOP_GROUP_BATHROOM, LOOK_ROOM_TYPES} from \"../bvcomponents/look/core/constants\";\r\nimport {getCommonVisualizerType, IS_LIXIL_SERVERS} from \"../config\";\r\nimport {getFeatureCost} from \"../misc/helpers\";\r\nimport {showWizardInsteadOfQT} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\n\r\nexport const LIXIL_USER_QUERY_PARAMS = [\"userid\", \"email\", \"fname\", \"lname\", \"brand\", \"region\"];\r\n\r\nexport const getPassedUserInfo = (searchParams) => {\r\n // {\r\n // userid: {userId from querystring},\r\n // email: {email from querystring},\r\n // fname: {fname from querystring},\r\n // lname: {lname from querystring},\r\n // fabricatorId: {QC Id for Fabricator (same value passed for fabricatorId for the LoginClient API call}\r\n // }\r\n const userData = {\r\n fabricatorId: +document.kvConfig.userId\r\n };\r\n LIXIL_USER_QUERY_PARAMS.forEach(property => {\r\n userData[property] = searchParams.get(property)\r\n ? property === \"userid\" || property === \"lname\"\r\n ? searchParams.get(property).split(\"?userid=\")[0].replace(/ /g, \"+\")\r\n : searchParams.get(property).replace(/ /g, \"+\")\r\n : \"\"\r\n });\r\n console.log(\"request userData\", userData);\r\n return JsonApi.getPassedUserInfo(userData)\r\n .then(response => response.data)\r\n .catch(error => {\r\n console.log(\"Server error getPassedUserInfo \"+new Error(error));\r\n })\r\n};\r\n\r\nexport const postSaveVisualizerImage = (base64Image) => {\r\n // console.log(\"request postSaveVisualizerImage\", base64Image);\r\n return JsonApi.postSaveVisualizerImage(+document.kvConfig.userId, base64Image)\r\n .then(response => response.data)\r\n .catch(error => {\r\n console.log(\"Server error postSaveVisualizerImage \"+new Error(error));\r\n })\r\n};\r\n\r\nexport const postSaveTempData = (tempData, id = \"\", expiresIn = \"\", ) => {\r\n return JsonApi.postSaveTempData(tempData, id, expiresIn)\r\n .then(response => response.data)\r\n .catch(error => {\r\n console.log(\"Server error postSaveTempData \"+new Error(error));\r\n })\r\n};\r\n\r\nexport const getSaveTempData = (id = \"\") => {\r\n return JsonApi.getSaveTempData(id)\r\n .then(response => response.data)\r\n .catch(error => {\r\n debugger;//eslint-disable-line\r\n console.log(\"Server error getSaveTempData \"+new Error(error));\r\n })\r\n};\r\n\r\nexport const getTempIdForPostMessage = async (returnAction = \"\", existingTempId = \"\") => {\r\n const savedFastData = await getSaveQuoteFastData(true);\r\n\r\n savedFastData.records[0].data[\"returnAction\"] = returnAction;\r\n console.log(\"request post temp data before stringify ->\", existingTempId, savedFastData);\r\n const stringifiedSaveData = JSON.stringify(savedFastData);\r\n let receivedTempId = await postSaveTempData(stringifiedSaveData, existingTempId);\r\n if (!receivedTempId) {\r\n receivedTempId = await postSaveTempData(stringifiedSaveData, existingTempId);\r\n }\r\n return receivedTempId\r\n};\r\n\r\nexport const postSureTax = (postData) => {\r\n return JsonApi.postSureTax(postData)\r\n .then(response => response.data)\r\n .catch(error => console.log(\"Server error postSureTax \"+new Error(error)))\r\n};\r\n\r\nexport const postVerifyAddress = (addressObject) => {\r\n return JsonApi.postVerifyAddress( {\r\n \"Address1\": \"\",\r\n \"Address2\": (addressObject.address1 || \"\").split(\",\")[0],\r\n \"City\" : addressObject.city,\r\n \"State\" : addressObject.stateShort || addressObject.state.slice(0, 2),\r\n \"Zip5\" : (addressObject.postal || \"\").split(\"-\")[0] || null,\r\n \"Zip4\" : (addressObject.postal || \"\").split(\"-\")[1] || null\r\n })\r\n .then(response => {\r\n if (response.data.error) {\r\n return {\r\n errorDescription: response.data.error\r\n }\r\n }\r\n return response.data\r\n })\r\n .catch(error => {\r\n if (error && error.response && error.response.data && error.response.data.error) {\r\n return {\r\n errorDescription: error.response.data.error\r\n }\r\n }\r\n return {\r\n errorDescription: error && error.message ? error.message : \"Server error verifyAddress \"+new Error(error)\r\n }\r\n })\r\n};\r\n\r\nexport const getTrumbleShippingOptions = (skuList, zipCode) => {\r\n return JsonApi.getTrumbleShippingOptions(skuList, zipCode)\r\n .then(response => response.data)\r\n .catch(error => console.log(\"Server error postSureTax \"+new Error(error)))\r\n};\r\nexport const postTrumbleShippingOptions = (postData, zipCode) => {\r\n return JsonApi.postTrumbleShippingOptions(postData, zipCode)\r\n .then(response => response.data)\r\n .catch(error => console.log(\"Server error postSureTax \"+new Error(error)))\r\n};\r\nexport const postTrumbleInventory = (skusArray = []) => {\r\n // https://qc-cdn.s3.amazonaws.com/lixil/image+(8).png\r\n return JsonApi.postTrumbleInventory(skusArray)\r\n .then(response => response.data)\r\n .catch(error => console.log(\"Server error postTrumbleInventory \"+new Error(error)))\r\n};\r\n\r\nexport const postShipperHQOptions = async (shippingAddress, cartItems = []) => {\r\n const {stateShort, state, city, postal} = shippingAddress;\r\n const postData = {\r\n destination: {\r\n \"country\": \"US\", // hardcode for now\r\n \"region\": stateShort || state.slice(0, 2),\r\n \"city\": city,\r\n \"zipcode\": postal,\r\n },\r\n items: cartItems.map(cartItem => ({\r\n \"itemId\": cartItem.cartFeature.dbFeature.id,\r\n \"sku\": cartItem.cartFeature.dbFeature.sku,\r\n \"storePrice\": getFeatureCost(cartItem.cartFeature, 1, cartItem.fromQtCategory),\r\n \"quantity\": cartItem.quantity\r\n }))\r\n }\r\n // https://qc-cdn.s3.amazonaws.com/lixil/image+(10).png\r\n return JsonApi.postShipperHqShipping(postData)\r\n .then(response => {\r\n console.log(\"response postShipperHqShipping\", response && response.data ? response.data : response);\r\n let availableOptions = [];\r\n if (!response.data || !Array.isArray(Object.keys(response.data))) {\r\n return availableOptions\r\n }\r\n availableOptions = Object.keys(response.data).map(dbFeatureId => {\r\n if (!Array.isArray(response.data[dbFeatureId]) || !response.data[dbFeatureId].length) {\r\n return {dbFeatureId: +dbFeatureId, options: []}\r\n }\r\n const options = response.data[dbFeatureId].flatMap(carrier => { // can be several\r\n return carrier.shippingRates.map(shippingRate => {\r\n return {\r\n cost: shippingRate.totalCharges,\r\n title: shippingRate.title,\r\n delivery: shippingRate.delivery || \"-\",\r\n code: shippingRate.code\r\n }\r\n })\r\n })\r\n return {dbFeatureId: +dbFeatureId, options}\r\n })\r\n return availableOptions\r\n })\r\n .catch(error => console.log(\"Server error postShipperHQOptions \"+new Error(error)))\r\n};\r\n\r\n/**\r\n * sets feature quantity properties\r\n * @param featuresArray {featureInterface}\r\n * @returns {promise}\r\n */\r\nexport const setTrumbleInventoryForFeatures = (featuresArray = []) => {\r\n const skusArray = featuresArray.map(feature => feature.dbFeature.sku);\r\n return postTrumbleInventory(skusArray)\r\n .then(responseData => {\r\n // console.log(\"postTrumbleInventory responseData\", responseData);\r\n if (responseData && responseData.success && responseData.inventory) {\r\n Object.keys(responseData.inventory).forEach(sku => {\r\n const featureToUpdate = featuresArray.find(feature => feature.dbFeature.sku === sku);\r\n if (featureToUpdate) {\r\n if (!featureToUpdate.quantityOptions) {\r\n featureToUpdate.quantityOptions = {};\r\n }\r\n featureToUpdate.quantityOptions.trumbleQty = responseData.inventory[sku].inventory;\r\n }\r\n })\r\n }\r\n })\r\n};\r\n\r\nconst requestMoreThanUsualPartIds = [\"vanity_faucet\", \"vanity_sink\", \"shower_head\", \"valve_trim\", \"towel\",\r\n \"towel_towel_bar\", \"towel_towel_hook\", \"towel_towel_ring\", \"shower_fixture\", \"shower_door\"];\r\n\r\n/**\r\n * common function to request features\r\n * @param featureGroup {featureGroupInterface}\r\n * @returns {number}\r\n */\r\nconst request6kFeatures = [...CABINET_GROUP, \"top_handle\", \"bottom_handle\", \"sink\", \"center_island_sink\", \"crown_molding\"];\r\nexport const getFeaturesPageSize = (featureGroup) => {\r\n let pageSize = 1000;\r\n if (document.kvConfig.visualizerType === \"kvScene\" && request6kFeatures.includes(featureGroup.partId)) {\r\n pageSize = 6000 // always for new kitchen (we need all parts)\r\n } else if (COUNTERTOP_GROUP.includes(featureGroup.partId)) {\r\n const {navigationState} = store.getState();\r\n if (document.kvConfig.visualizerType !== \"kvScene\" || navigationState.useFeaturesLightRequest.countertops) {\r\n pageSize = 6000 // always for old Kitchen\r\n }\r\n } else if (\r\n (document.kvConfig.visualizerType === \"bvLook\" && requestMoreThanUsualPartIds.includes(featureGroup.partId))\r\n || (document.kvConfig.visualizerType === \"bvScene\" && (featureGroup.partId === \"shower_wall\" || featureGroup.partId === \"shower_interior_wall\"))\r\n ) {\r\n pageSize = 6000\r\n }\r\n if (featureGroup.allFeaturesReceived && pageSize === 6000) {\r\n pageSize = 2000 // next always 2k, it works correctly on scroll\r\n }\r\n return pageSize\r\n}\r\n\r\nexport const getAdditionalFeaturesOnScroll = async (featureGroup, isCommonRequest = false) => {\r\n if (featureGroup.createdManually || featureGroup.requestInProgress) {\r\n if (featureGroup.createdManually) {\r\n featureGroup.allFeaturesReceived = true;\r\n }\r\n return false\r\n }\r\n\r\n featureGroup.requestInProgress = true;\r\n // console.log(\"propsPageSize\", propsPageSize);\r\n const pageSize = getFeaturesPageSize(featureGroup);\r\n const layout = featureGroup.getParent\r\n ? featureGroup.getParent().layout || getCurrentLayout()\r\n : getCurrentLayout();\r\n const layoutAbbr = layout.getCurrentLayoutAbbreviation();\r\n const nextFeaturesPage = featureGroup.getNextPageToLoad(layoutAbbr);\r\n\r\n if (featureGroup.additionalPartPartId) {\r\n const wallParent = layout.parts[\"Walls\"];\r\n const isWallChild = wallParent && wallParent.relatedItems.some(relItem => relItem.partId === featureGroup.partId);\r\n if (isWallChild) {\r\n const cropResponse = await getBvGroupFeatures((featureGroup.dbName || featureGroup.partName) + \" Crop\", nextFeaturesPage, pageSize * 3);\r\n if (Array.isArray(cropResponse)) {\r\n featureGroup.setGroupFeatures(cropResponse, pageSize * 2, false, layoutAbbr, nextFeaturesPage, false, !isCommonRequest);\r\n }\r\n }\r\n }\r\n\r\n const response = await getBvGroupFeatures(featureGroup.dbName || featureGroup.partName, nextFeaturesPage, pageSize);\r\n\r\n let responseArray = Array.isArray(response) ? response : [];\r\n let oldFeatures = [];\r\n if (layout.isNewLayout && featureGroup.nextFeaturesPageToLoadArray && !featureGroup.allFeaturesReceived && !IS_LIXIL_SERVERS\r\n && (CABINET_GROUP.includes(featureGroup.partId) || COUNTERTOP_GROUP.includes(featureGroup.partId)\r\n || COUNTERTOP_GROUP_BATHROOM.includes(featureGroup.partId))) { // we don't need requests for walls\r\n const {wizardList, wizardIsActive} = store.getState().wizardState;\r\n if (!showWizardInsteadOfQT(wizardList, wizardIsActive)) {\r\n const responseWithOldFeatures = await getBvGroupFeatures(featureGroup.dbName || featureGroup.partName, nextFeaturesPage, 6000, [], \"\", \"\", null, true);\r\n if (Array.isArray(responseWithOldFeatures)) {\r\n oldFeatures = responseWithOldFeatures;\r\n }\r\n }\r\n }\r\n\r\n featureGroup.setGroupFeatures(responseArray, pageSize, true, layoutAbbr, nextFeaturesPage, false, !isCommonRequest);\r\n\r\n if (oldFeatures.length) {\r\n featureGroup.setGroupFeatures(oldFeatures, pageSize, false, layoutAbbr, nextFeaturesPage, true, false);\r\n }\r\n featureGroup.requestInProgress = false;\r\n // if (applyCustomConfigurations) { //no need for it right now since we have less than 1000 sinks anf faucets\r\n // const vanityParent = layout.parts[\"Vanity\"];\r\n // const isVanityChild = vanityParent && vanityParent.relatedItems.some(relItem => relItem.partId === featureGroup.partId);\r\n // if (vanityParent) {\r\n // layout.createCustomConfigurations();\r\n // }\r\n // }\r\n return responseArray\r\n};\r\n\r\nconst allRelatedItemsCheck = (parentGroup, neededParts) => {\r\n parentGroup.relatedItems.forEach(relItem => {\r\n if (!relItem.allFeaturesReceived && !neededParts.some(featureGroup => featureGroup.partId === relItem.partId)) {\r\n neededParts.push(relItem)\r\n }\r\n })\r\n return neededParts\r\n}\r\n\r\n/**\r\n * gets all features depending on the featureGroup\r\n * @param featureGroup {featureGroupInterface}\r\n * @param shouldUpdateNavigation {boolean}\r\n */\r\nexport const checkIfLookFeaturesReceived = async (featureGroup, shouldUpdateNavigation = true) => {\r\n const layout = featureGroup.getParent\r\n ? featureGroup.getParent().layout || getCurrentLayout()\r\n : getCurrentLayout();\r\n const layoutAbbr = layout.getCurrentLayoutAbbreviation();\r\n let neededParts = [];\r\n let neededFeatureGroup = null;\r\n if (!featureGroup.allFeaturesReceived\r\n || (featureGroup.nextFeaturesPageToLoadArray && !featureGroup.nextFeaturesPageToLoadArray[layoutAbbr].page)) {\r\n neededParts.push(featureGroup);\r\n }\r\n // const wallParent = layout.parts[\"Walls\"];\r\n const vanityParent = layout.parts[\"Vanity\"];\r\n const cabinetParent = layout.parts[\"Cabinet\"];\r\n\r\n // const isWallChild = wallParent && wallParent.relatedItems.some(relItem => relItem.partId === featureGroup.partId);\r\n const isVanityChild = vanityParent && vanityParent.relatedItems.some(relItem => relItem.partId === featureGroup.partId);\r\n const isCabinetChild = cabinetParent\r\n && (cabinetParent.relatedItems.some(relItem => relItem.partId === featureGroup.partId)\r\n || featureGroup.partId === \"fridge\"\r\n || featureGroup.partId === \"dishwasher\"\r\n || featureGroup.partId === \"center_island_cabinet\"\r\n || featureGroup.partId === \"stovetop\"\r\n || featureGroup.partId === \"range\"\r\n || featureGroup.partId === \"hood\");\r\n const isCountertop = COUNTERTOP_GROUP.some(partId => partId === featureGroup.partId);\r\n const isEdge = EDGE_GROUP.some(partId => partId === featureGroup.partId);\r\n const visType = getCommonVisualizerType();\r\n const isFaucetOrSink = visType === \"kitchen\" && (featureGroup.partId.includes(\"faucet\") || featureGroup.partId.includes(\"sink\"));\r\n const isShowerHeadOrArm = visType === \"bathroom\" && (featureGroup.partId.includes(\"shower_arm\") || featureGroup.partId.includes(\"shower_head\"));\r\n const isDoorOrShowerPan = visType === \"bathroom\" && (featureGroup.partId.includes(\"shower_door\") || featureGroup.partId.includes(\"shower_pan_combo\"));\r\n // if (isWallChild) {\r\n // neededParts = allRelatedItemsCheck(wallParent, neededParts);\r\n // } else if (isVanityChild) {\r\n if (isVanityChild) {\r\n neededParts = allRelatedItemsCheck(vanityParent, neededParts);\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n const wallParent = layout.parts[\"Walls\"];\r\n const appliancesParent = layout.parts[\"Appliances\"];\r\n if (wallParent) {\r\n [\"frontWall\", \"rightWall\", \"leftWall\"].forEach(wallId => {\r\n if (wallParent[wallId] && !wallParent[wallId].allFeaturesReceived) {\r\n neededParts.push(wallParent[wallId]);\r\n }\r\n })\r\n }\r\n if (appliancesParent && appliancesParent.fridgeEnclosure && !appliancesParent.fridgeEnclosure.allFeaturesReceived) {\r\n neededParts.push(appliancesParent.fridgeEnclosure);\r\n }\r\n }\r\n } else if (isCabinetChild) {\r\n neededParts = allRelatedItemsCheck(cabinetParent, neededParts);\r\n if (featureGroup.partId !== \"center_island_cabinet\") {\r\n const centerIslandCabinet = layout.getFeatureGroupByPartId(\"center_island_cabinet\");\r\n if (centerIslandCabinet) {\r\n neededParts.push(centerIslandCabinet);\r\n }\r\n }\r\n } else if (isCountertop) {\r\n const countertop = layout.parts[\"Countertop\"] ? layout.parts[\"Countertop\"].countertop : null;\r\n const backsplash = layout.parts[\"Walls\"] ? layout.parts[\"Walls\"].backsplash : null;\r\n const centerCountertop = layout.parts[\"CenterIsland\"] ? layout.parts[\"CenterIsland\"].countertop : null;\r\n const edgeProfile = layout.parts[\"Countertop\"] ? layout.parts[\"Countertop\"].edgeProfile || layout.parts[\"Countertop\"].edge : null;\r\n [countertop, backsplash, centerCountertop, edgeProfile].forEach(relItem => {\r\n if (relItem && (relItem.partId !== featureGroup.partId) && !relItem.allFeaturesReceived) {\r\n neededParts.push(relItem)\r\n }\r\n });\r\n if (featureGroup.partId === \"center_island_countertop\" && layout.parts[\"CenterIsland\"] && layout.parts[\"CenterIsland\"].sink) {\r\n neededParts.push(layout.parts[\"CenterIsland\"].sink)\r\n }\r\n } else if (isFaucetOrSink) {\r\n const parent = featureGroup.getParent();\r\n switch (featureGroup.partId) {\r\n case \"center_island_faucet\":\r\n case \"faucet\":\r\n neededFeatureGroup = parent.sink;\r\n break;\r\n case \"center_island_sink\":\r\n case \"sink\":\r\n neededFeatureGroup = parent.faucet;\r\n break;\r\n default:\r\n break;\r\n }\r\n if ((featureGroup.partId === \"center_island_sink\") && parent.countertop) {\r\n neededParts.push(parent.countertop)\r\n }\r\n } else if (isDoorOrShowerPan) {\r\n neededFeatureGroup = featureGroup.partId.includes(\"shower_door\")\r\n ? featureGroup.getParent().showerPanCombo\r\n : featureGroup.getParent().showerDoor;\r\n } else if (isShowerHeadOrArm) {\r\n neededFeatureGroup = featureGroup.partId.includes(\"shower_arm\")\r\n ? featureGroup.getParent().showerHead\r\n : featureGroup.getParent().showerArm;\r\n } else if (isEdge) {\r\n neededFeatureGroup = featureGroup.getParent().countertop;\r\n } else if (featureGroup.partId === \"stove\" || featureGroup.partId === \"range\") {\r\n if (featureGroup.getParent().hood) {\r\n neededParts.push(featureGroup.getParent().hood);\r\n }\r\n if (featureGroup.getParent().oven) {\r\n neededParts.push(featureGroup.getParent().oven);\r\n }\r\n if (cabinetParent && cabinetParent.bottomCabinet) {\r\n neededParts.push(cabinetParent.bottomCabinet);\r\n }\r\n if (cabinetParent && cabinetParent.bottomHandle) {\r\n neededParts.push(cabinetParent.bottomHandle);\r\n }\r\n }\r\n if (neededFeatureGroup && !neededFeatureGroup.allFeaturesReceived) {\r\n neededParts.push(neededFeatureGroup)\r\n }\r\n const responses = await Promise.all([\r\n ...neededParts.map(async relatedItem => await getAdditionalFeaturesOnScroll(relatedItem, true)),\r\n ]);\r\n\r\n if (isVanityChild) {\r\n layout.createCustomConfigurations();\r\n }\r\n\r\n if (shouldUpdateNavigation) {\r\n // store.dispatch(updateFeatureGroupCount())\r\n store.dispatch(updateNavigationCount())\r\n }\r\n\r\n return responses\r\n};\r\n\r\nexport const getFeatureFromTheBackendBySku = async (skuFromUrl, featureGroupFromUrl) => {\r\n let featureFound;\r\n const requestFirstSharedFeaturenames = document.kvConfig.visualizerType !== \"bvLook\"; // for bv look skus are first\r\n const response = await getBvFeatures(null, [skuFromUrl], requestFirstSharedFeaturenames);\r\n if (response) {\r\n let featuresLoaded = response.data || [];\r\n const layout = getCurrentLayout();\r\n layout.loadNewFeatures(featuresLoaded);\r\n const featureGroupPartId = featureGroupFromUrl ? featureGroupFromUrl.replace(/-/gi, \"_\") : \"\";\r\n featureFound = layout.getFeatureBySku(skuFromUrl, featureGroupPartId, false, requestFirstSharedFeaturenames);\r\n if (!featuresLoaded.length || !featureFound) {\r\n const response2 = await getBvFeatures(null, [skuFromUrl], !requestFirstSharedFeaturenames);\r\n if (response2 && Array.isArray(response2.data) && response2.data.length) {\r\n layout.loadNewFeatures( response2.data);\r\n featureFound = layout.getFeatureBySku(skuFromUrl, featureGroupPartId, false, !requestFirstSharedFeaturenames);\r\n }\r\n }\r\n }\r\n return featureFound\r\n}\r\n","import * as types from \"./actionTypes\";\r\n\r\nexport const setRelatedGroups = (relatedGroups) => ({\r\n type: types.SET_RELATED_GROUPS,\r\n payload: { relatedGroups }\r\n});\r\n\r\nexport const setRelatedGroupsSearch = (relatedGroupsSearch) => ({\r\n type: types.SET_RELATED_GROUPS_SEARCH,\r\n payload: { relatedGroupsSearch }\r\n});\r\n\r\nexport const toggleGalleryVisible = (galleryVisible, galleryShowActiveFeature = null) => ({\r\n type: types.TOGGLE_GALLERY_VISIBLE,\r\n payload: { galleryVisible, galleryShowActiveFeature }\r\n});\r\n\r\nexport const setGalleryActiveImageIndex = (galleryActiveImageIndex) => ({\r\n type: types.SET_GALLERY_ACTIVE_IMAGE_INDEX,\r\n payload: { galleryActiveImageIndex }\r\n});\r\n\r\nexport const setMaterialsPageSubSteps = (subSteps) => ({\r\n type: types.SET_MATERIALS_PAGE_SUB_STEPS,\r\n payload: { subSteps }\r\n});\r\n\r\nexport const setMaterialsPageActiveSubStep = (activeSubStep) => ({\r\n type: types.SET_MATERIALS_PAGE_ACTIVE_SUB_STEP,\r\n payload: { activeSubStep }\r\n});\r\n\r\nexport const toggleNotCompatibleView = (showNotCompatibleView) => ({\r\n type: types.TOGGLE_NOT_COMPATIBLE_VIEW,\r\n payload: { showNotCompatibleView }\r\n});\r\n\r\nexport const toggleProductNoteEditorVisible = (productNoteEditorVisible) => ({\r\n type: types.TOGGLE_PRODUCT_NOTE_EDITOR_VISIBLE,\r\n payload: { productNoteEditorVisible }\r\n});\r\n\r\nexport const setRowItems = (rowItems) => ({\r\n type: types.SET_ROW_ITEMS,\r\n payload: { rowItems }\r\n});\r\nexport const setMaterialsCanvasClass = (materialsCanvasClass) => ({\r\n type: types.SET_MATERIALS_PAGE_CANVAS_CLASS,\r\n payload: { materialsCanvasClass }\r\n});\r\n","import {Part} from \"./part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {vanityThumbnail} from \"../assets\";\r\n\r\nimport CompleteVanity from \"../subparts/vanity/completeVanity\";\r\nimport VanityHandle from \"../subparts/vanity/vanityHandle\";\r\nimport VanityPedestal from \"../subparts/vanity/vanityPedestal\";\r\nimport VanityCountertop from \"../subparts/vanity/vanityCountertop\";\r\nimport LightingFixture from \"../subparts/vanity/lightingFixture\";\r\nimport VanityBacksplash from \"../subparts/vanity/vanityBacksplash\";\r\nimport Mirror from \"../subparts/vanity/mirror\";\r\nimport Sink from \"../subparts/vanity/sink\";\r\nimport VanityFaucet from \"../subparts/vanity/faucet\";\r\n\r\nexport class Vanity extends Part {\r\n static id = 'Vanity';\r\n\r\n static Types = {\r\n Complete: 'Complete',\r\n Custom: 'Custom'\r\n };\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Vanity';\r\n this.translateId = \"visualizer.bathroom.vanity\";\r\n this.partThumbnail = vanityThumbnail;\r\n this.activeSubType_ = Vanity.Types.Custom;\r\n this.relatedItems = [];\r\n this.placeholdersNeeded = false; // only Vanity property\r\n\r\n // vanity parts\r\n this.pedestalSink = null;\r\n this.completeVanity = null;\r\n this.countertop = null;\r\n this.sink = null;\r\n this.faucet = null;\r\n this.vanityBacksplash = null;\r\n this.vanityHandle = null;\r\n this.mirror = null;\r\n this.lightingFixture = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Sink\":\r\n relatedItemName = \"sink\";\r\n RelatedItemClass = Sink;\r\n break;\r\n case \"Mirror\":\r\n relatedItemName = \"mirror\";\r\n RelatedItemClass = Mirror;\r\n break;\r\n case \"Lighting Fixture\":\r\n relatedItemName = \"lightingFixture\";\r\n RelatedItemClass = LightingFixture;\r\n break;\r\n case \"Countertop\":\r\n relatedItemName = \"countertop\";\r\n RelatedItemClass = VanityCountertop;\r\n break;\r\n case \"Faucet\":\r\n relatedItemName = \"faucet\";\r\n RelatedItemClass = VanityFaucet;\r\n break;\r\n case \"VanityBacksplash\":\r\n case \"BackSplash\":\r\n case \"Backsplash\":\r\n relatedItemName = \"vanityBacksplash\";\r\n RelatedItemClass = VanityBacksplash;\r\n break;\r\n case \"Vanity Handle\":\r\n relatedItemName = \"vanityHandle\";\r\n RelatedItemClass = VanityHandle;\r\n break;\r\n case \"Vanity\": {\r\n const completeVanity = dbFeature.metaData && dbFeature.metaData[\"Vanity\"]\r\n && dbFeature.metaData[\"Vanity\"].includes(\"Complete\");\r\n\r\n relatedItemName = completeVanity ? \"completeVanity\" : \"pedestalSink\";\r\n RelatedItemClass = completeVanity ? CompleteVanity : VanityPedestal;\r\n break;\r\n }\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName === \"sink\") {\r\n const faucetIndex = this.relatedItems.findIndex(relItem => relItem.partName === 'Faucet');\r\n faucetIndex ? this.relatedItems.splice(faucetIndex, 0, this.sink) : this.relatedItems.push(this.sink);\r\n } else if (relatedItemName === \"completeVanity\") {\r\n this.relatedItems.unshift(this.completeVanity); // cabinet needs to be first in the list.\r\n } else if (relatedItemName === \"pedestalSink\") {\r\n this.relatedItems.unshift(this.pedestalSink); // cabinet needs to be first in the list.\r\n } else {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n let res = [];\r\n this.placeholdersNeeded = true;\r\n this.getRelatedItems().forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n ? relatedItem.placeholderFeature.layer.addTo(res)\r\n : relatedItem.activeFeature && relatedItem.activeFeature.layer && relatedItem.activeFeature.layer.src\r\n ? relatedItem.activeFeature.layer.addTo(res)\r\n : relatedItem.placeholderFeature && relatedItem.placeholderFeature.layer && relatedItem.placeholderFeature.layer.src\r\n ? relatedItem.placeholderFeature.layer.addTo(res)\r\n : null;\r\n });\r\n return res.length ? res : null;\r\n }\r\n\r\n getRelatedItems() {\r\n return this.relatedItems.filter(item => item.visible.includes(this.activeSubType_));\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Vanity', this);\r\n }\r\n\r\n subTypes() {\r\n return this.pedestalSink && this.completeVanity ? [Vanity.Types.Custom, Vanity.Types.Complete] : [];\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return this.activeSubType_ === Vanity.Types.Complete;\r\n }\r\n\r\n activeSubType() {\r\n return this.activeSubType_;\r\n }\r\n\r\n subParts() {\r\n const relatedItems = this.getRelatedItems();\r\n const excluded = [];\r\n const vanityPart = relatedItems.find(navItem => navItem.partId === \"vanity_cabinet\");\r\n if (vanityPart && vanityPart.activeFeature\r\n && vanityPart.activeFeature.metaData[\"VanityHandle\"]\r\n && vanityPart.activeFeature.metaData[\"VanityHandle\"].includes(\"None\")) {\r\n excluded.push(\"vanity_handle\")\r\n }\r\n return relatedItems\r\n .filter(item => !excluded.includes(item.partId))\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n // subPartsWithAccentWall() {\r\n // const vanityAccent = this.layout.parts.Walls.vanityAccent;\r\n // return [new DesignNavigationItem(vanityAccent.partName, vanityAccent),\r\n // ...this.getRelatedItems().map(_ => new DesignNavigationItem(_.partName, _))];\r\n // }\r\n\r\n handleSubTypeClick(subType) {\r\n this.activeSubType_ = subType;\r\n this.getRelatedItems().forEach((relatedItem) => {\r\n if (!relatedItem.activeFeature) {\r\n relatedItem.setDefault()\r\n }\r\n });\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n return this.subParts()[0]\r\n }\r\n\r\n setDefault(layout) {\r\n this.getRelatedItems().forEach(_ => _.setDefault(layout));\r\n }\r\n\r\n counterTopSize() {\r\n return this.getCounterTopSize() || '24in'; // temporary hardcode until we would have meta data finished\r\n }\r\n\r\n getCounterTopSize() {\r\n\r\n if (this.activeSubType_ === Vanity.Types.Custom && this.pedestalSink && !this.pedestalSink.placeholderChanged\r\n && this.pedestalSink.placeholderFeature && +this.pedestalSink.placeholderFeature.vanitySize === 72) {\r\n return '72in' // placeholder hardcode\r\n }\r\n\r\n if (this.activeSubType_ === Vanity.Types.Complete) {\r\n if (!this.completeVanity.activeFeature) {\r\n this.completeVanity.setDefault()\r\n }\r\n return this.completeVanity.activeFeature.vanitySize + \"in\"\r\n } else {\r\n if (this.pedestalSink && !this.pedestalSink.activeFeature) {\r\n this.pedestalSink.setDefault()\r\n }\r\n return (this.pedestalSink && this.pedestalSink.activeFeature)\r\n ? this.pedestalSink.activeFeature.vanitySize + \"in\"\r\n : null;\r\n }\r\n }\r\n\r\n toggleVanityParts(disabled) {\r\n this.getRelatedItems().forEach(relItem => {\r\n if (relItem.partId === \"vanity_sink\" || relItem.partId === \"vanity_faucet\"\r\n || relItem.partId === \"vanity_countertop\" || relItem.partId === \"vanity_cabinet\"\r\n || relItem.partId === \"vanity_handle\") {\r\n relItem.disabled = disabled;\r\n }\r\n });\r\n }\r\n}\r\n\r\n","import orderBy from \"lodash/orderBy\";\r\n\r\nimport {Part} from \"../part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {showerThumbnail} from '../../../bvComponent/core/assets';\r\n\r\n// import store from \"../../../../store\";\r\n\r\nimport {ShowerTubCombo} from \"./showerTubCombo\";\r\n\r\nimport ShowerFixture from \"../subparts/shower/showerFixture\";\r\nimport ShowerGlass from \"../subparts/shower/showerGlass\";\r\n// import ShowerOverlay from \"../subparts/shower/showerOverlay\";\r\nimport ShowerBody from \"../subparts/shower/showerBody\";\r\nimport ShowerWall from \"../subparts/shower/showerWall\";\r\nimport ShowerWallAccent from \"../subparts/shower/showerWallAccent\";\r\nimport ShowerDoor from \"../subparts/shower/showerDoor\";\r\nimport ShowerPanCombo from \"../subparts/shower/showerPanCombo\";\r\nimport ShowerDoorHandle from \"../subparts/shower/showerDoorHandle\";\r\nimport PonyWallCap from \"../subparts/shower/ponyWallCap\";\r\nimport PonyWallGlass from \"../subparts/shower/ponyWallGlass\";\r\nimport ShowerFloor from \"../subparts/shower/showerFloor\";\r\nimport Threshold from \"../subparts/shower/threshold\";\r\nimport ShowerDrain from \"../subparts/shower/showerDrain\";\r\nimport ShowerHead from \"../subparts/shower/showerHead\";\r\n\r\nexport class Shower extends Part {\r\n static id = 'Shower';\r\n\r\n static Type = {\r\n Custom: 'Custom',\r\n Complete: 'Complete',\r\n Combo: 'Combo',\r\n All: 'All'\r\n };\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partThumbnail = showerThumbnail;\r\n this.partName = 'Shower';\r\n this.translateId = \"visualizer.bathroom.shower\";\r\n this.relatedItems = [];\r\n this.activeSubType_ = Shower.Type.Custom;\r\n\r\n this.customBodyType = 1; // Door\r\n\r\n this.showerBody = null;\r\n this.showerGlass = null;\r\n this.showerWall = null;\r\n this.showerWallAccent = null;\r\n\r\n // old\r\n this.showerFloor = null;\r\n this.showerOverlay = null;\r\n // old\r\n\r\n this.showerPanCombo = null;\r\n this.threshold = null;\r\n this.showerFixture = null;\r\n this.showerBodySelectedByUser = false;\r\n this.showerDoor = null;\r\n this.showerDoorHandle = null;\r\n\r\n this.ponyWallCap = null;\r\n this.ponyWallGlass = null;\r\n\r\n this.showerBody = new ShowerBody(true);\r\n this.showerBody.getParent = () => this;\r\n this.showerBody.type = Shower.Type.All;\r\n this.showerBody.counts = {\r\n allLayoutFeaturesCount: 0,\r\n largeLayoutFeaturesCount: 0,\r\n smallLayoutFeaturesCount: 0\r\n };\r\n this.relatedItems.push(this.showerBody);\r\n\r\n this.showerFloorIsActive = false;\r\n\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n relatedItemType = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Shower Pan\":\r\n case \"Shower Pans\":\r\n relatedItemName = \"showerPanCombo\";\r\n RelatedItemClass = ShowerPanCombo;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Wall\":\r\n case \"Shower Walls\":\r\n case \"ShowerInteriorWall\": // OLD\r\n relatedItemName = \"showerInteriorWall\";\r\n RelatedItemClass = ShowerWall;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Wall Accent\":\r\n relatedItemName = \"showerWallAccent\";\r\n RelatedItemClass = ShowerWallAccent;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Door\":\r\n case \"Shower_Door\":\r\n if (!dbFeature.displayName.includes(\"Neo Angle\")) {\r\n relatedItemName = \"showerDoor\";\r\n RelatedItemClass = ShowerDoor;\r\n relatedItemType = Shower.Type.Custom;\r\n }\r\n break;\r\n case \"Shower Door Handle\":\r\n relatedItemName = \"showerDoorHandle\";\r\n RelatedItemClass = ShowerDoorHandle;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"ShowerPan\":\r\n relatedItemName = \"threshold\";\r\n RelatedItemClass = Threshold;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"ShowerFloor\":\r\n relatedItemName = \"showerFloor\";\r\n RelatedItemClass = ShowerFloor;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Fixture\":\r\n relatedItemName = \"showerFixture\";\r\n RelatedItemClass = ShowerFixture;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Shower Drain\":\r\n relatedItemName = \"showerDrain\";\r\n RelatedItemClass = ShowerDrain;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Head\":\r\n relatedItemName = \"showerHead\";\r\n RelatedItemClass = ShowerHead;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Pony Wall Cap\":\r\n relatedItemName = \"ponyWallCap\";\r\n RelatedItemClass = PonyWallCap;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Pony Wall Glass\":\r\n relatedItemName = \"ponyWallGlass\";\r\n RelatedItemClass = PonyWallGlass;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Shower Glass\":\r\n if (!this.showerBody) {\r\n this.showerBody = new ShowerBody(true);\r\n this.relatedItems.push(this.showerBody);\r\n }\r\n relatedItemName = \"showerGlass\";\r\n RelatedItemClass = ShowerGlass;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n // case \"Shower Overlay\":\r\n // relatedItemName = \"showerOverlay\";\r\n // RelatedItemClass = ShowerOverlay;\r\n // relatedItemType = Shower.Type.Custom;\r\n // break;\r\n case \"Shower Body\":\r\n relatedItemName = \"showerBody\";\r\n RelatedItemClass = ShowerBody;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].type = relatedItemType;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setSpecificRules() {}\r\n\r\n // setLayers(layout, placeholdersNeeded) {\r\n // let res = [];\r\n // const relatedItems = this.getRelatedItems();\r\n // // console.log('relatedItems', relatedItems);\r\n // relatedItems.forEach(relatedItem => {\r\n // relatedItem.setLayers(layout);\r\n // });\r\n // if (this.showerDoor && !this.showerDoor.activeFeature) { // we need it cause shower door is relying on shPanCombo\r\n // this.showerDoor.setLayers(layout);\r\n // }\r\n // if (this.showerDoorHandle && !this.showerDoorHandle.activeFeature) {\r\n // this.showerDoorHandle.setLayers(layout);\r\n // }\r\n // relatedItems.forEach(relatedItem => {\r\n //\r\n // (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n // ? relatedItem.placeholderFeature.layer.addTo(res)\r\n // : relatedItem.activeFeature && relatedItem.activeFeature.layer ? relatedItem.activeFeature.layer.addTo(res) : null\r\n //\r\n // // NN(relatedItem.activeFeature, (activeFeature) => activeFeature.layer.addTo(res));\r\n //\r\n // if ((relatedItem instanceof ShowerBody || relatedItem instanceof ShowerInteriorWallAccent)\r\n // && relatedItem.activeFeatureParts && relatedItem.activeFeatureParts.length) {\r\n // relatedItem.activeFeatureParts.forEach((activeFeaturePart) => {\r\n // activeFeaturePart && !activeFeaturePart.disabled && activeFeaturePart.layer && activeFeaturePart.layer.addTo(res);\r\n // })\r\n // }\r\n // if (relatedItem instanceof ShowerWall && relatedItem.activeFeatureParts && relatedItem.placeholderChanged && relatedItem.activeFeatureParts.length) {\r\n // relatedItem.activeFeatureParts.forEach((activeFeaturePart) => {\r\n // activeFeaturePart && !activeFeaturePart.disabled && activeFeaturePart.layer && activeFeaturePart.layer.addTo(res);\r\n // })\r\n // }\r\n //\r\n // });\r\n //\r\n // return res.length ? res : null;\r\n // }\r\n\r\n subTypes() {\r\n return this.showerBody && (this.showerBody.features.some(showerBodyFeature => showerBodyFeature.type === 0)\r\n && this.showerBody.features.some(showerBodyFeature => showerBodyFeature.type === 1)) ? [\r\n Shower.Type.Custom,\r\n Shower.Type.Complete,\r\n ] : []\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return true;\r\n }\r\n\r\n activeSubType() {\r\n return this.activeSubType_;\r\n }\r\n\r\n handleSubTypeClick(subType, handleNavigationItemClick) {\r\n this.activeSubType_ = subType;\r\n this.showerBody.setDefault(); // set default custom shower\r\n if (handleNavigationItemClick) {\r\n handleNavigationItemClick(this.showerBody.navigationSubItems()[0]) // set default custom shower\r\n }\r\n }\r\n\r\n getRelatedItems() {\r\n const relatedItems = orderBy(this.relatedItems, 'layerPriority');\r\n if (this.showerTubComboIsActive()) {\r\n return relatedItems\r\n }\r\n return relatedItems.filter((relatedItem) => {\r\n return relatedItem.type === this.activeSubType_ || relatedItem.type === Shower.Type.All\r\n })\r\n }\r\n\r\n subParts() {\r\n const activeShowerGroup = this.getActiveShowerGroup();\r\n const ponyWallIsActive = activeShowerGroup.showerDimensions() === \"Pony\";\r\n return this.getRelatedItems()\r\n .filter(item => {\r\n if (item.isPonyWallPart) {\r\n item.visible = ponyWallIsActive\r\n }\r\n return item.visible\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n // return filter(this.relatedItems, {visible: true}).map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n //\r\n // toggleShowerParts(disabled, keepLeftWall) {\r\n // this.getRelatedItems().forEach((relItem) => {\r\n // console.log('relItem', relItem);\r\n // if (\r\n // relItem.partId !== \"shower_interior_wall\"\r\n // && relItem.partId !== \"shower_wall_accent\"\r\n // && relItem.partId !== \"shower_fixture\"\r\n // && relItem.partId !== \"shower_door\"\r\n // && relItem.partId !== \"shower_door_handle\"\r\n // && relItem.partId !== \"pony_wall\"\r\n // && relItem.partId !== \"pony_wall_cap\"\r\n // && relItem.partId !== \"pony_wall_glass\"\r\n // ) {\r\n // relItem.disabled = disabled;\r\n // }\r\n // });\r\n // if (!keepLeftWall) {\r\n // this.layout.parts.Walls.wallExL.disabled = disabled;\r\n // }\r\n // }\r\n\r\n setDefault(layout) {\r\n const relatedItems = orderBy(this.relatedItems, 'layerPriority');\r\n relatedItems.forEach(_ => _.setDefault(layout));\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n return this.subParts()[0]\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n /**\r\n * Gets the current shower size from metaValues.\r\n */\r\n showerSize() {\r\n if (this.showerTubComboIsActive()) {\r\n const showerTubCombo = this.getActiveShowerGroup();\r\n if (showerTubCombo) {\r\n const activeRelItem = showerTubCombo.relatedItems.find(featureGroup => featureGroup.partId === showerTubCombo.bottomTub)\r\n || showerTubCombo.replacementTub;\r\n if (activeRelItem && activeRelItem.activeFeature && activeRelItem.activeFeature.metaData[\"ShowerSize\"]) {\r\n return activeRelItem.activeFeature.metaData[\"ShowerSize\"][0]\r\n }\r\n }\r\n return null\r\n }\r\n if (!this.showerBody || !this.showerBody.activeFeature) {\r\n return null;\r\n }\r\n let showerSizeValues = this.showerBody.activeFeature.metaData[\"ShowerSize\"];\r\n if (!showerSizeValues || !showerSizeValues.length) {\r\n if (this.showerBody.activeFeature.partName.includes(\"Complete\")) {\r\n showerSizeValues = ['30'];\r\n } else {\r\n console.warn('No Shower size.');\r\n }\r\n } else if (showerSizeValues[0] === \"-\") {\r\n showerSizeValues[0] = this.showerBody.activeFeature.partName.includes(\"60in\") ? \"60\" : \"30\"\r\n }\r\n\r\n return showerSizeValues[0];\r\n }\r\n\r\n /**\r\n * Gets the current shower dimensions from showerBody\r\n */\r\n showerDimensions() {\r\n if (!this.showerBody)\r\n return \"Full\";\r\n return this.showerBody.activeFeature ? this.showerBody.activeFeature.showerDimensions : null;\r\n // \"Full\" : \"Half\";\r\n }\r\n\r\n isComplete() {\r\n if (!this.showerBody) {\r\n return true;\r\n } else if (this.showerTubComboIsActive()) {\r\n return false;\r\n } else {\r\n return this.showerBody.activeFeature\r\n }\r\n }\r\n\r\n showerTubComboIsActive() {\r\n const comboPart = this.layout.parts[ShowerTubCombo.id];\r\n return comboPart && comboPart.showerTubComboIsActive\r\n }\r\n\r\n getActiveShowerGroup() { // user for taking sizes, etc...\r\n return this.showerTubComboIsActive() ? this.layout.parts[ShowerTubCombo.id] : this;\r\n }\r\n}\r\n\r\n","import store from \"../../../../../store\";\r\nimport {updateSQFTCalculations} from \"../../../../../actions/sqftFunctions\";\r\nconst SqftStore = {\r\n viewGL: null,\r\n ctxCenter: {\r\n x: 0,\r\n y: 0,\r\n },\r\n canvas: {\r\n width: 0,\r\n height: 0\r\n },\r\n radius: {\r\n arcLength: 0,\r\n angle: 0,\r\n clickedEdgeButton: null,\r\n featureId: null,\r\n },\r\n edgeFeatureGroup: null,\r\n edgeFeatures: [],\r\n isSlabMode: () => {\r\n const reduxState = store.getState();\r\n return reduxState.sqftSlabState.isShowSlabTool;\r\n },\r\n isRegularMode: () => {\r\n const reduxState = store.getState();\r\n return !reduxState.sqftSlabState.isShowSlabTool;\r\n },\r\n updateCalculations: () => {\r\n const state = store.getState();\r\n const updateCalculations = state.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n },\r\n getShapeType: () => {\r\n //todo\r\n },\r\n seamHistory: [],\r\n setSeamHistory: function(seamHistory) {\r\n this.seamHistory = seamHistory\r\n },\r\n addSeamHistory: function(shapeId) {\r\n this.seamHistory.push(shapeId)\r\n },\r\n getSeamHistory: function() {\r\n return this.seamHistory;\r\n }\r\n};\r\n\r\nexport default SqftStore\r\n","const COLOR_THEMES = {\r\n \"qc\": {\r\n primary: \"#4A90E2\",\r\n primary_hover: \"#3483de\", // darken(primary, 5%),\r\n primary_transparent8: \"rgba(74,144,226,0.8)\",\r\n primary_transparent: \"rgba(74,144,226,0.5)\", // fade_out(primary, 0.5),\r\n active: \"#9FC522\",\r\n active_hover: \"#8daf1e\", //darken(#9FC522, 5%),\r\n active_disabled: \"rgba(141,175,30,0.5)\", //#dfecb5\",\r\n active_transparent: \"rgba(159,197,34,0.5)\", // fade_out(#9FC522, 0.5),\r\n assetsPath: \"../images\",\r\n },\r\n \"caes\": {\r\n primary: \"#58595b\",\r\n primary_hover: \"#4b4c4e\", //darken(#58595b, 5%),\r\n primary_transparent8: \"rgba(74,144,226,0.8)\",\r\n primary_transparent: \"rgba(88,89,91,0.5)\", // fade_out(primary, 0.5),\r\n active: \"#f46c42\",\r\n active_hover: \"#f3592a\", //darken(#f46c42, 5%),\r\n active_disabled: \"rgba(243,89,42, 0.5)\",\r\n active_transparent: \"rgba(244,108,66,0.5)\", //fade_out(#9FC522, 0.5),\r\n assetsPath: \"../images-caes\",\r\n }\r\n};\r\n\r\nexport const COLOR = {\r\n black: '#000000',\r\n blackLight: '#4a4a4a',\r\n white: '#ffffff',\r\n blue: '#ffffff',\r\n red: '#f11515',\r\n red_transparent: \"rgba(241, 21, 21 , 0.5)\",\r\n}\r\n\r\nexport default COLOR_THEMES\r\n","import polygonClipping from \"polygon-clipping\";\r\nimport sqftEventManager from \"../../store/sqftEventManager\";\r\n// import triangle from \"./layouts/triangle\";\r\nimport Line from \"./line\";\r\nimport pnpoly, {pnpolyArray} from \"../../../../lib/pnpoly\";\r\n//import earcut from \"../../../../lib/earcut\";\r\nimport workspace from \"../workspace\";\r\n//import sqftStore from \"../../store/sqftStore\";\r\nimport sqftStore from \"../workspace\";\r\nimport sqftConfig from \"../../store/sqftConfig\";\r\nimport {\r\n getAreaByShoelaceFormula,\r\n getEdgeArea, getIntersectCordsBetweenLines, getPointDistance, getPointField,\r\n getSnappedPos,\r\n inchesToLNFT,\r\n mm2ToM2,\r\n orientation,\r\n rotatePoint,\r\n sqInchesToMM2,\r\n sqInchesToSqFoot\r\n} from \"../../../../helpers/sqftHelper\";\r\nimport {getAngle, getRotationCentrePoint} from \"./rotation\";\r\nimport ShapeHelper, {\r\n getAngleBetween3Points,\r\n getPointDirection\r\n} from \"../../../../helpers/shapeHelper\";\r\nimport $ from \"jquery\";\r\nimport clone from \"lodash/clone\";\r\nimport store from \"../../../../../../store\";\r\nimport {\r\n FEATURE_QUANTITY_UNITS,\r\n SHAPE_PART_ID, SHAPE_PART_IDS_USING_SAME_COLOR,\r\n SIDEBAR_SLAB_SEAM_BUTTONS, WORKSPACE_RESOURCES,\r\n} from \"../../../../constants\";\r\nimport ShapeSlab from \"./shapeParts/shapeSlab\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport SlabWorkspace from \"../slab/slabWorkspace\";\r\nimport ShapeEditable from \"./shapeParts/shapeEditable\";\r\nimport {updateSQFTCalculations} from \"../../../../../../actions/sqftFunctions\";\r\nimport sqftShapeManager from \"../../store/sqftShapeManager\";\r\nimport SqftStore from \"../../store/sqftStore\";\r\nimport ShapeCabinet from \"./shapeParts/shapeCabinet\";\r\nimport ShapeAbsolute from \"./shapeParts/shapeAbsolute\";\r\nimport ShapeSpacer from \"./shapeParts/shapeSpacer\";\r\nimport {isSFTCabinetsGroup} from \"../../../../helpers/sqftNavigationHelper\";\r\nimport {getCurrentLayout} from \"../../../../../appLayout\";\r\nimport {\r\n getFeatureNameById,\r\n shouldChangeCabinetShapePartId\r\n} from \"../../../../helpers/featureHelper\";\r\nimport {\r\n addShapeIdWithMissingFeature,\r\n setShouldShowChangeShapeFeatureMissingMessage,\r\n} from \"../../../../../../actions/sqftMenuFunctions\";\r\nimport workspaceControllers from \"../../store/workspaceControllers\";\r\nimport sqftSlabManager from \"../../store/sqftSlabManager\";\r\nimport ShapeIntersections from \"./shapeParts/shapeIntersections\";\r\nimport ShapeMemory from \"./shapeParts/shapeMemory\";\r\nimport ShapeRender from \"./shapeParts/shapeRender\";\r\nimport {SHAPE_PART_IDS_VISIBLE_ONLY_IN_THE_SLAB_MODE} from \"../../../../constantsFeature\";\r\nimport CabinetSwitchers from \"../../../../../kvComponent/navigation/cabinetSwitchers\";\r\nimport ShapeAutoShuffle from \"./shapeParts/shapeAutoShuffle\";\r\nimport {getLinesWithoutAnglePoints} from \"../../helpers/lineHelper\";\r\nimport {SHAPE_DIAMOND_LAYOUTS, SHAPE_LAYOUTS} from \"../cabinet/cabinetShapes\";\r\nimport {getCabinetSimilarFeatureFromAnotherColor} from \"../../../../helpers/sqft3dArHelper\";\r\nimport {calculatePolygonClippingPolygonArea} from \"../../../../helpers/coordinatesHelper\";\r\nimport {getCabinetDoorsSQFT} from \"../../../../helpers/sqftCalculations\";\r\n\r\nexport default function(id, totalShapeCount, shapeType, partId, fromLayout, shapeParams = {}) {\r\n //private variables\r\n let self = this,\r\n shape = null,\r\n // debugLineColor = \"rgba(0,255,0,0.3)\",\r\n // debugPointColor = \"rgba(0,0,255,0.3)\",\r\n // fillColor = \"rgba(255,255,255,0)\",\r\n minAngle = -90,\r\n maxAngle = 90,\r\n marginFromShape = SqftStore.isSlabMode() || isSFTCabinetsGroup() ? 0 : 30,\r\n state = {\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n hovering: false,\r\n handlerHold: null,\r\n isPointsMovable: false,\r\n isRotatable: false,//true //todo enable on menu click\r\n };\r\n this.design = {\r\n hoverShapeColor: \"rgba(159,197,34,0.47)\",\r\n redHoverShapeColor: \"rgba(208,1,27,0.5)\",\r\n fillColor: \"rgba(74,144,226,0.17)\",\r\n }\r\n this.layout270 = [\"SN\", \"SPN\", \"SNI\", \"SPNI\"];\r\n this.shapeParams = shapeParams; //{shapeCabinet: boolean, canSnap: boolean, isSpacer: boolean}\r\n //public properties\r\n this.pos = {\r\n x: 0,\r\n y: 0\r\n };\r\n this.slabPos = {\r\n x: 0,\r\n y: 0\r\n };\r\n this.staticCenterPoint = null;\r\n this.testShapeLines = null;\r\n this.linesWithoutAngle = null;\r\n this.shapeSlab = new ShapeSlab(this);\r\n this.shapeCabinet = shapeParams.shapeCabinet ? new ShapeCabinet(this) : null;\r\n //this.shapeAbsolute = shapeParams.canSnap ? new ShapeAbsolute(this) : null;\r\n this.shapeAbsolute = new ShapeAbsolute(this);\r\n this.shapeSpacer = shapeParams.isSpacer ? new ShapeSpacer(this) : null;\r\n this.shapeEditable = new ShapeEditable(this);\r\n this.shapeIntersections = new ShapeIntersections(this);\r\n this.shapeAutoShuffle = new ShapeAutoShuffle(this);\r\n this.shapeMemory = new ShapeMemory(this);\r\n this.shapeRender = new ShapeRender(this);\r\n this.shapeRotatable = null; //new ShapeRotatable(this, fillColor);\r\n this.colorSet = null; //new ColorSet\r\n this.shapePieces = []; // seam parts shape ids (see seam tool)\r\n this.seamCutPoints = [];\r\n this.shapeParent = null;\r\n this.slabModeCoreParentId = null; // shape id (additional backsplash shape parent shape id in the slab mode. See SlabAdditionalShapes)\r\n this.id = id;\r\n this.feature = null; // use getFeature\r\n this.featureId = null;\r\n this.featureName = null;\r\n this.relatedParentFeatureId = null;\r\n this.shapeType = shapeType;\r\n this.isContextMenuActive = false;\r\n this.labelsMenu = null;\r\n this.partId = partId;\r\n this.parentPartId = null; // this is shape part id that shape was created from. Used for spacer shapes\r\n this.slabParentPartId = null; // this is the shape partId that is hovered the slab. Used for slabs. Or shape part id that shape was created from in the slab mode.\r\n this.qtCatName = null;\r\n this.fromLayout = fromLayout; // layout abbreviation (S, LNI, etc.) is needed to know if to show popup\r\n this.rotatedDegrees = 0;\r\n this.rotatedDegreesSlab = 0;\r\n this.isHidden = false;\r\n this.isPointsMoved = false; // true if any shape points was moved\r\n this.isPointsChanged = true; // used to trigger update points position for the slabMode\r\n this.isPositionChanged = true; // used to trigger update slabPosition for the slabMode\r\n this.isResetSlabModePopupWasDisplayed = false; //used to display reset popup window if shape has pieces\r\n this.Direction = {\r\n RIGHT: 0,\r\n LEFT: 1\r\n };\r\n this.FlipDirection = {\r\n HORIZONTAL: 0,\r\n VERTICAL: 1\r\n };\r\n this.rotateAngleParts = getAngleRotatedParts(shapeType);\r\n this.isDisabledInPopup = false;\r\n this.slabModeWaterfallSegmentId = null;\r\n this.shouldUseSlabPricing = false;\r\n this.originalPointsCoords = false;\r\n\r\n this.getState = () => { return state };\r\n this.getFillColor = () => { return this.design.fillColor };\r\n this.getDesign = () => { return this.design };\r\n this.getColorset = () => { return this.colorSet };\r\n this.getIsPointsMovable = () => { return state.isPointsMovable };\r\n this.setType = (type) => { self.type = type };\r\n this.setProperty = (name, value) => { self[name] = value };\r\n this.setId = (id) => { this.id = id };\r\n this.setPartId = (partId) => {self.partId = partId};\r\n this.getFeatureName = () => { return this.featureName};\r\n this.setFeatureId = (featureId) => {\r\n //console.log(\"cur featureId\", this.featureId);\r\n //console.log(\"new featureId\", featureId);\r\n if (featureId !== this.featureId) {\r\n this.featureId = featureId\r\n this.featureName = getFeatureNameById(featureId);\r\n this.feature = null;\r\n if (this.shapeCabinet) {\r\n this.shapeCabinet.generateAttachedFeatures()\r\n }\r\n const isShapeUseTheSameFeatureColor = Object.values(SHAPE_PART_IDS_USING_SAME_COLOR).includes(this.partId);\r\n const isSeamPiece = this.partId === SHAPE_PART_ID.seamPiece;\r\n if (isShapeUseTheSameFeatureColor || isSeamPiece) {\r\n this.updateColorSet();\r\n this.updateRelatedShapes();\r\n this.updateSeamShapes();\r\n }\r\n }\r\n };\r\n this.getFeature = () => {\r\n if (!this.feature) {\r\n const layout = getCurrentLayout();\r\n this.feature = layout.getFeatureById(this.featureId, true);\r\n }\r\n return this.feature\r\n }\r\n this.getRelatedParentFeature = () => {\r\n if (!this.feature) {\r\n const layout = getCurrentLayout();\r\n this.relatedParentFeature = layout.getFeatureById(this.relatedParentFeatureId, true);\r\n }\r\n return this.relatedParentFeature\r\n }\r\n this.setSlabParentPartId = (partId) => { this.slabParentPartId = partId }; // here we will assign shape part id that is hovered the slab\r\n this.setSlabModeCoreParentPartId = (partId) => { this.slabParentPartId = partId }; // here we will assign core shape part id\r\n this.setSlabModeCoreParentId = (id) => { this.slabModeCoreParentId = id };\r\n this.setSlabModeWaterfallSegmentId = (id) => {this.slabModeWaterfallSegmentId = id};\r\n this.setColorSet = (colorSet) => {this.colorSet = colorSet};\r\n this.getColorSet = () => { return this.colorSet};\r\n this.updateColorSet = () => {\r\n this.colorSet = workspaceControllers[WORKSPACE_RESOURCES.shapeColors]\r\n .getOrGenerateNewShapeColorByFeatureId(this.featureId);\r\n };\r\n this.updateRelatedShapes = () => {\r\n const relatedShapes = workspace.getShapesBySlabModeCoreParentId([this.id]);\r\n for (const relatedShape of relatedShapes) {\r\n relatedShape.setFeatureId(this.featureId);\r\n relatedShape.setColorSet(this.colorSet);\r\n }\r\n };\r\n this.updateSeamShapes = () => {\r\n this.shapePieces.forEach(shapePieceId => {\r\n let shapePiece = workspace.getShapeById(shapePieceId);\r\n shapePiece.setFeatureId(this.featureId);\r\n shapePiece.setColorSet(this.colorSet);\r\n });\r\n };\r\n this.updateSeamedShapesPosition = () => {\r\n this.shapePieces.forEach(shapePieceId => {\r\n let shapePiece = workspace.getShapeById(shapePieceId);\r\n shapePiece.setPositionWithoutChange(this.pos);\r\n });\r\n };\r\n this.setQtCatName = (qtCatName) => {this.qtCatName = qtCatName};\r\n this.setIsPointsChanged = (isPointsChanged) => {this.isPointsChanged = isPointsChanged};\r\n this.addCrownMolding = () => {\r\n this.shapeCabinet ? this.shapeCabinet.addCrownMolding() : null;\r\n }\r\n this.setQtCatName = (qtCatName) => { this.qtCatName = qtCatName };\r\n this.getIsRotatable = () => { return state.isRotatable };\r\n this.setIsRotatable = (isRotatable) => { state.isRotatable = isRotatable };\r\n this.setIsPointsMovable = (isPointsMovable) => { state.isPointsMovable = isPointsMovable };\r\n this.setSlabPricing = (value) => { this.shouldUseSlabPricing = value };\r\n\r\n /**\r\n * this will return size for square and rectangles in INCHES\r\n * todo maybe we need to change this and return values in mmm and inches\r\n * @return {{width: *, height: *}}\r\n */\r\n this.getSize = () => {\r\n return {\r\n width: getPointDistance(shape[0].from, shape[0].to),\r\n height: getPointDistance(shape[1].from, shape[1].to),\r\n }\r\n }\r\n this.resetMouseDown = () => {\r\n state.mouseDown = false;\r\n state.mouseDownPosition = null;\r\n }\r\n // this.getWidth = () => {\r\n // return this.getSize().width\r\n // }\r\n /**\r\n * @param isFromParams this is static initial value\r\n * @return {*}\r\n */\r\n this.getWidth = (isFromParams = false) => {\r\n if (isFromParams) {\r\n return this.shapeParams.width\r\n }\r\n const thisShapeMeasurementPoints = sqftShapeManager.getMinMaxShapesPointsOnWorkspace([this]);\r\n return getPointDistance(thisShapeMeasurementPoints[0], thisShapeMeasurementPoints[1]);\r\n }\r\n this.getHeight = (isFromParams = false) => {\r\n if (isFromParams) {\r\n return this.shapeParams.height\r\n }\r\n const thisShapeMeasurementPoints = sqftShapeManager.getMinMaxShapesPointsOnWorkspace([this]);\r\n return getPointDistance(thisShapeMeasurementPoints[1], thisShapeMeasurementPoints[2]);\r\n }\r\n this.getDepth = (isFromParams = false) => {\r\n if (isFromParams) {\r\n return this.shapeParams.depth\r\n }\r\n }\r\n\r\n //public events\r\n this.onHover = null;\r\n\r\n //private setters\r\n function getAngleRotatedParts(shapeType) {\r\n switch (shapeType) {\r\n case \"horseshoe\":\r\n return [{ // this is the right part: |‾| <- this one\r\n rotatedAngleValue: 0, // angle input value\r\n line1: 1, // right external side\r\n line2: 3, // right internal side\r\n baseConfiguration: null, // is used for keeping all the configuration after rotateAngle is over\r\n isHovered: false, // user has mouse over this part\r\n isActive: false, // user has clicked on this part\r\n isPulsing: true, // user has select angle tool\r\n shapeType, // is needed for onChange, different parts have different point changes\r\n angleDirection: \"right\" // rotate direction (is used for lines, line text, etc.)\r\n }, { // this is the left part: this one -> |‾|\r\n rotatedAngleValue: 0, // angle input value\r\n line1: 7, // left external side\r\n line2: 5, // left internal side\r\n baseConfiguration: 0, // difference between basePointX and secondaryPointX\r\n isHovered: false, // user has mouse over this part\r\n isActive: false, // user has clicked on this part\r\n isPulsing: true, // user has select angle tool\r\n shapeType, // is needed for onChange, different parts have different point changes\r\n angleDirection: \"left\" // rotate direction (is used for lines, line text, etc.)\r\n }];\r\n case \"wideangle\":\r\n return [{ // this is the top part: |‾ <- this one\r\n rotatedAngleValue: 0, // angle input value\r\n line1: 0, // top external side\r\n line2: 2, // top internal side\r\n baseConfiguration: null, // is used for keeping all the configuration after rotateAngle is over\r\n isHovered: false, // user has mouse over this part\r\n isActive: false, // user has clicked on this part\r\n shapeType, // is needed for onChange, different parts have different point changes\r\n angleDirection: \"right\" // rotate direction (is used for lines, line text, etc.)\r\n }, { // this is the left part: this one -> |‾\r\n rotatedAngleValue: 0, // angle input value\r\n line1: 5, // left external side\r\n line2: 3, // left internal side\r\n baseConfiguration: 0, // difference between basePointX and secondaryPointX\r\n isHovered: false, // user has mouse over this part\r\n isActive: false, // user has clicked on this part\r\n shapeType, // is needed for onChange, different parts have different point changes\r\n angleDirection: \"left\" // rotate direction (is used for lines, line text, etc.)\r\n }];\r\n default:\r\n return []\r\n }\r\n }\r\n\r\n const setFillColor = (red, green, blue, alpha) => {\r\n this.design.fillColor =\r\n \"rgba(\" + red + \", \" + green + \", \" + blue + \", \" + alpha + \")\";\r\n }\r\n\r\n this.setPosition = (value) => {\r\n this.pos = value;\r\n this.isPositionChanged = true;\r\n this.updateSeamedShapesPosition();\r\n }\r\n this.setPositionWithoutChange = (value) => {\r\n this.pos = value;\r\n this.updateSeamedShapesPosition();\r\n // if (this.partId !== SHAPE_PART_ID.backsplashPiece && this.partId !== SHAPE_PART_ID.seamPiece) {\r\n // this.isPositionChanged = true;\r\n // }\r\n }\r\n this.setSlabPosition = (value) => {\r\n this.slabPos = clone(value);\r\n }\r\n function setShape(segments) {\r\n shape = segments; // [line, line, line, line]\r\n for (var i = 0; i < shape.length; i++) {\r\n shape[i].init(self);\r\n }\r\n }\r\n function setHovering(value) { state.hovering = value; return value; }\r\n function setHoveringOnlyShape(value) { state.hoveringOnlyShape = value; return value; }\r\n //public getters\r\n this.getPosition = () => {\r\n const reduxState = store.getState();\r\n const isShowSlabTool = reduxState.sqftSlabState.isShowSlabTool;\r\n let pos;\r\n\r\n if (isShowSlabTool) {\r\n let slabAbsolutePos = this.getSlabAbsolutePosition()\r\n pos = slabAbsolutePos ? slabAbsolutePos : this.slabPos;\r\n } else if (this.shapeParams !== undefined && this.shapeParams.canSnap) {\r\n let absolutePos = this.shapeAbsolute.getAbsolutePosition();\r\n pos = absolutePos !== null ? absolutePos : this.pos;\r\n } else {\r\n pos = this.pos\r\n }\r\n\r\n return pos;\r\n };\r\n this.getOffset = () => {\r\n const scale = config.scale;\r\n const workspacePos = workspace.getOffset();\r\n let _pos = this.getPosition();\r\n if (config.workspace.snapToGrid) {\r\n _pos = this.getSnappedPosition();\r\n }\r\n return {\r\n x: workspacePos.x + (_pos.x * scale),\r\n y: workspacePos.y + (_pos.y * scale)\r\n }\r\n };\r\n this.getRegularPosition = () => { return this.pos; };\r\n this.getSlabPosition = () => { return this.slabPos; };\r\n this.getSlabAbsolutePosition = () => { return this.shapeSlab.getAbsolutePosition(); };\r\n this.getSnappedPosition = () => { return getSnappedPos(this.getPosition()) };\r\n //todo\r\n this.isHovering = function() {\r\n const isSlabMode = SqftStore.isSlabMode();\r\n if (!isSlabMode) {\r\n for (const line of this.getLines()) {\r\n if (line.isHovering(isSlabMode)) {\r\n return true\r\n }\r\n }\r\n }\r\n return state.hovering === true;\r\n };\r\n this.isHoveringOnlyShape = function() { return state.hoveringOnlyShape === true; };\r\n this.isWithShapePieces = () => {\r\n return this.shapePieces.length > 0;\r\n };\r\n this.setResetSlabModePopupWasDisplayed = (value) => {\r\n return this.isResetSlabModePopupWasDisplayed = value;\r\n };\r\n this.getResetSlabModePopupWasDisplayed = () => {\r\n return this.isResetSlabModePopupWasDisplayed;\r\n };\r\n this.setShapePieces = (shapePieces) => {\r\n this.shapePieces = shapePieces;\r\n };\r\n this.addShapePieceId = (shapeId) => {\r\n this.shapePieces.push(shapeId);\r\n };\r\n this.hideShapePieces = () => {\r\n this.shapePieces.forEach(shapePieceId => {\r\n let shapePiece = workspace.getShapeById(shapePieceId);\r\n if (shapePiece) {\r\n shapePiece.deregisterEvents()\r\n } else {\r\n console.error(\"shapePiece with Id not found\", shapePieceId);\r\n }\r\n });\r\n };\r\n this.restoreShapePieces = () => {\r\n this.shapePieces.forEach(shapePieceId => {\r\n let shapePiece = workspace.getShapeById(shapePieceId);\r\n shapePiece.reInitEvents();\r\n });\r\n };\r\n this.removeShapePieces = () => {\r\n this.shapePieces.forEach(shapePieceId => {\r\n workspace.removeShapeById(shapePieceId);\r\n });\r\n };\r\n\r\n this.export = () => {\r\n let lines = [];\r\n let totalArea = this.getTotalArea();\r\n let squareFeet = sqftConfig.measureUnit === \"Imperial\" ? Math.ceil10(sqInchesToSqFoot(totalArea), -2) : mm2ToM2(self.getTotalArea(totalArea));\r\n if (sqftConfig.shouldUseCabinetDoorsSQFT && FEATURE_QUANTITY_UNITS.includes(this.partId)) {\r\n squareFeet = getCabinetDoorsSQFT(this);\r\n } else if (FEATURE_QUANTITY_UNITS.includes(this.partId)) {\r\n squareFeet = 1\r\n }\r\n\r\n for (let i = 0; i < shape.length; i++) {\r\n lines.push(shape[i].export());\r\n }\r\n let isHidden = [SHAPE_PART_ID.seamPiece, SHAPE_PART_ID.slabPlaceHolder].includes(this.partId);\r\n\r\n return {\r\n pos: this.pos,\r\n slabPos: this.slabPos,\r\n id: this.id,\r\n featureId: this.featureId,\r\n colorSet: this.colorSet,\r\n type: this.type,\r\n isHidden: isHidden,\r\n shapePieces: this.shapePieces,\r\n seamCutPoints: this.seamCutPoints,\r\n shapeParent: this.shapeParent,\r\n lines: lines,\r\n shapeType: this.shapeType,\r\n rotatedDegrees: this.rotatedDegrees,\r\n rotatedDegreesSlab: this.rotatedDegreesSlab,\r\n partId: this.partId,\r\n qtCatName: this.qtCatName,\r\n fromLayout: this.fromLayout,\r\n squareFeet: squareFeet,\r\n isDisabledInPopup: this.isDisabledInPopup,\r\n rotateAngleParts: this.rotateAngleParts,\r\n isPointsChanged: this.isPointsChanged,\r\n isPositionChanged: this.isPositionChanged,\r\n isResetSlabModePopupWasDisplayed: this.isResetSlabModePopupWasDisplayed,\r\n shapeSlab: this.shapeSlab.export(),\r\n shapeCabinet: this.shapeCabinet ? this.shapeCabinet.export() : null,\r\n shapeAbsolute: this.shapeAbsolute ? this.shapeAbsolute.export() : null,\r\n shapeParams: this.shapeParams,\r\n relatedParentFeatureId: this.relatedParentFeatureId,\r\n fromWizardGroupId: this.fromWizardGroupId,\r\n slabModeCoreParentId: this.slabModeCoreParentId,\r\n parentPartId: this.parentPartId,\r\n slabParentPartId: this.slabParentPartId,\r\n shouldUseSlabPricing: this.shouldUseSlabPricing,\r\n originalPointsCoords: this.originalPointsCoords,\r\n };\r\n };\r\n this.import = (value) => {\r\n [\"fromLayout\", \"id\", \"partId\", \"shapeType\", \"rotatedDegrees\", \"rotatedDegreesSlab\", \"rotateAngleParts\", \"fromLayout\",\r\n \"type\", \"isHidden\", \"shapePieces\", \"pos\", \"slabPos\", \"featureId\", \"isDisabledInPopup\", \"isPointsChanged\",\r\n \"isPositionChanged\", \"qtCatName\", \"isResetSlabModePopupWasDisplayed\", \"shapeParams\", \"shapeCabinet\", \"shapeAbsolute\",\r\n \"relatedParentFeatureId\", \"colorSet\", \"fromWizardGroupId\", \"slabModeCoreParentId\", \"seamCutPoints\", \"parentPartId\",\r\n \"slabParentPartId\", \"shouldUseSlabPricing\", \"originalPointsCoords\"]\r\n .forEach(key => {\r\n self[key] = value[key]\r\n });\r\n let lines = [];\r\n for (let i = 0; i < value.lines.length; i++) {\r\n let line = new Line();\r\n line.import(value.lines[i], lines);\r\n lines.push(line);\r\n }\r\n shape = lines;\r\n for (let i = 0; i < shape.length; i++) {\r\n shape[i].init(self);\r\n }\r\n this.init();\r\n this.shapeSlab.import(value.shapeSlab);\r\n if (value.shapeCabinet) {\r\n this.shapeCabinet = new ShapeCabinet(this);\r\n this.shapeCabinet.import(value.shapeCabinet);\r\n }\r\n if (value.shapeAbsolute) {\r\n this.shapeAbsolute = new ShapeAbsolute(this);\r\n this.shapeAbsolute.import(value.shapeAbsolute);\r\n }\r\n if ([SHAPE_PART_ID.slabPlaceHolder, SHAPE_PART_ID.seamPiece].includes(value.partId)) {\r\n this.deregisterEvents();\r\n }\r\n if (isSFTCabinetsGroup) {\r\n const reduxState = store.getState();\r\n const {sqftFromFeature} = reduxState.sqftState;\r\n if (sqftFromFeature && sqftFromFeature.cartFeature) {\r\n //this.changeFeatureIdIfColorWasChanged(sqftFromFeature.cartFeature);\r\n }\r\n }\r\n if (this.shapeParams.isSpacer) {\r\n this.shapeSpacer = new ShapeSpacer(this);\r\n }\r\n\r\n // Update layout types\r\n if (this.shapeParams.layout) {\r\n switch (this.shapeParams.layout) {\r\n case SHAPE_LAYOUTS.lowerLayoutType1:\r\n this.shapeParams.layout = SHAPE_LAYOUTS.LowerLCorner;\r\n break;\r\n case SHAPE_LAYOUTS.lowerLayoutType2:\r\n this.shapeParams.layout = SHAPE_LAYOUTS.LowerDullangle;\r\n break;\r\n case SHAPE_LAYOUTS.lowerLayoutType3:\r\n this.shapeParams.layout = SHAPE_LAYOUTS.LowerIroningBoard;\r\n break;\r\n case SHAPE_LAYOUTS.lowerLayoutType4:\r\n this.shapeParams.layout = SHAPE_LAYOUTS.LowerDimondShape;\r\n break;\r\n case SHAPE_LAYOUTS.lowerLayoutType5:\r\n this.shapeParams.layout = SHAPE_LAYOUTS.LowerDimondCorner;\r\n break;\r\n case SHAPE_LAYOUTS.upperLayoutType2:\r\n this.shapeParams.layout = SHAPE_LAYOUTS.UpperLCorner;\r\n break;\r\n case SHAPE_LAYOUTS.upperLayoutType4:\r\n this.shapeParams.layout = SHAPE_LAYOUTS.UpperDimondShape;\r\n break;\r\n case SHAPE_LAYOUTS.upperLayoutType5:\r\n this.shapeParams.layout = SHAPE_LAYOUTS.UpperDimondCorner;\r\n break;\r\n default:\r\n // If no match, keep the existing layout\r\n break;\r\n }\r\n }\r\n };\r\n this.changeFeatureIdIfColorWasChanged = (newFeature= null) => {\r\n const relatedParentFeature = this.getRelatedParentFeature();\r\n const currentShapeFeature = this.getFeature();\r\n const shouldChangeShapePartId = shouldChangeCabinetShapePartId(relatedParentFeature, newFeature);\r\n if (shouldChangeShapePartId && newFeature.dbFeature && currentShapeFeature) {\r\n const newParent = CabinetSwitchers.getNeededFeatureFromNavItems(newFeature.dbFeature.sharedFeatureName, relatedParentFeature.getParent())\r\n\r\n if (newParent && newParent.dbFeature) {\r\n const featureRelatedFeatures = newParent.getFeatureRelatedFeatures();\r\n const newShapeDbFeature = getCabinetSimilarFeatureFromAnotherColor(featureRelatedFeatures, currentShapeFeature.dbFeature);\r\n\r\n if (newShapeDbFeature) {\r\n //if (newShapeDbFeature && newShapeDbFeature.sharedFeatureName !== 'SW-WBC3630') { // this line is only for debugging\r\n this.relatedParentFeatureId = newParent.dbFeature.id\r\n this.setFeatureId(newShapeDbFeature.id)\r\n } else {\r\n store.dispatch(addShapeIdWithMissingFeature(this.id));\r\n store.dispatch(setShouldShowChangeShapeFeatureMissingMessage(true));\r\n }\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n this.getHoverSegment = function() {\r\n for (let i = 0; i < shape.length; i++) {\r\n if (shape[i].isHovering()) {\r\n return shape[i];\r\n }\r\n }\r\n };\r\n this.getHoverSegmentV2 = () => {\r\n for (let i = 0; i < shape.length; i++) {\r\n shape[i].updateLineHovering(sqftEventManager.getMousePos())\r\n if (shape[i].isHovering()) {\r\n return shape[i];\r\n }\r\n }\r\n };\r\n this.getHoverSegmentOutlineCorner = function() {\r\n for (let i = 0; i < shape.length; i++) {\r\n if (shape[i].isAngleHovering()) {\r\n return shape[i].lineCorner;\r\n }\r\n }\r\n };\r\n this.getHoverSegmentCorner = function() {\r\n for (let i = 0; i < shape.length; i++) {\r\n if (shape[i].isCornerLineHovering()) {\r\n return shape[i].lineCorner;\r\n }\r\n }\r\n };\r\n this.getHoverPoint = function() {\r\n for (var i = 0; i < shape.length; i++) {\r\n if (shape[i].to.isHovering()) {\r\n return shape[i].to;\r\n }\r\n }\r\n };\r\n this.getHoverMiteredPoint = function() {\r\n for (let i = 0; i < shape.length; i++) {\r\n if (shape[i].isWithMitered()) {\r\n for (let point of shape[i].miteredOverlay.getPoints()) {\r\n if (point.isHovering()) {\r\n return point;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n this.getHoverLabel = () => {\r\n for (let i = 0; i < shape.length; i++) {\r\n if (shape[i].labelOverlay && shape[i].labelOverlay.isHovered()) {\r\n return shape[i].labelOverlay\r\n }\r\n }\r\n };\r\n this.getHoverPointOnClick = function() {\r\n for (var i = 0; i < shape.length; i++) {\r\n if (shape[i].to.isOverPointField()) {\r\n return shape[i].to;\r\n }\r\n }\r\n };\r\n this.getCenter = () => {\r\n if (!this.staticCenterPoint) {\r\n let points = this.getPoints();\r\n\r\n this.staticCenterPoint = ShapeHelper.getCenterPoint(points);\r\n }\r\n return this.staticCenterPoint;\r\n }\r\n /**\r\n * Note changing this value can break display in slabMode\r\n * @param value\r\n */\r\n this.setCenter = (value) => {\r\n this.staticCenterPoint = value;\r\n }\r\n this.getLines = (shouldIncludeBumpoutLines = false) => {\r\n if (shouldIncludeBumpoutLines) {\r\n const linesWithBumpouts = [];\r\n shape.forEach(line => {\r\n if (line.isWithBumpout()) {\r\n linesWithBumpouts.push(...line.bumpoutOverlay.getBumpoutLines())\r\n } else {\r\n linesWithBumpouts.push(line);\r\n }\r\n });\r\n return linesWithBumpouts\r\n }\r\n\r\n return shape;\r\n };\r\n this.createLinesWithoutAngle = () => {\r\n this.linesWithoutAngle = getLinesWithoutAnglePoints(this.getLines());\r\n return this.linesWithoutAngle\r\n }\r\n this.getLinesWithoutAngle = () => {\r\n return this.linesWithoutAngle\r\n }\r\n this.getLineCorners = function() {\r\n const lineCorners = [];\r\n shape.forEach(line => {\r\n if (line.lineCorner !== undefined)\r\n lineCorners.push(line.lineCorner)\r\n });\r\n return lineCorners\r\n };\r\n this.getPoints = () => {\r\n return this.getLines().map(line => line.from);\r\n };\r\n this.getPointsCoords = () => {\r\n return this.getLines().map(line => { return {\r\n x: Math.round10(line.from.x, -4),\r\n y: Math.round10(line.from.y, -4),\r\n id: line.from.id\r\n }});\r\n };\r\n this.setOriginalPointsCoords = (value) => {\r\n this.originalPointsCoords = value;\r\n };\r\n this.getOriginalPointsCoords = () => {\r\n return this.originalPointsCoords;\r\n };\r\n this.getPointsPosOnWorkspace = (shouldGetRegularPosition = false) => {\r\n return this.getLines().map(line => { return {...line.from.getPointPosOnWorkspace(shouldGetRegularPosition), id: line.from.id}});\r\n };\r\n this.getPointsPointField = () => {\r\n return this.getLines().map(line => { return {...getPointField(line.from.x, line.from.y, this), id: line.from.id}});\r\n };\r\n this.getOriginPointOnWorkspace = () => {\r\n // if (shape.shapeParams && shape.shapeParams.shapeLayout !== SHAPE_LAYOUTS.rectangle) {\r\n // let realShapeDepth = shapeDepth;\r\n // if (shape.shapeParams && SHAPE_SQUARE_LAYOUTS.includes(shape.shapeParams.shapeLayout)) {\r\n // realShapeDepth = shapeWidth;\r\n // }\r\n // zeroPointPosOnWorkspace = CabinetsSet.getShapeCorrectedPos(shape.rotatedDegrees, shapePosition, shapeWidth, realShapeDepth);\r\n // }\r\n\r\n // Here we will return intersection between first and last lines\r\n if (this.shapeParams && SHAPE_DIAMOND_LAYOUTS.includes(this.shapeParams.shapeLayout)) {\r\n const pointsOnWorkspace = this.getPointsPosOnWorkspace();\r\n return getIntersectCordsBetweenLines(pointsOnWorkspace[1], pointsOnWorkspace[0], pointsOnWorkspace[pointsOnWorkspace.length - 2], pointsOnWorkspace[pointsOnWorkspace.length - 1], true ,true);\r\n }\r\n\r\n return this.getPoints()[0].getPointPosOnWorkspace();\r\n }\r\n this.getLineById = function(id) {\r\n return this.getLines().find((line) => line.id === id);\r\n };\r\n this.getTotalArea = () => {\r\n let totalArea,\r\n anglesTotalArea;\r\n\r\n //shape area\r\n totalArea = sqftConfig.measureUnit === \"Imperial\" ? this.getTotalInches() : this.getTotalMillimeters();\r\n //shape corners area\r\n totalArea += sqftConfig.measureUnit === \"Imperial\" ? this.getCornersArea() : sqInchesToMM2(this.getCornersArea());\r\n\r\n //console.log(\"countertop\", totalArea);\r\n //additional bumpout area\r\n totalArea += this.getBumpoutTotalArea();\r\n\r\n //additional angles area\r\n anglesTotalArea = this.getAnglesTotalArea();\r\n totalArea += sqftConfig.measureUnit === \"Imperial\" ? anglesTotalArea : sqInchesToMM2(anglesTotalArea);\r\n\r\n //additional edges waterfall area\r\n totalArea += this.getEdgesAdditionalArea();\r\n //console.log(\"edges\", this.getEdgesAdditionalArea());\r\n //additional edges waterfall area\r\n totalArea += this.getWaterfallToolAdditionalArea();\r\n\r\n //additional mitered area\r\n totalArea += this.getMiteredTotalArea();\r\n\r\n //console.log(\"mitered\", this.getMiteredTotalArea());\r\n //console.log(\"total\", totalArea);\r\n\r\n return totalArea;\r\n };\r\n\r\n this.getTotalVolume = () => {\r\n const totalVolume = this.getTotalInches() * this.getHeight(true);\r\n return sqftConfig.measureUnit === \"Imperial\" ? totalVolume : sqInchesToMM2(totalVolume);\r\n };\r\n\r\n this.getCornersArea = () => {\r\n const points = this.getPoints();\r\n let cornersAdditionalArea = 0;\r\n\r\n function getRectangle(basePoint1, basePoint2, width) {\r\n const direction = {\r\n x: basePoint2.x - basePoint1.x,\r\n y: basePoint2.y - basePoint1.y,\r\n };\r\n\r\n const length = Math.sqrt(direction.x ** 2 + direction.y ** 2);\r\n const norm = {\r\n x: -direction.y / length,\r\n y: direction.x / length,\r\n };\r\n\r\n const rect = [\r\n [basePoint1.x + norm.x * width / 2, basePoint1.y + norm.y * width / 2],\r\n [basePoint1.x - norm.x * width / 2, basePoint1.y - norm.y * width / 2],\r\n [basePoint2.x - norm.x * width / 2, basePoint2.y - norm.y * width / 2],\r\n [basePoint2.x + norm.x * width / 2, basePoint2.y + norm.y * width / 2],\r\n [basePoint1.x + norm.x * width / 2, basePoint1.y + norm.y * width / 2],\r\n ];\r\n\r\n return [rect];\r\n }\r\n\r\n for (let i = 0; i < points.length; i++) {\r\n const prev = points[(i - 1 + points.length) % points.length];\r\n const current = points[i];\r\n const next = points[(i + 1) % points.length];\r\n\r\n const angle = getAngleBetween3Points(prev, current, next); // Угол между точками\r\n //const distancePrev = getPointDistance(prev, current); // Длина стороны (base)\r\n //const distanceNext = getPointDistance(current, next); // Длина другой стороны\r\n\r\n if (Math.round(angle) !== 0 && (Math.round(angle) > 92 || Math.round(angle) < 88)) {\r\n const RECT_WIDTH = 52; //todo get shape width\r\n //console.log(\"distancePrev\", distancePrev);\r\n //console.log(\"distanceNext\", distanceNext);\r\n const rect1 = getRectangle(prev, current, RECT_WIDTH);\r\n const rect2 = getRectangle(current, next, RECT_WIDTH);\r\n\r\n const intersection = polygonClipping.intersection([rect1], [rect2]);\r\n\r\n if (intersection && intersection.length > 0) {\r\n let totalArea = 0;\r\n intersection.forEach((polygon) => {\r\n totalArea += calculatePolygonClippingPolygonArea(polygon);\r\n });\r\n\r\n cornersAdditionalArea += totalArea;\r\n console.log(\"Area of intersection:\", totalArea);\r\n } else {\r\n console.log(\"No intersection found\");\r\n }\r\n }\r\n }\r\n\r\n return cornersAdditionalArea;\r\n };\r\n\r\n this.getTotalLnft = function() {\r\n return Math.ceil(inchesToLNFT(this.getTotalArea())) ;\r\n };\r\n\r\n this.getAttachedEdges = function() {\r\n const reduxState = store.getState();\r\n return reduxState.sqftResourceState.attachedToLine.filter(attachedToLine => {\r\n return shape.some(line => attachedToLine.attachedToId === line.id)\r\n });\r\n };\r\n\r\n this.getWaterfallToolAdditionalArea = () => {\r\n let totalArea = 0;\r\n const lines = this.getLines();\r\n lines.forEach(line => {\r\n if (line.isWithWaterfallToolEdge && (line.isWithWaterfallToolEdge() || line.isWithPeninsulaUnderwrapEdge())) {\r\n const waterfallOverlay = workspaceControllers.waterfall.getResourceByLineId(line.id);\r\n if (waterfallOverlay) {\r\n totalArea += waterfallOverlay.getArea();\r\n }\r\n }\r\n });\r\n\r\n return totalArea\r\n }\r\n\r\n this.getEdgesAdditionalArea = () => {\r\n let totalArea = 0;\r\n //let edges = sqftStore.getShapeType('edge');\r\n const edges = this.getAttachedEdges();\r\n edges.forEach(edge => {\r\n const line = workspace.getLineById(edge.attachedToId);\r\n const lineLength = config.measureUnit === \"Imperial\" ? line.getLineLength() : line.getLineLengthMm();\r\n totalArea += getEdgeArea(line, lineLength, edge.featureId);\r\n });\r\n\r\n return totalArea;\r\n };\r\n\r\n this.getAnglesTotalArea = () => {\r\n let totalArea = 0;\r\n let innerPoints = ShapeHelper.getInnerCornerPoints(this);\r\n innerPoints.forEach(point => {\r\n if (point.angle) {\r\n totalArea += (point.angle * point.angle / 2) * 2\r\n } else if (point.arcLength) {\r\n totalArea += (point.arcLength * point.arcLength / 2) * 2\r\n }\r\n });\r\n\r\n return totalArea\r\n };\r\n\r\n this.getBumpoutTotalArea = () => {\r\n let area = 0;\r\n shape.forEach((line) => {\r\n if (line.isWithBumpout() && line.bumpoutOverlay) {\r\n area += config.measureUnit === \"Imperial\"\r\n ? line.bumpoutOverlay.getBumpoutTotalArea().inches\r\n : line.bumpoutOverlay.getBumpoutTotalArea().millimeters;\r\n }\r\n });\r\n\r\n return area\r\n };\r\n\r\n this.getMiteredTotalArea = () => {\r\n let totalArea = 0;\r\n shape.forEach(line => {\r\n if (line.isWithMitered() && line.miteredOverlay) {\r\n totalArea += line.miteredOverlay.getMiteredTotalArea();\r\n }\r\n });\r\n\r\n return totalArea\r\n };\r\n\r\n this.getTotalInches = function() {\r\n var inchesCount = 0;\r\n // square1 = 0,\r\n // square2 = 0,\r\n // square3 = 0;\r\n // console.log('self.shapeType', self.shapeType);\r\n // console.log('shape', shape);\r\n // todo remove ifs\r\n if (self.shapeType === 'square') {\r\n // inchesCount = ((this.rotatedDegrees === 90) || (this.rotatedDegrees === 270))\r\n // ? shape[1].getLineLength() * shape[2].getLineLength()\r\n // : shape[0].getLineLength() * shape[1].getLineLength();\r\n\r\n inchesCount = this.getAreaByShoelaceFormula();\r\n } else if (self.shapeType === 'wideangle') {\r\n // square1 = (shape[0].getLineLength() - shape[4].getLineLength()) * shape[1].getLineLength();\r\n // square2 = shape[4].getLineLength() * shape[5].getLineLength();\r\n // inchesCount = square1 + square2\r\n\r\n inchesCount = this.getAreaByShoelaceFormula();\r\n } else if (self.shapeType === 'horseshoe') {\r\n // square1 = shape[4].getLineLength() * (shape[7].getLineLength() - shape[5].getLineLength());\r\n // square2 = shape[2].getLineLength() * shape[1].getLineLength();\r\n // square3 = shape[6].getLineLength() * shape[7].getLineLength();\r\n // inchesCount = square1 + square2 + square3\r\n inchesCount = this.getAreaByShoelaceFormula();\r\n } else {\r\n inchesCount = this.getAreaByShoelaceFormula();\r\n }\r\n\r\n return inchesCount;\r\n };\r\n\r\n this.getAreaByShoelaceFormula = function () {\r\n return getAreaByShoelaceFormula(shape);\r\n };\r\n\r\n this.isWithBumpout = function () {\r\n return shape.some((line) => {\r\n return line.isWithBumpout();\r\n });\r\n };\r\n\r\n this.isWithMitered = function () {\r\n return shape.some((line) => {\r\n return line.isWithMitered();\r\n });\r\n };\r\n\r\n this.getTotalMillimeters = function() {\r\n return sqInchesToMM2(this.getAreaByShoelaceFormula());\r\n };\r\n\r\n function getRotateAngleRectangle(rotateAnglePart) {\r\n //line 1\r\n const line1 = shape[rotateAnglePart.line1];\r\n let renderFrom = line1.calculateRenderPosition(line1.from);\r\n let renderTo = line1.calculateRenderPosition(line1.to);\r\n //line2\r\n const line2 = shape[rotateAnglePart.line2];\r\n let renderFrom2 = line2.calculateRenderPosition(line2.from);\r\n let renderTo2 = line2.calculateRenderPosition(line2.to);\r\n return [\r\n [renderFrom.x, renderFrom.y],\r\n [renderTo.x, renderTo.y],\r\n [renderFrom2.x, renderFrom2.y],\r\n [renderTo2.x, renderTo2.y],\r\n ]\r\n }\r\n\r\n var handleArrowInputIncrease = (isNegative, input, rotateAnglePart, basePoint, secondaryPoint, rotated90_1, rotated90_2, bottomLine) => {\r\n if (isNegative) {\r\n input.value = +input.value + 1;\r\n } else {\r\n input.value = +input.value - 1;\r\n }\r\n\r\n self.rotateAngleInputChange(input, rotateAnglePart, basePoint, secondaryPoint, rotated90_1, rotated90_2, bottomLine);\r\n };\r\n\r\n const moveShape = (mousePos) => {\r\n let scale = sqftStore.getScale();\r\n let xDiff = (state.mouseDownPosition.x - mousePos.x) / scale;\r\n let yDiff = (state.mouseDownPosition.y - mousePos.y) / scale;\r\n\r\n let isShowSlabTool = store.getState().sqftSlabState.isShowSlabTool;\r\n if (this.shapeParams.canSnap || isShowSlabTool) {\r\n const shapeAbsolute = isShowSlabTool ? this.shapeSlab.shapeAbsolute : this.shapeAbsolute;\r\n workspaceControllers.snappedShapeGroups.resetShapeSnappedGroup(shapeAbsolute);\r\n workspaceControllers.snappedShapeGroups.updateShapeSnappedGroup(this, true);\r\n }\r\n\r\n if (isShowSlabTool) {\r\n // this.shapeSlab.setAbsolutePos(null);//reset minLength for correct calculations without stacking\r\n // let distancesToShapes = ShapeHelper.getDistancesToShapes(this);\r\n // let distancesToImages = ShapeHelper.getDistancesToSlabImages(this);\r\n // //console.log(\"distancesToImages\", distancesToImages);\r\n //\r\n // snapPossibilitiesToShapes = ShapeHelper.getSnappingPossibilities(distancesToShapes);\r\n // snapPossibilitiesToImages = ShapeHelper.getSnappingPossibilities(distancesToImages);\r\n //\r\n // this.setAbsolutePosFromSnapPossibilities(snapPossibilitiesToShapes);\r\n // this.setAbsolutePosFromSnapPossibilities(snapPossibilitiesToImages);\r\n\r\n this.slabPos.x -= xDiff;\r\n this.slabPos.y -= yDiff;\r\n } else {\r\n // this.pos.x -= xDiff;\r\n // this.pos.y -= yDiff;\r\n this.setPosition({\r\n x: this.pos.x - xDiff,\r\n y: this.pos.y - yDiff,\r\n })\r\n }\r\n\r\n state.mouseDownPosition.x = mousePos.x;\r\n state.mouseDownPosition.y = mousePos.y;\r\n // console.log('self.pos', self.pos);\r\n };\r\n\r\n this.setAbsolutePosFromSnapPossibilities = (snapPossibilities) => {\r\n if (snapPossibilities.length > 0) {\r\n let scale = sqftStore.getScale();\r\n let absolutePos = {...this.slabPos};\r\n snapPossibilities.forEach((snap) => {\r\n switch (snap.orientation) {\r\n case \"horizontal\":\r\n absolutePos.y -= snap.diff / scale\r\n break;\r\n case \"vertical\":\r\n absolutePos.x -= snap.diff / scale\r\n break;\r\n }\r\n this.shapeSlab.setAbsolutePos(absolutePos)\r\n })\r\n }\r\n }\r\n\r\n const isMouseOverShape = (mousePos) => {\r\n const scale = sqftStore.getScale(),\r\n wp = sqftStore.getOffset(),\r\n pos = self.getPosition(),\r\n offset = {\r\n x: mousePos.x - (pos.x * scale) - wp.x,\r\n y: mousePos.y - (pos.y * scale) - wp.y\r\n },\r\n vertx = [],\r\n verty = [],\r\n vert2x = [],\r\n vert2y = [];\r\n\r\n for (var i = 0; i < shape.length; i++) {\r\n const isSlabMode = SqftStore.isSlabMode();\r\n if (shape[i].isHovering(isSlabMode) && !isSlabMode //exclude hovering lines in the slab mode\r\n || shape[i].isAngleHovering()\r\n || shape[i].isCornerLineHovering()\r\n ) {\r\n setHoveringOnlyShape(false);\r\n\r\n return setHovering(true);\r\n }\r\n var pointDirection = shape[i].from.getPointDirection();\r\n let pointFromX = shape[i].from.x\r\n let pointFromY = shape[i].from.y\r\n\r\n switch (pointDirection) {\r\n case \"lefttop\":\r\n vertx.push(pointFromX * scale - marginFromShape);\r\n verty.push(pointFromY * scale - marginFromShape);\r\n break;\r\n case \"righttop\":\r\n vertx.push(pointFromX * scale + marginFromShape);\r\n verty.push(pointFromY * scale - marginFromShape);\r\n break;\r\n case \"rightbottom\":\r\n vertx.push(pointFromX * scale + marginFromShape);\r\n verty.push(pointFromY * scale + marginFromShape);\r\n break;\r\n case \"leftbottom\":\r\n vertx.push(pointFromX * scale - marginFromShape);\r\n verty.push(pointFromY * scale + marginFromShape);\r\n break;\r\n default:\r\n vertx.push(pointFromX * scale);\r\n verty.push(pointFromY * scale);\r\n break;\r\n }\r\n vert2x.push(pointFromX * scale);\r\n vert2y.push(pointFromY * scale);\r\n }\r\n var prevState = self.isHovering();\r\n\r\n let isHovering = pnpoly(shape.length, vertx, verty, offset.x, offset.y);\r\n setHovering(isHovering);\r\n setHoveringOnlyShape(pnpoly(shape.length, vert2x, vert2y, offset.x, offset.y));\r\n self.rotateAngleParts.forEach((rotateAnglePart) => {\r\n if ((self.shapeType === \"wideangle\")\r\n && !rotateAnglePart.rotatedAngleValue\r\n && self.rotateAngleParts.some(rotPart => rotPart.rotatedAngleValue > 0)) {\r\n rotateAnglePart.isHovered = false; // L shape may have only 1 part rotated\r\n } else {\r\n rotateAnglePart.isHovered = pnpolyArray(getRotateAngleRectangle(rotateAnglePart), mousePos);\r\n }\r\n });\r\n if (prevState && !self.isHovering()) {\r\n sqftEventManager.resetCursor(self);\r\n }\r\n return this.isHovering();\r\n };\r\n\r\n //private event handlers\r\n const onMouseMove = (mousePos, e) => {\r\n if (e.terminate && !state.mouseDown) {\r\n setHoveringOnlyShape(false);\r\n return setHovering(false);\r\n }\r\n if (isMouseOverShape(mousePos)) {\r\n //console.log(\"shape id\", this.id);\r\n if (self.onHover) {\r\n self.onHover(self);\r\n }\r\n // todo fix bumpout rotation and remove this\r\n if (sqftConfig.workspace.menuItemActive === \"rotate-left\") {\r\n //sqftEventManager.setCursor(\"rotate-left\", self);\r\n if (self.isWithBumpout() || self.isWithMitered()) {\r\n sqftEventManager.stealCursor(true);\r\n sqftEventManager.setCursor(\"deny\", self);\r\n }\r\n } else if (state.mouseDown && !sqftStore.getAllowEdges()) {\r\n sqftEventManager.setCursor('move', self, true);\r\n //todo\r\n //console.log(\"state.mouseDown\", state.mouseDown);\r\n moveShape(mousePos);\r\n hideShapeOffsetInTheSlabMode();\r\n } else if (!sqftStore.getAllowEdges()) {\r\n sqftEventManager.setCursor('move', self)\r\n }\r\n return state.mouseDown;\r\n }\r\n //smooth scrolling\r\n if (state.mouseDown && !sqftStore.getAllowEdges()) {\r\n sqftEventManager.setCursor('move', self, true);\r\n moveShape(mousePos);\r\n }\r\n // //smooth scrolling\r\n // if (state.mouseDown && !sqftStore.getAllowEdges()) {\r\n // sqftEventManager.setCursor('move', self, true);\r\n // moveShape(mousePos);\r\n // console.log(\"333\",);\r\n // }\r\n // //smooth scrolling\r\n // if (state.mouseDown && !sqftStore.getAllowEdges()) {\r\n // sqftEventManager.setCursor('move', self, true);\r\n // moveShape(mousePos);\r\n // }\r\n sqftEventManager.resetCursor(self);\r\n return false;\r\n }\r\n const onDblClick = (mousePos, e) => {\r\n void mousePos; void e;\r\n // if (state.hovering) {\r\n // this.setIsPointsMovable(!state.isPointsMovable);\r\n // }\r\n }\r\n const onMouseUp = (mousePos, e) => {\r\n void mousePos;\r\n void e;\r\n //debugger // eslint-disable-line no-debugger\r\n sqftEventManager.releaseStealLock(this);\r\n this.setIsPointsMovable(false);\r\n this.preventNegativeArea();\r\n if (this.isHovering()) {\r\n restoreShapeOffsetInTheSlabMode();\r\n this.shapeIntersections.handleSlabPlaceholderIntersections();\r\n if (state.mouseDown) {\r\n this.shapeAutoShuffle.handlePlaceShapeOnTheLine();\r\n }\r\n }\r\n state.mouseDown = false;\r\n state.mouseDownPosition = null;\r\n }\r\n\r\n const onMouseDown = (mousePos, e) => {\r\n void e;\r\n //if not then handle event with this object\r\n if (this.isHovering()) {\r\n // remove or add shape to selection\r\n if (e.shiftKey) {\r\n if (workspaceControllers.selectedShapes.isShapeSelected(this)) {\r\n workspaceControllers.selectedShapes.removeShapeFromSelection(this);\r\n } else {\r\n workspaceControllers.selectedShapes.addShapeToSelection(this);\r\n }\r\n }\r\n this.shapeMemory.rememberShapePosition();\r\n setShapeToShapeOffset();\r\n if (sqftEventManager.getCursor().indexOf(\"move\") >= 0) {\r\n state.mouseDown = true;\r\n state.mouseDownPosition = mousePos;\r\n }\r\n if (sqftConfig.highlight.rotateAngle) {\r\n // todo fix bumpout rotation and remove this\r\n if (self.isWithBumpout() || self.isWithMitered() || this.isPointsMoved || this.rotatedDegrees !== 0) {\r\n return\r\n }\r\n /////////////////////////////////////////\r\n\r\n self.rotateAngleParts.forEach((rotateAnglePart) => {\r\n if (rotateAnglePart.isHovered) {\r\n //todo\r\n self.setRotateAnglePartActive(rotateAnglePart);\r\n } else {\r\n rotateAnglePart.isActive = false;\r\n }\r\n });\r\n if (!self.rotateAngleParts.some(rotateAnglePart => rotateAnglePart.isActive)) {\r\n self.deActivateRotateAngle();\r\n }\r\n }\r\n\r\n if (this.partId !== SHAPE_PART_ID.slabPlaceHolder) { // seam not allowed to be added on slab placeholders\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (activeButton === SIDEBAR_SLAB_SEAM_BUTTONS.addSeamVertical) {\r\n this.shapeSlab.addSeamPieceVertical(mousePos);\r\n this.setIsPointsChanged(false); //prevent creating new backSplash shape if it was seamed\r\n } else if (activeButton === SIDEBAR_SLAB_SEAM_BUTTONS.addSeamHorizontal) {\r\n this.shapeSlab.addSeamPieceHorizontal(mousePos);\r\n this.setIsPointsChanged(false); //prevent creating new backSplash shape if it was seamed\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n const hideShapeOffsetInTheSlabMode = () => {\r\n if (SqftStore.isSlabMode()) {\r\n const slabShapeOffset = SlabWorkspace.getShapeOffset();\r\n if (slabShapeOffset) {\r\n slabShapeOffset.hide();\r\n }\r\n }\r\n }\r\n\r\n const restoreShapeOffsetInTheSlabMode = () => {\r\n if (SqftStore.isSlabMode()) {\r\n const slabShapeOffset = SlabWorkspace.getShapeOffset();\r\n if (slabShapeOffset) {\r\n slabShapeOffset.restore();\r\n }\r\n }\r\n }\r\n\r\n const setShapeToShapeOffset = () => {\r\n const isSlabMode = SqftStore.isSlabMode();\r\n\r\n if (isSlabMode && this.partId !== SHAPE_PART_ID.slabPlaceHolder) {\r\n sqftSlabManager.initShapeOffset(this);\r\n }\r\n }\r\n\r\n function hideAngleTooltip() {\r\n const angleTooltip = document.getElementById(\"angle-tooltip\");\r\n const inputArrows = [].slice.call(document.querySelectorAll(\"#angle-tooltip [data-action]\"));\r\n // const inputSubmit = document.querySelectorAll('[data-action=\"angle-input-submit\"]');\r\n\r\n if (angleTooltip) {\r\n angleTooltip.style.display = \"none\";\r\n //remove event handlers\r\n inputArrows.forEach(function (elem) {\r\n elem.parentNode.replaceChild(elem.cloneNode(true), elem);\r\n });\r\n // inputSubmit[0].removeEventListener('click', self.deActivateRotateAngle);\r\n }\r\n }\r\n\r\n function hideAngleTooltipArrows (value) {\r\n const angleTooltip = document.getElementById(\"angle-tooltip\");\r\n const inputArrowUp = [].slice.call(angleTooltip.querySelectorAll('[data-action=\"angle-input-up\"]'));\r\n const inputArrowDown = [].slice.call(angleTooltip.querySelectorAll('[data-action=\"angle-input-down\"]'));\r\n\r\n inputArrowUp.forEach((button) => {\r\n if (value === minAngle) {\r\n button.style.display = \"none\";\r\n clearInterval(state.handlerHold);\r\n } else {\r\n button.style.display = \"block\";\r\n }\r\n });\r\n inputArrowDown.forEach((button) => {\r\n if (value === maxAngle) {\r\n button.style.display = \"none\";\r\n clearInterval(state.handlerHold);\r\n } else {\r\n button.style.display = \"block\";\r\n }\r\n });\r\n }\r\n //public functions\r\n\r\n /**\r\n * return array of getPointField for each point\r\n */\r\n this.getPointFieldArray = () => {\r\n let pointsArray = []\r\n for (const line of shape) {\r\n pointsArray.push(getPointField(line.from.x, line.from.y, line));\r\n }\r\n return pointsArray\r\n }\r\n this.preventNegativeArea = () => {\r\n if (this.getTotalArea() < 0) {\r\n this.reversePoints();\r\n const state = store.getState();\r\n const updateCalculations = state.sqftState.updateCalculations;\r\n\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n }\r\n }\r\n this.reversePoints = () => {\r\n const reversedPoints = this.getPointCordsArray().reverse();\r\n shape.forEach((line, lineIndex) => {\r\n line.from.setPos({\r\n x: reversedPoints[lineIndex].x,\r\n y: reversedPoints[lineIndex].y\r\n });\r\n line.from.setPosSlab({\r\n x: reversedPoints[lineIndex].x,\r\n y: reversedPoints[lineIndex].y\r\n });\r\n });\r\n }\r\n this.getPointCordsArray = () => {\r\n let pointsArray = []\r\n for (const line of shape) {\r\n pointsArray.push({x: line.from.x, y: line.from.y});\r\n }\r\n return pointsArray\r\n }\r\n this.activateRotateAngle = function () {\r\n shape.forEach((line, lineIndex) => {\r\n for (const rotateAnglePart of self.rotateAngleParts) {\r\n if (this.isAngleRotatedPartsWithCorner(rotateAnglePart)) {\r\n continue;\r\n }\r\n if (lineIndex === rotateAnglePart.line1) {\r\n const parentPoint = (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") ? line.from : line.to;\r\n parentPoint.renderAngleCircle = 18\r\n } else if (lineIndex === rotateAnglePart.line2) {\r\n const secondaryPoint = (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") ? line.to : line.from;\r\n secondaryPoint.renderAngleCircle = 12;\r\n }\r\n // if (lineIndex === 1) { // this is rendering green arc\r\n // line.from.renderAngleArc = line.calculateRenderPosition(line.to).y - line.calculateRenderPosition(line.from).y;\r\n // }\r\n }\r\n })\r\n };\r\n this.deActivateRotateAngle = function() {\r\n self.rotateAngleParts.forEach((rotateAnglePart) => {\r\n rotateAnglePart.isActive = false;\r\n rotateAnglePart.isHovered = false;\r\n });\r\n\r\n hideAngleTooltip();\r\n };\r\n this.setRotateAnglePartActive = function (rotateAnglePart) {\r\n hideAngleTooltip(); // 1) deactivate previous anglePart\r\n rotateAnglePart.isActive = true; // 1) always highlight\r\n const angleTooltip = document.getElementById(\"angle-tooltip\");\r\n const input = document.getElementById(\"angle_input\");\r\n const inputArrowUp = [].slice.call(angleTooltip.querySelectorAll('[data-action=\"angle-input-up\"]'));\r\n const inputArrowDown = [].slice.call(angleTooltip.querySelectorAll('[data-action=\"angle-input-down\"]'));\r\n const inputArrows = inputArrowUp.concat(inputArrowDown);\r\n const inputSubmit = [].slice.call(angleTooltip.querySelectorAll(\"[data-action=\\\"angle-input-submit\\\"]\"));\r\n\r\n if (this.isAngleRotatedPartsWithCorner(rotateAnglePart)) {\r\n return;\r\n }\r\n input.setAttribute(\"min\", minAngle.toString());\r\n input.setAttribute(\"max\", maxAngle.toString());\r\n angleTooltip.style.display = \"flex\"; // 2) show input in sidebar\r\n\r\n // 3) set input value to current angle\r\n input.value = 90 - rotateAnglePart.rotatedAngleValue; // 90 - is made for displaying 90-0-90 rotation deg for input\r\n\r\n // input.value = getAngleValue(rotateAnglePart.rotatedAngleValue); // 3) set input value to current angle\r\n input.max = (rotateAnglePart && rotateAnglePart.shapeType === \"wideangle\" && rotateAnglePart && rotateAnglePart.angleDirection === \"right\") ? 90 : maxAngle; // 3.5 set input max\r\n input.min = (rotateAnglePart && rotateAnglePart.shapeType === \"wideangle\" && rotateAnglePart && rotateAnglePart.angleDirection === \"right\") ? 1 : minAngle; // 3.5 set input max\r\n hideAngleTooltipArrows(+input.value);\r\n\r\n setTimeout(() => {\r\n const expandedSidebar = document.querySelector(\".side.expanded\");\r\n if (expandedSidebar) {\r\n $(expandedSidebar).animate({scrollTop: $(expandedSidebar).height()}, 600); // 4) scroll to added input\r\n }\r\n }, 600);\r\n\r\n // 4) declare base points and bottom(moving) line\r\n const basePoint = (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") ? shape[rotateAnglePart.line1].from : shape[rotateAnglePart.line1].to;\r\n const secondaryPoint = (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") ? shape[rotateAnglePart.line2].to : shape[rotateAnglePart.line2].from;\r\n const bottomLine = (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") ? shape[rotateAnglePart.line1 + 1] : shape[rotateAnglePart.line1 - 1];\r\n const secondaryLineLength = shape[rotateAnglePart.line2].getLineLength();\r\n //const nextLine = self.getNextLine(basePoint.getParent());\r\n var rotated90_1, rotated90_2;\r\n\r\n switch (rotateAnglePart.shapeType) {\r\n default:\r\n case \"wideangle\":\r\n case \"horseshoe\": {\r\n if (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") {\r\n //console.log('RIGHT 90 Orient', bottomLine.getOrientation());\r\n //console.log('RIGHT newDirection', bottomLine.getLineDirection().newDirection);\r\n\r\n if (bottomLine.getLineDirection().newDirection === 'east') {\r\n rotated90_1 = {x: secondaryPoint.x - secondaryLineLength, y: basePoint.y};\r\n rotated90_2 = {x: secondaryPoint.x - secondaryLineLength, y: secondaryPoint.y};\r\n } else if (bottomLine.getLineDirection().newDirection === 'west') {\r\n rotated90_1 = {x: secondaryPoint.x + secondaryLineLength, y: basePoint.y};\r\n rotated90_2 = {x: secondaryPoint.x + secondaryLineLength, y: secondaryPoint.y};\r\n } else if (bottomLine.getLineDirection().newDirection === 'south') {\r\n rotated90_1 = {x: basePoint.x, y: secondaryPoint.y - secondaryLineLength};\r\n rotated90_2 = {x: secondaryPoint.x, y: secondaryPoint.y - secondaryLineLength};\r\n } else if (bottomLine.getLineDirection().newDirection === 'north') {\r\n rotated90_1 = {x: basePoint.x, y: secondaryPoint.y + secondaryLineLength};\r\n rotated90_2 = {x: secondaryPoint.x, y: secondaryPoint.y + secondaryLineLength};\r\n }\r\n\r\n } else {\r\n //console.log('LEFT 90 Orient', bottomLine.getOrientation());\r\n //console.log('LEFT newDirection', bottomLine.getLineDirection().newDirection);\r\n\r\n if (bottomLine.getLineDirection().newDirection === 'east') {\r\n rotated90_1 = {x: secondaryPoint.x + secondaryLineLength, y: secondaryPoint.y};\r\n rotated90_2 = {x: secondaryPoint.x + secondaryLineLength, y: basePoint.y};\r\n } else if (bottomLine.getLineDirection().newDirection === 'west') {\r\n rotated90_1 = {x: secondaryPoint.x - secondaryLineLength, y: secondaryPoint.y};\r\n rotated90_2 = {x: secondaryPoint.x - secondaryLineLength, y: basePoint.y};\r\n } else if (bottomLine.getLineDirection().newDirection === 'south') {\r\n rotated90_1 = {x: secondaryPoint.x, y: secondaryPoint.y + secondaryLineLength};\r\n rotated90_2 = {x: basePoint.x, y: secondaryPoint.y + secondaryLineLength};\r\n } else if (bottomLine.getLineDirection().newDirection === 'north') {\r\n rotated90_1 = {x: secondaryPoint.x, y: secondaryPoint.y - secondaryLineLength};\r\n rotated90_2 = {x: basePoint.x, y: secondaryPoint.y - secondaryLineLength};\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n angleTooltip.style.left = basePoint.getPointField().x + \"px\";\r\n angleTooltip.style.top = basePoint.getPointField().y + \"px\";\r\n const ENTER_KEY = 13;\r\n // 5) set input handlers and focus it\r\n input.oninput = () => self.rotateAngleInputChange(input, rotateAnglePart, basePoint, secondaryPoint, rotated90_1, rotated90_2, bottomLine);\r\n input.focus();\r\n input.onkeydown = function(e) {\r\n if (e.keyCode === ENTER_KEY) {\r\n e.target.blur();\r\n }\r\n };\r\n function blur(e) {\r\n if (!$(e.target).closest('.ui-input')) {\r\n input.blur();\r\n }\r\n }\r\n input.onblur = function () {\r\n // window.lineInputFocused = false;\r\n // input.parentNode.removeChild(input);\r\n // document.removeEventListener(\"click\", blur);\r\n };\r\n\r\n // 6) set input up down and submit handlers\r\n let holdStarter;// This timeout, started on mousedown, triggers the beginning of a hold\r\n let holdDelay = 300; // This is how many milliseconds to wait before recognizing a hold\r\n let holdActive = false; // This flag indicates the user is currently holding the mouse down\r\n inputArrows.forEach(function (arrow) {\r\n let arrowMousedown = (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n const isNegative = e.currentTarget.dataset.action === 'angle-input-down';\r\n\r\n holdStarter = setTimeout(function () {\r\n holdStarter = null;\r\n holdActive = true;\r\n\r\n state.handlerHold = setInterval(function () {\r\n if (holdActive) {\r\n handleArrowInputIncrease(isNegative, input, rotateAnglePart, basePoint, secondaryPoint, rotated90_1, rotated90_2, bottomLine);\r\n }\r\n }, 50);\r\n //console.log('Holding...')\r\n }, holdDelay);\r\n }\r\n let arrowMouseup = (e) => {\r\n if (holdStarter) {\r\n clearTimeout(holdStarter);\r\n\r\n const isNegative = e.currentTarget.dataset.action === 'angle-input-down';\r\n handleArrowInputIncrease(isNegative, input, rotateAnglePart, basePoint, secondaryPoint, rotated90_1, rotated90_2, bottomLine);\r\n //console.log('Clicked')\r\n }\r\n // Otherwise, if the mouse was being held, end the hold\r\n else if (holdActive) {\r\n holdActive = false;\r\n clearInterval(state.handlerHold);\r\n }\r\n };\r\n arrow.addEventListener('mousedown', arrowMousedown);\r\n arrow.addEventListener('mouseup', arrowMouseup);\r\n });\r\n inputSubmit[0].addEventListener('click', self.deActivateRotateAngle);\r\n\r\n setTimeout(() => {\r\n document.addEventListener(\"click\", blur);\r\n }, 500);\r\n };\r\n this.removeBumpouts = function () {\r\n for (var i = 0; i < shape.length; i++) {\r\n if (shape[i].bumpoutOverlay) {\r\n shape[i].deleteBumpout();\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * remember base configuration before rotation (we will need it in onchange method, and after blur)\r\n **/\r\n this.setRotateAnglePartBaseConfiguration = (rotateAnglePart, basePoint, secondaryPoint, rotated90_1, rotated90_2, bottomLine) => {\r\n rotateAnglePart.baseConfiguration = {\r\n basePointX: basePoint.x,\r\n basePointX2: secondaryPoint.x,\r\n basePointY: basePoint.y,\r\n basePointY2: secondaryPoint.y,\r\n rotated90_1: rotated90_1,\r\n rotated90_2: rotated90_2,\r\n baseOldX: bottomLine.from.x,\r\n baseOldY: bottomLine.from.y,\r\n baseOldX1: bottomLine.to.x,\r\n baseOldY1: bottomLine.to.y,\r\n widthDiff: Math.abs(basePoint.y - secondaryPoint.y), // difference between basePointX and secondaryPointX, we need it to make bottom line straight\r\n };\r\n }\r\n\r\n /**\r\n * bottomLine - far line, rotating around centerPoint\r\n * basePoint - first point where rotation starts\r\n * secondaryPoint - second point where rotation starts\r\n **/\r\n this.rotateAngleInputChange = (input, rotateAnglePart, basePoint, secondaryPoint, rotated90_1Calc, rotated90_2Calc, bottomLine) => {\r\n if (!rotateAnglePart.baseConfiguration || rotateAnglePart.rotatedAngleValue === 0) {\r\n this.setRotateAnglePartBaseConfiguration(rotateAnglePart, basePoint, secondaryPoint, rotated90_1Calc, rotated90_2Calc, bottomLine)\r\n }\r\n\r\n let {\r\n basePointX, basePointX2, basePointY, basePointY2, baseOldX, baseOldY, baseOldX1, baseOldY1, widthDiff, rotated90_1, rotated90_2\r\n } = rotateAnglePart.baseConfiguration;\r\n if (input.value > +input.max) {\r\n input.value = +input.max;\r\n }\r\n if (input.value < +input.min) {\r\n input.value = +input.min;\r\n }\r\n\r\n // 90 - is set for 90-0-90\r\n let value = 90 - +input.value;\r\n\r\n hideAngleTooltipArrows(+input.value);\r\n\r\n self.rotateAngleParts.forEach((rotateAnglePart) => {\r\n if (rotateAnglePart.isActive) {\r\n rotateAnglePart.rotatedAngleValue = value\r\n }\r\n });\r\n const anglePercentage = Math.round(value * 100 / 90 * 100) / 100; // for example, 20deg = 22.2%\r\n const diffToMinus = Math.round(widthDiff * anglePercentage / 100 * 100) / 100; // for example, 26 * 45 / 100 = 11.7\r\n\r\n const pointToRotate1 = (value < 90) ? {x:baseOldX, y: baseOldY} : rotated90_1;\r\n const pointToRotate2 = (value < 90) ? {x:baseOldX1, y: baseOldY1} : rotated90_2;\r\n const angle = getAngle(rotateAnglePart, value);\r\n\r\n let rotationCenterPoint = getRotationCentrePoint(rotateAnglePart, value, bottomLine, basePoint, secondaryPoint);\r\n\r\n //console.log(angle);\r\n //console.log(rotationCenterPoint);\r\n //console.log(pointToRotate1);\r\n let rotated = rotatePoint(pointToRotate1, rotationCenterPoint, angle);\r\n let rotated2 = rotatePoint(pointToRotate2, rotationCenterPoint, angle);\r\n\r\n bottomLine.from.x = rotated.x;\r\n bottomLine.from.y = rotated.y;\r\n bottomLine.to.x = rotated2.x;\r\n bottomLine.to.y = rotated2.y;\r\n\r\n // change base points positions\r\n // var tempPoint = new point(rotationCenterPoint.x, rotationCenterPoint.y);\r\n // tempPoint.init(bottomLine);\r\n // tempPoint.layout = 'white-circle';\r\n\r\n switch (rotateAnglePart.shapeType) {\r\n case \"wideangle\":\r\n case \"horseshoe\":\r\n default: {\r\n //console.log('diffToMinus', diffToMinus)\r\n if (diffToMinus < widthDiff) {\r\n if (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") {\r\n //console.log('RIGHT bottom Orient',bottomLine.getOrientation())\r\n switch (bottomLine.getOrientation()) {\r\n case orientation.HORIZONTAL: {\r\n basePoint.x = basePointX; secondaryPoint.x = basePointX2;\r\n break;\r\n }\r\n case orientation.VERTICAL: {\r\n basePoint.y = basePointY; secondaryPoint.y = basePointY2;\r\n break;\r\n }\r\n case orientation.SOUTHEAST: { basePoint.y = basePointY + diffToMinus; secondaryPoint.y = basePointY2;\r\n break;\r\n }\r\n case orientation.NORTHWEST: { basePoint.y = basePointY - diffToMinus; secondaryPoint.y = basePointY2;\r\n break;\r\n }\r\n case orientation.NORTHEAST: { basePoint.x = basePointX + diffToMinus; secondaryPoint.x = basePointX2;\r\n break;\r\n }\r\n case orientation.SOUTHWEST: { basePoint.x = basePointX - diffToMinus; secondaryPoint.x = basePointX2;\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n } else {\r\n //console.log('LEFT bottom Orient',bottomLine.getOrientation())\r\n switch (bottomLine.getOrientation()) {\r\n case orientation.HORIZONTAL: { basePoint.x = basePointX; secondaryPoint.x = basePointX2;\r\n break;\r\n }\r\n case orientation.VERTICAL: { basePoint.y = basePointY; secondaryPoint.y = basePointY2;\r\n break;\r\n }\r\n case orientation.SOUTHEAST: { basePoint.x = basePointX - diffToMinus; secondaryPoint.x = basePointX2;\r\n break;\r\n }\r\n case orientation.NORTHWEST: { basePoint.x = basePointX + diffToMinus; secondaryPoint.x = basePointX2;\r\n break;\r\n }\r\n case orientation.NORTHEAST: { basePoint.y = basePointY + diffToMinus; secondaryPoint.y = basePointY2;\r\n break;\r\n }\r\n case orientation.SOUTHWEST: { basePoint.y = basePointY - diffToMinus; secondaryPoint.y = basePointY2;\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n //console.log('basePoint', basePoint);\r\n //console.log('secondaryPoint', secondaryPoint);\r\n } else {\r\n if (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") {\r\n //console.log('RIGHT 90 Orient', bottomLine.getOrientation());\r\n switch (bottomLine.getOrientation()) {\r\n case orientation.HORIZONTAL:\r\n if (self.getNextLine(basePoint.getParent()).getLineDirection().orientation === \"vertical\"){\r\n basePoint.x = basePointX - widthDiff;\r\n secondaryPoint.x = basePointX2 - widthDiff;\r\n } else {\r\n if (bottomLine.getLineDirection().newDirection === \"east\"){\r\n if (self.getPrevLine(basePoint.getParent()).getLineDirection().orientation === \"vertical\"){\r\n basePoint.x = basePointX;\r\n secondaryPoint.x = basePointX2;\r\n } else {\r\n basePoint.x = basePointX - widthDiff;\r\n secondaryPoint.x = basePointX2 + widthDiff;\r\n }\r\n } else {\r\n if (self.getPrevLine(basePoint.getParent()).getLineDirection().orientation === \"vertical\"){\r\n basePoint.x = basePointX;\r\n secondaryPoint.x = basePointX2;\r\n } else {\r\n basePoint.x = basePointX + widthDiff;\r\n secondaryPoint.x = basePointX2 - widthDiff;\r\n }\r\n }\r\n }\r\n break;\r\n case orientation.VERTICAL:\r\n if (self.getNextLine(basePoint.getParent()).getLineDirection().orientation === \"vertical\") {\r\n if (bottomLine.getLineDirection().newDirection === \"north\") {\r\n if (self.getPrevLine(basePoint.getParent()).getLineDirection().orientation === \"horizontal\") {\r\n basePoint.y = basePointY;\r\n secondaryPoint.y = basePointY2;\r\n } else {\r\n basePoint.y = basePointY + widthDiff;\r\n secondaryPoint.y = basePointY2 - widthDiff;\r\n }\r\n } else {\r\n if (self.getPrevLine(basePoint.getParent()).getLineDirection().orientation === \"horizontal\") {\r\n basePoint.y = basePointY ;\r\n secondaryPoint.y = basePointY2 ;\r\n } else {\r\n basePoint.y = basePointY - widthDiff;\r\n secondaryPoint.y = basePointY2 + widthDiff;\r\n }\r\n }\r\n }\r\n break;\r\n case orientation.SOUTHEAST: {\r\n secondaryPoint.x = basePointX2 - widthDiff + diffToMinus;\r\n basePoint.x = basePointX - widthDiff;\r\n break;\r\n }\r\n case orientation.NORTHEAST: {\r\n secondaryPoint.y = basePointY2 + widthDiff - diffToMinus;\r\n basePoint.y = basePointY + widthDiff;\r\n break;\r\n }\r\n case orientation.SOUTHWEST: {\r\n secondaryPoint.x = basePointX2;\r\n basePoint.x = basePointX;\r\n basePoint.y = basePointY - widthDiff;\r\n secondaryPoint.y = basePointY2 - widthDiff + diffToMinus;\r\n break;\r\n }\r\n case orientation.NORTHWEST: {\r\n secondaryPoint.x = basePointX2 + widthDiff - diffToMinus;\r\n basePoint.x = basePointX + widthDiff;\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n } else {\r\n //console.log('LEFT 90 Orient', bottomLine.getOrientation());\r\n switch (bottomLine.getOrientation()) {\r\n case orientation.HORIZONTAL:\r\n if (self.getNextLine(basePoint.getParent()).getLineDirection().orientation === \"vertical\"){\r\n if (bottomLine.getLineDirection().newDirection === \"west\"){\r\n basePoint.x = basePointX - widthDiff;\r\n secondaryPoint.x = basePointX2 + widthDiff;\r\n } else {\r\n basePoint.x = basePointX + widthDiff;\r\n secondaryPoint.x = basePointX2 - widthDiff;\r\n }\r\n } else {\r\n basePoint.x = basePointX;\r\n secondaryPoint.x = basePointX2;\r\n }\r\n break;\r\n case orientation.VERTICAL:\r\n if (self.getNextLine(basePoint.getParent()).getLineDirection().orientation === \"horizontal\"){\r\n if (bottomLine.getLineDirection().newDirection === \"south\") {\r\n basePoint.y = basePointY + widthDiff;\r\n secondaryPoint.y = basePointY2 - widthDiff;\r\n } else {\r\n basePoint.y = basePointY - widthDiff;\r\n secondaryPoint.y = basePointY2 + widthDiff;\r\n }\r\n }\r\n break;\r\n case orientation.SOUTHEAST: {\r\n basePoint.y = basePointY + widthDiff;\r\n secondaryPoint.y = basePointY2 + widthDiff - diffToMinus;\r\n break;\r\n }\r\n case orientation.NORTHEAST: {\r\n secondaryPoint.x = basePointX2 + widthDiff - diffToMinus;\r\n basePoint.x = basePointX + widthDiff;\r\n break;\r\n }\r\n case orientation.SOUTHWEST: {\r\n basePoint.x = basePointX - widthDiff ;\r\n secondaryPoint.x = basePointX2 - widthDiff + diffToMinus;\r\n break;\r\n }\r\n case orientation.NORTHWEST: {\r\n basePoint.y = basePointY - widthDiff;\r\n secondaryPoint.y = basePointY2 - widthDiff+ diffToMinus;\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n // const pointDiff = Math.round(15 * anglePercentage) / 100; // points margin\r\n [basePoint, secondaryPoint].forEach(point => {\r\n if (point.arcLength || point.angle) {\r\n point.arcLength = 0;\r\n point.angle = 0;\r\n }\r\n // disallow points radiuses\r\n point.angleIsChanged = !!value; // keep if false when angle is 0\r\n point.rotateAnglePart = rotateAnglePart; // each point has a link on the whole rotated part\r\n });\r\n bottomLine.from.rotateAnglePart = rotateAnglePart;\r\n bottomLine.to.rotateAnglePart = rotateAnglePart;\r\n // bottomLine.from.pointDiff = pointDiff;\r\n // bottomLine.to.pointDiff = pointDiff;\r\n };\r\n this.getNextLine = (line, index, shouldSearchAmongLinesWithoutAngles) => {\r\n const lines = shouldSearchAmongLinesWithoutAngles ? this.getLinesWithoutAngle() : shape;\r\n index = index || lines.indexOf(line);\r\n let next = index + 1;\r\n if (index === lines.length - 1) {\r\n next = 0;\r\n }\r\n return lines[next];\r\n };\r\n this.getPrevLine = function(line, index) {\r\n index = index || shape.indexOf(line);\r\n var prev = index - 1;\r\n if (index === 0) {\r\n prev = shape.length - 1;\r\n }\r\n return shape[prev];\r\n };\r\n this.getAngleDirection = function(line) {\r\n var index = shape.indexOf(line);\r\n var lines = {\r\n line1: shape[index],\r\n line2: this.getNextLine(line, index),\r\n lineBefore: this.getPrevLine(line, index)\r\n };\r\n return getPointDirection(lines.line1.from, lines.line1.to, lines.line2.to, lines.lineBefore.from);\r\n };\r\n this.flip = function(flipDirection) {\r\n let i;\r\n switch(flipDirection) {\r\n case self.FlipDirection.HORIZONTAL:\r\n var max_y = 0;\r\n for (i = 0; i < shape.length; i++) {\r\n if (max_y < shape[i].from.y) {\r\n max_y = shape[i].from.y;\r\n }\r\n }\r\n for (i = 0; i < shape.length; i++) {\r\n shape[i].from.y = max_y - shape[i].from.y;\r\n }\r\n break;\r\n case self.FlipDirection.VERTICAL:\r\n var max_x = 0;\r\n for (i = 0; i < shape.length; i++) {\r\n if (max_x < shape[i].from.x) {\r\n max_x = shape[i].from.x;\r\n }\r\n }\r\n for (i = 0; i < shape.length; i++) {\r\n shape[i].from.x = max_x - shape[i].from.x;\r\n }\r\n break;\r\n }\r\n };\r\n this.rotate = function(degrees, direction, isSlabMode = false, aroundPoint = null) {\r\n // todo fix bumpout rotation and remove this\r\n // if (self.isWithBumpout() || self.isWithMitered()) {\r\n // return\r\n // }\r\n /////////////////////////////////////////\r\n isSlabMode ? this.rotatedDegreesSlab += degrees : this.rotatedDegrees += degrees;\r\n (this.rotatedDegrees === 360) && (this.rotatedDegrees = 0);\r\n (this.rotatedDegreesSlab === 360) && (this.rotatedDegreesSlab = 0);\r\n\r\n direction = direction || self.Direction.Right;\r\n let angle = (degrees * Math.PI / 180);\r\n if (direction === self.Direction.LEFT)\r\n angle *= -1;\r\n\r\n if (!aroundPoint) {\r\n aroundPoint = this.getCenter();\r\n }\r\n //console.log('degrees', degrees);\r\n //console.log('aroundPoint', aroundPoint);\r\n for (let i = 0; i < shape.length; i++) {\r\n shape[i].from.rotate(aroundPoint, angle, isSlabMode);\r\n }\r\n for (let i = 0; i < shape.length; i++) {\r\n let line1 = this.getAngleDirection(shape[i]),\r\n count = ((i - 1) < 0) ? shape.length - 1 : i - 1,\r\n line2 = this.getAngleDirection(shape[count]);\r\n\r\n shape[i].from.changeCornerDirection(line1, line2);\r\n }\r\n this.rotateShapeBumpoutPoints(aroundPoint, angle, isSlabMode); //todo\r\n if (this.shapeRotatable) {\r\n this.shapeRotatable.rotateShapeRotatablePoints(aroundPoint, angle, isSlabMode);\r\n }\r\n if (!isSlabMode) {\r\n this.setIsPointsChanged(true);\r\n }\r\n };\r\n this.rotateShapeBumpoutPoints = (aroundPoint, angle, isSlabMode) => {\r\n if (this.isWithBumpout()) {\r\n for (const line of this.getLines()) {\r\n if (line.isWithBumpout()) {\r\n const bumpoutPoints = line.bumpoutOverlay.getBumpoutPoints();\r\n for (const bumpoutPointsKey in bumpoutPoints) {\r\n if (bumpoutPoints.hasOwnProperty(bumpoutPointsKey)) {\r\n bumpoutPoints[bumpoutPointsKey].rotate(aroundPoint, angle, isSlabMode);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n this.setRotationDegrees = (rotationDegrees) => {\r\n this.rotatedDegrees = rotationDegrees\r\n }\r\n this.updateSlabPoints = () => {\r\n for (let i = 0; i < shape.length; i++) {\r\n shape[i].from.posSlab.x = JSON.parse(JSON.stringify(shape[i].from.pos.x));\r\n shape[i].from.posSlab.y = JSON.parse(JSON.stringify(shape[i].from.pos.y));\r\n if (shape[i].isWithBumpout()) {\r\n //this is used to reset additional bumpout shape\r\n SlabWorkspace.slabAdditionalShapes.removeActiveBacksplashByLine(shape[i]);\r\n\r\n //this is used to reset bumpoutPoints if they displayed with the line\r\n const bumpoutPoints = shape[i].bumpoutOverlay.getBumpoutPoints();\r\n for (let point in bumpoutPoints) {\r\n bumpoutPoints[point].posSlab = clone(bumpoutPoints[point].pos);\r\n }\r\n }\r\n }\r\n }\r\n this.updateSlabPosition = () => {\r\n this.setSlabPosition(this.pos);\r\n }\r\n this.init = (position, segments) => {\r\n if (position) {\r\n this.setPositionWithoutChange(position);\r\n this.setSlabPosition(position);\r\n }\r\n if (SHAPE_PART_IDS_VISIBLE_ONLY_IN_THE_SLAB_MODE.includes(this.partId)) {\r\n this.isPositionChanged = false;\r\n }\r\n\r\n if (segments)\r\n setShape(segments);\r\n\r\n // that hook is for resizing, perhaps we should rewrite resizing and remove this\r\n if (self.layout270.indexOf(this.fromLayout) !== -1) {\r\n self.rotatedDegrees = 270;\r\n }\r\n\r\n function getRandomInt(min, max) {\r\n return Math.floor(Math.random() * (max - min)) + min;\r\n }\r\n totalShapeCount && setFillColor(getRandomInt(0, 255), getRandomInt(0, 255), getRandomInt(0, 255), 0.3);\r\n this.initEvents(sqftEventManager);\r\n };\r\n this.getPriority = (eventManager) => {\r\n switch (this.partId) {\r\n case SHAPE_PART_ID.upper_cabinet_boxes: return eventManager.priorities.SHAPE_UPPER\r\n case SHAPE_PART_ID.slabPlaceHolder: return eventManager.priorities.SHAPE_SLAB_PLACEHOLDER\r\n default: return eventManager.priorities.SHAPE\r\n }\r\n }\r\n this.initEvents = (eventManager = sqftEventManager) => {\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_MOVE,\r\n onMouseMove,\r\n this,\r\n this.getPriority(eventManager)\r\n );\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_DOWN,\r\n onMouseDown,\r\n this,\r\n this.getPriority(eventManager)\r\n );\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_UP,\r\n onMouseUp,\r\n this,\r\n this.getPriority(eventManager)\r\n );\r\n eventManager.addEvent(\r\n eventManager.events.RENDER,\r\n this.render,\r\n this,\r\n this.getPriority(eventManager)\r\n );\r\n eventManager.addEvent(\r\n eventManager.events.DBLCLICK,\r\n onDblClick,\r\n this,\r\n this.getPriority(eventManager)\r\n );\r\n };\r\n this.resetState = () => {\r\n state.mouseDown = false;\r\n state.mouseDownPosition = null;\r\n state.hovering = false;\r\n state.handlerHold = null;\r\n };\r\n this.deregisterEvents = () => {\r\n sqftEventManager.removeEvent(this);\r\n this.resetState();\r\n this.isHidden = true;\r\n this.deregisterLineEvents();\r\n };\r\n this.deregisterLineEvents = () => {\r\n for (let i = 0; i < shape.length; i++) {\r\n shape[i].deregisterEvents();\r\n }\r\n };\r\n this.reInitLineTitleEvents = () => {\r\n for (let i = 0; i < shape.length; i++) {\r\n shape[i].reInitTitleEvents();\r\n }\r\n };\r\n this.reInitEvents = () => {\r\n if (this.isHidden) {\r\n this.initEvents(sqftEventManager);\r\n this.restoreState();\r\n this.isHidden = false;\r\n for (let i = 0; i < shape.length; i++) {\r\n shape[i].reInitEvents();\r\n }\r\n }\r\n };\r\n this.deregisterPartEvents = () => {\r\n for (let i = 0; i < shape.length; i++) {\r\n shape[i].deregisterPartEvents();\r\n }\r\n };\r\n this.reInitPartEvents = () => {\r\n for (let i = 0; i < shape.length; i++) {\r\n shape[i].reInitPartEvents();\r\n }\r\n };\r\n this.restoreState = () => {\r\n state = {\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n hovering: false,\r\n handlerHold: null\r\n };\r\n };\r\n this.destroy = (protect) => {\r\n if (!protect) {\r\n for (var i = 0; i < shape.length; i++) {\r\n shape[i].destroy();\r\n }\r\n if (this.shapeRotatable) {\r\n sqftShapeManager.disableRotatableState(this);\r\n }\r\n sqftEventManager.removeEvent(self);\r\n }\r\n };\r\n this.stealCursor = function(who) {\r\n for (var i = 0; i < shape.length; i++) {\r\n if (shape[i] === who) {\r\n sqftEventManager.resetCursor(self);\r\n }\r\n }\r\n };\r\n this.resetCursor = function() {\r\n sqftEventManager.resetCursor(self);\r\n };\r\n this.isShapeHasIntersections = () => {\r\n return shape.some(line => {\r\n return line.hasIntersections();\r\n })\r\n }\r\n this.renderAnglePartActive = function(rotateAnglePart, ctx) {\r\n ctx.save();\r\n ctx.beginPath();\r\n const rotateShape1 = getRotateAngleRectangle(rotateAnglePart);\r\n ctx.moveTo(rotateShape1[0][0], rotateShape1[0][1]);\r\n ctx.lineTo(rotateShape1[1][0], rotateShape1[1][1]);\r\n ctx.lineTo(rotateShape1[2][0], rotateShape1[2][1]);\r\n ctx.lineTo(rotateShape1[3][0], rotateShape1[3][1]);\r\n ctx.closePath();\r\n ctx.fillStyle = \"rgba(159, 198, 33, 0.5)\";\r\n ctx.fill();\r\n ctx.restore();\r\n };\r\n\r\n this.isAngleRotatedPartsWithCorner = (rotateAnglePart) => {\r\n let line1 = self.getPrevLine(shape[rotateAnglePart.line1]);\r\n let line2 = shape[rotateAnglePart.line2];\r\n\r\n if ((self.shapeType === \"horseshoe\" || self.shapeType === \"wideangle\")\r\n && rotateAnglePart.line1 > rotateAnglePart.line2\r\n ) {\r\n line1 = shape[rotateAnglePart.line1];\r\n line2 = self.getPrevLine(shape[rotateAnglePart.line2]);\r\n }\r\n\r\n return [line1, line2].some((line) => {\r\n return line.to.angle > 0 || line.to.arcLength > 0\r\n });\r\n }\r\n\r\n this.render = (ctx) => {\r\n this.shapeRender.render(ctx)\r\n }\r\n\r\n}\r\n","//********* TUTORIALS *********//\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const showMaterialsTutorial = (materialsTutorialIsOpened) => ({\r\n type: types.SHOW_MATERIALS_TUTORIAL,\r\n payload: {materialsTutorialIsOpened}\r\n});\r\n\r\nexport const setMaterialsTutorialStep = (materialsTutorialStep) => ({\r\n type: types.SET_MATERIALS_TUTORIAL_STEP,\r\n payload: {materialsTutorialStep}\r\n});\r\n\r\nexport const setMaterialsTutorialFinished = (materialsTutorialFinished) => ({\r\n type: types.SET_MATERIALS_TUTORIAL_FINISHED,\r\n payload: {materialsTutorialFinished}\r\n});\r\n\r\nexport const showMaterialsAgentTutorial = (materialsAgentTutorialIsOpened) => ({\r\n type: types.SHOW_MATERIALS_AGENT_TUTORIAL,\r\n payload: {materialsAgentTutorialIsOpened}\r\n});\r\n\r\nexport const setMaterialsAgentTutorialFinished = (materialsAgentTutorialFinished) => ({\r\n type: types.SET_MATERIALS_AGENT_TUTORIAL_FINISHED,\r\n payload: {materialsAgentTutorialFinished}\r\n});\r\n\r\nexport const showVisualizerTutorial = (visualizerTutorialIsOpened) => ({\r\n type: types.SHOW_VISUALIZER_TUTORIAL,\r\n payload: {visualizerTutorialIsOpened}\r\n});\r\n\r\nexport const setVisualizerTutorialStep = (visualizerTutorialStep) => ({\r\n type: types.SET_VISUALIZER_TUTORIAL_STEP,\r\n payload: {visualizerTutorialStep}\r\n});\r\n\r\nexport const setVisualizerTutorialFinished = (visualizerTutorialFinished) => ({\r\n type: types.SET_VISUALIZER_TUTORIAL_FINISHED,\r\n payload: {visualizerTutorialFinished}\r\n});\r\n","//todo move out of this folder\r\nimport COLOR_THEMES from \"../../../../../colorThemes\";\r\nimport {getParallelPoints, getPointOnTheLine} from \"../../../helpers/sqftHelper\";\r\nimport sqftConfig from \"../store/sqftConfig\";\r\nimport sqftEventManager from \"../store/sqftEventManager\";\r\nimport {getMidPoint, getPointBetweenPoints, getPointDistance} from \"../../../helpers/sqftHelper\";\r\nimport workspace from \"../core/workspace\";\r\n\r\nexport default class RenderFigures {\r\n\r\n /**\r\n * Draws a rounded rectangle using the current state of the canvas.\r\n * If you omit the last three params, it will draw a rectangle\r\n * outline with a 5 pixel border radius\r\n * @param {CanvasRenderingContext2D} ctx\r\n * @param {Number} x The top left x coordinate\r\n * @param {Number} y The top left y coordinate\r\n * @param {Number} width The width of the rectangle\r\n * @param {Number} height The height of the rectangle\r\n * @param {Number} [radius = 5] The corner radius; It can also be an object\r\n * to specify different radii for corners\r\n * @param {Number} [radius.tl = 0] Top left\r\n * @param {Number} [radius.tr = 0] Top right\r\n * @param {Number} [radius.br = 0] Bottom right\r\n * @param {Number} [radius.bl = 0] Bottom left\r\n * @param {Boolean} [isFilled = false] Whether to fill the rectangle.\r\n * @param {Boolean} [stroke = true] Whether to stroke the rectangle.\r\n */\r\n static roundedRect(ctx, x, y, width, height, radius, isFilled, stroke) {\r\n if (typeof stroke === 'undefined') {\r\n stroke = true;\r\n }\r\n if (typeof radius === 'undefined') {\r\n radius = 5;\r\n }\r\n if (typeof radius === 'number') {\r\n radius = {tl: radius, tr: radius, br: radius, bl: radius};\r\n } else {\r\n let defaultRadius = {tl: 0, tr: 0, br: 0, bl: 0};\r\n for (let side in defaultRadius) {\r\n radius[side] = radius[side] || defaultRadius[side];\r\n }\r\n }\r\n ctx.beginPath();\r\n ctx.moveTo(x + radius.tl, y);\r\n ctx.lineTo(x + width - radius.tr, y);\r\n ctx.quadraticCurveTo(x + width, y, x + width, y + radius.tr);\r\n ctx.lineTo(x + width, y + height - radius.br);\r\n ctx.quadraticCurveTo(x + width, y + height, x + width - radius.br, y + height);\r\n ctx.lineTo(x + radius.bl, y + height);\r\n ctx.quadraticCurveTo(x, y + height, x, y + height - radius.bl);\r\n ctx.lineTo(x, y + radius.tl);\r\n ctx.quadraticCurveTo(x, y, x + radius.tl, y);\r\n ctx.closePath();\r\n if (isFilled) {\r\n ctx.fill();\r\n }\r\n if (stroke) {\r\n ctx.stroke();\r\n }\r\n }\r\n\r\n static renderOval(ctx, w, h, x, y = 0, fullOval = false) {\r\n let lx = x - w * .5;\r\n let rx = x + w * .5;\r\n let ty = y - h * .5;\r\n let by = y + h * .5;\r\n\r\n let magic = 0.551915024494;\r\n let xMagic = magic * w * 0.5;\r\n let yMagic = h * magic * 0.5;\r\n\r\n ctx.moveTo(x, ty);\r\n ctx.bezierCurveTo(x + xMagic, ty, rx, y - yMagic, rx, y);\r\n ctx.bezierCurveTo(rx, y + yMagic, x + xMagic, by, x, by);\r\n if (fullOval) {\r\n ctx.bezierCurveTo(y - xMagic, by, lx, y + yMagic, lx, y);\r\n ctx.bezierCurveTo(lx, x - yMagic, x - xMagic, ty, x, ty);\r\n }\r\n }\r\n\r\n static drawArrow = (context, fromX, fromY, toX, toY) => {\r\n let headLen = 10, // length of head in pixels\r\n dx = toX - fromX,\r\n dy = toY - fromY,\r\n angle = Math.atan2(dy, dx);\r\n\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(toX, toY);\r\n context.lineTo(toX - headLen * Math.cos(angle - Math.PI / 6), toY - headLen * Math.sin(angle - Math.PI / 6));\r\n context.moveTo(toX, toY);\r\n context.lineTo(toX - headLen * Math.cos(angle + Math.PI / 6), toY - headLen * Math.sin(angle + Math.PI / 6));\r\n\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(fromX + headLen * Math.cos(angle - Math.PI / 6), fromY + headLen * Math.sin(angle - Math.PI / 6));\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(fromX + headLen * Math.cos(angle + Math.PI / 6), fromY + headLen * Math.sin(angle + Math.PI / 6));\r\n };\r\n\r\n static drawRotatedArrow = (context, fromX, fromY, toX, toY, cornerPointX, cornerPointY, rotateAngle) => {\r\n const midpoint = getMidPoint({x: fromX, y: fromY}, {x: toX, y: toY});\r\n const rotateDirectionPoint = getPointBetweenPoints(midpoint, {x: cornerPointX, y: cornerPointY}, rotateAngle);\r\n let headLen = 7, // length of head in pixels\r\n dx = toX - rotateDirectionPoint.x,\r\n dy = toY - rotateDirectionPoint.y,\r\n angle = Math.atan2(dy, dx);\r\n const radius = getPointDistance({x: fromX, y: fromY}, {x: cornerPointX, y: cornerPointY});\r\n context.moveTo(fromX, fromY);\r\n context.arcTo(\r\n cornerPointX,\r\n cornerPointY,\r\n toX,\r\n toY,\r\n radius\r\n );\r\n\r\n //First arrow\r\n context.moveTo(toX, toY);\r\n context.lineTo(toX - headLen * Math.cos(angle - Math.PI / 6), toY - headLen * Math.sin(angle - Math.PI / 6));\r\n context.moveTo(toX, toY);\r\n context.lineTo(toX - headLen * Math.cos(angle + Math.PI / 6), toY - headLen * Math.sin(angle + Math.PI / 6));\r\n\r\n //Second arrow\r\n dx = rotateDirectionPoint.x - fromX;\r\n dy = rotateDirectionPoint.y - fromY;\r\n angle = Math.atan2(dy, dx);\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(fromX + headLen * Math.cos(angle - Math.PI / 6), fromY + headLen * Math.sin(angle - Math.PI / 6));\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(fromX + headLen * Math.cos(angle + Math.PI / 6), fromY + headLen * Math.sin(angle + Math.PI / 6));\r\n };\r\n\r\n static renderDoubleCircle(ctx, pointField, radius, lineWidth) {\r\n //outside circle\r\n ctx.arc(\r\n pointField.x,\r\n pointField.y,\r\n radius,\r\n 0,\r\n Math.PI * 2,\r\n false\r\n );\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n ctx.fillStyle = '#ffffff';\r\n ctx.lineWidth = lineWidth;\r\n ctx.stroke();\r\n ctx.fill();\r\n\r\n //inside circle\r\n ctx.beginPath();\r\n ctx.arc(\r\n pointField.x,\r\n pointField.y,\r\n radius - 3,\r\n 0,\r\n Math.PI * 2,\r\n false\r\n );\r\n\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n ctx.lineWidth = lineWidth;\r\n ctx.fill();\r\n }\r\n\r\n static renderCircle(pointField,\r\n radius = 1,\r\n lineWidth = 1,\r\n strokeStyle = '#000000',\r\n fillStyle = null,\r\n ctx = sqftEventManager.getCtx()\r\n ) {\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.arc(\r\n pointField.x,\r\n pointField.y,\r\n radius,\r\n 0,\r\n Math.PI * 2,\r\n false\r\n );\r\n ctx.strokeStyle = strokeStyle;\r\n ctx.lineWidth = lineWidth;\r\n ctx.stroke();\r\n if (fillStyle) {\r\n ctx.fillStyle = fillStyle;//'#ffffff';\r\n ctx.fill();\r\n }\r\n ctx.closePath();\r\n ctx.restore();\r\n }\r\n\r\n static renderPolygon = (points,\r\n lineWidth = 2,\r\n strokeStyle = 'rgba(0, 0, 0, 0.5)',\r\n ctx = sqftEventManager.getCtx()\r\n ) => {\r\n const firstPoint = points[0];\r\n ctx.beginPath();\r\n ctx.moveTo(firstPoint.x, firstPoint.y);\r\n for (const point of points) {\r\n ctx.lineTo(point.x, point.y);\r\n }\r\n ctx.lineWidth = lineWidth;\r\n ctx.strokeStyle = strokeStyle;\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n\r\n static renderPolygonArray = (points,\r\n lineWidth = 2,\r\n strokeStyle = 'rgba(0, 0, 0, 0.5)',\r\n ctx = sqftEventManager.getCtx()\r\n ) => {\r\n const firstPoint = points[0];\r\n ctx.beginPath();\r\n ctx.moveTo(firstPoint[0], firstPoint[1]);\r\n for (const point of points) {\r\n ctx.lineTo(point[0], point[1]);\r\n }\r\n ctx.lineTo(firstPoint[0], firstPoint[1]);\r\n ctx.lineWidth = lineWidth;\r\n ctx.strokeStyle = strokeStyle;\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n\r\n static drawArrowsAround4points = (ctx, points, offset = 10) => {\r\n points.forEach((point, index) => {\r\n const prevPoint = points[index === 0 ? points.length - 1 : index - 1];\r\n const nextPoint = points[\r\n index === points.length - 1 ? 0 : index + 1\r\n ];\r\n const afterNextPoint = points[\r\n index === points.length - 1\r\n ? 1\r\n : index === points.length - 2\r\n ? 0\r\n : index + 2\r\n ];\r\n const offsetPoint1 = getPointOnTheLine(point, prevPoint, offset);\r\n const offsetPoint2 = getPointOnTheLine(nextPoint, afterNextPoint, offset);\r\n const [midPoint, midPoint2] = getParallelPoints(point, nextPoint, - offset);\r\n\r\n ctx.beginPath();\r\n RenderFigures.drawArrow( ctx,\r\n offsetPoint1.x,\r\n offsetPoint1.y,\r\n offsetPoint2.x,\r\n offsetPoint2.y,\r\n );\r\n RenderFigures.drawArrow( ctx,\r\n midPoint.x,\r\n midPoint.y,\r\n midPoint2.x,\r\n midPoint2.y,\r\n );\r\n ctx.lineWidth = 1;\r\n ctx.stroke();\r\n ctx.closePath();\r\n });\r\n };\r\n\r\n static drawArrowsAroundPoints = (ctx, points, offset = 10, minArrowLength = 2) => {\r\n points.forEach((point, index) => {\r\n const nextPoint = points[\r\n index === points.length - 1 ? 0 : index + 1\r\n ];\r\n const pointDistance = getPointDistance(point, nextPoint);\r\n const scale = workspace.getScale();\r\n\r\n if (pointDistance / scale > minArrowLength) {\r\n const [midPoint, midPoint2] = getParallelPoints(point, nextPoint, - offset);\r\n ctx.beginPath();\r\n RenderFigures.drawArrow( ctx,\r\n midPoint.x,\r\n midPoint.y,\r\n midPoint2.x,\r\n midPoint2.y,\r\n );\r\n ctx.lineWidth = 1;\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n });\r\n };\r\n\r\n static renderHandle = (ctx, midPoint) => {\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.fillStyle = 'white';\r\n ctx.lineWidth = 2;\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n ctx.arc(midPoint.x, midPoint.y, 10, 0, 2 * Math.PI, false);\r\n ctx.fill();\r\n ctx.stroke();\r\n ctx.closePath();\r\n\r\n ctx.beginPath();\r\n ctx.moveTo(midPoint.x, midPoint.y);\r\n ctx.lineTo(midPoint.x + 5 , midPoint.y);\r\n ctx.lineTo(midPoint.x + 5 , midPoint.y + 3);\r\n\r\n ctx.moveTo(midPoint.x, midPoint.y);\r\n ctx.lineTo(midPoint.x - 5 , midPoint.y);\r\n ctx.lineTo(midPoint.x - 5 , midPoint.y + 3);\r\n ctx.stroke();\r\n\r\n ctx.restore();\r\n }\r\n\r\n /**\r\n * Draws a sink\r\n * @param {CanvasRenderingContext2D} ctx\r\n * @param {Number} x The top left x coordinate\r\n * @param {Number} y The top left y coordinate\r\n * @param {Number} width The width of the rectangle\r\n * @param {Number} height The height of the rectangle\r\n * to specify different radii for corners\r\n */\r\n static sink(ctx, x, y, width, height) {\r\n // Proportions of the original SVG\r\n const originalWidth = 340;\r\n const originalHeight = 463;\r\n const innerRectWidth = 284;\r\n const innerRectHeight = 410;\r\n const innerRectX = 29;\r\n const innerRectY = 29;\r\n const circleRadiusBig = 29;\r\n const circleRadiusSmall = 20.7142857;\r\n const circleCenterX = 142 + circleRadiusBig;\r\n const circleCenterY = 203 + circleRadiusBig;\r\n\r\n // Scaling proportions\r\n const scaleX = width / originalWidth;\r\n const scaleY = height / originalHeight;\r\n\r\n const lineWidth = 1;\r\n const lineColor = COLOR_THEMES[sqftConfig.activeTheme].primary; //\"#4A90E2\";\r\n ctx.lineWidth = lineWidth * scaleX;\r\n ctx.strokeStyle = lineColor;\r\n\r\n // Fill the background with white\r\n ctx.fillStyle = \"#FFFFFF\";\r\n ctx.fillRect(x, y, width, height);\r\n\r\n // Drawing the outer rectangle\r\n ctx.beginPath();\r\n ctx.rect(x, y, width, height);\r\n ctx.stroke();\r\n\r\n // Drawing the inner rectangle\r\n const innerX = x + innerRectX * scaleX;\r\n const innerY = y + innerRectY * scaleY;\r\n const innerW = innerRectWidth * scaleX;\r\n const innerH = innerRectHeight * scaleY;\r\n ctx.beginPath();\r\n ctx.rect(innerX, innerY, innerW, innerH);\r\n ctx.stroke();\r\n\r\n // Drawing the circles\r\n const centerX = x + circleCenterX * scaleX;\r\n const centerY = y + circleCenterY * scaleY;\r\n const radiusBig = circleRadiusBig * scaleX;\r\n const radiusSmall = circleRadiusSmall * scaleX;\r\n\r\n ctx.beginPath();\r\n ctx.arc(centerX, centerY, radiusBig, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n\r\n ctx.beginPath();\r\n ctx.arc(centerX, centerY, radiusSmall, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n }\r\n\r\n /**\r\n * Draws a doubleSink\r\n * @param {CanvasRenderingContext2D} ctx\r\n * @param {Number} x The top left x coordinate\r\n * @param {Number} y The top left y coordinate\r\n * @param {Number} width The width of the rectangle\r\n * @param {Number} height The height of the rectangle\r\n * to specify different radii for corners\r\n */\r\n static doubleSink(ctx, x, y, width, height) {\r\n // Proportions of the original doubleSink SVG\r\n const originalWidth = 341;\r\n const originalHeight = 511;\r\n const innerRectWidthTop = 282;\r\n const innerRectHeightTop = 153;\r\n const innerRectWidthBottom = 283;\r\n const innerRectHeightBottom = 285;\r\n const innerRectX = 29;\r\n const innerRectYTop = 26;\r\n const innerRectYBottom = 192;\r\n const circleRadiusBig = 29;\r\n const circleRadiusSmall = 20.7142857;\r\n const circleCenterX = 149; // Adjusted for double sink\r\n const circleCenterYTop = 103; // Top circle center\r\n const circleCenterYBottom = 335; // Bottom circle center\r\n\r\n // Scaling proportions based on provided width and height\r\n const scaleX = width / originalWidth;\r\n const scaleY = height / originalHeight;\r\n\r\n // Line thickness and color for doubleSink\r\n const lineWidth = 1.54 * scaleX; // Adjusted line width\r\n const lineColor = \"#4A90E2\";\r\n\r\n // Fill the background with white\r\n ctx.fillStyle = \"#FFFFFF\";\r\n ctx.fillRect(x, y, width, height);\r\n\r\n // Draw the outer rectangle\r\n ctx.lineWidth = lineWidth;\r\n ctx.strokeStyle = lineColor;\r\n ctx.beginPath();\r\n ctx.rect(x, y, width, height);\r\n ctx.stroke();\r\n\r\n // Draw the top inner rectangle\r\n const innerX = x + innerRectX * scaleX;\r\n const innerYTop = y + innerRectYTop * scaleY;\r\n const innerWTop = innerRectWidthTop * scaleX;\r\n const innerHTop = innerRectHeightTop * scaleY;\r\n ctx.beginPath();\r\n ctx.rect(innerX, innerYTop, innerWTop, innerHTop);\r\n ctx.stroke();\r\n\r\n // Draw the bottom inner rectangle\r\n const innerYBottom = y + innerRectYBottom * scaleY;\r\n const innerWBottom = innerRectWidthBottom * scaleX;\r\n const innerHBottom = innerRectHeightBottom * scaleY;\r\n ctx.beginPath();\r\n ctx.rect(innerX, innerYBottom, innerWBottom, innerHBottom);\r\n ctx.stroke();\r\n\r\n // Draw top circles\r\n const centerXTop = x + circleCenterX * scaleX;\r\n const centerYTop = y + circleCenterYTop * scaleY;\r\n const radiusBig = circleRadiusBig * scaleX;\r\n const radiusSmall = circleRadiusSmall * scaleX;\r\n\r\n ctx.beginPath();\r\n ctx.arc(centerXTop, centerYTop, radiusBig, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n\r\n ctx.beginPath();\r\n ctx.arc(centerXTop, centerYTop, radiusSmall, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n\r\n // Draw bottom circles\r\n const centerYBottom = y + circleCenterYBottom * scaleY;\r\n\r\n ctx.beginPath();\r\n ctx.arc(centerXTop, centerYBottom, radiusBig, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n\r\n ctx.beginPath();\r\n ctx.arc(centerXTop, centerYBottom, radiusSmall, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n }\r\n\r\n // Function to draw the background pattern\r\n static drawBackgroundWhite(ctx, startPoint, width, height) {\r\n ctx.fillStyle = \"white\";\r\n ctx.fillRect(startPoint.x, startPoint.y, width, height);\r\n }\r\n\r\n // Function to draw the border pattern\r\n static drawBorder(ctx, startPoint, width, height) {\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = \"#4A90E2\";\r\n ctx.strokeRect(startPoint.x, startPoint.y, width, height);\r\n }\r\n}\r\n","import orderBy from \"lodash/orderBy\";\r\n\r\nimport {Part} from \"../part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {showerThumbnail} from '../../../bvComponent/core/assets';\r\n\r\n// import store from \"../../../../store\";\r\n\r\nimport {ShowerTubCombo} from \"./showerTubCombo\";\r\n\r\nimport ShowerFixture from \"../subparts/shower/showerFixture\";\r\nimport ShowerScreen from \"../subparts/shower/showerScreen\";\r\nimport ShowerGlass from \"../subparts/shower/showerGlass\";\r\n// import ShowerOverlay from \"../subparts/shower/showerOverlay\";\r\nimport ShowerBody from \"../subparts/shower/showerBody\";\r\nimport ShowerWall from \"../subparts/shower/showerWall\";\r\nimport ShowerWallAccent from \"../subparts/shower/showerWallAccent\";\r\nimport ShowerDoor from \"../subparts/shower/showerDoor\";\r\nimport ShowerPanCombo from \"../subparts/shower/showerPanCombo\";\r\nimport ShowerDoorHandle from \"../subparts/shower/showerDoorHandle\";\r\nimport PonyWallCap from \"../subparts/shower/ponyWallCap\";\r\nimport PonyWallGlass from \"../subparts/shower/ponyWallGlass\";\r\nimport ShowerFloor from \"../subparts/shower/showerFloor\";\r\nimport Threshold from \"../subparts/shower/threshold\";\r\nimport ShowerDrain from \"../subparts/shower/showerDrain\";\r\nimport ShowerHead from \"../subparts/shower/showerHead\";\r\nimport ShowerArm from \"../subparts/shower/showerArm\";\r\nimport ShowerHeadBundle from \"../subparts/shower/showerHeadBundle\";\r\nimport TubSpout from \"../subparts/shower/tubSpout\";\r\nimport HandShowerKit from \"../subparts/shower/handShowerKit\";\r\n\r\nimport {ShowerHeadTypes, ShowerHandTypes} from \"../constants\";\r\nimport ShowerCurb from \"../subparts/shower/showerCurb\";\r\nimport BodySpray from \"../subparts/showerNew/bodySpray\";\r\nimport DiverterTrim from \"../subparts/showerNew/diverterTrim\";\r\nimport HandShowerHolder from \"../subparts/showerNew/handShowerHolder\";\r\nimport HandShowerOnly from \"../subparts/showerNew/handShowerOnly\";\r\nimport ShowerHose from \"../subparts/showerNew/showerHose\";\r\nimport ShowerSystem from \"../subparts/showerNew/showerSystem\";\r\nimport ShowerTrimKit from \"../subparts/showerNew/showerTrimKit\";\r\nimport ValveTrim from \"../subparts/showerNew/valveTrim\";\r\nimport WallUnion from \"../subparts/showerNew/wallUnion\";\r\n\r\nexport class Shower extends Part {\r\n static id = 'Shower';\r\n\r\n static Type = {\r\n Custom: 'Custom',\r\n Complete: 'Complete',\r\n Combo: 'Combo',\r\n All: 'All'\r\n };\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partThumbnail = showerThumbnail;\r\n this.partName = 'Shower';\r\n this.translateId = \"visualizer.bathroom.shower\";\r\n this.relatedItems = [];\r\n this.activeSubType_ = Shower.Type.Custom;\r\n\r\n this.customBodyType = 1; // Door\r\n\r\n this.showerBody = null;\r\n this.showerScreen = null;\r\n this.showerGlass = null;\r\n this.showerWall = null;\r\n this.showerWallAccent = null;\r\n\r\n // old\r\n this.showerFloor = null;\r\n this.showerOverlay = null;\r\n // old\r\n\r\n this.showerPanCombo = null;\r\n this.threshold = null;\r\n this.showerFixture = null;\r\n this.showerBodySelectedByUser = false;\r\n this.showerDoor = null;\r\n this.showerDoorHandle = null;\r\n\r\n this.ponyWallCap = null;\r\n this.ponyWallGlass = null;\r\n this.showerHead = null;\r\n this.showerArm = null;\r\n this.showerHeadBundle = null;\r\n this.handShowerKit = null;\r\n this.tubSpout = null;\r\n this.bodySpray = null;\r\n this.diverterTrim = null;\r\n this.handShowerHolder = null;\r\n this.handShowerOnly = null;\r\n this.showerHose = null;\r\n this.showerSystem = null;\r\n this.showerTrimKit = null;\r\n this.valveTrim = null;\r\n this.wallUnion = null;\r\n\r\n this.showerBody = new ShowerBody(true);\r\n this.showerBody.getParent = () => this;\r\n this.showerBody.type = Shower.Type.All;\r\n this.showerBody.counts = {\r\n allLayoutFeaturesCount: 0,\r\n largeLayoutFeaturesCount: 0,\r\n smallLayoutFeaturesCount: 0\r\n };\r\n this.relatedItems.push(this.showerBody);\r\n\r\n this.showerFloorIsActive = false;\r\n this.shower_head_type = ShowerHeadTypes.shower_fixture;\r\n this.shower_hand_type = ShowerHandTypes.hand_shower_holder;\r\n this.relatedGroupNames = [\"Shower Pan\", \"Shower Wall\", \"Shower Wall Accent\", \"Shower Door\", \"Shower Door Handle\",\r\n \"ShowerPan\", \"ShowerFloor\", \"Shower Fixture\", \"Shower Drain\", \"Shower Head\", \"Shower Arm\", \"Shower Head Bundle\",\r\n \"Pony Wall Cap\", \"Pony Wall Glass\", \"Shower Screen\", \"Shower Glass\", \"Shower Body\", \"Tub Spout\", \"Hand Shower Kit\",\r\n \"Shower Curb\", \"Body Spray\", \"Diverter Trim\", \"Hand Shower Holder\", \"Hand Shower Only\", \"Shower Hose\",\r\n \"Shower System\", \"Shower Trim Kit\", \"Valve Trim\", \"Wall Union\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n relatedItemType = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Shower Pan\":\r\n relatedItemName = \"showerPanCombo\";\r\n RelatedItemClass = ShowerPanCombo;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Pans\":\r\n relatedItemName = \"showerPanCombo\";\r\n RelatedItemClass = ShowerPanCombo;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Wall\":\r\n case \"Shower Walls\":\r\n case \"ShowerInteriorWall\": // OLD\r\n relatedItemName = \"showerWall\";\r\n RelatedItemClass = ShowerWall;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Wall Accent\":\r\n relatedItemName = \"showerWallAccent\";\r\n RelatedItemClass = ShowerWallAccent;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Door\":\r\n case \"Shower_Door\":\r\n relatedItemName = \"showerDoor\";\r\n RelatedItemClass = ShowerDoor;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Door Handle\":\r\n relatedItemName = \"showerDoorHandle\";\r\n RelatedItemClass = ShowerDoorHandle;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"ShowerPan\":\r\n relatedItemName = \"threshold\";\r\n RelatedItemClass = Threshold;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"ShowerFloor\":\r\n case \"Shower Floor\":\r\n relatedItemName = \"showerFloor\";\r\n RelatedItemClass = ShowerFloor;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Fixture\":\r\n relatedItemName = \"showerFixture\";\r\n RelatedItemClass = ShowerFixture;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Shower Drain\":\r\n relatedItemName = \"showerDrain\";\r\n RelatedItemClass = ShowerDrain;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Head\":\r\n relatedItemName = \"showerHead\";\r\n RelatedItemClass = ShowerHead;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Arm\":\r\n relatedItemName = \"showerArm\";\r\n RelatedItemClass = ShowerArm;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Shower Head Bundle\":\r\n relatedItemName = \"showerHeadBundle\";\r\n RelatedItemClass = ShowerHeadBundle;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Pony Wall Cap\":\r\n relatedItemName = \"ponyWallCap\";\r\n RelatedItemClass = PonyWallCap;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Pony Wall Glass\":\r\n relatedItemName = \"ponyWallGlass\";\r\n RelatedItemClass = PonyWallGlass;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Shower Screen\":\r\n relatedItemName = \"showerScreen\";\r\n RelatedItemClass = ShowerScreen;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Shower Glass\":\r\n if (!this.showerBody) {\r\n this.showerBody = new ShowerBody(true);\r\n this.relatedItems.push(this.showerBody);\r\n }\r\n relatedItemName = \"showerGlass\";\r\n RelatedItemClass = ShowerGlass;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n // case \"Shower Overlay\":\r\n // relatedItemName = \"showerOverlay\";\r\n // RelatedItemClass = ShowerOverlay;\r\n // relatedItemType = Shower.Type.Custom;\r\n // break;\r\n case \"Shower Body\":\r\n relatedItemName = \"showerBody\";\r\n RelatedItemClass = ShowerBody;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Tub Spout\":\r\n relatedItemName = \"tubSpout\";\r\n RelatedItemClass = TubSpout;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Hand Shower Kit\":\r\n relatedItemName = \"handShowerKit\";\r\n RelatedItemClass = HandShowerKit;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Curb\":\r\n relatedItemName = \"showerCurb\";\r\n RelatedItemClass = ShowerCurb;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Body Spray\":\r\n relatedItemName = \"bodySpray\";\r\n RelatedItemClass = BodySpray;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Diverter Trim\":\r\n case \"Diverter Only Trim\":\r\n relatedItemName = \"diverterTrim\";\r\n RelatedItemClass = DiverterTrim;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Hand Shower Holder\":\r\n relatedItemName = \"handShowerHolder\";\r\n RelatedItemClass = HandShowerHolder;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Hand Shower Only\":\r\n relatedItemName = \"handShowerOnly\";\r\n RelatedItemClass = HandShowerOnly;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Hose\":\r\n relatedItemName = \"showerHose\";\r\n RelatedItemClass = ShowerHose;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower System\":\r\n relatedItemName = \"showerSystem\";\r\n RelatedItemClass = ShowerSystem;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Trim Kit\":\r\n relatedItemName = \"showerTrimKit\";\r\n RelatedItemClass = ShowerTrimKit;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Valve Trim\":\r\n relatedItemName = \"valveTrim\";\r\n RelatedItemClass = ValveTrim;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Wall Union\":\r\n relatedItemName = \"wallUnion\";\r\n RelatedItemClass = WallUnion;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].type = relatedItemType;\r\n if (loadFeature) {\r\n this[relatedItemName].load(dbFeature);\r\n }\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setSpecificRules() {}\r\n\r\n // setLayers(layout, placeholdersNeeded) {\r\n // let res = [];\r\n // const relatedItems = this.getRelatedItems();\r\n // // console.log('relatedItems', relatedItems);\r\n // relatedItems.forEach(relatedItem => {\r\n // relatedItem.setLayers(layout);\r\n // });\r\n // if (this.showerDoor && !this.showerDoor.activeFeature) { // we need it cause shower door is relying on shPanCombo\r\n // this.showerDoor.setLayers(layout);\r\n // }\r\n // if (this.showerDoorHandle && !this.showerDoorHandle.activeFeature) {\r\n // this.showerDoorHandle.setLayers(layout);\r\n // }\r\n // relatedItems.forEach(relatedItem => {\r\n //\r\n // (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n // ? relatedItem.placeholderFeature.layer.addTo(res)\r\n // : relatedItem.activeFeature && relatedItem.activeFeature.layer ? relatedItem.activeFeature.layer.addTo(res) : null\r\n //\r\n // // NN(relatedItem.activeFeature, (activeFeature) => activeFeature.layer.addTo(res));\r\n //\r\n // if ((relatedItem instanceof ShowerBody || relatedItem instanceof ShowerInteriorWallAccent)\r\n // && relatedItem.activeFeatureParts && relatedItem.activeFeatureParts.length) {\r\n // relatedItem.activeFeatureParts.forEach((activeFeaturePart) => {\r\n // activeFeaturePart && !activeFeaturePart.disabled && activeFeaturePart.layer && activeFeaturePart.layer.addTo(res);\r\n // })\r\n // }\r\n // if (relatedItem instanceof ShowerWall && relatedItem.activeFeatureParts && relatedItem.placeholderChanged && relatedItem.activeFeatureParts.length) {\r\n // relatedItem.activeFeatureParts.forEach((activeFeaturePart) => {\r\n // activeFeaturePart && !activeFeaturePart.disabled && activeFeaturePart.layer && activeFeaturePart.layer.addTo(res);\r\n // })\r\n // }\r\n //\r\n // });\r\n //\r\n // return res.length ? res : null;\r\n // }\r\n\r\n subTypes() {\r\n return this.showerBody && (this.showerBody.features.some(showerBodyFeature => showerBodyFeature.type === 0)\r\n && this.showerBody.features.some(showerBodyFeature => showerBodyFeature.type === 1)) ? [\r\n Shower.Type.Custom,\r\n Shower.Type.Complete,\r\n ] : []\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return true;\r\n }\r\n\r\n activeSubType() {\r\n return this.activeSubType_;\r\n }\r\n\r\n handleSubTypeClick(subType, handleNavigationItemClick) {\r\n this.activeSubType_ = subType;\r\n this.showerBody.setDefault(); // set default custom shower\r\n if (handleNavigationItemClick) {\r\n handleNavigationItemClick(this.showerBody.navigationSubItems()[0]) // set default custom shower\r\n }\r\n }\r\n\r\n getRelatedItems() {\r\n const relatedItems = orderBy(this.relatedItems, 'layerPriority');\r\n if (this.showerTubComboIsActive()) {\r\n return relatedItems\r\n }\r\n return relatedItems.filter((relatedItem) => {\r\n return relatedItem.type === this.activeSubType_ || relatedItem.type === Shower.Type.All\r\n })\r\n }\r\n\r\n subParts() {\r\n // const activeShowerGroup = this.getActiveShowerGroup();\r\n // const ponyWallIsActive = activeShowerGroup.showerDimensions() === \"Pony\";\r\n return this.getRelatedItems()\r\n .filter(item => {\r\n // if (item.isPonyWallPart) {\r\n // item.visible = ponyWallIsActive\r\n // }\r\n return item.visible\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n // return filter(this.relatedItems, {visible: true}).map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n //\r\n // toggleShowerParts(disabled, keepLeftWall) {\r\n // this.getRelatedItems().forEach((relItem) => {\r\n // console.log('relItem', relItem);\r\n // if (\r\n // relItem.partId !== \"shower_wall\"\r\n // && relItem.partId !== \"shower_wall_accent\"\r\n // && relItem.partId !== \"shower_fixture\"\r\n // && relItem.partId !== \"shower_door\"\r\n // && relItem.partId !== \"shower_door_handle\"\r\n // && relItem.partId !== \"pony_wall\"\r\n // && relItem.partId !== \"pony_wall_cap\"\r\n // && relItem.partId !== \"pony_wall_glass\"\r\n // ) {\r\n // relItem.disabled = disabled;\r\n // }\r\n // });\r\n // if (!keepLeftWall) {\r\n // this.layout.parts.Walls.wallExL.disabled = disabled;\r\n // }\r\n // }\r\n\r\n setDefault(layout) {\r\n const relatedItems = orderBy(this.relatedItems, 'layerPriority');\r\n relatedItems.forEach(_ => _.setDefault(layout));\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n return this.subParts()[0]\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n /**\r\n * Gets the current shower size from metaValues.\r\n */\r\n showerSize() {\r\n if (this.showerTubComboIsActive()) {\r\n const showerTubCombo = this.getActiveShowerGroup();\r\n if (showerTubCombo) {\r\n const activeRelItem = showerTubCombo.relatedItems.find(featureGroup => featureGroup.partId === showerTubCombo.bottomTub)\r\n || showerTubCombo.replacementTub;\r\n if (activeRelItem && activeRelItem.activeFeature && activeRelItem.activeFeature.metaData[\"ShowerSize\"]) {\r\n return activeRelItem.activeFeature.metaData[\"ShowerSize\"][0]\r\n }\r\n }\r\n return null\r\n }\r\n if (this.showerPanCombo && this.showerPanCombo.activeFeature && this.showerPanCombo.activeFeature.metaData[\"ShowerSize\"]\r\n && this.showerPanCombo.activeFeature.matchesMetaForArrayOfConditions(this.showerPanCombo.getArrayOfConditions())) {\r\n return this.showerPanCombo.activeFeature.metaData[\"ShowerSize\"][0]\r\n }\r\n return null\r\n }\r\n\r\n /**\r\n * Gets the current shower dimensions from showerBody\r\n */\r\n showerDimensions() {\r\n if (!this.showerBody)\r\n return \"Full\";\r\n return this.showerBody.activeFeature ? this.showerBody.activeFeature.showerDimensions : null;\r\n // \"Full\" : \"Half\";\r\n }\r\n\r\n isComplete() {\r\n if (!this.showerBody) {\r\n return true;\r\n } else if (this.showerTubComboIsActive()) {\r\n return false;\r\n } else {\r\n return this.showerBody.activeFeature\r\n }\r\n }\r\n\r\n showerTubComboIsActive() {\r\n const comboPart = this.layout.parts[ShowerTubCombo.id];\r\n return comboPart && comboPart.showerTubComboIsActive\r\n }\r\n\r\n getActiveShowerGroup() { // user for taking sizes, etc...\r\n return this.showerTubComboIsActive() ? this.layout.parts[ShowerTubCombo.id] : this;\r\n }\r\n\r\n setShowerHeadType(showerHeadType, fromPartId = \"\") {\r\n this.shower_head_type = showerHeadType;\r\n\r\n let arrayToDisable = [];\r\n let arrayToEnable = [];\r\n switch (showerHeadType) {\r\n case ShowerHeadTypes.shower_head_bundle:\r\n arrayToDisable = [this.showerArm, this.showerHead, this.showerFixture, this.showerTrimKit, this.showerSystem];\r\n arrayToEnable = [this.showerHeadBundle];\r\n break;\r\n case ShowerHeadTypes.shower_arm:\r\n switch (fromPartId) {\r\n case \"shower_arm\":\r\n case \"shower_head\":\r\n arrayToEnable = [this.showerArm, this.showerHead, this.valveTrim];\r\n break;\r\n case \"shower_hose\":\r\n case \"wall_union\":\r\n case \"hand_shower_only\":\r\n case \"hand_shower_holder\":\r\n arrayToEnable = [this.handShowerHolder, this.handShowerOnly, this.wallUnion, this.showerHose];\r\n break;\r\n default:\r\n arrayToEnable = [this.showerArm, this.showerHead, this.wallUnion];\r\n break;\r\n }\r\n arrayToDisable = [this.showerHeadBundle, this.showerFixture, this.showerTrimKit, this.showerSystem];\r\n break;\r\n case ShowerHeadTypes.shower_trim_kit:\r\n arrayToDisable = [this.showerArm, this.showerHead, this.showerFixture, this.showerHeadBundle, this.showerSystem, this.wallUnion];\r\n arrayToEnable = [this.valveTrim, this.showerTrimKit];\r\n break;\r\n case ShowerHeadTypes.shower_system:\r\n arrayToDisable = [this.showerArm, this.showerHead, this.showerFixture, this.showerHeadBundle, this.showerTrimKit, this.wallUnion];\r\n arrayToEnable = [this.showerSystem];\r\n break;\r\n case ShowerHeadTypes.shower_fixture:\r\n arrayToDisable = [this.showerArm, this.showerHead, this.showerHeadBundle, this.showerTrimKit, this.wallUnion, this.showerHose, this.handShowerOnly, this.handShowerHolder];\r\n arrayToEnable = [this.showerFixture];\r\n break;\r\n default:\r\n break;\r\n }\r\n arrayToDisable.forEach(featureGroup => {\r\n if (featureGroup && !featureGroup.disabled) {\r\n featureGroup.disabled = true;\r\n }\r\n });\r\n arrayToEnable.forEach(featureGroup => {\r\n if (featureGroup && featureGroup.disabled && featureGroup.canBeEnabled()) {\r\n featureGroup.disabled = false;\r\n }\r\n });\r\n\r\n }\r\n\r\n setShowerHandType(showerType) {\r\n this.shower_hand_type = showerType;\r\n\r\n let arrayToDisable = [];\r\n let arrayToEnable = [];\r\n switch (showerType) {\r\n case ShowerHandTypes.hand_shower_kit:\r\n arrayToDisable = [this.handShowerHolder, this.handShowerOnly, this.showerHose];\r\n arrayToEnable = [this.handShowerKit];\r\n break;\r\n case ShowerHandTypes.hand_shower_holder:\r\n arrayToDisable = [this.handShowerKit];\r\n arrayToEnable = [this.handShowerHolder, this.handShowerOnly, this.showerHose];\r\n break;\r\n default:\r\n break;\r\n }\r\n arrayToDisable.forEach(featureGroup => {\r\n if (featureGroup && !featureGroup.disabled) {\r\n featureGroup.disabled = true;\r\n }\r\n });\r\n arrayToEnable.forEach(featureGroup => {\r\n if (featureGroup && featureGroup.disabled && featureGroup.canBeEnabled()) {\r\n featureGroup.disabled = false;\r\n }\r\n });\r\n\r\n }\r\n}\r\n\r\n","import * as types from \"./actionTypes\";\r\n\r\nexport const setGroheFiltersOpened = (filtersOpened = false) => ({\r\n type: types.SET_GROHE_FILTERS_OPENED,\r\n payload: {filtersOpened}\r\n});\r\n\r\nexport const setGroheSimilarFeature = (similarFeature = false) => ({\r\n type: types.SET_GROHE_SIMILAR_FEATURE,\r\n payload: {similarFeature}\r\n});\r\n\r\nexport const setGroheSimilarProductsOpened = (similarProductsOpened = false) => ({\r\n type: types.SET_GROHE_SIMILAR_PRODUCTS_OPENED,\r\n payload: {similarProductsOpened}\r\n});\r\n\r\nexport const setGroheRequiredButNotIncludedFeature = (requiredButNotIncludedFeature= false) => ({\r\n type: types.SET_GROHE_REQUIRED_BUT_NOT_INCLUDED_FEATURE,\r\n payload: {requiredButNotIncludedFeature}\r\n});\r\n\r\nexport const setGroheFiltersSearchText = (groheFiltersSearchText = \"\") => ({\r\n type: types.SET_GROHE_FILTERS_SEARCH_TEXT,\r\n payload: {groheFiltersSearchText}\r\n});\r\n\r\nexport const setLastOpenedCategory = (lastOpenedCategory = \"\") => ({\r\n type: types.SET_GROHE_LAST_OPENED_CATEGORY,\r\n payload: {lastOpenedCategory}\r\n});\r\n\r\nexport const setGroheSubCategoryOpened = (subCategoryOpened = \"\") => ({\r\n type: types.SET_GROHE_SUB_CATEGORY_OPENED,\r\n payload: {subCategoryOpened}\r\n});\r\n\r\nexport const setShowAddedToTheCartSuccess = (showAddedToTheCartSuccess = \"\") => ({\r\n type: types.SET_GROHE_SHOW_ADDED_TO_THE_CART_SUCCESS,\r\n payload: {showAddedToTheCartSuccess}\r\n});\r\n\r\nexport const setGroheActiveFeatureQuantity = (groheActiveFeatureQuantity = \"\") => ({\r\n type: types.SET_GROHE_ACTIVE_FEATURE_QUANTITY,\r\n payload: {groheActiveFeatureQuantity}\r\n});\r\n\r\nexport const setGroheShareButtonsOpened = (groheShareButtonsOpened = \"\") => ({\r\n type: types.SET_GROHE_SHARE_BUTTONS_OPENED,\r\n payload: {groheShareButtonsOpened}\r\n});\r\n\r\nexport const setGroheSameColorActiveFeature = (groheSameColorActiveFeature = \"\") => ({\r\n type: types.SET_GROHE_SAME_COLOR_ACTIVE_FEATURE,\r\n payload: {groheSameColorActiveFeature}\r\n});\r\n\r\nexport const setGroheSameColorSectionOpened = (groheSameColorSectionOpened = \"\") => ({\r\n type: types.SET_GROHE_SAME_COLOR_SECTION_OPENED,\r\n payload: {groheSameColorSectionOpened}\r\n});\r\n\r\nexport const setGroheSameColorCheckboxApplied = (groheSameColorCheckboxApplied = \"\") => ({\r\n type: types.SET_GROHE_SAME_COLOR_CHECKBOX_APPLIED,\r\n payload: {groheSameColorCheckboxApplied}\r\n});\r\n\r\nexport const setExisingTempId = (exisingTempId = \"\") => ({\r\n type: types.SET_GROHE_EXISTING_TEMP_ID,\r\n payload: {exisingTempId}\r\n});\r\n","import $ from 'jquery';\r\nimport Config from '../config';\r\nimport {PhoneNumberUtil} from 'google-libphonenumber';\r\n\r\nexport default {\r\n bgImageUrl: function (imageUrl) {\r\n return 'url(\"' + imageUrl + '\")';\r\n },\r\n splitFilter: function (filter) {\r\n const res = {};\r\n filter.split('&').forEach(function (pair) {\r\n const ar = pair.split('=');\r\n res[ar[0]] = ar[1];\r\n });\r\n return res;\r\n },\r\n keysAndProps: function (obj) {\r\n const res = Object.keys(obj);\r\n console.log(res);\r\n for (let key in res) {\r\n const prop = obj[key];\r\n if (Array.isArray(prop)) {\r\n res.push(prop);\r\n }\r\n }\r\n\r\n return res;\r\n },\r\n isObject: function (val) {\r\n if (val === null) {\r\n return false;\r\n }\r\n return ( (typeof val === 'function') || (typeof val === 'object') );\r\n },\r\n\r\n imagePathCache: {},\r\n imagePath: function (image) {\r\n let path = this.imagePathCache[image];\r\n if (!path) {\r\n path =(Config.kioskStandAlone || document.kvConfig.dev ? './' : '/content/Views/kv/') + image;\r\n this.imagePathCache[image] = path;\r\n }\r\n\r\n return path;\r\n },\r\n /**\r\n * return the path without last part which is supposelly the file name\r\n * @param {string} path\r\n * @param {int} [count=1]\r\n */\r\n pathPrefix: function (path, count) {\r\n count = count || 1;\r\n while (count-- > 0) {\r\n const index = path.lastIndexOf(\"/\");\r\n if (index === -1) {\r\n return path;\r\n }\r\n\r\n path = path.substr(0, index);\r\n }\r\n\r\n return path;\r\n },\r\n\r\n /**\r\n * Converts a string to a boolean value\r\n * @param value\r\n */\r\n toBoolean: function (value) {\r\n if (typeof (value) === 'string') {\r\n value = value.toLowerCase();\r\n }\r\n switch (value) {\r\n case true:\r\n case \"true\":\r\n case 1:\r\n case \"1\":\r\n case \"on\":\r\n case \"yes\":\r\n return true;\r\n default:\r\n return false;\r\n }\r\n },\r\n\r\n convertKeysToCamelCase: function (obj) {\r\n if (!obj || typeof obj !== \"object\") {\r\n return null;\r\n }\r\n\r\n if (obj instanceof Array) {\r\n return $.map(obj, function (value) {\r\n return this.convertKeysToCamelCase(value);\r\n });\r\n }\r\n\r\n const newObj = {};\r\n $.each(obj, function (key, value) {\r\n key = key.charAt(0).toLowerCase() + key.slice(1);\r\n newObj[key] = value;\r\n });\r\n\r\n return newObj;\r\n },\r\n toCamel: function (o) {\r\n let build, key, destKey, value;\r\n\r\n if (o instanceof Array) {\r\n build = [];\r\n for (key in o) {\r\n value = o[key];\r\n\r\n if (typeof value === \"object\") {\r\n value = this.toCamel(value);\r\n }\r\n build.push(value);\r\n }\r\n } else {\r\n build = {};\r\n for (key in o) {\r\n if (o.hasOwnProperty(key)) {\r\n destKey = (key.charAt(0).toLowerCase() + key.slice(1) || key).toString();\r\n value = o[key];\r\n if (value !== null && typeof value === \"object\") {\r\n value = this.toCamel(value);\r\n }\r\n\r\n build[destKey] = value;\r\n }\r\n }\r\n }\r\n return build;\r\n },\r\n ignoreDefault: function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n //e.nativeEvent.stopImmediatePropagation();\r\n },\r\n\r\n ignore: function (e, cb) {\r\n this.ignoreDefault(e);\r\n cb();\r\n },\r\n\r\n\r\n playVideo: function (id) {\r\n ///TODO: When Girl videos are updated remove \"|| true\"\r\n if (!document.kvConfig.kioskMode || Config.isQTEmbedded() || true) {\r\n return;\r\n }\r\n const $guide = $(id);\r\n if (!$guide.length) {\r\n return;\r\n }\r\n const guide = $guide[0];\r\n $guide.off('canplaythrough').on('canplaythrough', function () {\r\n $guide.show();\r\n guide.play();\r\n });\r\n guide.load();\r\n },\r\n hideVideo: function (id) {\r\n const $guide = $(id);\r\n if (!$guide.length) {\r\n return;\r\n }\r\n const guide = $guide[0];\r\n $guide.hide();\r\n guide.pause();\r\n },\r\n getIntroVideo: function (view) {\r\n const path = Config.kioskStandAlone ? \"./videos/video_guide/\" : 'https://s3.amazonaws.com/intro-videos/';\r\n switch (view) {\r\n case 'review':\r\n return path + 'Visualizer-Tools-Totals-25M.webm';\r\n case 'intro':\r\n return path + 'Kitchen-Visualizer-25M.webm';\r\n default:\r\n return '';\r\n }\r\n },\r\n exportCanvasAsPNG: function (canvasElement, fileName) {\r\n const MIME_TYPE = \"image/png\";\r\n let imgURL = canvasElement.toDataURL(MIME_TYPE);\r\n\r\n /* Change MIME type to trick the browser to download the file instead of displaying it */\r\n imgURL = imgURL.replace(/^data:image\\/[^;]*/, 'data:application/octet-stream');\r\n /* In addition to 's \"download\" attribute, you can define HTTP-style headers */\r\n //imgURL = imgURL.replace(/^data:application\\/octet-stream/, 'data:application/octet-stream;headers=Content-Disposition%3A%20attachment%3B%20filename=' + fileName);\r\n\r\n const dlLink = document.createElement('a');\r\n dlLink.download = fileName;\r\n dlLink.href = imgURL;\r\n dlLink.dataset.downloadurl = [MIME_TYPE, dlLink.download, dlLink.href].join(':');\r\n\r\n document.body.appendChild(dlLink);\r\n dlLink.click();\r\n document.body.removeChild(dlLink);\r\n },\r\n monads: {\r\n ifNotNull: function (o, notNullCallback) {\r\n if (o) {\r\n return notNullCallback(o);\r\n }\r\n\r\n return null;\r\n }\r\n },\r\n pnpoly: function( points, test ) {\r\n var i, j, c = false;\r\n for( i = 0, j = points.length-1; i < points.length; j = i++ ) {\r\n if( ( ( points[i].y > test.y ) != ( points[j].y > test.y ) ) &&\r\n ( test.x < ( points[j].x - points[i].x ) * ( test.y - points[i].y ) / ( points[j].y - points[i].y ) + points[i].x ) ) {\r\n c = !c;\r\n }\r\n }\r\n return c;\r\n },\r\n isEmail: function (email) {\r\n if (!email || email.indexOf('@') === -1) {\r\n return false;\r\n }\r\n\r\n // eslint-disable-next-line no-useless-escape\r\n const re = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/i;\r\n return re.test(email);\r\n },\r\n isZip: function (zip) {\r\n const regex = /[a-zA-Z0-9][a-zA-Z0-9\\- ]{0,10}[a-zA-Z0-9]/;\r\n // const regex = /(^\\d{5}(?:[\\s]?[-\\s][\\s]?\\d{4})?$)/; // this on can not support H3H 2H2, which is real Quebec code\r\n return regex.test(zip);\r\n },\r\n // isPhoneNumber: function (phone) {\r\n // if (!phone) {\r\n // return false;\r\n // }\r\n // const count = phone.replace(/[^0-9]/g, \"\").length;\r\n // return count === 10 || count === 11;\r\n // },\r\n isPhoneNumber: function (phone, region) {\r\n region = region || \"US\";\r\n const phoneUtil = PhoneNumberUtil.getInstance();\r\n try {\r\n if (phone) {\r\n const parsedPhone = phoneUtil.parse(phone, region);\r\n return phoneUtil.isPossibleNumber(parsedPhone) && phoneUtil.isValidNumberForRegion(parsedPhone, region); // /^\\+?\\d{10,16}$/.test(phone);\r\n }\r\n return false;\r\n } catch(ex) {\r\n return false;\r\n }\r\n },\r\n getPhoneFormatted: (phone, region) => {\r\n region = region || \"US\";\r\n const phoneUtil = PhoneNumberUtil.getInstance();\r\n try {\r\n if (phone) {\r\n const parsedPhone = phoneUtil.parse(phone, region);\r\n return phoneUtil.formatInOriginalFormat(parsedPhone, region);\r\n }\r\n } catch(ex) {\r\n console.log(ex);\r\n }\r\n return phone;\r\n },\r\n getUserPhoneSplitted: (phone, oldCountry = \"\") => {\r\n const googlePhouneUtilInstance = PhoneNumberUtil.getInstance();\r\n if (Config.isDevMode()) {\r\n console.log(\"googlePhouneUtilInstance\", googlePhouneUtilInstance);\r\n }\r\n const allRegions = googlePhouneUtilInstance.getSupportedRegions();\r\n // console.log(\"allRegions\", allRegions);\r\n try {\r\n const parsedPhone = googlePhouneUtilInstance.parse(phone);\r\n // if (Config.isDevMode()) {\r\n // console.log(\"parsedPhone\", parsedPhone);\r\n // }\r\n const phoneCountry = oldCountry && allRegions.includes(oldCountry)\r\n && googlePhouneUtilInstance.isValidNumberForRegion(parsedPhone, oldCountry)\r\n ? oldCountry\r\n : allRegions.find(regionCode => googlePhouneUtilInstance.isValidNumberForRegion(parsedPhone, regionCode)) || \"\"\r\n // console.log(\"phoneCountry\", phoneCountry);\r\n return {\r\n country: {\r\n dialCode: \"\" + parsedPhone.getCountryCode(),\r\n iso2: phoneCountry.toLowerCase()\r\n },\r\n phoneNumber: \"\" + parsedPhone.getNationalNumber() // we keep it as as string\r\n }\r\n } catch (ex) {\r\n if (Config.isDevMode()) {\r\n console.log(\"couldn't parse the phone\", phone);\r\n }\r\n }\r\n const phoneSplitted = phone ? phone.match(/(\\+(\\d.*?)\\s)?(.*)/) : [];\r\n return {\r\n phoneNumber: phoneSplitted[3] || phone || \"\"\r\n }\r\n },\r\n parseUserResponse: function(responseData, oldCountry = \"\") {\r\n const {phoneNumber, country} = this.getUserPhoneSplitted(responseData.values.phone, oldCountry || responseData.values.country || \"\");\r\n const newUserInfo = {\r\n email: responseData.email,\r\n firstName: responseData.values.firstName,\r\n lastName: responseData.values.lastName,\r\n phoneNumber,\r\n postal: responseData.values.postal,\r\n isNew: false,\r\n password: \"\"\r\n };\r\n if (country) {\r\n newUserInfo.country = country;\r\n }\r\n [\"address1\", \"address2\", \"firstName\", \"lastName\", \"postal\", \"city\", \"provence\"].forEach(key => {\r\n if (responseData.values && responseData.values[key]) {\r\n const realKey = (key === \"provence\") ? \"state\" : key;\r\n newUserInfo[realKey] = responseData.values[key] === \"N/A\" ? \"\" : responseData.values[key]\r\n }\r\n })\r\n return newUserInfo\r\n },\r\n parseShippingAndBillingResponse: function(responseData) {\r\n const {billingAddress, shippingAddress, billingSameAsShipping} = responseData;\r\n return {\r\n shippingAddress: {\r\n fullName: shippingAddress ? shippingAddress.name : \"\",\r\n address1: shippingAddress ? shippingAddress.address1 : \"\",\r\n address2: shippingAddress ? shippingAddress.address2 : \"\",\r\n city: shippingAddress ? shippingAddress.city : \"\",\r\n state: shippingAddress ? shippingAddress.state : \"\",\r\n postal: shippingAddress ? shippingAddress.zip : \"\"\r\n },\r\n billingAddress: {\r\n fullName: billingAddress ? billingAddress.name : \"\",\r\n address1: billingAddress ? billingAddress.address1 : \"\",\r\n address2: billingAddress ? billingAddress.address2 : \"\",\r\n city: billingAddress ? billingAddress.city : \"\",\r\n state: billingAddress ? billingAddress.state : \"\",\r\n postal: billingAddress ? billingAddress.zip : \"\"\r\n },\r\n billingSameAsShipping: !!billingSameAsShipping, // in case it comes undefined\r\n }\r\n },\r\n isMobile: () => {\r\n return (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent)\r\n // eslint-disable-next-line no-useless-escape\r\n || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(navigator.userAgent.substr(0, 4)))\r\n },\r\n getRandomInt(min, max) {\r\n return Math.floor(Math.random() * (max - min)) + min;\r\n },\r\n /**\r\n * Checks input value on errors, returns all errors array\r\n * @param currentValue {string|number}\r\n * @param property {string}\r\n * @param fabricatorData {object}\r\n * @returns {array}\r\n */\r\n getValidationErrors(currentValue, property, fabricatorData) {\r\n const errors = [];\r\n\r\n if (fabricatorData.isCaesarStone) {\r\n switch (property) {\r\n case \"lastName\": {\r\n if (!currentValue) {\r\n errors.push(\"assignPopup.errors.fieldRequired\");\r\n return errors\r\n }\r\n if (currentValue.length === 1) {\r\n errors.push(\"assignPopup.errors.shortName\");\r\n } else if (currentValue.length > 50) {\r\n errors.push(\"assignPopup.errors.longName\");\r\n }\r\n if (!/^[A-Z\\s\\'\\-\\&\\.a-z]+$/.test(currentValue)) {\r\n errors.push(\"assignPopup.errors.nameIsIncorrect\");\r\n }\r\n break;\r\n }\r\n case \"city\":\r\n case \"state\": {\r\n if (!currentValue) {\r\n errors.push(\"assignPopup.errors.fieldRequired\");\r\n return errors\r\n }\r\n break;\r\n }\r\n }\r\n return errors\r\n }\r\n\r\n switch (property) {\r\n case \"firstName\": {\r\n if (!currentValue) {\r\n errors.push(\"assignPopup.errors.fieldRequired\");\r\n return errors\r\n }\r\n if (currentValue.length === 1) {\r\n errors.push(\"assignPopup.errors.shortName\");\r\n } else if (currentValue.length > 50) {\r\n errors.push(\"assignPopup.errors.longName\");\r\n }\r\n if (!/^[A-Z\\s\\'\\-\\&\\.a-z]+$/.test(currentValue)) {\r\n errors.push(\"assignPopup.errors.nameIsIncorrect\");\r\n }\r\n break;\r\n }\r\n case \"email\": {\r\n if (!currentValue) {\r\n errors.push(\"assignPopup.errors.fieldRequired\");\r\n return errors\r\n }\r\n if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(currentValue)) {\r\n errors.push(\"assignPopup.errors.invalidEmail\");\r\n }\r\n break;\r\n }\r\n case \"phoneNumber\": {\r\n if (!currentValue) {\r\n errors.push(\"assignPopup.errors.fieldRequired\");\r\n return errors\r\n }\r\n // we have another check, isPhoneNumber\r\n // if (!/^[\\+]?[(]?[0-9]{3}[)]?[-\\s\\.]?[0-9]{3}[-\\s\\.]?[0-9]{4,6}$/.test(currentValue)) {\r\n // errors.push(\"assignPopup.errors.invalidEmail\");\r\n // }\r\n break;\r\n }\r\n case \"postal\": {\r\n if (!currentValue) {\r\n errors.push(\"assignPopup.errors.fieldRequired\");\r\n return errors\r\n }\r\n if (!this.isZip(currentValue)) {\r\n errors.push(\"assignPopup.errors.incorrectPostal\");\r\n return errors\r\n }\r\n break;\r\n }\r\n case \"phone2\": {\r\n if (currentValue.length > 20) {\r\n errors.push(\"assignPopup.errors.phoneNumberIsTooLong\");\r\n }\r\n break;\r\n }\r\n }\r\n return errors\r\n },\r\n hasErrors: (errorsObject) => {\r\n return !!(Object.keys(errorsObject).length && Object.keys(errorsObject).some(key => errorsObject[key] && errorsObject[key].length))\r\n },\r\n textSubStringEllipsis: (text, length) => {\r\n if (!text || !length || (text.length < length)) {\r\n return text || \"\"\r\n }\r\n return text.substring(0, length) + \"...\"\r\n },\r\n getUrlFromString: (text) => {\r\n if (!text) {\r\n return \"\"\r\n }\r\n return text.toLowerCase().replace(/ /g, \"-\")\r\n }\r\n};\r\n\r\n","import {hashHistory} from \"react-router\";\r\n\r\nimport store from \"../store\";\r\nimport * as types from \"../actions/actionTypes\";\r\nimport {\r\n hideUserPopup,\r\n changeMessageBoxState,\r\n} from \"../actions/actionFunctions\";\r\nimport {\r\n setAfterContractSignCallback\r\n} from \"../actions/contractsActions\";\r\nimport {loaderDisable, loaderEnable} from \"../bvcomponents/ui/loaderView\";\r\nimport JsonApi from \"./jsonApi\";\r\nimport {IS_OFFLINE_MODE} from \"../config\";\r\nimport {shouldUseContractSigning} from \"../bvcomponents/popups/contractSign/contractsFunctions\";\r\nimport {ROUTES} from \"../routes\";\r\n\r\nconst _checkNetworkErrorMessage = (message) => {\r\n // includes, because it can be \"Network Error\" or \"Server Error: Error: Network Error\"\r\n return message && (message === \"Network Error\" || (message.includes && message.includes(\"Network Error\"))\r\n || (message.message && message.message.includes(\"Network Error\"))) && IS_OFFLINE_MODE\r\n}\r\n\r\n/**\r\n * renderErrorPopup can display retry connection and sign contract buttons\r\n * @param message {string}\r\n * @param title {string}\r\n * @param retryConnectionFunction {function}\r\n * @param showContractSignOnError {boolean}\r\n * @param closeButtonCallback {function}\r\n * @param afterContractSignCallback {function}\r\n */\r\nexport const renderErrorPopup = (message,\r\n title = \"messageBox.defaultTitle\",\r\n retryConnectionFunction = null,\r\n showContractSignOnError = false,\r\n closeButtonCallback = null,\r\n afterContractSignCallback = null) => {\r\n if (_checkNetworkErrorMessage(message)) {\r\n message = \"noInternetText\";\r\n title = \"noInternetTitle\";\r\n }\r\n const closeMessageBox = () => {\r\n store.dispatch(changeMessageBoxState({\r\n visible: false,\r\n }));\r\n }\r\n const buttons = [{\r\n text: message === \"noInternetText\" ? \"messageBox.closeButton\" : \"messageBox.buttonOk\",\r\n color: message === \"noInternetText\" ? \"blue\" : \"red\",\r\n click: () => {\r\n closeMessageBox();\r\n if (closeButtonCallback) {\r\n closeButtonCallback()\r\n }\r\n }\r\n }];\r\n if (message === \"noInternetText\") {\r\n if (showContractSignOnError) {\r\n const {fabricatorState, contractSigningState} = store.getState();\r\n const needContractSignDocument = IS_OFFLINE_MODE\r\n && shouldUseContractSigning(fabricatorState.settings, contractSigningState.contractsList);\r\n if (needContractSignDocument) {\r\n buttons.push({\r\n text: \"messageBox.fillContract\",\r\n color: \"green\",\r\n click: () => {\r\n closeMessageBox();\r\n // store.dispatch(showContractSigning(true, () => {}));\r\n if (afterContractSignCallback) {\r\n store.dispatch(setAfterContractSignCallback(afterContractSignCallback))\r\n }\r\n hashHistory.push(ROUTES.contract);\r\n }\r\n })\r\n }\r\n }\r\n if (retryConnectionFunction) {\r\n buttons.push({\r\n text: \"messageBox.retryConnection\",\r\n color: \"green\",\r\n click: () => {\r\n closeMessageBox();\r\n retryConnectionFunction();\r\n }\r\n })\r\n }\r\n }\r\n store.dispatch({\r\n type: types.CHANGE_MESSAGE_BOX,\r\n payload: {\r\n visible: true,\r\n title,\r\n message,\r\n error: message !== \"noInternetText\",\r\n newStyles: true,\r\n buttons\r\n }\r\n });\r\n};\r\n\r\nexport const renderMessagePopup = (message) => {\r\n let title = \"messageBox.defaultTitle\";\r\n if (_checkNetworkErrorMessage(message)) {\r\n message = \"noInternetText\";\r\n title = \"noInternetTitle\";\r\n }\r\n store.dispatch({\r\n type: types.CHANGE_MESSAGE_BOX,\r\n payload: {\r\n visible: true,\r\n title,\r\n message,\r\n error: false,\r\n inline: false,\r\n buttons: [{\r\n text: \"messageBox.buttonOk\",\r\n color: \"blue\",\r\n click: () => {\r\n store.dispatch({\r\n type: types.CHANGE_MESSAGE_BOX,\r\n payload: {\r\n visible: false,\r\n }\r\n });\r\n }\r\n }]\r\n }\r\n });\r\n};\r\n\r\nexport const renderAccountNotActivatedErrorPopup = (message, email) => {\r\n store.dispatch({\r\n type: types.CHANGE_MESSAGE_BOX,\r\n payload: {\r\n visible: true,\r\n message,\r\n error: true,\r\n inline: false,\r\n buttons: [{\r\n text: \"userPopup.messageBox.resendActivationEmailText\",\r\n color: \"green\",\r\n click: () => {\r\n store.dispatch(hideUserPopup());\r\n loaderEnable(\"loader.resendActivationLinkText\");\r\n JsonApi.resendActivationEmail(email)\r\n .then(() => {\r\n loaderDisable();\r\n renderMessagePopup(\"userPopup.messageBox.resendActivationEmailSuccess\");\r\n });\r\n }\r\n }, {\r\n text: \"messageBox.buttonOk\",\r\n color: \"red\",\r\n click: () => {\r\n store.dispatch(hideUserPopup());\r\n }\r\n }]\r\n }\r\n })\r\n};\r\n\r\nexport const renderConfirmPopup = (confirmPopupType, tag, confirmPopupOpened = true) => {\r\n store.dispatch({\r\n type: types.TOGGLE_CONFIRM_POPUP,\r\n payload: {\r\n confirmPopupOpened,\r\n confirmPopupType,\r\n confirmPopupTag: {...tag}\r\n }\r\n });\r\n};\r\n","import workspace from \"../components/canvas/core/workspace\";\r\n//import {updateCurrentQuote} from \"../../../../../misc/quotesFunctions\";\r\nimport {\r\n getCurrentQuoteRoomCartItem,\r\n getRoomCartItemForCategoryName\r\n} from \"../../../misc/categorySwitchingFunctions\";\r\nimport store from \"../../../store\";\r\nimport {setActiveQuoteIndex, setQuotes} from \"../../../actions/roomsFunctions\";\r\nimport {addToCart, changeCartFeature, removeFromCart} from \"../../../actions/actionFunctions\";\r\nimport {prepareSQFTData} from \"../components/canvas/core/workspace/workspaceDataMapper\";\r\nimport {getFeatureGroup, getNavItems, onSQFTLoadImport, onSQFTLoadPrepareData} from \"./sqftHelperUi\";\r\nimport {ACTIVE_ROOM_TYPE} from \"../../../reducers/sqftMenuReducer\";\r\nimport {\r\n setSQFTActiveRoomId,\r\n setSQFTActiveRoomIndex,\r\n setSQFTActiveRoomType\r\n} from \"../../../actions/sqftMenuFunctions\";\r\nimport {getRoomNameInQuote} from \"../../popups/sqftFeaturesPopup/parseSqftData\";\r\nimport {getQtCategoryName} from \"../../visComponents/qtCategoryName\";\r\nimport {getStringFeatureName} from \"../../../misc/helpers\";\r\nimport {MEASURE_UNITS, PARENT_KEYS_WITH_COMBINED_FEATURES_IN_CART} from \"../constants\";\r\n\r\n/**\r\n *\r\n */\r\nexport const getQtCatName = () => {\r\n const reduxState = store.getState();\r\n const {activeRoomType} = reduxState.sqftMenuState;\r\n const {qtActiveCategory} = reduxState.qtState;\r\n const {activeRoomId} = reduxState.sqftMenuState;\r\n const {activeQuoteIndex} = reduxState.quotesState;\r\n const fabricatorData = reduxState.fabricatorState;\r\n const intl = workspace.intl;\r\n\r\n let switcherTitle;\r\n let roomNavItem;\r\n\r\n switch (activeRoomType) {\r\n case ACTIVE_ROOM_TYPE.quote:\r\n switcherTitle = getRoomNameInQuote(activeQuoteIndex);\r\n break;\r\n case ACTIVE_ROOM_TYPE.category:\r\n switcherTitle = getQtCategoryName(qtActiveCategory, intl, fabricatorData)\r\n break;\r\n case ACTIVE_ROOM_TYPE.roomGroup:\r\n roomNavItem = getRoomGroupById(activeRoomId);\r\n if (!roomNavItem) {\r\n switcherTitle = \"\"\r\n } else {\r\n switcherTitle = getStringFeatureName(roomNavItem.part, intl.messages, intl.locale, fabricatorData);\r\n }\r\n break;\r\n }\r\n\r\n return switcherTitle;\r\n}\r\n/**\r\n * @param qtCatName string\r\n */\r\nexport const isQuoteByQTCatNameEqualToCurrentQuote = (qtCatName) => {\r\n const state = store.getState();\r\n const quotes = state.quotesState.quotes;\r\n const activeQuoteIndex = state.quotesState.activeQuoteIndex;\r\n const quote = getQuoteByRoomName(qtCatName);\r\n let newQuoteIndex = quotes.indexOf(quote);\r\n newQuoteIndex = newQuoteIndex < 0 ? 0 : newQuoteIndex\r\n\r\n return activeQuoteIndex === newQuoteIndex\r\n}\r\n/**\r\n * @param qtCatName string\r\n */\r\nexport const loadQuoteByQtCatName = async (qtCatName) => {\r\n const state = store.getState();\r\n const quotes = state.quotesState.quotes;\r\n const quote = getQuoteByRoomName(qtCatName);\r\n let quoteIndex = quotes.indexOf(quote);\r\n quoteIndex = quoteIndex < 0 ? 0 : quoteIndex\r\n\r\n store.dispatch(setActiveQuoteIndex(quoteIndex));\r\n //await setNewActiveQuote(quoteIndex, quotes);\r\n loadActiveQuoteToSQFT().then();\r\n\r\n //todo fix error if quote is null\r\n store.dispatch(setSQFTActiveRoomId(qtCatName));\r\n store.dispatch(setSQFTActiveRoomIndex(null)); //todo if this is critical (set active room in qtCategory switcher)\r\n store.dispatch(setSQFTActiveRoomType(ACTIVE_ROOM_TYPE.quote));\r\n}\r\n\r\n\r\n/**\r\n * load quotes[activeQuoteIndex] to workspace\r\n */\r\nexport const getQuoteByRoomName = (roomName) => {\r\n const state = store.getState();\r\n const quotes = state.quotesState.quotes;\r\n return quotes.find((quote, index) => {\r\n const quoteByQtCatName = quote.qtCatName === roomName.trim().toLowerCase();\r\n const roomNameInQuote = getRoomNameInQuote(index);\r\n const quoteByRoomName = roomNameInQuote.trim().toLowerCase() === roomName.trim().toLowerCase();\r\n\r\n return quoteByQtCatName || quoteByRoomName\r\n });\r\n}\r\n\r\n/**\r\n * load quotes[activeQuoteIndex] to workspace\r\n */\r\nexport const loadActiveQuoteToSQFT = async () => {\r\n let payload = onSQFTLoadPrepareData();\r\n onSQFTLoadImport(payload);\r\n}\r\n\r\n/**\r\n * Checking type of current room and creates new or updating existing quote\r\n * @param sqftCalcData {object}\r\n */\r\nexport const saveSQFTDataToQuote = async (sqftCalcData = null) => {\r\n const state = store.getState();\r\n const activeRoomType = state.sqftMenuState.activeRoomType;\r\n const qtActiveCategory = state.qtState.qtActiveCategory;\r\n const activeRoomId = state.sqftMenuState.activeRoomId;\r\n const cartItems = state.cartState.cartItems;\r\n const activeRoomIndex = state.sqftMenuState.activeRoomIndex;\r\n\r\n if (activeRoomType === ACTIVE_ROOM_TYPE.category) {\r\n await createQuoteIfNotExistOrUpdateCurrent(qtActiveCategory.trim().toLowerCase());\r\n } else if (activeRoomType === ACTIVE_ROOM_TYPE.roomGroup) {\r\n //const roomNavItem = getRoomGroupById(activeRoomId);\r\n //const roomNavItemName = roomNavItem.part.partName.trim().toLowerCase();\r\n await createQuoteIfNotExistOrUpdateCurrent(activeRoomId);\r\n } else {\r\n if (!sqftCalcData) {\r\n sqftCalcData = await prepareSQFTData();\r\n console.log(\"sqft prepared data\", sqftCalcData);\r\n }\r\n updateActiveQuoteWithSQFTData(sqftCalcData);\r\n const quoteRoomCartItem = getCurrentQuoteRoomCartItem(cartItems, activeRoomIndex);\r\n if (!quoteRoomCartItem) {\r\n addRoomToCart(getQtCatName());\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Update specific quote with sqFtCalcData by given index\r\n */\r\nexport const updateQuoteWithSQFTData = (data, quoteIndex) => {\r\n const state = store.getState();\r\n const { quotes } = state.quotesState;\r\n\r\n const newQuotes = quotes.map((quote, qIndex) => {\r\n if (qIndex === quoteIndex) {\r\n return {\r\n ...quote,\r\n sqFtCalcData: { ...data }\r\n };\r\n }\r\n return quote;\r\n });\r\n\r\n store.dispatch(setQuotes(newQuotes));\r\n};\r\n\r\n/**\r\n * Update active quote with sqFtCalcData\r\n */\r\nexport const updateActiveQuoteWithSQFTData = (data) => {\r\n const state = store.getState();\r\n const { activeQuoteIndex } = state.quotesState;\r\n\r\n updateQuoteWithSQFTData(data, activeQuoteIndex);\r\n};\r\n\r\nexport const getSQFTIdsFromAllParentLists = (parentsLists) => {\r\n const SQFTIds = [];\r\n parentsLists.forEach(parentsList => {\r\n Object.keys(parentsList).forEach(parentKey => {\r\n if (!parentsList[parentKey] || !parentsList[parentKey].features) {\r\n return\r\n }\r\n let sqftFeatures = parentsList[parentKey].features;\r\n if (sqftFeatures && sqftFeatures.length) {\r\n sqftFeatures.forEach(sqftFeature => {\r\n SQFTIds.push(sqftFeature.sqftId)\r\n })\r\n }\r\n })\r\n })\r\n\r\n return SQFTIds\r\n}\r\n\r\n/**\r\n */\r\nexport const deleteCartItemsThatAreMissingInParentLists = (parentsLists, cartItems) => {\r\n const sqftIds = getSQFTIdsFromAllParentLists(parentsLists);\r\n const itemsToRemove = cartItems.filter(cItem => cItem.sqftId && !sqftIds.includes(cItem.sqftId));\r\n\r\n itemsToRemove.forEach(cItem => {\r\n store.dispatch(removeFromCart(cItem));\r\n });\r\n};\r\n\r\n/**\r\n * This will return string ids\r\n * @param SQFTCalcData\r\n * @return {[]}\r\n */\r\nexport const getSQFTIdsFromSQFTCalcData = (SQFTCalcData) => {\r\n if (SQFTCalcData) {\r\n const SQFTIds = [];\r\n SQFTCalcData.countertops.forEach(countertop => {\r\n SQFTIds.push(countertop.id.toString());\r\n })\r\n\r\n return SQFTIds\r\n }\r\n}\r\n\r\n/**\r\n */\r\nexport const deleteCartItemsThatAreMissingInSQFTCalcData = () => {\r\n const state = store.getState();\r\n const cartItems = state.cartState.cartItems;\r\n const fabricatorSettings = state.fabricatorState.settings;\r\n const quotes = state.quotesState.quotes;\r\n\r\n quotes.forEach((quote, quoteIndex) => {\r\n if (quote.sqFtCalcData) {\r\n const sqftIds = getSQFTIdsFromSQFTCalcData(quote.sqFtCalcData);\r\n\r\n cartItems\r\n .filter(cItem => cItem.currentQuote === quoteIndex)\r\n .forEach(cItem => {\r\n if (cItem.sqftQuantities) {\r\n const updatedQuantities = { ...cItem.sqftQuantities };\r\n\r\n // remove sqftIds from sqftQuantities that are not in the SQFTCalcData\r\n Object.keys(updatedQuantities).forEach(sqftId => {\r\n if (!sqftIds.includes(sqftId)) {\r\n delete updatedQuantities[sqftId];\r\n }\r\n });\r\n\r\n let newQuantity = Object.values(updatedQuantities).reduce((sum, qty) => sum + qty, 0);\r\n // The deleteCartItemsThatAreMissingInSQFTCalcData functionality is linked to this section.\r\n // If any changes are needed, ensure to update both places to maintain consistency.\r\n if (PARENT_KEYS_WITH_COMBINED_FEATURES_IN_CART.includes(cItem.partId)) {\r\n newQuantity = fabricatorSettings.measureUnit === MEASURE_UNITS.Metric\r\n ? Math.ceil10(newQuantity, -2)\r\n : Math.ceil(newQuantity);\r\n }\r\n\r\n // Update the cart item\r\n if (Object.keys(updatedQuantities).length > 0) {\r\n store.dispatch(changeCartFeature({\r\n ...cItem,\r\n sqftQuantities: updatedQuantities,\r\n quantity: newQuantity,\r\n }));\r\n } else {\r\n store.dispatch(removeFromCart(cItem));\r\n }\r\n }\r\n });\r\n }\r\n })\r\n};\r\n\r\n/**\r\n * @param qtCatName: string\r\n */\r\nexport const createQuoteIfNotExistOrUpdateCurrent = async (qtCatName) => {\r\n const currentQtCategoryInQuotes = getQuoteForCurrentQtCatName(qtCatName);\r\n const sqftCalcData = await prepareSQFTData();\r\n if (!currentQtCategoryInQuotes) {\r\n await createQuoteFromSqftCalcData(sqftCalcData, qtCatName)\r\n } else {\r\n updateActiveQuoteWithSQFTData(sqftCalcData);\r\n }\r\n}\r\n\r\n/**\r\n * @param sqftCalcData {object}\r\n * @param qtCatName {string}\r\n */\r\nexport const createQuoteFromSqftCalcData = async (sqftCalcData, qtCatName) => {\r\n if (!workspace.isEmpty() || isManualCalculateNotEmpty(sqftCalcData)) {\r\n await createNewQuoteFromCategory(sqftCalcData, qtCatName);\r\n }\r\n}\r\n\r\n/**\r\n * @param qtCatName string\r\n */\r\nexport const getQuoteForCurrentQtCatName = (qtCatName) => {\r\n const {quotes} = store.getState().quotesState;\r\n return quotes.find(quote =>\r\n quote.qtCatName === qtCatName\r\n && quote.isVisibleInSQFT === false)\r\n}\r\n\r\n/**\r\n * @param sqftCalcData {object}\r\n * @param qtActiveCategory {string}\r\n */\r\nexport const createNewQuoteFromCategory = async(sqftCalcData, qtActiveCategory) => {\r\n if (!workspace.isEmpty() || isManualCalculateNotEmpty(sqftCalcData)) {\r\n const quotes = await addNewQuote(sqftCalcData, qtActiveCategory);\r\n store.dispatch(setActiveQuoteIndex(quotes.length - 1));\r\n addRoomToCart(qtActiveCategory);\r\n }\r\n}\r\n\r\nexport const isManualCalculateNotEmpty = (sqftCalcData) => {\r\n if (sqftCalcData.manualCalculate) {\r\n return sqftCalcData.countertops.length > 0\r\n || sqftCalcData.backsplashes.length > 0\r\n || sqftCalcData.edges.length > 0\r\n }\r\n\r\n return false\r\n}\r\n/**\r\n * @param sqftCalcData {object}\r\n * @param qtActiveCategory {string}\r\n */\r\nconst addNewQuote = async (sqftCalcData, qtActiveCategory) => {\r\n //const currentQuote = await updateCurrentQuote();\r\n const {quotes} = store.getState().quotesState;\r\n const newQuotes = [...quotes, {\r\n quoteId: null,\r\n isCreatedInSQFT: true,\r\n isVisibleInSQFT: false,\r\n qtCatName: qtActiveCategory.trim().toLowerCase(),\r\n sqFtCalcData: sqftCalcData\r\n }];\r\n store.dispatch(setQuotes(newQuotes));\r\n\r\n return newQuotes\r\n};\r\n\r\n/**\r\n * @param qtCatName {string}\r\n */\r\nexport const addRoomToCart = (qtCatName) => {\r\n const roomCartItem = getRoomCartItemForCategoryName(qtCatName)\r\n if (roomCartItem) {\r\n store.dispatch(addToCart([roomCartItem]))\r\n return roomCartItem\r\n }\r\n}\r\n\r\n/**\r\n * update navItemBy roomIndex\r\n * @param roomName {string}\r\n */\r\nexport const getRoomGroupById = (roomName) => {\r\n const roomsFeatureGroup = getFeatureGroup('room');\r\n const roomsNavItems = getNavItems(roomsFeatureGroup, \"\", {}, false, true);\r\n\r\n return roomsNavItems.find(navItem => {\r\n return navItem.part.getFeatureName().toLowerCase() === roomName.toLowerCase()\r\n });\r\n}\r\n","import React from 'react';\r\nimport PropTypes from \"prop-types\";\r\nimport MaterialSpinner from \"./materialSpinner\";\r\nimport {IS_LIXIL_UI} from \"../../config\";\r\n\r\nconst LoadingSpinner = (props) => {\r\n if (IS_LIXIL_UI) {\r\n return \r\n }\r\n const size = props.size || \"small\"; //class modifier\r\n return
\r\n};\r\n\r\nLoadingSpinner.propTypes = {\r\n size: PropTypes.string\r\n}\r\n\r\nLoadingSpinner.displayName = 'LoadingSpinner';\r\n\r\nexport default LoadingSpinner;\r\n","import uuid from \"uuid\";\r\n\r\nimport * as types from './actionTypes';\r\nimport {clearCart, setJobId} from \"./actionFunctions\";\r\nimport {setReceiptUrl} from \"./printFunctions\";\r\nimport {setAmazonImageUrl} from \"./serverFunctions\";\r\nimport {setWizardSelectedValues} from \"../visit/wizardLogic/wizardActions\";\r\nimport {setWizardActiveStep, updateAllWizardValues} from \"./wizardFunctions\";\r\nimport {setActiveQuoteIndex, setQuotes} from \"./roomsFunctions\";\r\n\r\nexport const showOrderCompletePopup = (orderCompletePopupVisible) => ({\r\n type: types.SHOW_ORDER_COMPLETE_POPUP,\r\n payload: {orderCompletePopupVisible}\r\n})\r\n\r\nexport const toggleShowMobileQuotes = (showMobileQuotes) => ({\r\n type: types.TOGGLE_SHOW_MOBILE_QUOTES,\r\n payload: {showMobileQuotes}\r\n})\r\n\r\nexport const toggleShowAllQuotesCartItemsList = (showAllQuotesCartItemsList) => ({\r\n type: types.TOGGLE_SHOW_ALL_QUOTES_CART_ITEMS_LIST,\r\n payload: {showAllQuotesCartItemsList}\r\n})\r\n\r\nexport const getMinimumChargeCartItem = (fromCartItem, onlyMinimum = false, quantity = 1) => {\r\n const {selectionGroup, partId, currentQuote, } = fromCartItem;\r\n const newDbFeature = Object.assign({}, fromCartItem.cartFeature.dbFeature, {\r\n id: 1,\r\n customDisplayName: \"additionalCartItem.minimumCharge\",\r\n displayName: \"additionalCartItem.minimumCharge\",\r\n sharedFeatureName: \"additionalCartItem.minimumCharge\",\r\n });\r\n if (onlyMinimum) {\r\n newDbFeature.cost = 375;\r\n newDbFeature.costplus = 375;\r\n newDbFeature.stonePricingId = null;\r\n }\r\n let minCartItem = {\r\n id: uuid.v4(),\r\n isEmpty: false,\r\n isMinimumCharge: true,\r\n isMinimumChargeItems: !onlyMinimum,\r\n selectionGroup,\r\n partId,\r\n currentQuote,\r\n quantity,\r\n cartFeature: Object.assign({}, fromCartItem.cartFeature, {\r\n fromFeatureName: fromCartItem.cartFeature.getFeatureName(),\r\n partName: \"additionalCartItem.minimumCharge\",\r\n _customDisplayName: \"additionalCartItem.minimumCharge\",\r\n _countertopGroupsCustomDisplayName: \"additionalCartItem.minimumCharge\",\r\n metaData: {},\r\n notesList: {},\r\n getCountertopGroupsSplittedFeatureName: function () {\r\n return this.partName\r\n },\r\n getSplittedFeatureName: function () {\r\n return this.partName\r\n },\r\n getFeatureName: function () {\r\n return this.partName\r\n },\r\n dbFeature: newDbFeature,\r\n })\r\n }\r\n if (fromCartItem.fromWizardId || minCartItem.fromWizardGroupId) { // just in case fromWizardId is 0\r\n minCartItem.fromWizardId = fromCartItem.fromWizardId; // this is needed to prevent showing minimum cart item ↓\r\n minCartItem.fromWizardStep = fromCartItem.fromWizardStep; // in different wizards in advanced quoting ↓\r\n minCartItem.fromWizardGroupId = fromCartItem.fromWizardGroupId; // for the same groups\r\n }\r\n return minCartItem\r\n};\r\n\r\nexport const setCartFooterActiveButtonIndex = (cartFooterActiveButtonIndex) => ({\r\n type: types.SET_CART_FOOTER_ACTIVE_BUTTON_INDEX,\r\n payload: {cartFooterActiveButtonIndex}\r\n})\r\n\r\nexport const setCartItemEditFeature = (cartItemEditFeature) => ({\r\n type: types.SET_CART_ITEM_EDIT_FEATURE,\r\n payload: {cartItemEditFeature}\r\n})\r\n\r\nexport const setLookRemovedCartItems = (lookRemovedCartItems) => ({\r\n type: types.SET_LOOK_REMOVED_CART_ITEMS,\r\n payload: {lookRemovedCartItems}\r\n})\r\n\r\nexport const setCItemsAddedToParentCart = (cartItems) => ({\r\n type: types.SET_CART_ITEMS_ADDED_TO_PARENT_CART,\r\n payload: {cartItems}\r\n})\r\n\r\nexport const changeAllCartItems = (cartItems) => ({\r\n type: types.CHANGE_ALL_CART_ITEMS,\r\n payload: {cartItems}\r\n})\r\n\r\nexport const setSureTax = (sureTax) => ({\r\n type: types.SET_SURE_TAX,\r\n payload: {sureTax}\r\n});\r\nexport const setSureTaxLoading = (sureTaxLoading) => ({\r\n type: types.SET_SURE_TAX_LOADING,\r\n payload: {sureTaxLoading}\r\n});\r\nexport const setDeliveryList = (deliveryList) => ({\r\n type: types.SET_DELIVERY_LIST,\r\n payload: {deliveryList}\r\n});\r\n\r\nexport const clearCartAndStartOver = (fullClear = false) => {\r\n return (dispatch) => {\r\n if (fullClear) {\r\n dispatch(setWizardSelectedValues({}, true));\r\n dispatch(setWizardActiveStep(0));\r\n dispatch(updateAllWizardValues([]));\r\n dispatch(setActiveQuoteIndex(0));\r\n dispatch(setQuotes([{}]));\r\n }\r\n dispatch(clearCart()); // clear cart\r\n dispatch(setReceiptUrl(\"\")); // clear receipt\r\n dispatch(setAmazonImageUrl(\"\")); // not sure if it is needed here, but let it be\r\n dispatch(setJobId(0)); // erase current job\r\n document.kvConfig.jobId = null; // erase current job\r\n }\r\n};\r\n\r\nexport const setManualTax = (manualTax) => ({\r\n type: types.SET_MANUAL_TAX,\r\n payload: {manualTax}\r\n});\r\n\r\nexport const setMarkUpLogic = (markUpLogic) => ({\r\n type: types.SET_MARK_UP_LOGIC,\r\n payload: {markUpLogic}\r\n});\r\n\r\n","import {getCurrentLayout} from \"../../appLayout\";\r\nimport store from \"../../../store\";\r\nimport config from \"../components/canvas/store/sqftConfig\";\r\n//import ManualCalculate from \"../components/canvas/core/controls/manualCalculate\";\r\nimport workspace from \"../components/canvas/core/workspace\";\r\nimport history from \"../components/canvas/core/workspaceHistory\";\r\nimport {\r\n enableSquareFootage,\r\n setSQFTViewMode,\r\n setSquareFootageGroup,\r\n updateSQFTCalculations\r\n} from \"../../../actions/sqftFunctions\";\r\nimport {toggleSelectionFeatureInfo} from \"../../../actions/actionFunctions\";\r\nimport {manualCalculateImport} from \"./sqftDataMapper\";\r\nimport {getInitialManualCalcRows} from \"../../../reducers/sqftManualCalculationReducer\";\r\nimport {updateManualCalculateRows} from \"../../../actions/sqftManualCalculationFunctions\";\r\nimport {hashHistory} from \"react-router\";\r\nimport {\r\n getAvailableSteps,\r\n navItemIsExcluded\r\n} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {getNextNotCheckedStep} from \"../../qkbPages/materialsWizard/useChangeWizardStepRoute\";\r\nimport {setMeasureUnit} from \"./sqftConfigHelper\";\r\nimport {CABINETS_TO_HANDLE, SQFT_VIEW_MODE} from \"../constants\";\r\n\r\nexport const getFeatureGroup = (mainNeeded = \"center_island_countertop\") => {\r\n const layout = getCurrentLayout();\r\n let featureGroup = layout.getSubPartFromQtCategories(mainNeeded);\r\n if (!featureGroup) {\r\n const foundGroup = layout.getFeatureGroupByPartId(mainNeeded);\r\n if (foundGroup) {\r\n featureGroup = {part: foundGroup}\r\n }\r\n }\r\n if (!featureGroup) {\r\n featureGroup = layout.parts[\"Countertop\"] && layout.parts[\"Countertop\"].countertop\r\n ? {part: layout.parts[\"Countertop\"].countertop}\r\n : null;\r\n }\r\n\r\n return featureGroup\r\n}\r\n\r\nexport const getHandleFeatureGroupFromShape = (shape) => {\r\n const layout = getCurrentLayout();\r\n const handlesPartId = CABINETS_TO_HANDLE[shape.partId];\r\n\r\n return layout.getFeatureGroupByPartId(handlesPartId);\r\n}\r\n\r\nexport const getNavItems = (featureGroup, searchText = \"\", filters= {}, withPlaceholders = true, withQuotingToolFeatures = false) => {\r\n let navItems = [];\r\n if (!featureGroup) {\r\n return navItems\r\n }\r\n let checkFeatureGroup = featureGroup.part ? featureGroup : {part: featureGroup}\r\n const state = store.getState();\r\n const {wizardIsActive} = state.wizardState;\r\n\r\n if (wizardIsActive) {\r\n navItems = getNavItemsFromTheWizard(checkFeatureGroup, searchText, filters);\r\n } else {\r\n const layout = getCurrentLayout();\r\n navItems = layout.designNavigationItems(checkFeatureGroup,\r\n filters,\r\n searchText,\r\n withPlaceholders,\r\n withQuotingToolFeatures,\r\n [],\r\n { firstFeature: null, firstConditions: null },\r\n )\r\n }\r\n\r\n return navItems;\r\n}\r\n\r\nexport const onSQFTLoadPrepareData = () => {\r\n const layout = getCurrentLayout();\r\n const state = store.getState();\r\n const quotes = state.quotesState.quotes;\r\n const activeQuoteIndex = state.quotesState.activeQuoteIndex;\r\n const filterGroups = state.filterState.filterGroups;\r\n const fabricatorData = state.fabricatorState;\r\n\r\n //if (this.iframeElement && this.iframeElement.contentWindow) {\r\n const activeQuote = quotes[activeQuoteIndex];\r\n //const {intl, fabricatorData} = this.props;\r\n const measureUnit = fabricatorData.settings.measureUnit;\r\n const payload = {\r\n loadData: (activeQuote && activeQuote.sqFtCalcData) ? activeQuote.sqFtCalcData : null,\r\n measureUnit,\r\n fabricatorId: document.kvConfig.userId,\r\n fabricatorData,\r\n currentLayout: layout.getCurrentLayoutAbbreviation(),\r\n filterGroups: filterGroups,\r\n //language: intl.locale\r\n }\r\n // if (hardCodeIsLowes()) {\r\n // let translates = {}\r\n // Object.keys(intl.messages).forEach(messageKey => {\r\n // if (messageKey.startsWith(\"transDoc.\")) {\r\n // if (!translates[intl.locale]) {\r\n // translates[intl.locale] = {};\r\n // }\r\n // translates[intl.locale][messageKey] = intl.messages[messageKey]\r\n // }\r\n // })\r\n // payload.translates = translates;\r\n // }\r\n console.log(\"sqft postMessage initial load data:\", payload);\r\n\r\n return payload;\r\n //}\r\n};\r\n\r\n//todo is this all needed?\r\nexport const onSQFTLoadImport = (payload) => {\r\n let {fabricatorId, fabricatorData, currentLayout, measureUnit, loadData, filterGroups} = payload;\r\n config.fabricatorData = fabricatorData;\r\n window.fabricatorId = fabricatorId;\r\n window.currentLayout = currentLayout;\r\n config.filterGroups = filterGroups;\r\n //TranslatesProvider.replaceHtml(language, translates);\r\n // config.fabricatorData = fabricatorData; // set if needed\r\n\r\n //todo\r\n //toolbar.setFabricatorButtons(fabricatorData); // specific fabricator rules\r\n if (measureUnit) {\r\n [].slice.call(document.querySelectorAll(\".settings-units [data-value]\")).forEach(element => {\r\n (element.dataset.value === measureUnit)\r\n ? element.classList.add(\"active\")\r\n : element.classList.remove(\"active\")\r\n });\r\n setMeasureUnit(measureUnit);\r\n history.rememberConfig({measureUnit});\r\n //todo\r\n //ManualCalculate.onMeasureUnitChange();\r\n }\r\n if (loadData) {\r\n loadData = (typeof loadData === 'string') ? JSON.parse(loadData) : loadData;\r\n if (loadData.manualCalculate === true) {\r\n manualCalculateImport(loadData);\r\n } else {\r\n workspace.import(loadData);\r\n }\r\n } else if (!config.tutorialIsRunning) {\r\n workspace.import({}); // if new room is opened - clear the previous(but not the first time if tutorial is active)\r\n store.dispatch(updateManualCalculateRows(getInitialManualCalcRows()));\r\n //todo\r\n //ManualCalculate.import({})\r\n } else {\r\n store.dispatch(updateManualCalculateRows(getInitialManualCalcRows()));\r\n }\r\n const state = store.getState();\r\n const updateCalculations = state.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n}\r\n\r\nexport const closeSQFTTool = (redirectToPage, shouldChangeWizardToNextStep, changeWizardStepRoute) => {\r\n const isSQFTinUrl = window.location.hash.includes(\"sqft\");\r\n store.dispatch(setSQFTViewMode(SQFT_VIEW_MODE.twoDMode));\r\n\r\n if (isSQFTinUrl) {\r\n hashHistory.push(redirectToPage);\r\n } else {\r\n store.dispatch(enableSquareFootage(false));\r\n store.dispatch(setSquareFootageGroup(null));\r\n if (shouldChangeWizardToNextStep) {\r\n changeWizardToNextStep(changeWizardStepRoute)\r\n }\r\n }\r\n}\r\n\r\nexport const changeWizardToNextStep = (changeWizardStepRoute) => {\r\n const state = store.getState();\r\n const {wizardIsActive, wizardActiveStep, wizardSelectedValues, wizardActiveItem} = state.wizardState;\r\n const {cartItems} = state.cartState;\r\n const {activeQuoteIndex} = state.quotesState;\r\n const {selectionFeatureInfo} = state.selectionState;\r\n if (wizardIsActive && wizardActiveItem) {\r\n if (selectionFeatureInfo) {\r\n store.dispatch(toggleSelectionFeatureInfo(null));\r\n }\r\n const realNextStep = getNextNotCheckedStep(wizardActiveItem, wizardActiveStep, wizardSelectedValues, cartItems, activeQuoteIndex);\r\n changeWizardStepRoute(realNextStep);\r\n }\r\n}\r\n\r\nexport const getNavItemsFromTheWizard = (subPart, searchText = \"\", filters= {}, wizardGroupId = null, visualizerType = document.kvConfig.visualizerType, withGroupIds = false) => {\r\n\r\n let groupName = subPart.part.wasCreatedFromGroupName || subPart.part.dbName || subPart.part.partName; //assign same stems as for the parent featureGroup (for the slabs)\r\n const wizardSteps = getWizardGroupsFromTheWizard(groupName, wizardGroupId);\r\n const layout = getCurrentLayout(visualizerType);\r\n const navItems = layout.designNavigationItems(subPart, filters, searchText, false, \"all\");\r\n\r\n // console.log(\"wizardSteps\", wizardSteps);\r\n let allNavItems = [];\r\n if (wizardSteps.length) {\r\n if (wizardSteps.length === 1) {\r\n const navItemsFromWizardGroup = navItems.filter(navItem => !navItemIsExcluded(navItem, wizardSteps[0].stepGroups[0]))\r\n if (navItemsFromWizardGroup.length) {\r\n allNavItems = navItemsFromWizardGroup\r\n if (!wizardGroupId && withGroupIds) {\r\n allNavItems = allNavItems.map(navItem => {\r\n return {...navItem, newWizardGroupId: wizardSteps[0].stepGroups[0].id, newWizardStep: wizardSteps[0].stepIndex}\r\n })\r\n }\r\n }\r\n } else {\r\n for (const wizardStep of wizardSteps) {\r\n const navItemsFromWizardGroup = navItems.filter(navItem => !navItemIsExcluded(navItem, wizardStep.stepGroups[0]));\r\n if (navItemsFromWizardGroup.length) {\r\n if (!allNavItems.length) {\r\n allNavItems = navItemsFromWizardGroup;\r\n if (!wizardGroupId && withGroupIds) {\r\n allNavItems = allNavItems.map(navItem => {\r\n return {...navItem, newWizardGroupId: wizardStep.stepGroups[0].id, newWizardStep: wizardStep.stepIndex}\r\n })\r\n }\r\n } else {\r\n navItemsFromWizardGroup.forEach(newNavItem => {\r\n if (!allNavItems.some(navItem => navItem.part.dbFeature.id === newNavItem.part.dbFeature.id)) {\r\n allNavItems.push(\r\n !wizardGroupId && withGroupIds\r\n ? {...newNavItem, newWizardGroupId: wizardStep.stepGroups[0].id, newWizardStep: wizardStep.stepIndex}\r\n : newNavItem\r\n )\r\n }\r\n })\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return allNavItems\r\n}\r\n\r\n/**\r\n * returns all wizardGroups with current groupName and wizard group id if provided\r\n * @param groupName {string}\r\n * @param wizardGroupId {string|number|null}\r\n * @param forFeature {featureInterface}\r\n * @returns {array}\r\n */\r\nexport const getWizardGroupsFromTheWizard = (groupName, wizardGroupId = null, forFeature = null) => {\r\n const state = store.getState();\r\n const {wizardActiveItem, wizardSelectedValues} = state.wizardState;\r\n const wizardSteps = getAvailableSteps(wizardActiveItem, wizardSelectedValues, true);\r\n\r\n return wizardSteps.filter((wizardStep) => {\r\n if (wizardStep.stepGroups.length !== 1 || (wizardStep.stepGroups[0].groupName !== groupName)) {\r\n return false\r\n }\r\n if (wizardGroupId && (wizardStep.stepGroups[0].id !== wizardGroupId)) {\r\n return false\r\n }\r\n if (forFeature) {\r\n return !navItemIsExcluded({part: forFeature}, wizardStep.stepGroups[0])\r\n }\r\n return true\r\n });\r\n}\r\n\r\nexport const getUnderlaymentFeature = () => {\r\n const underlaymentFeatureGroup = getFeatureGroup('underlayment');\r\n const state = store.getState();\r\n const {wizardIsActive} = state.wizardState;\r\n let navItems;\r\n if (wizardIsActive) {\r\n navItems = getNavItemsFromTheWizard(underlaymentFeatureGroup, \"\", {});\r\n } else {\r\n const layout = getCurrentLayout();\r\n navItems = layout.designNavigationItems(underlaymentFeatureGroup,\r\n {},\r\n \"\",\r\n false,\r\n \"all\",\r\n [],\r\n { firstFeature: null, firstConditions: null },\r\n )\r\n }\r\n\r\n const underlaymentFeaureName = 'Xtone Underlayment';\r\n const underlaymentFeaure = navItems.find(navItem => navItem.part.getFeatureName() === underlaymentFeaureName);\r\n if (underlaymentFeaure) {\r\n return underlaymentFeaure\r\n }\r\n\r\n return navItems.length ? navItems[0] : null\r\n}\r\n","import orderBy from \"lodash/orderBy\";\r\nimport {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {cabinetThumbnail} from \"../assets\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport BottomCabinet from \"../subparts/cabinet/bottomCabinet\";\r\nimport TopCabinet from \"../subparts/cabinet/topCabinet\";\r\nimport CrownMolding from \"../subparts/cabinet/crownMolding\";\r\nimport TopHandle from \"../subparts/cabinet/topHandle\";\r\nimport BottomHandle from \"../subparts/cabinet/bottomHandle\";\r\nimport TopCabinetShadow from \"../subparts/cabinet/topCabinetShadow\";\r\nimport BottomCabinetShadow from \"../subparts/cabinet/bottomCabinetShadow\";\r\n\r\nexport default class Cabinet extends Part {\r\n static id = 'Cabinet';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Cabinet';\r\n this.partThumbnail = cabinetThumbnail;\r\n this.partThumbnailSize = \"70%\";\r\n this.translateId = \"visualizer.kitchen.cabinet\";\r\n\r\n // related items\r\n this.topCabinet = null;\r\n this.bottomCabinet = null;\r\n this.crownMolding = null;\r\n this.topHandle = null;\r\n this.bottomHandle = null;\r\n this.topCabinetShadow = null;\r\n this.bottomCabinetShadow = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Bottom Cabinet\":\r\n relatedItemName = \"bottomCabinet\";\r\n RelatedItemClass = BottomCabinet;\r\n break;\r\n case \"Top Cabinet\":\r\n relatedItemName = \"topCabinet\";\r\n RelatedItemClass = TopCabinet;\r\n break;\r\n case \"Crown Molding\":\r\n relatedItemName = \"crownMolding\";\r\n RelatedItemClass = CrownMolding;\r\n // if (dbFeature.metaData && dbFeature.metaData[\"Parts\"]) {\r\n // relatedItemName = \"crownMolding\";\r\n // RelatedItemClass = CrownMolding;\r\n // }\r\n break;\r\n case \"Top Handle\":\r\n relatedItemName = \"topHandle\";\r\n RelatedItemClass = TopHandle;\r\n break;\r\n case \"Bottom Handle\":\r\n relatedItemName = \"bottomHandle\";\r\n RelatedItemClass = BottomHandle;\r\n break;\r\n case \"Top Cabinet Shadow\":\r\n relatedItemName = \"topCabinetShadow\";\r\n RelatedItemClass = TopCabinetShadow;\r\n break;\r\n case \"Bottom Cabinet Shadow\":\r\n relatedItemName = \"bottomCabinetShadow\";\r\n RelatedItemClass = BottomCabinetShadow;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Cabinet', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n getRelatedItems() {\r\n return orderBy(this.relatedItems, 'layerPriority');\r\n }\r\n\r\n subParts(withHidden = true, hideWithoutFeatures = false) {\r\n return this.getRelatedItems()\r\n .filter(item => this.filterRelatedItem(item, withHidden))\r\n .filter(item => {\r\n if ((item.partId === \"crown_molding\" || item.partId === \"top_handle\") && hideWithoutFeatures && item.allFeaturesReceived) {\r\n return item.navigationSubItems({}, \"\").length\r\n }\r\n return item\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n getTopCabinetType() {\r\n if (this.topCabinet && this.topCabinet.activeFeature) {\r\n if (this.topCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"]) {\r\n return this.topCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"][0]\r\n } else {\r\n // console.log(\"no topCabinet metaData!\", this.topCabinet.activeFeature);\r\n return \"\"\r\n }\r\n }\r\n return \"\"\r\n }\r\n\r\n // getTopCabinetLayout() {\r\n //\r\n // if (this.topCabinet && this.topCabinet.activeFeature) {\r\n // if (this.topCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"]) {\r\n // return this.topCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"][0]\r\n // } else {\r\n // // console.log(\"no topCabinet metaData!\", this.topCabinet.activeFeature);\r\n // return \"\"\r\n // }\r\n // }\r\n // return \"ALL\"\r\n // }\r\n\r\n getBottomCabinetType() {\r\n if (this.bottomCabinet && this.bottomCabinet.activeFeature) {\r\n if (this.bottomCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"]) {\r\n return this.bottomCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"][0]\r\n } else {\r\n // console.log(\"no bottomCabinet metaData!\", this.bottomCabinet.activeFeature);\r\n return \"\"\r\n }\r\n }\r\n return \"\"\r\n }\r\n\r\n getTopCabinetApplianceType() {\r\n if (this.topCabinet && this.topCabinet.activeFeature) {\r\n if (this.topCabinet.activeFeature.dbFeature.metaData[\"Appliance\"]) {\r\n return this.topCabinet.activeFeature.dbFeature.metaData[\"Appliance\"][0]\r\n } else {\r\n // console.log(\"no Appliance metaData!\", this.topCabinet.activeFeature);\r\n return \"Hood\"\r\n }\r\n }\r\n return \"Hood\"\r\n }\r\n\r\n getTopCabinetShadowLayout() {\r\n if (this.topCabinet && this.topCabinet.activeFeature && this.topCabinet.activeFeature.dbFeature.metaData[\"CabinetLayout\"]) {\r\n return this.topCabinet.activeFeature.dbFeature.metaData[\"CabinetLayout\"][0]\r\n }\r\n return \"\"\r\n }\r\n\r\n getBottomCabinetApplianceType() {\r\n if (this.bottomCabinet && this.bottomCabinet.activeFeature) {\r\n if (this.bottomCabinet.activeFeature.dbFeature.metaData[\"Appliance\"]) {\r\n return this.bottomCabinet.activeFeature.dbFeature.metaData[\"Appliance\"][0]\r\n } else {\r\n // console.log(\"no Appliance metaData!\", this.bottomCabinet.activeFeature);\r\n return \"Range\"\r\n }\r\n }\r\n return \"Range\"\r\n }\r\n\r\n}\r\n","import {getAvailableSteps, getFeatureGroupFromWizardGroup, navItemIsExcluded} from \"./lookWizardFunctions\";\r\nimport Config, {getCommonVisualizerType} from \"../../../../../config\";\r\nimport {fixWizardItem} from \"./wizardFunctionsCommon\";\r\nimport {\r\n getVisualizerTypeFromSubscription,\r\n hasSubscriptionForRoom\r\n} from \"../../../../../misc/visualizerSwitchingFunctions\";\r\n\r\nexport const getWizardGroupName = (wizardGroup) => {\r\n if (!wizardGroup) {\r\n return \"\"\r\n }\r\n return wizardGroup.title || wizardGroup.customDisplayName || wizardGroup.productCartTitle || wizardGroup.groupName || \"\"\r\n // if (stepName === \"Vanitie\") { // it should be renamed on the backend so no need for that\r\n // stepName = \"Vanity\"\r\n // }\r\n}\r\n\r\n/**\r\n * this returns new wizard steps depending on the current selection\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @param currentStep {number}\r\n * @param allWizardSelectedValues {object}\r\n * @returns {object}\r\n */\r\nexport const getNextWizardSteps = (wizardActiveItem, currentStep, allWizardSelectedValues) => {\r\n// const oldWizardSteps = getAvailableSteps(wizardActiveItem, oldWizardSelectedValues, true);\r\n\r\n let newValues = {};\r\n Object.keys(allWizardSelectedValues).forEach(key => {\r\n if (+key <= currentStep) {\r\n newValues[key] = allWizardSelectedValues[key] // here we create values object just until the current selected value\r\n }\r\n });\r\n\r\n const afterCurrentSelectionWizardSteps = getAvailableSteps(wizardActiveItem, newValues, true, allWizardSelectedValues);\r\n // const allWizardSteps = getAvailableSteps(wizardActiveItem, allWizardSelectedValues, true);\r\n\r\n // const nextStep = currentStep + 1;\r\n\r\n // if (\r\n // afterCurrentSelectionWizardSteps[nextStep] && allWizardSteps[nextStep]\r\n // && afterCurrentSelectionWizardSteps[nextStep].stepGroups.every((wizardGroup, wizardGroupIndex) => {\r\n // return allWizardSteps[nextStep].stepGroups[wizardGroupIndex] && wizardGroup.id === allWizardSteps[nextStep].stepGroups[wizardGroupIndex].id\r\n // }) && (allWizardSelectedValues[nextStep] && allWizardSelectedValues[nextStep].wizardGroup\r\n // && afterCurrentSelectionWizardSteps[nextStep].stepGroups.some(wizG => allWizardSelectedValues[nextStep].wizardGroup.id === wizG.id))\r\n // ) {\r\n // return allWizardSteps // keep it, as we didn't change the flow\r\n // }\r\n\r\n return afterCurrentSelectionWizardSteps // use new ones, as the flow was changed\r\n\r\n}\r\n\r\n/**\r\n * this returns conflicting with the current selections steps\r\n * @param allWizardSelectedValues {object}\r\n * @param actionPayload {object} // {wizardActiveItem, quoteIndex}\r\n * @param cartItems {[cartItemInterface]}\r\n * @param newWizardSteps {[]}\r\n * @returns {array}\r\n */\r\nexport const getConflictingWizardSteps = (allWizardSelectedValues, actionPayload, cartItems, newWizardSteps) => {\r\n\r\n const {wizardActiveItem, quoteIndex} = actionPayload;\r\n\r\n const currentStep = +Object.keys(actionPayload.wizardSelectedValues)[0];\r\n\r\n let conflictingWizardSteps = [];\r\n\r\n cartItems.forEach(cartItem => {\r\n if (!cartItem.fromWizardGroupId || (cartItem.currentQuote !== quoteIndex) || (cartItem.fromWizardId !== wizardActiveItem.id)) {\r\n return false\r\n }\r\n if ((Object.keys(allWizardSelectedValues).length - 1) === cartItem.fromWizardStep\r\n && (cartItem.fromWizardStep === currentStep)) { // we are reselectecting the same (last selected step), it is not conflicting\r\n return false\r\n }\r\n if (conflictingWizardSteps.some(confObject => confObject.cartItemId === cartItem.id)) { // already added\r\n return false\r\n }\r\n // no more step with this cart item\r\n if (!newWizardSteps.some(step => step.stepGroups.some(wizardGroup => wizardGroup.id === cartItem.fromWizardGroupId))\r\n || !newWizardSteps[cartItem.fromWizardStep]) {\r\n conflictingWizardSteps.push({\r\n stepIndex: cartItem.fromWizardStep,\r\n wizardGroupId: cartItem.fromWizardGroupId,\r\n cartItemId: cartItem.id,\r\n });\r\n } else if (newWizardSteps[cartItem.fromWizardStep + 1] && newWizardSteps[cartItem.fromWizardStep + 1].stepGroups) {\r\n // // here we check if some cart item is added, but his next steps are not anymore in the wizard\r\n //\r\n // // we need to get steps only for before current selected item\r\n // let testValues = {};\r\n // Object.keys(allWizardSelectedValues).forEach(key => {\r\n // if (+key <= cartItem.fromWizardStep) {\r\n // testValues[key] = allWizardSelectedValues[key] // here we create values object just until the current selected value\r\n // }\r\n // });\r\n // const testWizardSteps = getNextWizardSteps(wizardActiveItem, cartItem.fromWizardStep, testValues);\r\n //\r\n // const testGroups = testWizardSteps[cartItem.fromWizardStep + 1] ? testWizardSteps[cartItem.fromWizardStep + 1].stepGroups : null;\r\n // const sameGroupsNew = newWizardSteps[cartItem.fromWizardStep + 1] ? newWizardSteps[cartItem.fromWizardStep + 1].stepGroups : null;\r\n //\r\n // if (testGroups && testGroups.length && sameGroupsNew && sameGroupsNew.length && ((sameGroupsNew.length !== testGroups.length)\r\n // || sameGroupsNew.some((wizardGroup, wizardGroupIndex) => wizardGroup.id !== testGroups[wizardGroupIndex].id))) {\r\n // conflictingWizardSteps.push({\r\n // stepIndex: cartItem.fromWizardStep,\r\n // wizardGroupId: cartItem.fromWizardGroupId,\r\n // cartItemId: cartItem.id,\r\n // });\r\n // }\r\n }\r\n });\r\n\r\n // get current selected wizard value and check if the next one is conflicting - then add the current one to, because it cases the issue\r\n const nextStepKey = currentStep + 1;\r\n if (conflictingWizardSteps.some(confObject => confObject.stepIndex === nextStepKey)) {\r\n cartItems.forEach(cartItem => {\r\n if (!cartItem.fromWizardGroupId || (cartItem.currentQuote !== quoteIndex) || (cartItem.fromWizardId !== wizardActiveItem.id)) {\r\n return false\r\n }\r\n if (conflictingWizardSteps.some(confObject => confObject.cartItemId === cartItem.id)) { // already added\r\n return false\r\n }\r\n // no more step with this cart item\r\n if (cartItem.fromWizardStep === currentStep) {\r\n conflictingWizardSteps.unshift({\r\n stepIndex: cartItem.fromWizardStep,\r\n wizardGroupId: cartItem.fromWizardGroupId,\r\n cartItemId: cartItem.id,\r\n });\r\n }\r\n });\r\n }\r\n\r\n // console.log(\"newWizardSteps\", newWizardSteps);\r\n // console.log(\"conflictingWizardSteps\", conflictingWizardSteps);\r\n\r\n return conflictingWizardSteps\r\n}\r\n\r\n/**\r\n * this changes cart items wizard groups to use new wizard group ids\r\n * @param newWizardSteps {array}\r\n * @param actionPayload {object} // {wizardActiveItem, quoteIndex}\r\n * @param cartItems {[cartItemInterface]}\r\n * @returns {object}\r\n */\r\nexport const switchCartItemsToNewWizardGroups = (newWizardSteps, actionPayload, cartItems) => {\r\n\r\n const {wizardActiveItem, quoteIndex} = actionPayload;\r\n\r\n let shouldReassign = false;\r\n\r\n const newCartItems = cartItems.map(cartItem => {\r\n if (!cartItem.fromWizardGroupId || (cartItem.currentQuote !== quoteIndex) || (cartItem.fromWizardId !== wizardActiveItem.id)) {\r\n return cartItem\r\n }\r\n // no more step with this cart item\r\n if (!newWizardSteps.some(step => step.stepGroups.some(wizardGroup => wizardGroup.id === cartItem.fromWizardGroupId))\r\n || !newWizardSteps[cartItem.fromWizardStep]) {\r\n // here we check all next steps, if there are some step with the same wizardGroup, and it has the cartFeature navItem\r\n newWizardSteps.forEach(step => {\r\n if (!step.stepGroups || !step.stepGroups[0] || (step.stepGroups.length > 1)) {\r\n return\r\n }\r\n let testWizG = step.stepGroups[0];\r\n if (testWizG.groupName !== cartItem.cartFeature.dbFeature.groupName) {\r\n return;\r\n }\r\n if (testWizG.mergedGroups) {\r\n // check only next wizardGroup selectedFeatures, not all of them (merged)\r\n testWizG = testWizG.mergedGroups.find(mergedGroup => mergedGroup.id === step.stepGroups[0].id)\r\n || testWizG.mergedGroups.find(mergedGroup => !navItemIsExcluded({part: cartItem.cartFeature}, mergedGroup))\r\n }\r\n if ((testWizG.mergedGroups && testWizG) || !navItemIsExcluded({part: cartItem.cartFeature}, testWizG)) {\r\n shouldReassign = true;\r\n cartItem.fromWizardStep = step.stepIndex;\r\n cartItem.fromWizardGroupId = testWizG.id;\r\n console.log(\"cartItem changed!\", cartItem);\r\n }\r\n })\r\n }\r\n return cartItem\r\n });\r\n\r\n return {newCartItems, shouldReassign}\r\n}\r\n\r\nexport const selectedWizardGroupIsNotInCurrentStepAnymore = (selectedWizardValue, currentStepGroups) => {\r\n const stepWizGroup = currentStepGroups[0]; // could be merged\r\n const selectedWizardGroup = selectedWizardValue ? selectedWizardValue.wizardGroup : null;\r\n if (currentStepGroups.length > 1 && stepWizGroup && currentStepGroups.some(wG => wG.id === selectedWizardGroup.id)) {\r\n return false\r\n }\r\n return selectedWizardGroup && stepWizGroup && (selectedWizardGroup.id !== stepWizGroup.id)\r\n && (!stepWizGroup.mergedGroups || !stepWizGroup.mergedGroups.length\r\n || !stepWizGroup.mergedGroups.some(mG => mG.id === selectedWizardGroup.id))\r\n}\r\n\r\n/**\r\n * this returns conflicting with the current selections steps\r\n * @param newWizValues {object}\r\n * @param newWizardSteps {array}\r\n // * @param cartItems {[cartItemInterface]}\r\n * @returns {object}\r\n */\r\nexport const changeWizardValuesToUseNewGroups = (newWizValues, newWizardSteps) => {\r\n\r\n let shouldReassignValues = false;\r\n let updatedWizardValues = Object.assign({}, newWizValues);\r\n\r\n Object.keys(updatedWizardValues).forEach(key => { // here we replace wizard values to match new selections! to prevent conflicting\r\n // if there are no wizardGroup anymore in the next flow, but it was selected earlier - set new wizardGroup\r\n if (updatedWizardValues[key].wizardGroup\r\n && updatedWizardValues[key].selectedFeature\r\n && !newWizardSteps.some(step => (step.stepGroups.length === 1) && (step.stepGroups[0].id === updatedWizardValues[key].wizardGroup.id))\r\n && (newWizardSteps[key] && newWizardSteps[key].stepGroups && (newWizardSteps[key].stepGroups.length === 1)\r\n && (updatedWizardValues[key].wizardGroup.groupName === newWizardSteps[key].stepGroups[0].groupName)\r\n && !navItemIsExcluded({part: updatedWizardValues[key].selectedFeature}, newWizardSteps[key].stepGroups[0])\r\n )) {\r\n shouldReassignValues = true;\r\n updatedWizardValues[key].wizardGroup = newWizardSteps[key].stepGroups[0];\r\n // console.log(\"wizardGroup updated!\", updatedWizardValues[key]);\r\n }\r\n });\r\n\r\n const erasedValues = {};\r\n\r\n // here we go through all new wizard steps - and check old values - if there are something selected and it is not\r\n // anymore in the flow - but there is a step - assign new wizard selected value\r\n newWizardSteps.forEach(newWizardStep => {\r\n if (newWizardStep.stepGroups.length !== 1 || newWizardStep.stepGroups[0].nodeType !== \"group\") {\r\n return\r\n }\r\n const stepWizGroup = newWizardStep.stepGroups[0]; // could be merged\r\n if (!updatedWizardValues[newWizardStep.stepIndex] ||\r\n (updatedWizardValues[newWizardStep.stepIndex]\r\n && updatedWizardValues[newWizardStep.stepIndex].wizardGroup\r\n && (updatedWizardValues[newWizardStep.stepIndex].wizardGroup.groupName !== stepWizGroup.groupName\r\n // we still need to get inside if group is not valid - to erase it as we don't need it! we will assign a new one below if needed\r\n || selectedWizardGroupIsNotInCurrentStepAnymore(updatedWizardValues[newWizardStep.stepIndex], newWizardStep.stepGroups))\r\n )) {\r\n // we have a step and the value selected is incorrect - go ahead and find something similar\r\n let updated = false;\r\n Object.keys(newWizValues).forEach(key => { // here we replace wizard values to match new selections! to prevent conflicting\r\n // if there are no wizardGroup anymore in the next flow, but it was selected earlier - set new wizardGroup\r\n if (newWizValues[key].wizardGroup\r\n && newWizValues[key].selectedFeature\r\n && newWizValues[key].wizardGroup.groupName === stepWizGroup.groupName\r\n && (!newWizardSteps[key] || (newWizardSteps[key].stepGroups.length !== 1) || newWizValues[key].wizardGroup.groupName !== newWizardSteps[key].stepGroups[0].groupName)\r\n && !navItemIsExcluded({part: newWizValues[key].selectedFeature}, stepWizGroup)) {\r\n\r\n shouldReassignValues = true;\r\n erasedValues[newWizardStep.stepIndex] = Object.assign({}, updatedWizardValues[newWizardStep.stepIndex]); // save it first, to restore below\r\n updatedWizardValues[newWizardStep.stepIndex] = Object.assign({}, newWizValues[key], {\r\n wizardGroup: stepWizGroup,\r\n });\r\n updated = true;\r\n // updatedWizardValues[key] = {}; // clear old step\r\n // console.log(\"wizardGroup updated throw all steps search!\", updatedWizardValues[key]);\r\n }\r\n });\r\n if (!updated) {\r\n erasedValues[newWizardStep.stepIndex] = Object.assign({}, updatedWizardValues[newWizardStep.stepIndex]); // save it first, to restore below\r\n updatedWizardValues[newWizardStep.stepIndex] = {};\r\n delete updatedWizardValues[newWizardStep.stepIndex];\r\n }\r\n }\r\n });\r\n\r\n // console.log(\"erasedValues\", erasedValues);\r\n\r\n // 3) here we go through again through steps and check if we erased something but it exist in the next flow\r\n newWizardSteps.forEach(newWizardStep => {\r\n if (newWizardStep.stepGroups.length !== 1 || newWizardStep.stepGroups[0].nodeType !== \"group\") {\r\n return\r\n }\r\n const stepWizGroup = newWizardStep.stepGroups[0]; // could be merged\r\n if (!updatedWizardValues[newWizardStep] || !updatedWizardValues[newWizardStep].wizardGroup) {\r\n Object.keys(erasedValues).forEach(key => {\r\n if (erasedValues[key].wizardGroup && erasedValues[key].selectedFeature\r\n && (erasedValues[key].wizardGroup.groupName === stepWizGroup.groupName)\r\n && !navItemIsExcluded({part: erasedValues[key].selectedFeature}, stepWizGroup)) {\r\n updatedWizardValues[newWizardStep.stepIndex] = Object.assign({}, newWizValues[key], {\r\n wizardGroup: stepWizGroup,\r\n });\r\n // console.log(\"USE ERASED LOGIC\", updatedWizardValues[newWizardStep.stepIndex]);\r\n erasedValues[key] = {}; // use it only once! then delete\r\n }\r\n })\r\n }\r\n });\r\n\r\n // now go again and set missing wizard groups\r\n Object.keys(updatedWizardValues).forEach(key => {\r\n if (!updatedWizardValues[key] || !updatedWizardValues[key].wizardGroup || !newWizardSteps[key]\r\n || !newWizardSteps[key].stepGroups.length || (newWizardSteps[key].stepGroups.length !== 1)) { // we set wizard group only if the next one is selected\r\n return\r\n }\r\n // const nextSelectedValue = updatedWizardValues[key + 1];\r\n // const selectedWizGroup = updatedWizardValues[key].wizardGroup;\r\n const newWizGroup = newWizardSteps[key].stepGroups[0];\r\n\r\n if (selectedWizardGroupIsNotInCurrentStepAnymore(updatedWizardValues[key], newWizardSteps[key].stepGroups)) {\r\n // set wizard group as we might have cart items added to this group, we can't have it disabled\r\n updatedWizardValues[key] = {\r\n wizardGroup: newWizGroup\r\n }\r\n }\r\n });\r\n\r\n //last update - make sure that every wizard group is selected if we have cart item in the group below\r\n // const lastSelectedStep = Object.keys(updatedWizardValues).reverse().find(lastKey => updatedWizardValues[lastKey] && updatedWizardValues[lastKey].wizardGroup);\r\n Object.keys(updatedWizardValues).forEach(key => {\r\n if (!updatedWizardValues[key].wizardGroup && newWizardSteps[key] && newWizardSteps[key].stepGroups.length\r\n && (newWizardSteps[key].stepGroups.length === 1) && updatedWizardValues[+key + 1] && updatedWizardValues[+key + 1].wizardGroup) {\r\n // we set wizard group only if the next one is selected\r\n updatedWizardValues[key] = {\r\n wizardGroup: newWizardSteps[key].stepGroups[0]\r\n }\r\n }\r\n });\r\n\r\n return {updatedWizardValues, shouldReassignValues}\r\n}\r\n\r\n/**\r\n * @param partId {string}\r\n * @param featureGroup {featureGroupInterface}\r\n * @param isBathroom {boolean}\r\n * @returns {boolean}\r\n */\r\nconst checkFeatureGroupForOpposite = (partId, featureGroup, isBathroom) => {\r\n switch (partId) {\r\n case \"backsplash\":\r\n return isBathroom && (featureGroup.partId === \"vanity_backsplash\")\r\n case \"center_island_edge\":\r\n return featureGroup.partId === \"edge_profile\"\r\n case \"edge_profile\":\r\n return featureGroup.partId === \"center_island_edge\"\r\n case \"countertop\":\r\n return (featureGroup.partId === \"center_island_countertop\") || (isBathroom && (featureGroup.partId === \"vanity_countertop\"))\r\n case \"center_island_countertop\":\r\n return (featureGroup.partId === \"countertop\") || (isBathroom && (featureGroup.partId === \"vanity_countertop\"))\r\n case \"corners\":\r\n return featureGroup.partId === \"radius\"\r\n default:\r\n return featureGroup.partId === partId\r\n }\r\n}\r\n\r\n/**\r\n * @param wizardSteps {array}\r\n * @param cartItem {cartItemInterface}\r\n * @returns foundStep {object}\r\n */\r\nexport const getWizardStepFromCartItemFeature = (wizardSteps, cartItem) => {\r\n let foundStep = wizardSteps.find(step => step.stepGroups.some(wizardGroup => {\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n return featureGroup && featureGroup.partId === cartItem.partId\r\n }));\r\n if (!foundStep) {\r\n const isBathroom = getCommonVisualizerType() === \"bathroom\";\r\n foundStep = wizardSteps.find(step => step.stepGroups.some(wizardGroup => {\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n if (!featureGroup) {\r\n return false\r\n }\r\n return checkFeatureGroupForOpposite(cartItem.partId, featureGroup, isBathroom)\r\n }));\r\n }\r\n return foundStep\r\n}\r\n\r\n/**\r\n * @param wizardSteps {array}\r\n * @param partId {string}\r\n * @returns {object}\r\n */\r\nexport const getFeatureGroupFromWizardSteps = (wizardSteps, partId) => {\r\n for (const step of wizardSteps) {\r\n for (const wizardGroup of step.stepGroups) {\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n if (featureGroup && featureGroup.partId === partId) {\r\n return {part: featureGroup}\r\n }\r\n }\r\n }\r\n const isBathroom = getCommonVisualizerType() === \"bathroom\";\r\n for (const step of wizardSteps) {\r\n for (const wizardGroup of step.stepGroups) {\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n if (featureGroup && checkFeatureGroupForOpposite(partId, featureGroup, isBathroom)) {\r\n return {part: featureGroup}\r\n }\r\n }\r\n }\r\n}\r\n\r\nconst parseWizardData = (wizardData) => {\r\n let allItems = typeof wizardData === \"string\" ? JSON.parse(wizardData) : [];\r\n if (typeof wizardData === \"object\" && (wizardData != null)) {\r\n Object.keys(wizardData).forEach(key => {\r\n allItems = [...allItems, ...JSON.parse(wizardData[key])]\r\n });\r\n }\r\n return allItems\r\n}\r\n\r\n/**\r\n * @param mainResponse\r\n * @param parseOnly {boolean}\r\n * @param newVisualizerType {string}\r\n * @returns {array}\r\n */\r\nexport const getParsedWizardList = (mainResponse, parseOnly, newVisualizerType = \"\") => {\r\n const {wizardData, wizardDataV2} = mainResponse;\r\n const allItems = parseWizardData(wizardDataV2 || wizardData); // if we have v2 - use it, else old support\r\n if (Config.isDevMode()) {\r\n console.log(\"all wizardItems \", allItems);\r\n }\r\n if (parseOnly) {\r\n return allItems.filter(wizardItem => wizardItem.enabled)\r\n }\r\n const wizardList = allItems\r\n .filter(wizardItem => wizardItem.enabled)\r\n .map((wizardItem, wizardItemIndex) => {\r\n wizardItem = fixWizardItem(wizardItem, wizardItemIndex, false, newVisualizerType);\r\n if (wizardItem.visualizer === \"all\") {\r\n wizardItem.visualizer = getCommonVisualizerType(newVisualizerType); // we keep same wizard as different\r\n wizardItem.id = wizardItem.id + 100;\r\n }\r\n wizardItem.id = getUpdatedWizardId(wizardItem.visualizer, wizardItem.id);\r\n return wizardItem\r\n });\r\n console.log(\"wizardList\", wizardList);\r\n return wizardList\r\n}\r\n\r\n/**\r\n * same function for wizard item and cart item on parse - it returns new wizard id depending on the visualizer\r\n * @param visualizerType {string}\r\n * @param oldWizardItemId {number}\r\n * @returns {number}\r\n */\r\nexport const getUpdatedWizardId = (visualizerType, oldWizardItemId) => {\r\n switch (getCommonVisualizerType(visualizerType)) {\r\n case \"laundryroom\":\r\n if (oldWizardItemId < 3000) {\r\n return oldWizardItemId + 3000 // increase because we don't want to have same id's\r\n }\r\n break;\r\n case \"fireplace\":\r\n if (oldWizardItemId < 2000) {\r\n return oldWizardItemId + 2000 // increase because we don't want to have same id's\r\n }\r\n break;\r\n case \"bathroom\":\r\n if (oldWizardItemId < 1000) {\r\n return oldWizardItemId + 1000 // increase because we don't want to have same id's\r\n }\r\n break;\r\n default:\r\n return oldWizardItemId // keep as is for kitchen\r\n }\r\n}\r\n\r\n/**\r\n * returns lowercased visualizer (bathroom | kitchen | fireplace) same as in the wizard item depending on wizardItem id\r\n * @param wizardItem {wizardItemInterface | wizardAllObjectInterface}\r\n * @param withToolVersion {boolean}\r\n * @returns {string} bathroom | kitchen | fireplace\r\n */\r\nexport const getWizardVisualizerType = (wizardItem, withToolVersion = false) => {\r\n\r\n let commonName = wizardItem.visualizer;\r\n\r\n if (!commonName) {\r\n commonName = \"kitchen\";\r\n const wizardItemId = wizardItem.id || wizardItem.wizardItemId;\r\n if (wizardItemId > 3000) {\r\n commonName = \"laundryroom\";\r\n } if (wizardItemId > 2000) {\r\n commonName = \"fireplace\";\r\n } else if (wizardItemId > 1000) {\r\n commonName = \"bathroom\";\r\n }\r\n }\r\n\r\n if (withToolVersion) {\r\n const existingSubscription = hasSubscriptionForRoom(commonName);\r\n if (existingSubscription) {\r\n return getVisualizerTypeFromSubscription(existingSubscription);\r\n }\r\n return commonName\r\n }\r\n return commonName\r\n}\r\n\r\n/**\r\n * checks if current wizard can be used in the visualizer\r\n * @param wizardItem {wizardItemInterface | wizardAllObjectInterface}\r\n * @param visualizerType {string}\r\n * @returns {boolean}\r\n */\r\nexport const isSameVisualizerWizard = (wizardItem, visualizerType = getCommonVisualizerType()) => {\r\n if (wizardItem.visualizer === \"all\") { // should not ever be here\r\n return true\r\n }\r\n if (wizardItem.visualizer) {\r\n return wizardItem.visualizer === visualizerType\r\n }\r\n return getWizardVisualizerType(wizardItem) === visualizerType\r\n}\r\n","import React from \"react\";\r\n\r\nexport const PrintDocumentContext = React.createContext({\r\n messages: {}\r\n});\r\n","import EventManager from \"../../store/sqftEventManager\";\r\nimport {renderMeasurementsAroundSnappedShapes, renderSlabRightPart, renderSlabWorkspace} from \"./sqftSlabDraw\";\r\nimport workspace from \"../workspace\";\r\nimport SlabAdditionalShapes from \"./slabAdditionalShapes\";\r\nimport sqftSlabManager from \"../../store/sqftSlabManager\";\r\nimport StaticImage from \"../workspace/image/StaticImage\";\r\nimport workspaceZoom from \"../workspaceZoom\";\r\nimport sqftShape from \"../shapes/sqftShape\";\r\nimport {getClosestHigherNumber} from \"../../../../helpers/sqftHelper\";\r\nimport store from \"../../../../../../store\";\r\n\r\nconst SlabWorkspace = function() {\r\n this.eventManager = EventManager;\r\n this.objectName = {name: 'SlabWorkspace'};\r\n this.leftImagePos = {\r\n x: 0,\r\n y: 0,\r\n };\r\n this.state = {\r\n inEnabled: false,\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n isCenterButtonRightPartHovered: false,\r\n isCenterButtonLeftPartHovered: false,\r\n rightPartZoomedShapeId: 1,\r\n leftPartZoomedShapeId: 1,\r\n isSlabPlaceHolderPresent: false,\r\n }\r\n this.pos = {\r\n x: 0,\r\n y: 0,\r\n };\r\n this.slabAdditionalShapes = new SlabAdditionalShapes();\r\n this.measurementPoints = [];\r\n this.shapeOffset = null;\r\n this.centerButtonRightPart = null;\r\n this.centerButtonLeftPart = null;\r\n\r\n this.getOffset = function() {\r\n return this.getCenter()\r\n };\r\n\r\n this.getPos = () => {\r\n return this.pos\r\n };\r\n\r\n this.setPos = function(pos) {\r\n this.pos = {...pos}\r\n };\r\n\r\n this.getCenter = function() {\r\n return this.pos\r\n };\r\n\r\n this.setEnabled = (val) => {\r\n this.state.inEnabled = val\r\n };\r\n\r\n this.setSlabPlaceHolderPresent = (val) => {\r\n this.state.isSlabPlaceHolderPresent = val\r\n };\r\n\r\n this.getRightPartWidth = () => {\r\n return workspace.getCanvas().width / 2\r\n };\r\n\r\n this.getShapeOffset = () => {\r\n return this.shapeOffset\r\n };\r\n\r\n this.init = () => {\r\n this.initRightPart();\r\n this.initLeftPart();\r\n }\r\n\r\n this.initRightPart = () => {\r\n this.centerButtonRightPart = new StaticImage(\r\n 'eyeball',\r\n this.eventManager.getCtx().canvas.width - 40 - sqftSlabManager.centerButton.width,\r\n 30,\r\n sqftSlabManager.centerButton.width,\r\n sqftSlabManager.centerButton.height,\r\n false,\r\n true,\r\n this.beforeRenderCenterButtonRightPart.bind(this)\r\n );\r\n this.centerButtonLeftPart = new StaticImage(\r\n 'eyeball',\r\n this.eventManager.getCtx().canvas.width / 2 - 40 - sqftSlabManager.centerButton.width,\r\n 30,\r\n sqftSlabManager.centerButton.width,\r\n sqftSlabManager.centerButton.height,\r\n false,\r\n true,\r\n this.beforeRenderCenterButtonLeftPart.bind(this)\r\n );\r\n this.initSlabWorkspaceEvents();\r\n }\r\n\r\n this.initLeftPart = () => {\r\n this.eventManager.addEvent(\r\n this.eventManager.events.RENDER,\r\n this.renderSlabLeftPartWrapper,\r\n this.objectName,\r\n this.eventManager.priorities.SEGMENT_MEASUREMENTS\r\n );\r\n }\r\n\r\n this.initSlabWorkspaceEvents = function() {\r\n this.eventManager.addEvent(\r\n this.eventManager.events.MOUSE_MOVE,\r\n this.onMouseMove,\r\n this.objectName,\r\n this.eventManager.priorities.SLAB_RIGHT_PART_WORKSPACE\r\n );\r\n this.eventManager.addEvent(\r\n this.eventManager.events.MOUSE_DOWN,\r\n this.onMouseDown,\r\n this.objectName,\r\n EventManager.priorities.SLAB_RIGHT_PART_WORKSPACE\r\n );\r\n this.eventManager.addEvent(\r\n this.eventManager.events.MOUSE_UP,\r\n this.onMouseUp,\r\n this.objectName,\r\n EventManager.priorities.SLAB_RIGHT_PART_WORKSPACE\r\n );\r\n this.eventManager.addEvent(\r\n this.eventManager.events.WHEEL,\r\n this.onWheel,\r\n this.objectName,\r\n this.eventManager.priorities.SLAB_RIGHT_PART_WORKSPACE\r\n );\r\n this.eventManager.addEvent(\r\n this.eventManager.events.RENDER,\r\n renderSlabWorkspace,\r\n this.objectName,\r\n this.eventManager.priorities.SLAB_RIGHT_PART_WORKSPACE\r\n );\r\n this.eventManager.addEvent(\r\n this.eventManager.events.RENDER,\r\n this.renderSlabRightPartWrapper,\r\n this.objectName,\r\n this.eventManager.priorities.SLAB_RIGHT_PART_CONTENT\r\n );\r\n this.eventManager.addEvent(\r\n this.eventManager.events.RENDER,\r\n this.centerButtonRightPart.render,\r\n this.objectName,\r\n this.eventManager.priorities.SLAB_RIGHT_PART_CONTENT\r\n );\r\n this.eventManager.addEvent(\r\n this.eventManager.events.RENDER,\r\n this.centerButtonLeftPart.render,\r\n this.objectName,\r\n this.eventManager.priorities.SLAB_RIGHT_PART_CONTENT\r\n );\r\n };\r\n\r\n this.disableSlabImages = () => {\r\n this.eventManager.removeEvent(this.objectName);\r\n };\r\n\r\n this.deregisterEvents = () => {\r\n this.eventManager.removeEvent(this.objectName);\r\n };\r\n\r\n this.onMouseDown = (mousePos, e) => {\r\n void e;\r\n if (this.state.isCenterButtonLeftPartHovered) {\r\n this.eyeballButtonLeftPartClick();\r\n }\r\n if (!this.isOverRightPart(mousePos)) {\r\n return false;\r\n }\r\n if (this.state.isCenterButtonRightPartHovered) {\r\n this.eyeballButtonRightPartClick();\r\n }\r\n this.eventManager.stealCursor(true, true);\r\n this.state.mouseDown = true;\r\n this.state.mouseDownPosition = mousePos;\r\n this.eventManager.setCursor('grabbing', this, false);\r\n\r\n return true;\r\n };\r\n\r\n this.onMouseUp = (mousePos, e) => {\r\n if (!this.isOverRightPart(mousePos)) {\r\n return false;\r\n }\r\n this.state.mouseDown = false;\r\n this.state.mouseDownPosition = null;\r\n\r\n return this.onMouseMove(mousePos, e);\r\n }\r\n\r\n this.onMouseMove = (mousePos, e) => {\r\n if (e.terminate) {\r\n return false;\r\n }\r\n this.state.isCenterButtonLeftPartHovered = this.centerButtonLeftPart.isHovered(mousePos);\r\n if (!this.isOverRightPart(mousePos)) {\r\n return false;\r\n }\r\n this.state.isCenterButtonRightPartHovered = this.centerButtonRightPart.isHovered(mousePos);\r\n if (this.state.mouseDown) {\r\n this.moveSlabWorkspace(mousePos);\r\n } else {\r\n this.eventManager.resetCursor(this);\r\n }\r\n return true;\r\n }\r\n\r\n this.onWheel = (mousePos, e) => {\r\n void mousePos;\r\n void e;\r\n\r\n return true;\r\n }\r\n this.moveSlabWorkspace = (mousePos) => {\r\n if (!this.isOverRightPart(mousePos)) {\r\n return false;\r\n }\r\n let xDiff = mousePos.x - this.state.mouseDownPosition.x;\r\n let yDiff = mousePos.y - this.state.mouseDownPosition.y;\r\n\r\n this.pos.x -= xDiff;\r\n this.state.mouseDownPosition.x = mousePos.x;\r\n\r\n this.pos.y -= yDiff;\r\n this.state.mouseDownPosition.y = mousePos.y;\r\n };\r\n\r\n this.beforeRenderCenterButtonRightPart = () => {\r\n this.centerButtonRightPart.x = this.eventManager.getCtx().canvas.width - 40 - sqftSlabManager.centerButton.width;\r\n };\r\n\r\n this.beforeRenderCenterButtonLeftPart = () => {\r\n this.centerButtonLeftPart.x = this.eventManager.getCtx().canvas.width / 2 - 40 - sqftSlabManager.centerButton.width;\r\n };\r\n\r\n this.eyeballButtonRightPartClick = () => {\r\n const shapesIds = workspace.getShapeIds();\r\n const closestHigherNumber = getClosestHigherNumber(this.state.rightPartZoomedShapeId, shapesIds);\r\n const shape = workspace.getShapeById(closestHigherNumber);\r\n\r\n if (shape instanceof sqftShape) {\r\n workspaceZoom.zoomToSlabShape(shape, true);\r\n this.state.rightPartZoomedShapeId = shape.id\r\n } else {\r\n this.state.rightPartZoomedShapeId = closestHigherNumber === null ? 0 : closestHigherNumber;\r\n this.eyeballButtonRightPartClick()\r\n }\r\n return false\r\n };\r\n\r\n this.eyeballButtonLeftPartClick = () => {\r\n const shapesIds = workspace.getShapeIds();\r\n const closestHigherNumber = getClosestHigherNumber(this.state.leftPartZoomedShapeId, shapesIds);\r\n const shape = workspace.getShapeById(closestHigherNumber);\r\n\r\n if (shape instanceof sqftShape) {\r\n workspaceZoom.zoomToShape(shape, true);\r\n this.state.leftPartZoomedShapeId = shape.id\r\n } else {\r\n this.state.leftPartZoomedShapeId = closestHigherNumber === null ? 0 : closestHigherNumber;\r\n this.eyeballButtonLeftPartClick()\r\n }\r\n return false\r\n };\r\n\r\n this.isOverRightPart = (mousePos = {x: 0}) => {\r\n let rpw = this.getRightPartWidth();\r\n\r\n return mousePos.x > rpw\r\n };\r\n\r\n this.renderSlabRightPartWrapper = (ctx, isFullRender = false) => {\r\n //if (this.state.setSlabPlaceHolderPresent) {\r\n return renderSlabRightPart(ctx, isFullRender);\r\n //}\r\n };\r\n this.renderSlabLeftPartWrapper = (ctx) => {\r\n const reduxState = store.getState()\r\n let isMeasurementVisibleInSlabMode = reduxState.sqftSlabState.isMeasurementVisibleInSlabMode;\r\n if (isMeasurementVisibleInSlabMode) {\r\n renderMeasurementsAroundSnappedShapes(ctx, this.measurementPoints);\r\n }\r\n };\r\n};\r\n\r\nexport default new SlabWorkspace;\r\n","import {PartMenuType} from \"../../visComponents/constants\";\r\nimport {iCmp} from \"../../../misc/utils\";\r\nimport Layer from \"../../visComponents/layer\";\r\nimport {LayoutType, METADATA} from \"./constants\";\r\nimport PartCommon from \"../../visComponents/partCommon\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\n\r\nexport class Part extends PartCommon {\r\n\r\n constructor(isParent, isChild, menuType) {\r\n super();\r\n if (isChild || (isParent && menuType === PartMenuType.Simple)) {\r\n this.featuresList = {};\r\n this.featuresPartsList = {};\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this.featuresList[layoutName] = [];\r\n this.featuresPartsList[layoutName] = [];\r\n });\r\n this.allFeaturesReceived = false;\r\n this.realFeaturesReceived = false; // this prop is need on Scroll (if features count more that 1000)\r\n this.nextFeaturesPageToLoad = 0;\r\n this.activeFeature = null;\r\n this.placeholderFeature = null;\r\n this.placeholderChanged = false;\r\n this.firstClick = {\r\n \"0\": false\r\n };\r\n this.activeLockedFeature = null;\r\n this.activeNotInVisualizerFeature = null; // is needed to display in the QT selected activeNotInVisualizerFeature, but render proper activeFeature layer(for example, countertop)\r\n // name = \"\";\r\n this.visible = true;\r\n this.categoryEnabled = false;\r\n this.layout = null;\r\n this.featureGroupVisible = true; // dashboard's feature group eye ball logic\r\n this.featureGroupEnabled = true; // dashboard's feature group checkbox logic\r\n this.selectedFeaturesHistory = []; // array of strings(names). updated every time item is selected\r\n this.filtersReceived = null; // array of filters values, comes from BE, for ex [1221, 347, 1124]\r\n this.confirmedChange = false; // same as firstClick, but fires after someone changes feature and confirms changes\r\n this.featureBeforeChange = null; // feature that sets when menu is opened (to revert it back if user didn't confirm change)\r\n }\r\n if (isParent) {\r\n this.partThumbnail = '';\r\n this.relatedItems = [];\r\n }\r\n if (!isChild && !isParent) {\r\n this.dbFeature = null;\r\n this.layer = new Layer(\"bv\");\r\n this._customDisplayName = null;\r\n this.notesList = {};\r\n }\r\n this.partName = \"\";\r\n }\r\n\r\n set features(featuresList) {\r\n // features can't be set directly, we need to change featuresList array\r\n }\r\n get features() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresList[layout.getCurrentLayoutName()]\r\n }\r\n set featuresParts(featuresList) {\r\n // featuresParts can't be set directly, we need to change featuresPartsList array\r\n }\r\n get featuresParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresPartsList[layout.getCurrentLayoutName()]\r\n }\r\n\r\n /**\r\n * Checks whether a given for condition matches the needed value (or array of values)\r\n * @param name {string}\r\n * @param value {string || array}\r\n * @returns {boolean}\r\n */\r\n matchesMetaForCondition(name, value) {\r\n if (name === \"WaterLevel\" && this.partId === \"vanity_faucet\") {\r\n return this.metaData[\"Height\"] && this.metaData[\"Height\"] > value\r\n }\r\n if (name === \"SinkWidth\" && this.partId === \"vanity_sink\") {\r\n // if no metadata - return true! back compatability\r\n return !this.metaData[\"SinkWidth\"] || (this.metaData[\"SinkWidth\"] < value)// current sink should be smaller than Vanity\r\n }\r\n if (name === \"MountLevel\" && this.partId === \"vanity_sink\"\r\n && (!Array.isArray(this.metaData[\"MountType\"]) || !this.metaData[\"MountType\"].includes(\"V\"))) {\r\n // sinks without the MountType V should ignore MountLevel metaData, they should be checked my MountType only\r\n return true\r\n }\r\n if (!this.metaData[name]) {\r\n return false\r\n }\r\n if (Array.isArray(this.metaData[name])) {\r\n return this.metaData[name].some(condValue => {\r\n return condValue === METADATA.ALL || (Array.isArray(value) ? value.some(val => iCmp(condValue, val)) : iCmp(condValue, value))\r\n });\r\n }\r\n return this.metaData[name] === METADATA.ALL\r\n || (Array.isArray(value) ? value.some(val => iCmp(this.metaData[name], val)) : iCmp(this.metaData[name], value))\r\n }\r\n\r\n matchesMetaForArrayOfConditions(arrayOfConditions) {\r\n return arrayOfConditions.every((condition) => {\r\n return this.matchesMetaForCondition(condition.propName, condition.propValue);\r\n })\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem(this.partName, this)\r\n }\r\n}\r\n\r\n\r\n","import {baseNewImagesPath} from \"../../assets\";\r\n\r\nexport const applianceThumbnail = `${baseNewImagesPath}images/kv-icons/kv-filter-icons-stove.svg`;\r\nexport const cabinetThumbnail = `${baseNewImagesPath}images/kv-icons/top_cabinet.svg`;\r\nexport const centerIslandThumbnail = `${baseNewImagesPath}images/kv-icons/center_island_countertop.svg`;\r\nexport const countertopGroupThumbnail = `${baseNewImagesPath}images/kv-icons/vanity-countertop.svg`;\r\nexport const wallsThumbnail = `${baseNewImagesPath}images/bv_icons_new/Icons_Wall.svg`;\r\nexport const floorThumbnail = `${baseNewImagesPath}images/bv_icons_new/Icons_Floor.svg`;\r\n\r\nexport const largeLayoutShadow = `${baseNewImagesPath}images/bv-assets/KV-All-Global-Shadow-Placeholder_L_1620x1080.png`;\r\nexport const SmallLayoutShadow = `${baseNewImagesPath}images/bv-assets/KV-All-Global-Shadow-Placeholder_S_1620x1080.png`;\r\n\r\n/*layouts*/\r\nexport const LayoutThumbnails = {\r\n Small: `${baseNewImagesPath}images/kv-layout-thumbnails/S.png`,\r\n SmallWithPopout: `${baseNewImagesPath}images/kv-layout-thumbnails/SP.png`,\r\n SmallWithPeninsula: `${baseNewImagesPath}images/kv-layout-thumbnails/SN.png`,\r\n SmallWithIsland: `${baseNewImagesPath}images/kv-layout-thumbnails/SI.png`,\r\n SmallWithPopoutWithPeninsula: `${baseNewImagesPath}images/kv-layout-thumbnails/SPN.png`,\r\n SmallWithPopoutWithIsland: `${baseNewImagesPath}images/kv-layout-thumbnails/SPI.png`,\r\n SmallWithPeninsulaWithIsland: `${baseNewImagesPath}images/kv-layout-thumbnails/SNI.png`,\r\n SmallWithPopoutWithPeninsulaWithIsland: `${baseNewImagesPath}images/kv-layout-thumbnails/SPNI.png`,\r\n LShape: `${baseNewImagesPath}images/kv-layout-thumbnails/L.png`,\r\n LShapeWithPeninsula: `${baseNewImagesPath}images/kv-layout-thumbnails/LN.png`,\r\n LShapeWithIsland: `${baseNewImagesPath}images/kv-layout-thumbnails/LI.png`,\r\n LShapeWithPeninsulaWithIsland: `${baseNewImagesPath}images/kv-layout-thumbnails/LNI.png`,\r\n};\r\n","import {Part} from \"../part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {LayoutType, ShowerComboTubType} from \"../constants\";\r\nimport { showerTubComboThumbnail, custom60in30X8Shower } from '../../../bvComponent/core/assets';\r\n\r\nimport BathTubLiner from \"../subparts/showerTubCombo/bathtubLiner\";\r\nimport ReplacementTub from \"../subparts/showerTubCombo/replacementTub\";\r\nimport WalkInTub from \"../subparts/showerTubCombo/walkInTub\";\r\nimport JettedTub from \"../subparts/showerTubCombo/jettedTub\";\r\nimport WallConfiguration from \"../subparts/showerTubCombo/wallConfiguration\";\r\nimport {fixDbFeatureProperties} from \"../../../../misc/helpers\";\r\n\r\nexport class ShowerTubCombo extends Part {\r\n static id = 'Shower Tub Combo';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.showerTubComboIsActive = false; // param needed to check if shower is still active or not\r\n this.menuType = PartMenuType.Complex;\r\n this.partThumbnail = showerTubComboThumbnail;\r\n this.partName = 'Shower Tub Combo';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo\";\r\n this.relatedItems = [];\r\n this.wallConfiguration = null;\r\n this.bathTubLiner = null;\r\n this.replacementTub = null;\r\n this.walkInTub = null;\r\n this.jettedTub = null;\r\n\r\n // Kohler hardcode, they don't have bathtub_liner\r\n this.bottomTub = ShowerComboTubType.replacement_tub;\r\n this.leftShowerWallType = 'Pony';\r\n this.showerComboSize = '60in';\r\n\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Bathtub Liner\":\r\n relatedItemName = \"bathTubLiner\";\r\n RelatedItemClass = BathTubLiner;\r\n break;\r\n case \"Replacement Tub\":\r\n relatedItemName = \"replacementTub\";\r\n RelatedItemClass = ReplacementTub;\r\n break;\r\n case \"Walk In Tub\":\r\n relatedItemName = \"walkInTub\";\r\n RelatedItemClass = WalkInTub;\r\n break;\r\n case \"Jetted Tub\":\r\n relatedItemName = \"jettedTub\";\r\n RelatedItemClass = JettedTub;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setSpecificRules() {\r\n if (!this.wallConfiguration) {\r\n this.wallConfiguration = new WallConfiguration(true);\r\n this.wallConfiguration.counts = {\r\n allLayoutFeaturesCount: 0,\r\n largeLayoutFeaturesCount: 0,\r\n smallLayoutFeaturesCount: 0\r\n };\r\n this.relatedItems.unshift(this.wallConfiguration);\r\n this.wallConfiguration.getParent = () => this;\r\n }\r\n Object.keys(LayoutType).forEach(layoutType => {\r\n this.wallConfiguration.featuresList[layoutType] = [\r\n ShowerTubCombo.createCustomWallConfiguration(\r\n custom60in30X8Shower,\r\n \"Full Wall 60in\",\r\n \"30X8\",\r\n \"60in\",\r\n {\r\n \"RoomLayout\": [layoutType],\r\n \"ShowerSize\": ['60in'],\r\n \"CountertopSize\": [\"20in\", \"24in\", \"30in\", \"36in\", \"48in\", \"60in\", \"72in\"],\r\n },\r\n this,\r\n 100001\r\n ),\r\n ];\r\n this.wallConfiguration.counts[layoutType.toLowerCase() + \"LayoutFeaturesCount\"]++;\r\n });\r\n }\r\n\r\n static createCustomWallConfiguration(customThumbnail, name, leftShowerWallType, showerComboSize, metaData, parent, id) {\r\n const conf = new WallConfiguration();\r\n conf.partName = name;\r\n conf.showerBodyId = name.toLowerCase().replace(/ /gi, \"-\");\r\n conf.dbFeature = {};\r\n conf.featureName = name;\r\n conf.groupName = \"Wall Configuration\";\r\n conf.showerComboSize = showerComboSize;\r\n // conf.parent = parent;\r\n conf.getParent = () => parent.wallConfiguration;\r\n conf.metaData = metaData;\r\n conf.leftShowerWallType = leftShowerWallType;\r\n conf.customThumbnail = customThumbnail;\r\n conf.dbFeature = fixDbFeatureProperties({\r\n metaData,\r\n id,\r\n unlocked: true\r\n });\r\n return conf;\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n\r\n if (!this.showerTubComboIsActive) {\r\n return null\r\n }\r\n\r\n let res = [];\r\n this.getRelatedItems().forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n ? relatedItem.placeholderFeature.layer.addTo(res)\r\n : relatedItem.activeFeature ? relatedItem.activeFeature.layer.addTo(res) : null;\r\n });\r\n\r\n return res.length ? res : null;\r\n }\r\n\r\n subParts() {\r\n\r\n let subParts = [\r\n ...this.getRelatedItems().filter(item => item.visible).map(_ => new DesignNavigationItem(_.partName, _)),\r\n ...this.layout.parts.Shower.subParts().filter(subPart => {\r\n return (subPart.text === \"Fixture\")\r\n || (subPart.text === \"Shower Head\")\r\n || (subPart.text === \"Shower Walls\")\r\n || (subPart.text === \"Shower Walls Accent\")\r\n || (subPart.text === \"Shower Door\")\r\n || (subPart.text === \"Handle\")\r\n || (subPart.text === \"Pony Wall\")\r\n || (subPart.text === \"Pony Wall Cap\")\r\n || (subPart.text === \"Pony Wall Glass\")\r\n })\r\n ];\r\n\r\n if (this.bottomTub === ShowerComboTubType.walk_in_tub) {\r\n subParts = subParts.filter(subPart => {\r\n return subPart.part.partId !== \"shower_door\" && subPart.part.partId !== \"shower_door_handle\" && subPart.part.partId !== \"shower_fixture\"\r\n })\r\n }\r\n\r\n return subParts\r\n }\r\n\r\n getShowerRelatedItems() {\r\n return this.layout.parts.Shower.getRelatedItems().filter(relItem => {\r\n return (relItem.partId === \"shower_fixture\")\r\n || (relItem.partId === \"shower_head\")\r\n || (relItem.partId === \"shower_interior_wall\")\r\n || (relItem.partId === \"shower_wall_accent\")\r\n || (relItem.partId === \"shower_door\")\r\n || (relItem.partId === \"shower_door_handle\")\r\n || (relItem.partId === \"pony_wall\")\r\n || (relItem.partId === \"pony_wall_cap\")\r\n || (relItem.partId === \"pony_wall_glass\")\r\n })\r\n }\r\n\r\n setShowerTubCombo() {\r\n this.showerTubComboIsActive = true;\r\n if (this.layout.type === LayoutType.Small) {\r\n const showerParent = this.layout.parts.Shower;\r\n if (showerParent.showerBody && showerParent.showerBody.disabled) { // switch on all Shower features\r\n showerParent.showerBody.disabled = false;\r\n showerParent.showerBody.disabledClick();\r\n this.showerTubComboIsActive = true;\r\n }\r\n }\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false\r\n }\r\n\r\n handleSubPartClick() {}\r\n\r\n setZIndex(zIndexes) {\r\n if (!this.showerTubComboIsActive) {\r\n return null\r\n }\r\n\r\n if(zIndexes)\r\n this.relatedItems.forEach(_ => _.setZIndex(zIndexes));\r\n }\r\n\r\n setActiveTub(bottomTub) {\r\n this.bottomTub = bottomTub;\r\n }\r\n\r\n showerSize() {\r\n return this.showerComboSize\r\n }\r\n\r\n showerDimensions() {\r\n return this.leftShowerWallType\r\n }\r\n\r\n setShowerSize(leftShowerWallType, showerComboSize) {\r\n this.leftShowerWallType = leftShowerWallType;\r\n this.showerComboSize = showerComboSize;\r\n }\r\n\r\n setDefault() {\r\n // this.relatedItems.forEach(relatedItem => relatedItem.setDefault(layout));\r\n }\r\n\r\n}\r\n","import * as PropTypes from \"prop-types\";\r\n\r\nexport const DISCOUNT_MAIN_TYPES = {\r\n custom: \"custom\",\r\n freeFill: \"freeFill\",\r\n subTotal: \"subTotal\",\r\n nested: \"nested\",\r\n finance: \"finance\",\r\n deposit: \"deposit\",\r\n};\r\n\r\nexport const DISCOUNT_TYPES = {\r\n price: \"Price\",\r\n percent: \"Percent\"\r\n};\r\n\r\nexport const DISCOUNT_MODES = {\r\n and: \"And\",\r\n or: \"Or\"\r\n};\r\n\r\nexport const DISCOUNT_SECTION_TYPES = {\r\n default: \"default\",\r\n finance: \"finance\"\r\n};\r\n\r\nexport const DISCOUNT_FINANCE_CELLS = {\r\n financePercentage: \"Finance Percentage\",\r\n financeMonths: \"Months\",\r\n financeSalesPercentage: \"Sales Person Percentage\",\r\n}\r\n\r\nexport const discountInterFace = {\r\n id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\r\n order: PropTypes.number.isRequired,\r\n name: PropTypes.string.isRequired,\r\n enabled: PropTypes.bool.isRequired,\r\n type: PropTypes.oneOf([DISCOUNT_TYPES.price, DISCOUNT_TYPES.percent]).isRequired,\r\n mode: PropTypes.oneOf([DISCOUNT_MODES.and, DISCOUNT_MODES.or]).isRequired,\r\n amount: PropTypes.number.isRequired,\r\n isRidged: PropTypes.bool.isRequired,\r\n isSubTotal: PropTypes.bool,\r\n selected: PropTypes.bool, // it is not required, since it is not stored on the backend\r\n // specialVisible: PropTypes.bool, // it is not required, since it is not stored on the backend // we don't have it anymore\r\n oldDeleted: PropTypes.bool, // it is not required, since it is not stored on the backend\r\n uuId: PropTypes.string, // for new added nested\r\n nestedParent: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n discountType: PropTypes.oneOf(Object.keys(DISCOUNT_MAIN_TYPES)),\r\n financePercentage: PropTypes.number,\r\n financeMonths: PropTypes.number,\r\n financeSalesPercentage: PropTypes.number,\r\n financeOptions: PropTypes.string, // \"[12345, 12314, 1233]\" JSON\r\n multiSelections: PropTypes.bool,\r\n approveOptions: PropTypes.string, // \"['Some Name', 'Another Name']\"\r\n};\r\n\r\nexport const discountSectionsInterface = {\r\n id: PropTypes.number.isRequired,\r\n order: PropTypes.number.isRequired,\r\n name: PropTypes.string.isRequired,\r\n type: PropTypes.string,\r\n discounts: PropTypes.arrayOf(PropTypes.shape(discountInterFace))\r\n};\r\n","export const baseDashboardImagesPath = document.kvConfig.kioskMode ? './images/dashboard/images/icons/pj-scope-icons/enabled/' : ((location.port === '9007')\r\n ? 'http://quotekandb.com/content/Views/dashboard/images/icons/pj-scope-icons/enabled/'\r\n : '/content/Views/dashboard/images/icons/pj-scope-icons/enabled/');\r\nexport const baseNewImagesPath = (document.kvConfig.kioskMode || document.kvConfig.noInternetMode || location.port === '9007')\r\n ? './'\r\n : (document.querySelectorAll('link')[0].href.substring(0, document.querySelectorAll('link')[0].href.indexOf('/visualizers/') + \"/visualizers/\".length));\r\n // : '/content/Views/visualizers/';\r\n","import {getPriceWithCurrency} from \"./helpers\";\r\nimport store from \"../store\";\r\n\r\n/**\r\n *\r\n * @param price {string|number|null}\r\n * @param feature {featureInterface}\r\n * @param fabricatorData {object}\r\n * @param messages {object} intl messages object (t obe able to use in the receipt)\r\n * @return {string}\r\n */\r\nexport const getPriceWithIncluded = (price, feature, fabricatorData, messages) => {\r\n if (price) {\r\n return getPriceWithCurrency(fabricatorData.settings, price, feature, false)\r\n }\r\n if (feature && fabricatorData.isLowes && (feature.partId === \"center_island_sink\" || feature.partId === \"sink\")) {\r\n return messages[\"navItem.priceNotIncluded\"]\r\n }\r\n return messages[\"navItem.priceIncluded\"]\r\n}\r\n\r\n/**\r\n * returns actual price property\r\n * @param feature {featureInterface}\r\n * @param fabricatorSettings {object}\r\n * @return {string|number|null}\r\n */\r\nexport const getFeaturePriceProperty = (feature, fabricatorSettings = null) => {\r\n let settings = fabricatorSettings;\r\n if (!settings) {\r\n settings = store.getState().fabricatorState.settings;\r\n }\r\n if (settings.useFabricatorCostPrices) { // show fabricator prices instead of retail prices\r\n return feature.dbFeature.price\r\n }\r\n if (settings.showSalePrices && (typeof feature.dbFeature.fabricatorCost == \"number\") && (feature.dbFeature.fabricatorCost > 0)) {\r\n return feature.dbFeature.fabricatorCost\r\n }\r\n return feature.dbFeature.cost\r\n}\r\n\r\n\r\n/**\r\n *\r\n * @param fabricatorData {object}\r\n * @param forTotal {boolean}\r\n * @return {boolean}\r\n */\r\nexport const getShowPrice = (fabricatorData, forTotal = false) => {\r\n const fabricatorSettings = fabricatorData.settings;\r\n if (forTotal) {\r\n return fabricatorSettings.showPricing && !fabricatorData.hidePricesFromUser;\r\n }\r\n return fabricatorSettings.showPricing && !fabricatorData.hideCheckoutBreakdownCost && !fabricatorData.hidePricesFromUser;\r\n};\r\n\r\nexport function numberWithCommas(x) {\r\n return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\r\n}\r\n\r\n/**\r\n *\r\n * @param price {number}\r\n * @param markUpValue {number}\r\n * @param markUpType {\"mark_up\"|\"mark_down\"|undefined}\r\n * @return {number}\r\n */\r\nconst getMarkUpPrice = (price, markUpValue, markUpType) => {\r\n const percentCost = price * markUpValue / 100;\r\n return markUpType === \"mark_down\" ? price - percentCost : price + percentCost\r\n}\r\n\r\n/**\r\n *\r\n * @param price {number}\r\n * @param markUpLogic {markUpLogic}\r\n * @param fabricatorSettings {object}\r\n * @return {number}\r\n */\r\nexport const updatePriceWithMarkUp = (price, markUpLogic, fabricatorSettings) => {\r\n if (!price || !markUpLogic) {\r\n return price\r\n }\r\n if (fabricatorSettings && fabricatorSettings.useFabricatorCostPrices) {\r\n if (markUpLogic.cost && markUpLogic.cost.value) {\r\n return getMarkUpPrice(price, markUpLogic.cost.value, markUpLogic.cost.type)\r\n }\r\n } else if (fabricatorSettings && fabricatorSettings.showSalePrices) {\r\n if (markUpLogic.discounts && markUpLogic.discounts.value) {\r\n return getMarkUpPrice(price, markUpLogic.discounts.value, markUpLogic.discounts.type)\r\n }\r\n } else if (markUpLogic.retail && markUpLogic.retail.value) {\r\n return getMarkUpPrice(price, markUpLogic.retail.value, markUpLogic.retail.type)\r\n }\r\n return price\r\n}\r\n\r\nexport const parseMarkUp = (markUpString) => {\r\n if (!markUpString) {\r\n return \"\"\r\n }\r\n let globalMarkUp = JSON.parse(markUpString);\r\n if (typeof globalMarkUp === \"object\" && (globalMarkUp != null)) {\r\n // {retail: {value: \"10\", type: \"mark_up\"}} -> {retail: {value: 10, type: \"mark_up\"}}\r\n Object.keys(globalMarkUp).forEach(key => {\r\n if ((typeof globalMarkUp[key] === \"object\") && globalMarkUp[key].value) {\r\n globalMarkUp[key].value = +globalMarkUp[key].value;\r\n }\r\n });\r\n if (globalMarkUp.isUpdatedInJobBoard) {\r\n delete globalMarkUp.isUpdatedInJobBoard // we don't need this property anymore, once we save the job - it should be erased\r\n }\r\n }\r\n return globalMarkUp\r\n}\r\n","//INITIAL FLOW\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const addNewQuote = () => ({\r\n type: types.ADD_NEW_QUOTE,\r\n payload: {}\r\n});\r\n\r\nexport const setQuotes = (quotes) => ({\r\n type: types.SET_QUOTES,\r\n payload: {quotes}\r\n});\r\n\r\nexport const updateQuote = (quote, updatedQuote) => ({\r\n type: types.UPDATE_QUOTE,\r\n payload: {quote, updatedQuote}\r\n});\r\n\r\nexport const setActiveQuoteIndex = (activeQuoteIndex) => ({\r\n type: types.SET_ACTIVE_QUOTE_INDEX,\r\n payload: {activeQuoteIndex}\r\n});\r\n","import uniq from \"lodash/uniq\";\r\nimport isEqual from \"lodash/isEqual\";\r\nimport * as uuid from \"uuid\";\r\n\r\nimport {COUNTERTOP_GROUP} from \"../bvcomponents/kvComponent/core/constants\";\r\nimport Config, {USE_FAB_FILTERS_ONLY} from \"../config\";\r\nimport {hardCodeIsAmericanImport, hardCodeIsDeStefano, hardCodeIsFloform} from \"./fabricatorHardcode\";\r\nimport {getAllFeatureFilters, getFilterGroupValue, getFilterGroupValues, mergeFilterObjects} from \"./utils\";\r\nimport {getBvGroupFeatures, getBvGroupFilterValues} from \"../api/server-api\";\r\nimport {getCurrentLayout} from \"../bvcomponents/appLayout\";\r\nimport {getHardCodedFilterGroups} from \"../bvcomponents/look/filtersHardcode\";\r\nimport store from \"../store\";\r\nimport {updateFiltersCount} from \"../actions/filtersFunctions\";\r\n\r\n\r\n/**\r\n * returns feature' color filter value object\r\n * @param lookActiveFeature {object}\r\n * @param filterGroups {array}\r\n * @param colorFilterGroup {object}\r\n * @returns {object} feature' color filter value object\r\n */\r\nexport const getColorFilterValue = (lookActiveFeature, filterGroups, colorFilterGroup = null) => {\r\n if (!lookActiveFeature || !Array.isArray(filterGroups)) {\r\n return null\r\n }\r\n\r\n if (!colorFilterGroup) {\r\n colorFilterGroup = filterGroups.find(group => group.name === \"Color\");\r\n }\r\n\r\n if (!colorFilterGroup) {\r\n return null\r\n }\r\n\r\n const activeFeatureValues = getFilterGroupValues(lookActiveFeature, colorFilterGroup);\r\n\r\n // console.log(\"activeFeatureValues\", activeFeatureValues);\r\n\r\n if (!Array.isArray(activeFeatureValues) || !activeFeatureValues.length) {\r\n return null\r\n }\r\n\r\n return getFilterGroupValue(activeFeatureValues[0], colorFilterGroup);\r\n}\r\n\r\nexport const setActivePartFilterValues = (filterValuesArray, activePart, filterGroups) => {\r\n console.log(\"filterValuesArray from backend:\", filterValuesArray);\r\n if ((COUNTERTOP_GROUP.includes(activePart.partId) || activePart.partId === \"vanity_countertop\")\r\n && filterValuesArray && !Config.isDevMode() && !USE_FAB_FILTERS_ONLY) {\r\n let availableCountertopGroupFilters = [\"color\", \"stone color\", \"collection\", \"manufacturer\", \"countertop material\", \"stone finish\", \"color group\"]\r\n if (activePart.partId === \"backsplash\") {\r\n availableCountertopGroupFilters.push(\"material\");\r\n }\r\n if (document.kvConfig.userId === 141822) { // https://asw.quotekitchenandbath.com/kitchen#/\r\n availableCountertopGroupFilters.push(\"material thickness\");\r\n availableCountertopGroupFilters.push(\"promotional discounts\");\r\n availableCountertopGroupFilters.push(\"color group\");\r\n }\r\n if (document.kvConfig.userId === 138452) { // https://cutting_edge_countertops.quotekitchenandbath.com/kitchen#/\r\n availableCountertopGroupFilters.push(\"price group\");\r\n }\r\n if (document.kvConfig.userId === 252141) { // https://solidsurface.quotekitchenandbath.com/visualizer#/\r\n availableCountertopGroupFilters.push(\"price\");\r\n }\r\n if (window.location.href.includes(\"isfa\")) { // https://isfa.quotekitchenandbath.com/kitchen?mode=dashboard&p=208659&language=en-US#/visualizer\r\n availableCountertopGroupFilters.push(\"color temperature\");\r\n }\r\n if (hardCodeIsDeStefano()) { // https://de_stefano_new.quotekitchenandbath.com/kitchen#/\r\n availableCountertopGroupFilters = availableCountertopGroupFilters.filter(f => {\r\n return f !== \"collection\" && f !== \"manufacturer\"\r\n });\r\n availableCountertopGroupFilters.push(\"material thickness\");\r\n }\r\n if (hardCodeIsFloform()) {\r\n availableCountertopGroupFilters = availableCountertopGroupFilters.filter(f => f !== \"stone color\");\r\n }\r\n const allFilterGroups = filterGroups.filter(filterGroup => {\r\n if (window.location.href.includes(\"porcelanosa\")) { // show all filters on https://porcelanosa_new.quotekitchenandbath.com/kitchen#/ except Edge\r\n return filterGroup.name && !filterGroup.name.includes(\"Edge\")\r\n }\r\n // if (USE_FAB_FILTERS_ONLY) {\r\n // if (!Array.isArray(filterGroup.values) || !filterGroup.values.length) {\r\n // return false\r\n // }\r\n // if (filterGroup.values.filter(fgValue => fgValue.isFabricatorCustomFilter)) {\r\n // return true\r\n // }\r\n // }\r\n return filterGroup && filterGroup.name && availableCountertopGroupFilters.includes(filterGroup.name.trim().toLowerCase())\r\n });\r\n filterValuesArray = filterValuesArray.filter(filterId => {\r\n return allFilterGroups.some(filterGroup => filterGroup.values && filterGroup.values.some(filterValueObject => {\r\n return filterValueObject.id === filterId\r\n }))\r\n });\r\n }\r\n if (activePart.allFeaturesReceived && hardCodeIsAmericanImport()) {\r\n activePart.features.forEach(feature => {\r\n [\"filterValueIDs\", \"fabFilterValueIDs\"].forEach(key => {\r\n if (feature.dbFeature[key]) {\r\n Object.keys(feature.dbFeature[key]).forEach(filterGroupId => {\r\n const filterValues = feature.dbFeature[key][filterGroupId];\r\n if (Array.isArray(filterValues)) {\r\n filterValues.forEach(filterValueId => {\r\n if (!filterValuesArray.includes(filterValueId)) {\r\n filterValuesArray.push(filterValueId)\r\n }\r\n })\r\n }\r\n })\r\n }\r\n })\r\n })\r\n console.log(\"filterValuesArray from features:\", filterValuesArray);\r\n }\r\n activePart.filtersReceived = filterValuesArray;\r\n};\r\n\r\n\r\n\r\n/**\r\n * returns all available filter groups with values for navItems\r\n * @param navItems {array}\r\n * @param allFilterGroups {array}\r\n * @returns {array}\r\n */\r\nexport const getAvailableFiltersForNavItems = (navItems, allFilterGroups) => {\r\n let filterGroups = [];\r\n for (let i = 0; i < navItems.length; i++) {\r\n const checkFeature = navItems[i].part;\r\n let featureFilters = getAllFeatureFilters(checkFeature);\r\n const featureOptions = navItems[i].colorOptions;\r\n if (Array.isArray(featureOptions) && featureOptions.length) {\r\n featureOptions.forEach((option) => {\r\n if (option.feature.dbFeature.id !== checkFeature.dbFeature.id) {\r\n const fOptions = getAllFeatureFilters(option.feature);\r\n featureFilters = mergeFilterObjects(featureFilters, fOptions)\r\n }\r\n });\r\n }\r\n Object.keys(featureFilters).forEach(key => {\r\n let existingFilterGroup = filterGroups.find(group => group.id === +key);\r\n const filterGroupFromAll = allFilterGroups.find(group => group.id === +key);\r\n if (!existingFilterGroup) {\r\n if (filterGroupFromAll) {\r\n existingFilterGroup = Object.assign({}, filterGroupFromAll, {values: []});\r\n filterGroups.push(existingFilterGroup);\r\n }\r\n }\r\n if (existingFilterGroup) {\r\n const currentFilterValues = featureFilters[existingFilterGroup.id];\r\n if (Array.isArray(currentFilterValues)) {\r\n currentFilterValues.forEach(filterValueId => {\r\n if (!existingFilterGroup.values.some(fValue => fValue.id === filterValueId) && filterGroupFromAll) {\r\n const fValue = getFilterGroupValue(filterValueId, filterGroupFromAll);\r\n if (fValue) {\r\n existingFilterGroup.values.push(fValue)\r\n }\r\n }\r\n })\r\n }\r\n }\r\n })\r\n }\r\n return filterGroups\r\n}\r\n\r\n/**\r\n * returns all available filter groups with values for received from backend filters\r\n * @param featureGroup {featureGroupInterface}\r\n * @param allFilterGroups {[filterGroup]}\r\n * @returns {array}\r\n */\r\nexport const getAvailableFiltersForReceivedFilters = (featureGroup, allFilterGroups) => {\r\n let filterGroups = [];\r\n for (let i = 0; i < allFilterGroups.length; i++) {\r\n const filterGroup = allFilterGroups[i];\r\n for (let k = 0; k < filterGroup.values.length; k++) {\r\n const filterValue = filterGroup.values[k];\r\n if (featureGroup.filtersReceived.includes(filterValue.id)) {\r\n let existingFilterGroup = filterGroups.find(group => group.id === filterGroup.id);\r\n if (!existingFilterGroup) {\r\n existingFilterGroup = Object.assign({}, filterGroup, {values: []});\r\n filterGroups.push(existingFilterGroup);\r\n }\r\n if (!existingFilterGroup.values.some(fValue => fValue.id === filterValue.id)) {\r\n existingFilterGroup.values.push(filterValue)\r\n }\r\n }\r\n }\r\n }\r\n return filterGroups\r\n}\r\n\r\nexport const checkIfNeedToReceiveFeaturesIfFiltersApplied = (selectedFilters, currentParent, onScroll = false) => {\r\n if (currentParent.getRealFeaturesReceivedProperty()) { // all features received, why do we need to request more?\r\n return false\r\n }\r\n let arrayOfNeededFiltersToReceive = uniq( // remove duplicates\r\n selectedFilters.map(filterObj => filterObj.filterId)\r\n );\r\n if (currentParent.filterIdsReceived) {\r\n // make one object with one filter in array (since we don't need to make request with several filters)\r\n arrayOfNeededFiltersToReceive = arrayOfNeededFiltersToReceive.filter((filterValue) => {\r\n return !currentParent.filterIdsReceived.find(filterIdsReceived => {\r\n return filterIdsReceived.filterIds.includes(filterValue)\r\n })\r\n })\r\n }\r\n if (!arrayOfNeededFiltersToReceive.length) {\r\n return false\r\n }\r\n if (!currentParent.filterIdsReceived) {\r\n currentParent.filterIdsReceived = [];\r\n return {\r\n arrayOfNeededFiltersToReceive,\r\n page: 0\r\n };\r\n } else {\r\n const existingFiltersRequest = currentParent.filterIdsReceived.find(filtersReceivedObject => {\r\n return isEqual(filtersReceivedObject.filterIds.sort(), arrayOfNeededFiltersToReceive.sort())\r\n });\r\n if (existingFiltersRequest) {\r\n if (existingFiltersRequest.allFeaturesWithFiltersReceived || !onScroll) { //!onScroll - componentWillReceiveProps request\r\n return false\r\n } else {\r\n return existingFiltersRequest\r\n }\r\n } else {\r\n return {\r\n arrayOfNeededFiltersToReceive,\r\n page: 0\r\n };\r\n }\r\n }\r\n};\r\n\r\nexport const getFeaturesFromBackendWithFilters = (featureGroup, counterTopFiltersIdsReceived, existingFilterObject = null) => {\r\n const filterObject = existingFilterObject || {\r\n uuid: uuid.v4(),\r\n filterIds: counterTopFiltersIdsReceived, // array of arrays, ex. [[56],[1122,1313]] etc.\r\n featuresReceived: 0,\r\n page: 0\r\n };\r\n if (!existingFilterObject) {\r\n featureGroup.filterIdsReceived.push(filterObject);\r\n }\r\n const featuresCountToReceive = 6000;\r\n featureGroup.requestInProgress = true;\r\n return getBvGroupFeatures(\r\n featureGroup.dbName || featureGroup.partName,\r\n filterObject.page,\r\n featuresCountToReceive,\r\n counterTopFiltersIdsReceived\r\n )\r\n .then((response) => {\r\n featureGroup.requestInProgress = false;\r\n if (response && response.length) {\r\n console.log(\"response.data with filters\", response);\r\n featureGroup.setGroupFeatures(response, featuresCountToReceive, false, \"\", null, true);\r\n featureGroup.filterIdsReceived = featureGroup.filterIdsReceived.map((filtersReceivedObject) => {\r\n if (filtersReceivedObject.uuid === filterObject.uuid) {\r\n filtersReceivedObject.featuresReceived += response.length;\r\n if (response.length < featuresCountToReceive) {\r\n filtersReceivedObject.allFeaturesWithFiltersReceived = true;\r\n } else {\r\n filtersReceivedObject.page++;\r\n }\r\n }\r\n return filtersReceivedObject\r\n });\r\n }\r\n return response\r\n });\r\n}\r\n\r\nexport const getSelectedFiltersLength = (filterGroup, selectedFilters) => {\r\n return selectedFilters.reduce((total, selectedFilter) => {\r\n return total + (filterGroup.id === selectedFilter.filterGroupId ? 1 : 0)\r\n }, 0)\r\n}\r\n\r\n\r\n/**\r\n * returns all available filter groups with values for featureGroup's part id\r\n * @param featureGroup {featureGroupInterface}\r\n * @param partId {string}\r\n * @param allFilterGroups {array}\r\n * @param shopNavItems {[navItemInterface]}\r\n * @param forceFromNavItems {boolean}\r\n * @returns {array}\r\n */\r\nexport const getAvailableFilters = (featureGroup, partId, allFilterGroups, shopNavItems = null, forceFromNavItems = false) => {\r\n const layout = getCurrentLayout();\r\n if (!featureGroup && partId) {\r\n featureGroup = layout.getFeatureGroupByPartId(partId)\r\n }\r\n if (featureGroup) {\r\n if (featureGroup.filtersReceived && !forceFromNavItems) {\r\n return getAvailableFiltersForReceivedFilters(featureGroup, allFilterGroups)\r\n }\r\n const navItems = shopNavItems || layout.designNavigationItems(\r\n {part: featureGroup},\r\n {},\r\n \"\",\r\n null,\r\n false,\r\n allFilterGroups\r\n );\r\n return getAvailableFiltersForNavItems(navItems, allFilterGroups)\r\n }\r\n return []\r\n}\r\n\r\n/**\r\n * returns all available filter groups for featureGroup\r\n * @param featureGroup {featureGroupInterface}\r\n * @param shopNavItems {[navItemInterface]}\r\n * @returns {[filterGroupInterface]}\r\n */\r\nexport const getFeatureGroupFilters = (featureGroup, shopNavItems = null) => {\r\n if (!featureGroup) {\r\n return []\r\n }\r\n const {selectedFilters, filterGroups} = store.getState().filterState;\r\n if (!featureGroup.filtersReceived && !featureGroup.realFeaturesReceived && !featureGroup.filtersRequested) {\r\n // && !featureGroup.realFeaturesReceived\r\n featureGroup.filtersRequested = true;\r\n getBvGroupFilterValues(featureGroup.dbName || featureGroup.partName, null, false)\r\n .then((featureGroupFiltersResponse) => {\r\n setActivePartFilterValues(featureGroupFiltersResponse.data, featureGroup, filterGroups);\r\n store.dispatch(updateFiltersCount());\r\n });\r\n }\r\n const availableFilters = getAvailableFilters(featureGroup, \"\", filterGroups, shopNavItems);\r\n // we are using this in sqft calc\r\n // if (!IS_LIXIL_UI) { // might need to change this, but for now we hardcode filters for all profiles\r\n // return availableFilters\r\n // }\r\n return getHardCodedFilterGroups(availableFilters, featureGroup.partId, selectedFilters)\r\n}\r\n","import {createContext} from \"react\";\r\n\r\nexport default createContext({});\r\n","import {iCmp} from \"../../../../misc/utils\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport Layer from \"../../../visComponents/layer\";\r\nimport PartCommon from \"../../../visComponents/partCommon\";\r\n\r\nexport class Part extends PartCommon {\r\n\r\n constructor(isParent, isChild, menuType) {\r\n super();\r\n if (isChild || (isParent && menuType === PartMenuType.Simple)) {\r\n this.featuresList = {\r\n Large: [],\r\n Small: []\r\n };\r\n this.featuresPartsList = {\r\n Large: [],\r\n Small: []\r\n };\r\n this.allFeaturesReceived = false;\r\n this.realFeaturesReceived = false; // this prop is need on Scroll (if features count more that 1000)\r\n this.nextFeaturesPageToLoad = 0;\r\n this.activeFeature = null;\r\n this.placeholderFeature = null;\r\n this.shadowFeature = null;\r\n this.placeholderChanged = false;\r\n this.firstClick = {\r\n \"0\": false // first quote\r\n };\r\n this.activeLockedFeature = null;\r\n this.activeNotInVisualizerFeature = null; // is needed to display in the QT selected activeNotInVisualizerFeature, but render proper activeFeature layer(for example, countertop)\r\n // name = \"\";\r\n this.visible = true;\r\n this.categoryEnabled = false;\r\n this.layout = null;\r\n this.featureGroupVisible = true; // dashboard's feature group eye ball logic\r\n this.featureGroupEnabled = true; // dashboard's feature group checkbox logic\r\n this.filtersReceived = null; // array of filters values, comes from BE, for ex [1221, 347, 1124]\r\n }\r\n if (isParent) {\r\n this.partThumbnail = '';\r\n this.relatedItems = [];\r\n }\r\n if (!isChild && !isParent) {\r\n this.dbFeature = null;\r\n this.layer = new Layer(\"bv\");\r\n this._customDisplayName = null;\r\n this.notesList = {};\r\n }\r\n this.partName = \"\";\r\n }\r\n\r\n set features(featuresList) {\r\n // features can't be set directly, we need to change featuresList array\r\n }\r\n get features() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresList[layout.getCurrentLayoutName()]\r\n }\r\n set featuresParts(featuresList) {\r\n // featuresParts can't be set directly, we need to change featuresPartsList array\r\n }\r\n get featuresParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresPartsList[layout.getCurrentLayoutName()]\r\n }\r\n\r\n featureClicked() {\r\n this.updateLocalStorage();\r\n // other specific events, for ex. Google Analytics, etc.\r\n }\r\n\r\n /**\r\n * Checks whether a given for condition matches the needed value (or array of values)\r\n * @param name {string}\r\n * @param value {string || array}\r\n * @returns {int} -1 - no such for condition, 0 - no match, 1 - matches\r\n */\r\n matchesMetaForCondition(name, value) {\r\n return this.metaData[name] && this.metaData[name].some(condValue => {\r\n return Array.isArray(value) ? value.some(val => iCmp(condValue, val, true)) : iCmp(condValue, value, true)\r\n });\r\n }\r\n\r\n matchesMetaForArrayOfConditions(arrayOfConditions) {\r\n return arrayOfConditions.every((condition) => {\r\n let conditionPassed = this.matchesMetaForCondition(condition.propName, condition.propValue);\r\n if (condition.propName === \"EX L\" && !conditionPassed) {\r\n conditionPassed = this.matchesMetaForCondition( \"Wall\", condition.propValue);\r\n } else if (condition.propName === \"Size\" && condition.propValue === \"60in\" && Array.isArray(this.metaData[\"Size\"])\r\n && this.metaData[\"Size\"].includes(\"30in\")) {\r\n conditionPassed = false\r\n }\r\n return conditionPassed\r\n })\r\n }\r\n}\r\n\r\n\r\n","import React from \"react\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport Analytics from './../../analytics';\r\nimport store from \"../../store\";\r\nimport {UserPopupTypes} from \"../visComponents/constants\";\r\n\r\nconst LockedView = (props) => {\r\n const fabricatorSettings = store.getState().fabricatorState.settings;\r\n const getQuoteEnabled = fabricatorSettings.enableQuote;\r\n return (\r\n
\r\n \r\n
\r\n
\r\n )\r\n};\r\n\r\nLockedView.displayName = 'LockedView';\r\n\r\nexport default LockedView;\r\n\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport $ from \"jquery\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport Analytics from \"../../../../analytics\";\r\nimport {getCurrentLayout} from \"../../../appLayout\";\r\n\r\nexport default class MobileMenuSelect extends Component {\r\n\r\n static propTypes = {\r\n // relatedItems: PropTypes.array,\r\n // relatedItemClick: PropTypes.func.isRequired,\r\n onSubPartClick: PropTypes.func.isRequired,\r\n onParentItemClick: PropTypes.func.isRequired,\r\n parentItems: PropTypes.arrayOf(PropTypes.instanceOf(DesignNavigationItem)),\r\n activePart: PropTypes.object,\r\n activeSubPart: PropTypes.object,\r\n desktop: PropTypes.bool,\r\n };\r\n\r\n static defaultProps = {\r\n desktop: false,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n toggle: false,\r\n showRelatedItems: true,\r\n translateId: this.props.activeSubPart ? this.props.activeSubPart.translateId : ''\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n if (!this.props.desktop) {\r\n this.setShowName(this.props);\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('click', this.handleWrapperBlur)\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n this.setShowName(nextProps);\r\n }\r\n\r\n setShowName(props) {\r\n if (props.activeSubPart && (props.activeSubPart.translateId !== this.state.translateId)) {\r\n this.setState({\r\n translateId: props.activeSubPart.translateId\r\n })\r\n }\r\n if (!props.activeSubPart && props.activePart && (props.activePart.partName !== this.state.translateId)) {\r\n this.setState({\r\n translateId: props.activePart.translateId\r\n })\r\n }\r\n }\r\n\r\n handleParentItemClick = (parentItem) => {\r\n Analytics.sendClickEvent(\"parent-item-clicked\");\r\n Analytics.sendClickEvent(\"parent-item-clicked: \" + parentItem.text);\r\n console.log('click parentItem', parentItem);\r\n this.props.onParentItemClick(parentItem);\r\n let showRelatedItems = true;\r\n if ((parentItem.text === \"Ceiling\" &&\r\n (document.kvConfig.visualizerType === \"Bathroom\" || document.kvConfig.visualizerType === \"BV\"))\r\n || parentItem.text === \"Floor\" || parentItem.text === \"Window\" || parentItem.text === \"Toilet\") {\r\n showRelatedItems = false;\r\n this.handleToggleDropdown();\r\n }\r\n\r\n this.setState({\r\n showRelatedItems,\r\n translateId: parentItem.part.translateId\r\n });\r\n if (parentItem.text === \"Floor\") {\r\n $('html, body').animate({scrollTop: document.body.scrollHeight}, 800);\r\n } else if (parentItem.text === \"Ceiling\") {\r\n $('html, body').animate({scrollTop: 0}, 800);\r\n }\r\n };\r\n\r\n handleBackClick = () => {\r\n this.setState({\r\n showRelatedItems: false,\r\n translateId: this.props.activePart.translateId\r\n });\r\n };\r\n\r\n handleRelatedItemClick = (relatedItem) => {\r\n Analytics.sendClickEvent(\"related-item-clicked\");\r\n Analytics.sendClickEvent(\"related-item-clicked: \" + relatedItem.part.partName);\r\n console.log('relatedItem', relatedItem);\r\n this.props.onSubPartClick(relatedItem);\r\n this.handleToggleDropdown();\r\n this.setState({\r\n translateId: relatedItem.part.translateId\r\n });\r\n if (relatedItem.text === \"Ceiling\") {\r\n $('html, body').animate({scrollTop: 0}, 800);\r\n }\r\n };\r\n\r\n handleToggleDropdown = () => {\r\n Analytics.sendClickEvent(this.state.toggle\r\n ? \"mobile-menu-select-dropdown-toggle-closed\"\r\n : \"mobile-menu-select-dropdown-toggle-open\"\r\n );\r\n\r\n this.setState({\r\n toggle: !this.state.toggle\r\n }, () => {\r\n if (this.state.toggle) {\r\n this.setState({\r\n subParts: this.props.activePart.subParts(),\r\n showRelatedItems: this.props.activePart.partName === \"Toilet\" ? false : !!this.props.activeSubPart\r\n });\r\n setTimeout(() => {\r\n window.addEventListener('click', this.handleWrapperBlur);\r\n }, 0)\r\n } else {\r\n window.removeEventListener('click', this.handleWrapperBlur)\r\n }\r\n })\r\n };\r\n\r\n handleWrapperBlur = (e) => {\r\n if (!e.target.closest('.menu-select__dropdown-list-item')\r\n && !e.target.closest('.menu-select__dropdown-back') && !e.target.closest('.menu-select__dropdown')) {\r\n this.handleToggleDropdown();\r\n }\r\n };\r\n\r\n handlePrevClick = () => {\r\n Analytics.sendClickEvent('mobile-menu-select-previous');\r\n // console.log('this.state.subParts', this.props.parentItems);\r\n // console.log('this.state.translateId', this.state.translateId);\r\n // console.log('this.state.subParts', this.state.subParts);\r\n // console.log('this.props.activePart', this.props.activePart);\r\n // console.log('this.props.activeSubPart', this.props.activeSubPart);\r\n\r\n let prevItem = null;\r\n if (this.props.activeSubPart) {\r\n const subParts = this.props.activePart.subParts();\r\n const currentChildIndex = subParts.findIndex(childItem => {\r\n return this.props.activeSubPart.partId === childItem.part.partId\r\n });\r\n prevItem = subParts[currentChildIndex - 1];\r\n // console.log('currentChildIndex', currentChildIndex);\r\n // console.log('prevItem', prevItem);\r\n }\r\n if (prevItem) {\r\n this.props.onSubPartClick(prevItem);\r\n this.setState({\r\n translateId: prevItem.part.translateId\r\n });\r\n } else {\r\n const currentParentIndex = this.props.parentItems.findIndex(parentItem => {\r\n const partName = this.props.activePart.partName;\r\n return parentItem.text === partName\r\n });\r\n const prevParentItem = this.props.parentItems[currentParentIndex - 1];\r\n\r\n // console.log('currentParentIndex', currentParentIndex);\r\n // console.log('prevParentItem', prevParentItem);\r\n if (prevParentItem) {\r\n this.props.onParentItemClick(prevParentItem);\r\n const subParts = prevParentItem.part.subParts();\r\n const lastSubPart = subParts[subParts.length - 1];\r\n // console.log('lastSubPart',lastSubPart);\r\n if (prevParentItem.part.menuType === 1) {\r\n setTimeout(() => {\r\n this.props.onSubPartClick(lastSubPart);\r\n this.setState({\r\n translateId: lastSubPart.part.translateId,\r\n });\r\n }, 0)\r\n }\r\n }\r\n }\r\n\r\n };\r\n\r\n handleNextClick = () => {\r\n Analytics.sendClickEvent('mobile-menu-select-next');\r\n let nextItem = null;\r\n if (this.props.activeSubPart) {\r\n const subParts = this.props.activePart.subParts();\r\n const currentChildIndex = subParts.findIndex(childItem => {\r\n return this.props.activeSubPart.partId === childItem.part.partId\r\n });\r\n nextItem = subParts[currentChildIndex + 1];\r\n }\r\n if (nextItem) {\r\n this.props.onSubPartClick(nextItem);\r\n this.setState({\r\n translateId: nextItem.part.translateId\r\n });\r\n } else {\r\n const currentParentIndex = this.props.parentItems.findIndex(parentItem => {\r\n const partName = this.props.activePart.partName;\r\n return parentItem.text === partName\r\n });\r\n const nextParentItem = this.props.parentItems[currentParentIndex + 1];\r\n if (nextParentItem) {\r\n this.props.onParentItemClick(nextParentItem);\r\n const subParts = nextParentItem.part.subParts();\r\n const lastSubPart = subParts[0];\r\n if (nextParentItem.part.menuType === 1) {\r\n setTimeout(() => {\r\n this.props.onSubPartClick(lastSubPart);\r\n this.setState({\r\n translateId: lastSubPart.part.translateId,\r\n });\r\n }, 0)\r\n }\r\n }\r\n }\r\n };\r\n\r\n render() {\r\n\r\n const dropDownStyles = this.state.toggle ? { height: this.props.desktop ? 320 : window.innerHeight - 42 } : {};\r\n\r\n return (\r\n
\r\n {/*
*/}\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {this.state.translateId ? : null}\r\n \r\n
\r\n
\r\n {this.state.showRelatedItems\r\n ? \r\n : null}\r\n
    \r\n {this.state.showRelatedItems && this.props.activePart ? this.props.activePart.subParts(true, true).map((subPart, index) => {\r\n if (!subPart.part.translateId) {\r\n console.info(\"Feature Group Translate is missing!\", subPart.part.partId);\r\n }\r\n const layout = getCurrentLayout();\r\n if (!layout.hasNavItemsLength(subPart)) {\r\n return null\r\n }\r\n return (\r\n
  • this.handleRelatedItemClick(subPart)}\r\n className={\"menu-select__dropdown-list-item\"\r\n + (this.props.activeSubPart && (this.props.activeSubPart.partName === subPart.text)\r\n ? \" menu-select__dropdown-list-item--active\" : \"\")\r\n + ` menu-select__dropdown-list-item--${subPart.part.partId}`}>\r\n {subPart.part.translateId ? : null}\r\n
  • \r\n )\r\n }) : this.props.parentItems.map((parentItem, index) => {\r\n if (!parentItem.part.translateId) {\r\n console.info(\"Feature Parent Group translate is missing!\", parentItem.text);\r\n }\r\n return (\r\n
  • this.handleParentItemClick(parentItem)}\r\n className={\"menu-select__dropdown-list-item\"\r\n + (this.props.activePart && (this.props.activePart.partName === parentItem.text)\r\n ? \" menu-select__dropdown-list-item--active\" : \"\")\r\n + ` menu-select__dropdown-list-item--${parentItem.text.toLowerCase().replace(/ /g,\"_\")}`}>\r\n {parentItem.part.translateId ? : null}\r\n
  • \r\n )\r\n })}\r\n
\r\n
\r\n
\r\n
\r\n )\r\n }\r\n}\r\n","import {Part} from \"../part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {vanityThumbnail} from \"../../../bvComponent/core/assets\";\r\n\r\nimport CompleteVanity from \"../subparts/vanity/completeVanity\";\r\nimport VanityHandle from \"../subparts/vanity/vanityHandle\";\r\nimport VanityCabinet from \"../subparts/vanity/vanityCabinet\";\r\nimport VanityCountertop from \"../subparts/vanity/vanityCountertop\";\r\nimport VanityBacksplash from \"../subparts/vanity/vanityBacksplash\";\r\nimport Mirror from \"../subparts/vanity/mirror\";\r\nimport Sink from \"../subparts/vanity/sink\";\r\nimport VanityFaucet from \"../subparts/vanity/faucet\";\r\n\r\nexport class Vanity extends Part {\r\n static id = 'Vanity';\r\n\r\n static Types = {\r\n Complete: 'Complete',\r\n Custom: 'Custom'\r\n };\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Vanity';\r\n this.translateId = \"visualizer.bathroom.vanity\";\r\n this.partThumbnail = vanityThumbnail;\r\n this.activeSubType_ = Vanity.Types.Custom;\r\n this.relatedItems = [];\r\n this.placeholdersNeeded = false; // only Vanity property\r\n\r\n // vanity parts\r\n this.vanityCabinet = null;\r\n this.completeVanity = null;\r\n this.countertop = null;\r\n this.sink = null;\r\n this.faucet = null;\r\n this.vanityBacksplash = null;\r\n this.vanityHandle = null;\r\n this.mirror = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Sink\":\r\n relatedItemName = \"sink\";\r\n RelatedItemClass = Sink;\r\n break;\r\n case \"Mirror\":\r\n relatedItemName = \"mirror\";\r\n RelatedItemClass = Mirror;\r\n break;\r\n case \"Countertop\":\r\n relatedItemName = \"countertop\";\r\n RelatedItemClass = VanityCountertop;\r\n break;\r\n case \"Faucet\":\r\n relatedItemName = \"faucet\";\r\n RelatedItemClass = VanityFaucet;\r\n break;\r\n case \"VanityBacksplash\":\r\n case \"BackSplash\":\r\n case \"Backsplash\":\r\n relatedItemName = \"vanityBacksplash\";\r\n RelatedItemClass = VanityBacksplash;\r\n break;\r\n case \"Vanity Handle\":\r\n relatedItemName = \"vanityHandle\";\r\n RelatedItemClass = VanityHandle;\r\n break;\r\n case \"Vanity\": {\r\n const completeVanity = dbFeature.metaData && dbFeature.metaData[\"Vanity\"]\r\n && dbFeature.metaData[\"Vanity\"].includes(\"Complete\");\r\n\r\n relatedItemName = completeVanity ? \"completeVanity\" : \"vanityCabinet\";\r\n RelatedItemClass = completeVanity ? CompleteVanity : VanityCabinet;\r\n break;\r\n }\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName === \"sink\") {\r\n const faucetIndex = this.relatedItems.findIndex(relItem => relItem.partName === 'Faucet');\r\n faucetIndex ? this.relatedItems.splice(faucetIndex, 0, this.sink) : this.relatedItems.push(this.sink);\r\n } else if (relatedItemName === \"completeVanity\") {\r\n this.relatedItems.unshift(this.completeVanity); // cabinet needs to be first in the list.\r\n } else if (relatedItemName === \"vanityCabinet\") {\r\n this.relatedItems.unshift(this.vanityCabinet); // cabinet needs to be first in the list.\r\n } else {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n getRelatedItems() {\r\n return this.relatedItems.filter(item => item.visible.includes(this.activeSubType_));\r\n }\r\n\r\n subTypes() {\r\n return this.vanityCabinet && this.completeVanity ? [Vanity.Types.Custom, Vanity.Types.Complete] : [];\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return this.activeSubType_ === Vanity.Types.Complete;\r\n }\r\n\r\n activeSubType() {\r\n return this.activeSubType_;\r\n }\r\n\r\n subParts() {\r\n const relatedItems = this.getRelatedItems();\r\n const excluded = [];\r\n const vanityPart = relatedItems.find(navItem => navItem.partId === \"vanity_cabinet\");\r\n if (vanityPart && vanityPart.activeFeature\r\n && vanityPart.activeFeature.metaData[\"VanityHandle\"]\r\n && vanityPart.activeFeature.metaData[\"VanityHandle\"].includes(\"None\")) {\r\n excluded.push(\"vanity_handle\")\r\n }\r\n return relatedItems\r\n .filter(item => !excluded.includes(item.partId))\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n // subPartsWithAccentWall() {\r\n // const vanityAccent = this.layout.parts.Walls.vanityAccent;\r\n // return [new DesignNavigationItem(vanityAccent.partName, vanityAccent),\r\n // ...this.getRelatedItems().map(_ => new DesignNavigationItem(_.partName, _))];\r\n // }\r\n\r\n handleSubTypeClick(subType) {\r\n this.activeSubType_ = subType;\r\n this.getRelatedItems().forEach((relatedItem) => {\r\n if (!relatedItem.activeFeature) {\r\n relatedItem.setDefault()\r\n }\r\n });\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n return this.subParts()[0]\r\n }\r\n\r\n setDefault(layout) {\r\n this.getRelatedItems().forEach(_ => _.setDefault(layout));\r\n }\r\n\r\n counterTopSize() {\r\n return this.getCounterTopSize() || \"24\"; // temporary hardcode until we would have meta data finished\r\n }\r\n\r\n getCounterTopSize() {\r\n if (this.vanityCabinet && !this.vanityCabinet.activeFeature) {\r\n this.vanityCabinet.setDefault()\r\n }\r\n return (this.vanityCabinet && this.vanityCabinet.activeFeature)\r\n ? this.vanityCabinet.activeFeature.dbFeature.metaData[\"VanitySize\"]\r\n : null;\r\n }\r\n\r\n toggleVanityParts(disabled) {\r\n this.getRelatedItems().forEach(relItem => {\r\n if (relItem.partId === \"vanity_sink\" || relItem.partId === \"vanity_faucet\"\r\n || relItem.partId === \"vanity_countertop\" || relItem.partId === \"vanity_cabinet\"\r\n || relItem.partId === \"vanity_handle\" || relItem.partId === \"vanity_backsplash\") {\r\n relItem.disabled = disabled;\r\n }\r\n });\r\n }\r\n}\r\n\r\n","import * as types from './actionTypes';\r\n\r\nexport const setLanguage = (language) => ({\r\n type: types.SET_LANGUAGE,\r\n payload: {language}\r\n});\r\n\r\nexport const setActiveTheme = (activeTheme) => ({\r\n type: types.SET_ACTIVE_THEME,\r\n payload: {activeTheme}\r\n});\r\n\r\nexport const setAgreeEmailCheckbox = (agreeEmailCheckbox) => ({\r\n type: types.SET_AGREE_EMAIL_CHECKBOX,\r\n payload: {agreeEmailCheckbox}\r\n});\r\n\r\nexport const setInitialVisualizerType = (initialVisualizerType) => ({\r\n type: types.SET_INITIAL_VISUALIZER_TYPE,\r\n payload: {initialVisualizerType}\r\n});\r\n\r\nexport const setNetworkConnection = (networkConnection) => ({\r\n type: types.SET_NETWORK_CONNECTION,\r\n payload: {networkConnection}\r\n});\r\n\r\nexport const setAmazonImageUrl = (amazonImageUrl) => ({\r\n type: types.SET_AMAZON_IMAGE_URL,\r\n payload: {amazonImageUrl}\r\n});\r\n\r\nexport const setAllFeaturesLoaded = (allFeaturesWereLoaded) => ({\r\n type: types.SET_ALL_FEATURES_LOADED,\r\n payload: {allFeaturesWereLoaded}\r\n});\r\n\r\nexport const setAllowRouting = (allowRouting) => ({\r\n type: types.SET_ALLOW_ROUTING,\r\n payload: {allowRouting}\r\n});\r\n\r\nexport const setAllowMainLoading = (allowMainLoading) => ({\r\n type: types.SET_ALLOW_MAIN_LOADING,\r\n payload: {allowMainLoading}\r\n});\r\n\r\nexport const setActionAfterVisualizerTypeIsChanged = (actionAfterRoomChange) => ({\r\n type: types.SET_ACTION_AFTER_VISUALIZER_TYPE_CHANGED,\r\n payload: {actionAfterRoomChange}\r\n});\r\n\r\nexport const setVisualizerIsChanging = (visualizerIsChanging) => ({\r\n type: types.SET_VISUALIZER_TYPE_CHANGING,\r\n payload: {visualizerIsChanging}\r\n});\r\n","import store from \"../store\";\r\nimport {getCurrentLayout} from \"../bvcomponents/appLayout\";\r\nimport {getImagePromiseFromLayout} from \"./getCanvasImageFromLayout\";\r\nimport {getQuoteVisualizerType, switchToNewVisualizerType} from \"./visualizerSwitchingFunctions\";\r\nimport {getRoomImageFromQtCategory} from \"./categorySwitchingFunctions\";\r\nimport {setQuotes} from \"../actions/roomsFunctions\";\r\nimport {loaderDisable, loaderEnable} from \"../bvcomponents/ui/loaderView\";\r\nimport {getTotalPrice} from \"./helpers\";\r\nimport {setVisualizerIsChanging} from \"../actions/serverFunctions\";\r\nimport {switchToWizardItem} from \"../bvcomponents/qkbPages/materialsWizard/useChangeWizardStepRoute\";\r\nimport workspace from \"../bvcomponents/sqft/components/canvas/core/workspace\";\r\nimport {\r\n deleteCartItemsThatAreMissingInSQFTCalcData,\r\n updateQuoteWithSQFTData\r\n} from \"../bvcomponents/sqft/helpers/sqftQuotesHelper\";\r\nimport {prepareSQFTData} from \"../bvcomponents/sqft/components/canvas/core/workspace/workspaceDataMapper\";\r\n\r\n/**\r\n * @param quoteIndex {number}\r\n * @param fakeLayout {object}\r\n * @param forLocalStorage {boolean}\r\n * @param nextVisualizerType {string}\r\n * @param bvImage {string}\r\n * returns updated quote object\r\n */\r\nexport const getQuoteInfo = async (quoteIndex, fakeLayout = null, forLocalStorage = false, nextVisualizerType, bvImage = \"\") => {\r\n const state = store.getState();\r\n const {quotes} = state.quotesState;\r\n const {settings} = state.fabricatorState;\r\n const {canvasDimensions} = state.bathroomVisualizerState;\r\n const quoteTotalPrice = getTotalPrice(quoteIndex);\r\n const quoteId = quotes[quoteIndex] && quotes[quoteIndex].quoteId ? quotes[quoteIndex].quoteId : null;\r\n const imageUrl = quotes[quoteIndex] && quotes[quoteIndex].imageUrl ? quotes[quoteIndex].imageUrl : null;\r\n\r\n const room = getQuoteVisualizerType(quoteIndex, nextVisualizerType);\r\n // keep old compatability without using different layouts\r\n const layout = fakeLayout || getCurrentLayout(settings.allowVisualizerSwitching ? room : document.kvConfig.visualizerType);\r\n\r\n // console.log(\"room\", room);\r\n if (!forLocalStorage && !bvImage) {\r\n if (document.kvConfig.visualizerType !== room && quotes[quoteIndex] && quotes[quoteIndex].bvImage) {\r\n bvImage = quotes[quoteIndex].bvImage;\r\n } else {\r\n bvImage = await new Promise((resolve) => resolve(getImagePromiseFromLayout(layout, canvasDimensions)))\r\n }\r\n }\r\n\r\n return {\r\n quoteId, // quoteId - quoteId is passed from the backend in the getBvJobData response(in dashboard edit mode)\r\n imageUrl, // amazon url\r\n // ...quotes[activeQuoteIndex], no need for it for now\r\n data: layout.getActiveFeaturesAsObject(false, true, true),\r\n leadFeatures: layout.getActiveNames(),\r\n bvImage,\r\n layoutType: layout.type,\r\n room, // prevent overwriting on save\r\n materialCost: quoteTotalPrice.materialPrice,\r\n sqFtCalcData: quotes[quoteIndex] ? quotes[quoteIndex].sqFtCalcData || null : null,\r\n installationCost: quoteTotalPrice.installationPrice,\r\n installationTaxes: quoteTotalPrice.installationTaxes, // installation tax amount\r\n materialTaxes: quoteTotalPrice.materialTaxes, // material tax amount\r\n priceTaxes: quoteTotalPrice.priceTaxes, // material tax amount\r\n staticCanvasImage: getRoomImageFromQtCategory(\"\", quoteIndex),\r\n isCreatedInSQFT: quotes[quoteIndex] ? quotes[quoteIndex].isCreatedInSQFT : false,\r\n isVisibleInSQFT: quotes[quoteIndex] ? quotes[quoteIndex].isVisibleInSQFT : true,\r\n qtCatName: quotes[quoteIndex] ? quotes[quoteIndex].qtCatName : \"\",\r\n }\r\n};\r\n\r\nexport const updateCurrentQuote = async (quoteIndex, nextVisualizerType, forLocalStorage = false) => {\r\n const {quotes, activeQuoteIndex} = store.getState().quotesState;\r\n const indexToUpdate = Number.isInteger(quoteIndex) ? quoteIndex : activeQuoteIndex;\r\n const currentQuoteObject = await getQuoteInfo(indexToUpdate, null, forLocalStorage, nextVisualizerType);\r\n const newQuotes = [...quotes.map((q, qIndex) => (qIndex === indexToUpdate) ? currentQuoteObject : q)];\r\n if (!forLocalStorage) {\r\n store.dispatch(setQuotes(newQuotes));\r\n }\r\n return newQuotes\r\n};\r\n\r\n// /**\r\n// * @param quotes {array}\r\n// * @param activeQuoteIndex {number}\r\n// * returns updated quotes array\r\n// */\r\n// export const updateAllQuotes = async (quotes, activeQuoteIndex) => {\r\n// console.log(\"quotes\", quotes);\r\n// let newQuotes = [];\r\n// for (const [quoteIndex, quoteObject] of quotes.entries()) {\r\n// let newQuote = null;\r\n// if (quoteIndex !== activeQuoteIndex && quoteObject.data) {\r\n// let fakeLayout = null;\r\n// const layout = getCurrentLayout();\r\n// fakeLayout = cloneDeep(layout);\r\n// fakeLayout.type = quoteObject.data.layout_type;\r\n// fakeLayout.scene = quoteObject.data.scene;\r\n// fakeLayout.getFeatures(true).forEach(parentGroup => {\r\n// parentGroup.layout = fakeLayout;\r\n// parentGroup.relatedItems.forEach(relItem => {\r\n// relItem.getParent = () => parentGroup;\r\n// })\r\n// });\r\n// await fakeLayout.selectLayout(layout.type, layout.type, null, layout.scene, null, true);\r\n// newQuote = await getQuoteInfo(quoteIndex, fakeLayout);\r\n// } else {\r\n// newQuote = await getQuoteInfo(quoteIndex);\r\n// }\r\n// newQuotes.push(newQuote);\r\n// }\r\n// console.log(\"newQuotes\", newQuotes);\r\n// store.dispatch(setQuotes(newQuotes));\r\n// return newQuotes\r\n// };\r\n\r\nexport const setNewActiveQuote = async (index, newQuotes) => {\r\n if (!newQuotes) {\r\n newQuotes = store.getState().quotesState.quotes;\r\n }\r\n const newQuote = newQuotes[index];\r\n if (newQuote && (newQuote.layoutType || newQuote.layoutType === 0) && newQuote.data) {\r\n loaderEnable();\r\n if (newQuote.room !== document.kvConfig.visualizerType) {\r\n await switchToNewVisualizerType(newQuote.room, false)\r\n }\r\n const layout = getCurrentLayout();\r\n const bvState = newQuote.data;\r\n const {wizardIsActive} = store.getState().wizardState;\r\n if (wizardIsActive) {\r\n // change selectedWizardValues!\r\n switchToWizardItem(null, null, null, null, false);\r\n }\r\n return layout.setItemsFromBvState(bvState)\r\n .then(() => {\r\n loaderDisable();\r\n store.dispatch(setVisualizerIsChanging(false))\r\n });\r\n }\r\n return Promise.resolve()\r\n};\r\n\r\nexport const deleteCartItemFromSQFTCalcData = async (cItem) => {\r\n if (cItem.sqftIds && cItem.sqftIds.length) {\r\n const state = store.getState();\r\n const quotes = state.quotesState.quotes;\r\n const cItemQuote = quotes[cItem.currentQuote];\r\n\r\n //create workspace and remove items as if they were removed from sqft\r\n workspace.import(cItemQuote.sqFtCalcData);\r\n [...cItem.sqftIds].forEach(sqftId => {\r\n workspace.removeFeatureBySQFTId(sqftId);\r\n })\r\n\r\n //save sqft calc data to quote\r\n const sqftCalcData = await prepareSQFTData();\r\n updateQuoteWithSQFTData(sqftCalcData, cItem.currentQuote);\r\n\r\n //remove cartItems that was attached features like edges and backsplashes\r\n deleteCartItemsThatAreMissingInSQFTCalcData();\r\n }\r\n}\r\n","export default function ( nvert, vertx, verty, testx, testy ) {\r\n var i, j, c = false;\r\n for( i = 0, j = nvert-1; i < nvert; j = i++ ) {\r\n if( ( ( verty[i] > testy ) != ( verty[j] > testy ) ) &&\r\n ( testx < ( vertx[j] - vertx[i] ) * ( testy - verty[i] ) / ( verty[j] - verty[i] ) + vertx[i] ) ) {\r\n c = !c;\r\n }\r\n }\r\n return c;\r\n}\r\nexport function pnpolyArray(points, test) { // receives pointsArray & mousePos, ex. [[50,100],[70, 100],[70, 200],[50,200]], {x:60, y: 80}\r\n let i, j, c = false;\r\n for (i = 0, j = points.length - 1; i < points.length; j = i++) {\r\n if (((points[i][1] > test.y) !== (points[j][1] > test.y)) &&\r\n (test.x < (points[j][0] - points[i][0]) * (test.y - points[i][1])\r\n / (points[j][1] - points[i][1]) + points[i][0])) {\r\n c = !c;\r\n }\r\n }\r\n return c;\r\n}\r\n\r\n/**\r\n* array of coordinates of each vertex of the polygon\r\n* var polygon = [ [ 1, 1 ], [ 1, 2 ], [ 2, 2 ], [ 2, 1 ] ];\r\n* isPointInsidePolygon([ 1.5, 1.5 ], polygon); // true\r\n*/\r\nexport function isPointInsidePolygon(point, polygon) {\r\n // ray-casting algorithm based on\r\n // https://wrf.ecse.rpi.edu/Research/Short_Notes/pnpoly.html/pnpoly.html\r\n\r\n let x = point.x, y = point.y;\r\n let inside = false;\r\n\r\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\r\n let xi = polygon[i].x, yi = polygon[i].y;\r\n let xj = polygon[j].x, yj = polygon[j].y;\r\n let intersect = ((yi > y) !== (yj > y))\r\n && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\r\n\r\n if (intersect) inside = !inside;\r\n }\r\n\r\n return inside;\r\n}\r\n\r\n/**\r\n* array of coordinates of each vertex of the polygon\r\n* var polygon = [ [ 1, 1 ], [ 1, 2 ], [ 2, 2 ], [ 2, 1 ] ];\r\n* isPointInsidePolygon([ 1.5, 1.5 ], polygon); // true\r\n*/\r\nexport function isPointInsidePolygonArray(point, polygon) {\r\n var x = point[0], y = point[1];\r\n\r\n var inside = false;\r\n for (var i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\r\n var xi = polygon[i][0], yi = polygon[i][1];\r\n var xj = polygon[j][0], yj = polygon[j][1];\r\n\r\n var intersect = ((yi > y) != (yj > y))\r\n && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\r\n if (intersect) inside = !inside;\r\n }\r\n\r\n return inside;\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerHeadTypes} from \"../../constants\";\r\n\r\nexport default class ShowerCommon extends IntermediatePart {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.isShowerCommonGroup = true;\r\n }\r\n\r\n setArmHeadType() { // for feature\r\n const parent = this.getParent();\r\n const showerParent = parent.getParent();\r\n showerParent.setShowerHeadType(ShowerHeadTypes.shower_arm, parent.partId);\r\n if (showerParent.showerFixture && showerParent.showerFixture.activeFeature && showerParent.showerFixture.activeFeature.metaData[\"MountType\"]\r\n && !showerParent.showerFixture.activeFeature.metaData[\"MountType\"].includes(\"0\") && !showerParent.showerFixture.disabled) {\r\n // store.dispatch(setLookOverlayOpened(LOOK_OVERLAYS.notCompatiblePopup));\r\n // return;\r\n // this.applyFeatureIfNotCompatible();\r\n showerParent.showerFixture.disabled = true;\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); // roomLayout && roomScene\r\n const showerSize = showerParent.showerSize();\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n isActiveFeatureGroup(featureGroupId = \"\") {\r\n const showerParent = this.getParent();\r\n const featureGroup = showerParent[featureGroupId];\r\n return !!(featureGroup && featureGroup.activeFeature && !featureGroup.disabled)\r\n }\r\n\r\n togglePosition(position, partId) {\r\n const showerArm = this.getParent().relatedItems.find(featureGroup => featureGroup.partId === partId);\r\n if (showerArm && showerArm.layerPositions) {\r\n if (this.layerPositions[position]) {\r\n // if (!showerArm.layerPositions[position]) {\r\n // showerArm.layerPositions[position] = showerArm.getMatchingPositionFeature(position);\r\n // if (showerArm.disabled) {\r\n // showerArm.disabled = false;\r\n // }\r\n // }\r\n // we need always set here in the next line, because we might have another conditions. so update needed\r\n showerArm.layerPositions[position] = showerArm.getMatchingPositionFeature(position);\r\n if (showerArm.disabled) {\r\n showerArm.disabled = false;\r\n }\r\n } else {\r\n showerArm.layerPositions[position] = null;\r\n }\r\n }\r\n }\r\n\r\n showLayerPositionsModal() {\r\n return true\r\n }\r\n\r\n}\r\n","import {PartMenuType} from \"../../visComponents/constants\";\r\nimport {iCmp} from \"../../../misc/utils\";\r\nimport Layer from \"../../visComponents/layer\";\r\nimport {LayoutType, METADATA} from \"./constants\";\r\nimport PartCommon from \"../../visComponents/partCommon\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\n\r\nexport class Part extends PartCommon {\r\n\r\n constructor(isParent, isChild, menuType) {\r\n super();\r\n if (isChild || (isParent && menuType === PartMenuType.Simple)) {\r\n this.featuresList = {};\r\n this.featuresPartsList = {};\r\n this.modulePartsList = {};\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this.featuresList[layoutName] = [];\r\n this.featuresPartsList[layoutName] = [];\r\n this.modulePartsList[layoutName] = [];\r\n });\r\n this.allFeaturesReceived = false;\r\n this.realFeaturesReceived = false; // this prop is need on Scroll (if features count more that 1000)\r\n this.nextFeaturesPageToLoad = 0;\r\n this.activeFeature = null;\r\n this.placeholderFeature = null;\r\n this.placeholderChanged = false;\r\n this.firstClick = {\r\n \"0\": false\r\n };\r\n this.activeLockedFeature = null;\r\n this.activeNotInVisualizerFeature = null; // is needed to display in the QT selected activeNotInVisualizerFeature, but render proper activeFeature layer(for example, countertop)\r\n // name = \"\";\r\n this.visible = true;\r\n this.categoryEnabled = false;\r\n this.layout = null;\r\n this.featureGroupVisible = true; // dashboard's feature group eye ball logic\r\n this.featureGroupEnabled = true; // dashboard's feature group checkbox logic\r\n this.selectedFeaturesHistory = []; // array of strings(names). updated every time item is selected\r\n this.filtersReceived = null; // array of filters values, comes from BE, for ex [1221, 347, 1124]\r\n }\r\n if (isParent) {\r\n this.partThumbnail = '';\r\n this.relatedItems = [];\r\n }\r\n if (!isChild && !isParent) {\r\n this.dbFeature = null;\r\n this.layer = new Layer(\"bv\");\r\n this._customDisplayName = null;\r\n this.notesList = {};\r\n }\r\n this.partName = \"\";\r\n }\r\n\r\n set features(featuresList) {\r\n // features can't be set directly, we need to change featuresList array\r\n }\r\n get features() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresList[layout.getCurrentLayoutName()]\r\n }\r\n set featuresParts(featuresList) {\r\n // featuresParts can't be set directly, we need to change featuresPartsList array\r\n }\r\n get featuresParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresPartsList[layout.getCurrentLayoutName()]\r\n }\r\n get moduleParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.modulePartsList[layout.getCurrentLayoutName()]\r\n }\r\n\r\n /**\r\n * Checks whether a given for condition matches the needed value (or array of values)\r\n * @param name {string}\r\n * @param value {string || array}\r\n * @returns {int} -1 - no such for condition, 0 - no match, 1 - matches\r\n */\r\n matchesMetaForCondition(name, value) {\r\n return this.metaData[name] && this.metaData[name].some(condValue => {\r\n return condValue === METADATA.ALL || (Array.isArray(value) ? value.some(val => iCmp(condValue, val)) : iCmp(condValue, value))\r\n });\r\n }\r\n\r\n matchesMetaForArrayOfConditions(arrayOfConditions) {\r\n return arrayOfConditions.every((condition) => {\r\n return this.matchesMetaForCondition(condition.propName, condition.propValue);\r\n })\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem(this.partName, this)\r\n }\r\n}\r\n\r\n\r\n","import invert from 'lodash/invert';\r\n\r\nimport {splitFeatureName} from \"../../../misc/utils\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport {Part} from \"./part\";\r\nimport store from '../../../store';\r\nimport {LayoutAbbreviation, LayoutType} from \"./constants\";\r\nimport {getFeatureIsLocked} from \"../../../misc/helpers\";\r\n\r\n/**\r\n * Used for Complex parts such as Vanity, to perform some base functionality for related items\r\n */\r\nexport class IntermediatePart extends Part {\r\n\r\n constructor(isChild) {\r\n super(false, isChild);\r\n this.disabled = false;\r\n this.defaultDisabled = false; // used after reset click\r\n this.canBeDisabled = false;\r\n }\r\n\r\n /**\r\n * This will be called on feature creation\r\n * @param dbFeature\r\n */\r\n load(dbFeature) {\r\n return this.load_(dbFeature, new this.constructor());\r\n }\r\n\r\n /**\r\n * This will be called by the underlying vanity feature with a concrete instance of the part\r\n * @param dbFeature\r\n * @param part {Part}\r\n * @param setParent {boolean}\r\n * @param features\r\n */\r\n load_(dbFeature, part, setParent = true, features = 'features') {\r\n\r\n const featureList = features + \"List\";\r\n\r\n const {displayName} = dbFeature;\r\n let {featureName} = splitFeatureName(displayName);\r\n if (!featureName && dbFeature.groupName && dbFeature.displayName) {\r\n featureName = dbFeature.displayName.replace(dbFeature.groupName + \" - \", \"\")\r\n }\r\n // console.log('displayName:', displayName);\r\n\r\n if (setParent) {\r\n part.getParent = () => this;\r\n if (dbFeature.galleryImages) {\r\n const featured = dbFeature.galleryImages.find(galImage => galImage.featured);\r\n if (featured) {\r\n this.featuredImage = featured.url\r\n }\r\n dbFeature.galleryImages = dbFeature.galleryImages.sort((a, b) => b.default - a.default)\r\n }\r\n }\r\n\r\n if (!dbFeature.sharedFeatureName) {\r\n console.error(\"No sharedFeatureName property:\", dbFeature);\r\n }\r\n\r\n part.partName = featureName;\r\n part.metaData = dbFeature.metaData || {};\r\n\r\n if (dbFeature.s3Bindings && dbFeature.s3Bindings.length) {\r\n // dbFeature.s3Bindings = dbFeature.s3Bindings.filter(binding => binding.visualizer === \"Fireplace\")\r\n }\r\n\r\n part.dbFeature = dbFeature || {};\r\n if (!part.dbFeature.filterValueIDs) {\r\n part.dbFeature.filterValueIDs = {}\r\n }\r\n part.notAvailableInVisualizer = !dbFeature.s3Bindings || !dbFeature.s3Bindings.length;\r\n\r\n if (part.metaData.RoomLayout) {\r\n const roomLayout = part.metaData.RoomLayout;\r\n if (roomLayout.includes(LayoutAbbreviation.All)) {\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n } else if (Array.isArray(roomLayout) && roomLayout.length) {\r\n roomLayout.forEach(roomLayoutAbbreviation => {\r\n const layoutName = invert(LayoutAbbreviation)[roomLayoutAbbreviation];\r\n if (layoutName) { // Prevent bad roomLayout Metadata\r\n this[featureList][layoutName].push(part);\r\n }\r\n });\r\n } else { // single value\r\n const layoutName = invert(LayoutAbbreviation)[roomLayout];\r\n if(layoutName) {\r\n this[featureList][layoutName].push(part);\r\n }\r\n }\r\n }\r\n\r\n if (part.notAvailableInVisualizer || !part.metaData.RoomLayout) {\r\n part.notAvailableInVisualizer = true;\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n }\r\n\r\n // Object.keys(LayoutType).forEach(layoutName => {\r\n // this[features+\"List\"][layoutName].push(part);\r\n // });\r\n\r\n this.loadFeatureCommon(part);\r\n\r\n return part\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions()\r\n }\r\n\r\n // navigationSubItems(filters, searchText, forFeature, filterGroups, firstOpenedFeature, firstOpenedConditions) { // to do\r\n navigationSubItems(filters, searchText) {\r\n // const featuresList = (forFeature && forFeature.metaData.layerPosition === SIDE_POSITIONS[1]) ? this.featuresParts : this.features;\r\n const filteredAvailableFeatures = this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters, this.features), searchText);\r\n let featuresToDisplay = this.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n // console.log(\"filterGroups\", filterGroups);\r\n return this.returnUniqueNavFeatures(featuresToDisplay)\r\n }\r\n\r\n navigationSubItemsWithFilter(propName, propValue, featuresToCheck = this.features) {\r\n return featuresToCheck.filter((feature) => {\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n }).map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n navigationSubItemsWithFilterMultipleConditions(arrayOfConditions, featuresToCheck = this.features) {\r\n // console.log('arrayOfConditions', arrayOfConditions);\r\n // console.log('featuresToCheck', featuresToCheck);\r\n return featuresToCheck.filter((feature) => {\r\n return feature.notAvailableInVisualizer || arrayOfConditions.every((conditionObject) => {\r\n const {propName, propValue} = conditionObject;\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n });\r\n })\r\n }\r\n\r\n setDefault(layout, setNotInVisFeature = false) {\r\n this.setFeatureGroupDefault(layout, setNotInVisFeature)\r\n }\r\n\r\n setLayerPositions = (activeFeature = this.activeFeature) => {\r\n if (!activeFeature) {\r\n return\r\n }\r\n const layout = this.getParent().layout;\r\n const conditions = this.getArrayOfConditions();\r\n if (layout && this.defaultLayerLayoutPositions && this.defaultLayerLayoutPositions[layout.type]) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.defaultLayerLayoutPositions[layout.type] === key\r\n && (!this.layerPositions[key] || !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n } else if (activeFeature.dbFeature.metaData[\"layerPosition\"] !== key) {\r\n this.layerPositions[key] = null;\r\n }\r\n })\r\n } else {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (layout.initialized) {\r\n if ((activeFeature.dbFeature.metaData[\"layerPosition\"] === key)\r\n && (this.layerPositions[key] && !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n // } else if (this.setAllLayerPositions) {\r\n } else if (this.layerPositions[key]) { // here we have to change vanity cabinet to console for example\r\n const matchingPositionFeature = this.getMatchingPositionFeature(key);\r\n if (matchingPositionFeature) {\r\n this.layerPositions[key] = matchingPositionFeature;\r\n }\r\n }\r\n } else { // first time we should set everything by the default! // missing layers issue\r\n if ((activeFeature.dbFeature.metaData[\"layerPosition\"] === key)\r\n && (!this.layerPositions[key] || !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n // } else if (this.setAllLayerPositions) {\r\n } else {\r\n const matchingPositionFeature = this.getMatchingPositionFeature(key);\r\n if (matchingPositionFeature) {\r\n this.layerPositions[key] = matchingPositionFeature;\r\n }\r\n }\r\n }\r\n })\r\n }\r\n }\r\n\r\n toggleLayerPositions() {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n this.layerPositions[key] = this.disabled ? null : this.getMatchingPositionFeature(key)\r\n })\r\n }\r\n\r\n getMatchingPositionFeature = (position = \"\", fromFeature = this.activeFeature, fromLayout = null) => {\r\n if (fromFeature) { //just in case\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n let arrayOfConditions = this.getArrayOfConditions();\r\n if (fromFeature.metaData[\"SkuName\"]) {\r\n arrayOfConditions.push({\r\n propName: \"SkuName\",\r\n propValue: fromFeature.metaData[\"SkuName\"]\r\n })\r\n }\r\n if (fromLayout) {\r\n let roomLayoutMeta = arrayOfConditions.find(condition => condition.propName === \"RoomLayout\");\r\n let roomSceneMeta = arrayOfConditions.find(condition => condition.propName === \"RoomScene\");\r\n if (roomLayoutMeta) {\r\n roomLayoutMeta.propValue = fromLayout.getCurrentLayoutAbbreviation();\r\n }\r\n if (roomSceneMeta) {\r\n roomSceneMeta.propValue = fromLayout.scene;\r\n }\r\n }\r\n const skuNamesPartIds = [\"shower_door\", \"walk_in_tub\", \"shower_pan_combo\"];\r\n const whereToFind = (!this.layerPositions || (position === Object.keys(this.layerPositions)[0])) ? this.features : this.featuresParts;\r\n return whereToFind.find((feature) => {\r\n return (skuNamesPartIds.includes(this.partId) || name1 === feature.getSplittedFeatureName())\r\n && feature.matchesMetaForArrayOfConditions(arrayOfConditions) && feature.metaData[\"layerPosition\"] === position\r\n });\r\n }\r\n return null\r\n };\r\n\r\n getArrayOfConditions() {\r\n const layout = this.getParent().layout;\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: layout.getCurrentLayoutAbbreviation()\r\n }, {\r\n propName: 'RoomScene',\r\n propValue: layout.scene\r\n }];\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n if (this.hasAdditionalParts) {\r\n this.checkIfFeaturePartIsMatching();\r\n }\r\n return this._setLayers(layout);\r\n }\r\n this.setDefault(layout);\r\n return this._setLayers(layout);\r\n }\r\n showLayerPositionsModal() {\r\n return false\r\n }\r\n\r\n clickFromAllWalls(ignoreLocked) {\r\n if (this && this.dbFeature && this.dbFeature.sharedFeatureName) {\r\n console.log(`${this.partId}:`, this.dbFeature.sharedFeatureName);\r\n }\r\n this.handleClick(ignoreLocked, \"all_walls\");\r\n }\r\n\r\n tryToSetTheSameFeature(filteredFeatures = [], partName = \"\") {\r\n if (this.activeFeature && this.activeFeature.partName) {\r\n let splittedFromTheLayoutName = partName\r\n ? this.removeLayoutFromPartName(partName)\r\n : this.activeFeature.getMatchingFeatureName();\r\n this.activeFeature = filteredFeatures.find(feature => {\r\n return feature.getMatchingFeatureName() === splittedFromTheLayoutName\r\n });\r\n if (this.activeFeature) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * @param ignoreLocked {boolean} // false by the default, is used by wizard ONLY\r\n */\r\n handleClick(ignoreLocked = false) {\r\n const parent = this.getParent();\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n parent.firstClick[activeQuoteIndex] = true; // allow to show active item\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (featureIsLocked) {\r\n parent.activeLockedFeature = this;\r\n } else {\r\n if (parent.activeLockedFeature) {\r\n parent.activeLockedFeature = null;\r\n }\r\n this.featureClick();\r\n }\r\n }\r\n\r\n featureClick() {\r\n const parent = this.getParent();\r\n parent.placeholderChanged = true;\r\n if (this.notAvailableInVisualizer) {\r\n parent.activeNotInVisualizerFeature = this; // do not change the activeFeature (in order to keep the layer)\r\n } else if (parent.activeNotInVisualizerFeature) {\r\n parent.activeNotInVisualizerFeature = null; // remove it from other searches and so on\r\n parent.activeFeature = this;\r\n } else {\r\n parent.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n hideLayers() {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.src = '';\r\n }\r\n if (Array.isArray(this.activeFeatureParts) && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.src = '';\r\n }\r\n })\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.src = '';\r\n }\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.src = '';\r\n }\r\n })\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n\r\n const getZIndex = (feature, partId = null) => {\r\n return feature.metaData[\"ZSorting\"] ? feature.metaData[\"ZSorting\"] * 1000 : zIndexes[partId || this.partId];\r\n }\r\n\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n const feature = this.layerPositions[key];\r\n if (feature) {\r\n feature.layer.zIndex = getZIndex(feature) + keyIndex*10;\r\n }\r\n })\r\n } else if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = getZIndex(this.activeFeature);\r\n if (this.hasAdditionalParts && this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart, keyIndex) => {\r\n activeFeaturePart.layer.zIndex = getZIndex(activeFeaturePart, this.additionalPartPartId) + (keyIndex + 1) * 10;\r\n });\r\n }\r\n }\r\n }\r\n\r\n removeEdgeFromPartName(partName) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n if (edgeFilterGroup && edgeFilterGroup.values && edgeFilterGroup.values.length) {\r\n const edgeFilterGroupValues = edgeFilterGroup.values.sort((a,b) => {\r\n return a.value && b.value && (b.value.length - a.value.length)\r\n }); // 1st should be \"Full Bullnose\", then simple \"Bullnose\"\r\n edgeFilterGroupValues.forEach((filterGroupValue) => { // arrayOf {id: 293, value: \"Eased\", displayText: \"Eased\", parent_id: null, icon: \"\", …}\r\n partName = partName.split(\" \"+filterGroupValue.value).join(\"\");\r\n });\r\n }\r\n return partName\r\n }\r\n\r\n getCountertopGroupsSplittedFeatureName = () => {\r\n if (this._countertopGroupsCustomDisplayName == null) {\r\n this._countertopGroupsCustomDisplayName = this.dbFeature.sharedFeatureName;\r\n }\r\n return this._countertopGroupsCustomDisplayName\r\n };\r\n\r\n getSplittedFeatureName = () => {\r\n if (this._customDisplayName == null) {\r\n this._customDisplayName = this.dbFeature.sharedFeatureName || this.partName || \"\";\r\n if (this.partId === \"center_island_countertop\") {\r\n this._customDisplayName = this._customDisplayName\r\n .replace(/2 0 /g, \"\")\r\n .replace(/Center Island Countertop 1 /g, \"\");\r\n }\r\n }\r\n return this._customDisplayName\r\n };\r\n\r\n getMatchingFeatureName = () => {\r\n return this.getSplittedFeatureName()\r\n };\r\n\r\n getModuleFeatureName = () => {\r\n // return this.partName.split(\" M_\")[0];\r\n return this.partName.split(\" M\")[0];\r\n };\r\n\r\n featureIsMatchingFilters(currentFeature, activeFilters, filters = []) {\r\n return filters.every(filter => {\r\n return activeFilters[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id].includes(activeFilters[filter.id][0])\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n let activeFeaturePart;\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n // if (this.partId === \"right_wall\") {\r\n // arrayOfConditions = arrayOfConditions.filter(condition => condition.propName !== \"MirrorSize\");\r\n // }\r\n activeFeatureParts = this.featuresParts.filter((feature) => name1 === feature.getSplittedFeatureName());\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n if (activeFeatureParts.length) {\r\n activeFeaturePart = activeFeatureParts.find((feature) => {\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n if (!activeFeaturePart) {\r\n activeFeaturePart = activeFeatureParts[0];\r\n }\r\n }\r\n activeFeatureParts = activeFeaturePart ? [activeFeaturePart] : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n checkIfFeaturePartIsMatching() {\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n const activeFeatureConditions = this.getActiveFeatureConditions();\r\n const name1 = this.activeFeature.getSplittedFeatureName();\r\n const activeFeaturePart = this.activeFeatureParts[0];\r\n if (!(activeFeaturePart.matchesMetaForArrayOfConditions(activeFeatureConditions)\r\n && name1 === activeFeaturePart.getSplittedFeatureName())) {\r\n this.activeFeatureParts = this.setActiveFeatureParts(this.activeFeature, activeFeatureConditions);\r\n }\r\n } else {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n }\r\n\r\n}\r\n","import {getCurrentLayout} from \"../bvcomponents/appLayout\";\r\nimport {featureThumbnailUrl, getCartItemObject} from \"./helpers\";\r\nimport store from \"../store\";\r\nimport {setActiveQuoteIndex, setQuotes} from \"../actions/roomsFunctions\";\r\nimport {setQtActiveCategory} from \"../actions/actionFunctions\";\r\nimport {getCommonVisualizerType} from \"../config\";\r\nimport {hasSubscriptionForRoom} from \"./visualizerSwitchingFunctions\";\r\nimport {updateCurrentQuote} from \"./quotesFunctions\";\r\nimport {updateAllWizardValues} from \"../actions/wizardFunctions\";\r\nimport {showWizardInsteadOfQT} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport { getNavItems } from \"../bvcomponents/sqft/helpers/sqftHelperUi\";\r\n\r\n/**\r\n * @param qtCatName {string}\r\n * @param quoteIndex {number}\r\n * returns {string}\r\n */\r\nexport const getRoomImageFromQtCategory = (qtCatName, quoteIndex) => {\r\n const {fabricatorState, cartState} = store.getState();\r\n if (!fabricatorState.settings.useCategorySwitching) {\r\n return \"\"\r\n }\r\n const lowerCasedVisualizerType = getCommonVisualizerType().toLowerCase();\r\n if (!qtCatName && cartState.cartItems.length && Number.isInteger(quoteIndex)) {\r\n const {cartItems} = cartState;\r\n const existingAddedCartItem = cartItems.find(cItem => cItem.partId === \"room\" && (cItem.currentQuote === quoteIndex));\r\n if (existingAddedCartItem && !featureIsMatchingQtCatName(existingAddedCartItem.cartFeature, lowerCasedVisualizerType)\r\n && (!fabricatorState.settings.allowVisualizerSwitching || !hasSubscriptionForRoom(getRoomNameToCompare(existingAddedCartItem.cartFeature)))) {\r\n return featureThumbnailUrl(existingAddedCartItem.cartFeature)\r\n }\r\n return \"\"\r\n }\r\n const currentRoomName = qtCatName.trim().toLowerCase();\r\n const layout = getCurrentLayout();\r\n const roomFg = layout.getFeatureGroupByPartId(\"room\");\r\n if (roomFg) {\r\n const fgNavItems = layout.designNavigationItems({part: roomFg}, null, \"\", false, \"all\");\r\n const roomFeatureNavItem = fgNavItems.find(navItem => {\r\n return featureIsMatchingQtCatName(navItem.part, currentRoomName) && !featureIsMatchingQtCatName(navItem.part, lowerCasedVisualizerType)\r\n });\r\n if (roomFeatureNavItem) {\r\n return featureThumbnailUrl(roomFeatureNavItem.part)\r\n }\r\n }\r\n return \"\"\r\n}\r\n\r\n/**\r\n * @param cartItems {[cartItemInterface]}\r\n * @param quoteIndex {number}\r\n * returns {string}\r\n */\r\nexport const getCurrentQuoteRoomCartItem = (cartItems, quoteIndex) => {\r\n return cartItems.find(cItem => cItem.partId === \"room\" && cItem.currentQuote === quoteIndex)\r\n}\r\n\r\n/**\r\n * @param roomFeature {featureInterface}\r\n * returns {string}\r\n */\r\nexport const getRoomNameToCompare = (roomFeature) => {\r\n if (!roomFeature) {\r\n return \"\"\r\n }\r\n if (roomFeature.getLowerCasedCustomDisplayName) {\r\n return roomFeature.getLowerCasedCustomDisplayName() || roomFeature.dbFeature.sharedFeatureName || \"\"\r\n }\r\n return roomFeature.dbFeature.sharedFeatureName || \"\"\r\n}\r\n\r\n/**\r\n * @param cartItems {[cartItemInterface]}\r\n * @param quoteIndex {number}\r\n * @param withVisualizerCheck {boolean}\r\n * returns {string}\r\n */\r\nexport const getCurrentQuoteRoomName = (cartItems, quoteIndex, withVisualizerCheck = false) => {\r\n const quoteRoomCartItem = getCurrentQuoteRoomCartItem(cartItems, quoteIndex);\r\n if (quoteRoomCartItem && quoteRoomCartItem.cartFeature) {\r\n return getRoomNameToCompare(quoteRoomCartItem.cartFeature)\r\n }\r\n return withVisualizerCheck ? getCommonVisualizerType() : \"\"\r\n}\r\n\r\n/**\r\n * @param qtCategoryName {string}\r\n * @param fabricatorSettings {object}\r\n * returns {object}\r\n */\r\nexport const getRoomCartItemForCategoryName = (qtCategoryName, fabricatorSettings) => {\r\n const currentRoomName = qtCategoryName.trim().toLowerCase();\r\n const layout = getCurrentLayout();\r\n\r\n //1.) get room from qtCategories\r\n if (layout.qtCategories) {\r\n for (let i = 0; i < layout.qtCategories.length; i++) {\r\n const qtCategory = layout.qtCategories[i];\r\n if (qtCategory.subParts) {\r\n const roomFg = qtCategory.subParts.find(subPart => subPart.part.partId === \"room\");\r\n if (roomFg) {\r\n const fgNavItems = layout.designNavigationItems(roomFg, null, \"\", false, true);\r\n let roomFeatureNavItem = fgNavItems.find(navItem => featureIsMatchingQtCatName(navItem.part, currentRoomName));\r\n if (!roomFeatureNavItem) {\r\n let settings = fabricatorSettings;\r\n if (!settings) {\r\n settings = store.getState().fabricatorState.settings;\r\n }\r\n if (settings.allowVisualizerSwitching) {\r\n const visualizerRoomName = getCommonVisualizerType(document.kvConfig.visualizerType);\r\n if (visualizerRoomName !== qtCategoryName) {\r\n // QCDES-3163 cases when categories are not the same as room names, but we still need to add Room Cart Item\r\n roomFeatureNavItem = fgNavItems.find(navItem => featureIsMatchingQtCatName(navItem.part, visualizerRoomName));\r\n }\r\n }\r\n }\r\n if (roomFeatureNavItem) {\r\n return getCartItemObject(roomFeatureNavItem.part, 1, qtCategory.name)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n //2.) get room from room Groups\r\n const roomsFeatureGroup = layout.getSubPartFromQtCategories('room');\r\n const roomsNavItems = getNavItems(roomsFeatureGroup, \"\", {}, false, true);\r\n\r\n if (roomsNavItems) {\r\n const roomFeatureNavItem = roomsNavItems.find(navItem => featureIsMatchingQtCatName(navItem.part, currentRoomName));\r\n if (roomFeatureNavItem) {\r\n return getCartItemObject(roomFeatureNavItem.part, 1, qtCategoryName);\r\n }\r\n }\r\n\r\n return null\r\n}\r\n\r\n/**\r\n * @param newCartItems {[cartItemInterface]}\r\n * @param setNewRoomIndex {boolean}\r\n * @param shouldCreateNewQuotes {boolean}\r\n * returns {[cartItemInterface]}\r\n */\r\nexport const updateQuoteRoomsForCartItems = async (newCartItems, setNewRoomIndex = false, shouldCreateNewQuotes = true) => {\r\n const {fabricatorState, qtState, cartState, quotesState, wizardState} = store.getState();\r\n if (!fabricatorState.settings.useCategorySwitching) {\r\n return newCartItems\r\n }\r\n const {qtActiveCategory} = qtState;\r\n const {cartItems} = cartState;\r\n const {quotes, activeQuoteIndex} = quotesState;\r\n const {wizardList, wizardIsActive} = wizardState;\r\n\r\n const createdRoomCartItems = [];\r\n const layout = getCurrentLayout();\r\n\r\n for (const newCartItem of [...newCartItems]) { // here we are changing array to prevent looping each time we add a new cart item below\r\n\r\n const withCreated = [...cartItems, ...createdRoomCartItems];\r\n\r\n const currentRoomName = newCartItem.qtCatName ? newCartItem.qtCatName.trim().toLowerCase() : qtActiveCategory.trim().toLowerCase();\r\n const existingCartRoom = getCurrentQuoteRoomCartItem(withCreated, activeQuoteIndex);\r\n\r\n console.log(\"existingCartRoom\", existingCartRoom);\r\n\r\n if (existingCartRoom && existingCartRoom.cartFeature && (\r\n !showWizardInsteadOfQT(wizardList, wizardIsActive)\r\n && layout.qtCategories && layout.qtCategories.length > 1\r\n && !featureIsMatchingQtCatName(existingCartRoom.cartFeature, currentRoomName)) || (\r\n fabricatorState.settings.allowVisualizerSwitching && existingCartRoom && existingCartRoom.fromVisualizerType && (\r\n existingCartRoom.fromVisualizerType !== document.kvConfig.visualizerType\r\n )\r\n )) {\r\n\r\n if (!getRoomCartItemForCategoryName(currentRoomName, fabricatorState.settings)) { // this checks if room is available for current category\r\n break;\r\n }\r\n\r\n const existingAddedCartItem = withCreated.find(cItem => cItem.partId === \"room\" && featureIsMatchingQtCatName(cItem.cartFeature, currentRoomName));\r\n let newActiveQuoteIndex = 0;\r\n if (existingAddedCartItem) {\r\n newActiveQuoteIndex = existingAddedCartItem.currentQuote;\r\n } else if (shouldCreateNewQuotes) { // here we add a new room and add a new room cartItem\r\n const currentQuote = await updateCurrentQuote();\r\n const newQuotes = [...currentQuote, {}];\r\n newActiveQuoteIndex = quotes.length; // for example, if length is 2 (we are adding 2 index(0 and 1 already exist))\r\n store.dispatch(setQuotes(newQuotes));\r\n // console.log(\"newCreatedRooms\", newQuotes);\r\n const roomCartItem = getRoomCartItemForCategoryName(currentRoomName, fabricatorState.settings);\r\n if (roomCartItem && !newCartItems.some(cItem => {\r\n // QCDES-3901 if we are already adding room to the cart - no need to add another room\r\n return (cItem.currentQuote === roomCartItem.currentQuote)\r\n && (cItem.partId === roomCartItem.partId)\r\n && (cItem.cartFeature.dbFeature.id === roomCartItem.cartFeature.dbFeature.id)\r\n })) {\r\n const newRoomCartItem = Object.assign({}, roomCartItem, {\r\n currentQuote: newActiveQuoteIndex\r\n })\r\n newCartItems.push(newRoomCartItem);\r\n createdRoomCartItems.push(newRoomCartItem);\r\n }\r\n }\r\n console.log(\"newActiveQuoteIndex\", newActiveQuoteIndex);\r\n newCartItem.currentQuote = newActiveQuoteIndex;\r\n if (setNewRoomIndex) {\r\n store.dispatch(setActiveQuoteIndex(newActiveQuoteIndex));\r\n }\r\n } else if (!existingCartRoom && (newCartItem.partId !== \"room\")) { // we should add room cart item in current quote\r\n const roomCartItem = getRoomCartItemForCategoryName(currentRoomName, fabricatorState.settings);\r\n if (roomCartItem) {\r\n const newRoomCartItem = Object.assign({}, roomCartItem, {\r\n currentQuote: Number.isInteger(newCartItem.currentQuote) ? newCartItem.currentQuote : activeQuoteIndex\r\n })\r\n newCartItems.push(newRoomCartItem);\r\n createdRoomCartItems.push(newRoomCartItem);\r\n }\r\n }\r\n\r\n }\r\n\r\n return newCartItems\r\n}\r\n\r\n\r\n/**\r\n * update isVisibleInSQFT status\r\n */\r\nexport const updateSQFTCreatedStatusForQuotes = async () => {\r\n const {quotes} = store.getState().quotesState;\r\n const updatedQuotes = quotes.map(quote => {\r\n quote.isVisibleInSQFT = true\r\n return {...quote}\r\n })\r\n\r\n store.dispatch(setQuotes(updatedQuotes));\r\n}\r\n\r\n/**\r\n * @param quoteRoomName {string}\r\n * @param feature {featureInterface}\r\n */\r\nexport const getQtCategoryFromQuoteRoomName = (quoteRoomName, feature = null) => {\r\n const layout = getCurrentLayout();\r\n if (!layout.qtCategories) {\r\n return null\r\n }\r\n return layout.qtCategories.find(qtCat => {\r\n if (feature) {\r\n return featureIsMatchingQtCatName(feature, qtCat.name, true)\r\n }\r\n return qtCat.name.trim().toLowerCase() === quoteRoomName\r\n });\r\n}\r\n\r\n/**\r\n * @param feature {featureInterface}\r\n * @param qtCategoryName {string}\r\n * @param needToLowerCaseName {boolean}\r\n * @returns {boolean}\r\n */\r\nexport const featureIsMatchingQtCatName = (feature, qtCategoryName = \"\", needToLowerCaseName = false) => {\r\n if (!feature || !qtCategoryName) {\r\n return false\r\n }\r\n const checkCatName = needToLowerCaseName ? qtCategoryName.trim().toLowerCase() : qtCategoryName;\r\n\r\n // we need to have both compares here because:\r\n // bugfix/fix for comparing room names (customDisplayName is 'A - Kitchen', sharedFeatureName is 'Kitchen')\r\n // bugfix/fix for comparing room names (customDisplayName is 'Shower', sharedFeatureName is 'Bathroom', qtCat - 'Shower')\r\n const customLowerCasedName = feature.getLowerCasedCustomDisplayName ? feature.getLowerCasedCustomDisplayName() : \"\";\r\n const originalLowerCasedName = feature.getLowerCasedSharedFeatureName ? feature.getLowerCasedSharedFeatureName() : \"\";\r\n return (customLowerCasedName === checkCatName) || (originalLowerCasedName === checkCatName)\r\n}\r\n\r\n/**\r\n * update qtActiveCategory if room was selected and qtActiveCategory is not set\r\n * @param quoteIndex {number}\r\n */\r\nexport const checkIfNeedToSetNewCategory = (quoteIndex = 0) => {\r\n const {fabricatorState, cartState} = store.getState();\r\n if (fabricatorState.settings.useCategorySwitching) {\r\n const selectedQuoteRoomCartItem = getCurrentQuoteRoomCartItem(cartState.cartItems, quoteIndex);\r\n const qtCategory = getQtCategoryFromQuoteRoomName(\"\", selectedQuoteRoomCartItem ? selectedQuoteRoomCartItem.cartFeature : null);\r\n if (qtCategory) {\r\n store.dispatch(setQtActiveCategory(qtCategory.name));\r\n return true\r\n }\r\n }\r\n return false\r\n}\r\n\r\n/**\r\n * here we check if new room is needed if we are adding a new room, but there is already added another room\r\n * @param newCartItems {[cartItemInterface]}\r\n * @returns {cartItemInterface}\r\n */\r\nexport const getOtherRoomCartItemThatIsAddedToCurrentQuote = (newCartItems) => {\r\n if (newCartItems.length !== 1 || newCartItems[0].partId !== \"room\") {\r\n return null\r\n }\r\n const {cartState, quotesState} = store.getState();\r\n const addedRoom = getCurrentQuoteRoomCartItem(cartState.cartItems, quotesState.activeQuoteIndex);\r\n if (addedRoom && (addedRoom.cartFeature.partName !== newCartItems[0].cartFeature.partName)) {\r\n return addedRoom\r\n }\r\n return null\r\n}\r\n\r\n/**\r\n * here we create a new room (quote) and set new cart item quoteIndex\r\n * @param newRoomCartItem {cartItemInterface}\r\n * @param oldRoomCartItem {cartItemInterface}\r\n * @returns {cartItemInterface}\r\n */\r\nexport const addNewQuoteWithNewRoomCartItem = async (newRoomCartItem, oldRoomCartItem) => {\r\n const {quotesState, wizardState, fabricatorState} = store.getState();\r\n const {quotes, activeQuoteIndex} = quotesState;\r\n\r\n const currentQuote = await updateCurrentQuote();\r\n const newQuotes = [...currentQuote, {}];\r\n // console.log(\"newCreatedRooms\", newQuotes);\r\n const newActiveQuoteIndex = quotes.length; // for example, if length is 2 (we are adding 2 index(0 and 1 already exist))\r\n newRoomCartItem = Object.assign({}, newRoomCartItem, {\r\n currentQuote: newActiveQuoteIndex\r\n })\r\n store.dispatch(setQuotes(newQuotes));\r\n store.dispatch(setActiveQuoteIndex(newActiveQuoteIndex));\r\n if (oldRoomCartItem && wizardState && wizardState.allWizardsValues.length && wizardState.wizardActiveItem) {\r\n const newValues = wizardState.allWizardsValues.map(wizObject => {\r\n if (wizObject.quoteIndex === activeQuoteIndex\r\n && wizObject.isLastActiveWizard\r\n && wizObject.wizardItemId === wizardState.wizardActiveItem.id\r\n && wizObject.wizardSelectedValues\r\n && (Object.keys(wizObject.wizardSelectedValues).length === (wizardState.wizardActiveStep + 1))\r\n && wizObject.wizardSelectedValues[wizardState.wizardActiveStep].partId === \"room\"\r\n && wizObject.wizardSelectedValues[wizardState.wizardActiveStep].selectedFeature\r\n && wizObject.wizardSelectedValues[wizardState.wizardActiveStep].selectedFeature.dbFeature.id !== oldRoomCartItem.cartFeature.dbFeature.id) {\r\n console.log(\"changing allSelectedWizardValues, we need to make sure they are correctly updated\", );\r\n if (Object.keys(wizObject.wizardSelectedValues).length === 1 && fabricatorState.settings.allowVisualizerSwitching) {\r\n // we don't need to keep one item selected wizard in old quoteIndex\r\n return null\r\n } else {\r\n wizObject.wizardSelectedValues[wizardState.wizardActiveStep] = Object.assign(\r\n {},\r\n wizObject.wizardSelectedValues[wizardState.wizardActiveStep],\r\n {selectedFeature: oldRoomCartItem.cartFeature}\r\n )\r\n }\r\n }\r\n return wizObject\r\n }).filter(wizObject => wizObject)\r\n store.dispatch(updateAllWizardValues(newValues))\r\n }\r\n return newRoomCartItem\r\n}\r\n","import {\r\n CABINET_COMMON_COLOR_PART_IDS,\r\n FEATUREGROUP_PART_ID,\r\n MITER_EDGE_NAMES,\r\n MITER_UNDERWRAP_EDGE_NAMES,\r\n SHAPE_PART_ID,\r\n SHAPE_TYPE,\r\n SQFT_APPLIANCES\r\n} from \"../constants\";\r\nimport store from \"./../../../store\";\r\nimport {getCountertopFeatureGroup, getCurrentLayout} from \"../../appLayout\";\r\nimport workspace from \"../components/canvas/core/workspace\";\r\nimport {getStringFeatureName} from \"../../../misc/helpers\";\r\nimport {getEdgeFeatures} from \"./shapeHelper\";\r\nimport {isSFTCabinetsGroup} from \"./sqftNavigationHelper\";\r\nimport {getFeatureGroup} from \"./sqftHelperUi\";\r\nimport sqftConfig from \"../components/canvas/store/sqftConfig\";\r\n\r\nexport const getShapeFeatureId = (partId) => {\r\n const state = store.getState();\r\n const { sqftFromFeature } = state.sqftState;\r\n const { wizardIsActive, wizardSelectedValues } = state.wizardState;\r\n const layout = getCurrentLayout();\r\n const isCabinetsMode = isSFTCabinetsGroup();\r\n\r\n // 1) Assign feature by sqftFromFeature that was passed from visualizer quoting tool\r\n if (wizardIsActive) {\r\n for (const key in wizardSelectedValues) {\r\n if (wizardSelectedValues.hasOwnProperty(key)) {\r\n const selectedFeature = wizardSelectedValues[key] ? wizardSelectedValues[key].selectedFeature : null;\r\n if (selectedFeature && selectedFeature.partId === partId) {\r\n return selectedFeature.dbFeature.id;\r\n }\r\n }\r\n }\r\n }\r\n\r\n //1.1) For the cabinets we will assign activeFeature from featureGroup\r\n if (!isCabinetsMode && sqftFromFeature && sqftFromFeature.cartFeature.partId === partId) {\r\n console.log(\"new shape featureId from sqftFromFeature\", sqftFromFeature.cartFeature.dbFeature.id);\r\n return sqftFromFeature.cartFeature.dbFeature.id;\r\n }\r\n\r\n //2) Assign default active feature group feature for the part id\r\n const featureGroup = layout.getFeatureGroupByPartId(partId);\r\n if (featureGroup && featureGroup.activeFeature) {\r\n console.log(\"new shape featureId featureGroup activeFeature\", featureGroup.activeFeature.dbFeature.id);\r\n return featureGroup.activeFeature.dbFeature.id;\r\n }\r\n\r\n //2.5) Assign feature for slab placeholder\r\n if (partId === SHAPE_PART_ID.slabPlaceHolder) {\r\n const countertopFeatureGroup = getCountertopFeatureGroup();\r\n if (sqftFromFeature && sqftFromFeature.cartFeature.partId === countertopFeatureGroup.partId) {\r\n console.log(\"new shape featureId from sqftFromFeature for the slabPlaceHolder\", sqftFromFeature.cartFeature.dbFeature.id);\r\n return sqftFromFeature.cartFeature.dbFeature.id;\r\n }\r\n\r\n if (countertopFeatureGroup && countertopFeatureGroup.activeFeature) {\r\n console.log(\"new shape featureId featureGroup activeFeature for the slabPlaceHolder\", countertopFeatureGroup.activeFeature.dbFeature.id);\r\n return countertopFeatureGroup.activeFeature.dbFeature.id;\r\n }\r\n }\r\n\r\n //3) Assign any feature\r\n //todo\r\n console.log(\"new shape featureId\", null);\r\n return null\r\n}\r\n\r\nexport const getFeatureNameById = (featureId) => {\r\n const layout = getCurrentLayout();\r\n const feature = layout.getFeatureById(featureId);\r\n const intl = workspace.intl;\r\n const state = store.getState();\r\n const fabricatorData = state.fabricatorState;\r\n\r\n return getStringFeatureName(feature, intl.messages, intl.locale, fabricatorData);\r\n}\r\n\r\nexport const shouldChangeCabinetShapePartId = (relatedParentFeature, newFeature) => {\r\n //console.log(\"relatedParentFeature\", relatedParentFeature);\r\n //console.log(\"sqftFromFeature\", sqftFromFeature);\r\n if (!newFeature || !relatedParentFeature) {\r\n return false\r\n }\r\n\r\n const sqftFromFeatureParentGroup = newFeature.getParent();\r\n const relatedParentParentGroup = relatedParentFeature.getParent();\r\n\r\n if ((CABINET_COMMON_COLOR_PART_IDS).includes(sqftFromFeatureParentGroup.partId)\r\n && (CABINET_COMMON_COLOR_PART_IDS).includes(relatedParentParentGroup.partId)\r\n ) {\r\n const sqftFromFeatureFeatureName = newFeature.getFeatureName();\r\n const relatedParentFeatureName = relatedParentFeature.getFeatureName();\r\n //console.log(\"sqftFromFeatureFeatureName\", sqftFromFeatureFeatureName);\r\n //console.log(\"relatedParentFeatureName\", relatedParentFeatureName);\r\n\r\n if (sqftFromFeatureFeatureName !== relatedParentFeatureName) {\r\n return true\r\n }\r\n }\r\n\r\n return false\r\n}\r\n\r\nexport const getEdgeFilterByValue = (filterValue = 'Waterfall') => {\r\n const state = store.getState();\r\n const filterGroups = state.filterState.filterGroups;\r\n const edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n\r\n return edgeFilterGroup ? edgeFilterGroup.values.filter(group => group.value === filterValue) : [];\r\n};\r\n\r\nexport const isWaterfallFeature = (edgeFeatureId) => {\r\n const navItems = getEdgeFeatures();\r\n if (!navItems) {\r\n return false\r\n }\r\n let edgeFeature = navItems.find(edge => edge.part.dbFeature.id === edgeFeatureId);\r\n if (!edgeFeature) {\r\n return false\r\n }\r\n\r\n const intl = workspace.intl;\r\n const state = store.getState();\r\n const fabricatorData = state.fabricatorState;\r\n let edgeNameTranslated = getStringFeatureName(edgeFeature.part, intl.messages, intl.locale, fabricatorData);\r\n\r\n return edgeNameTranslated.toLowerCase().includes('waterfall')\r\n}\r\n\r\nexport const isMiterEdge = (featureId) => {\r\n const navItems = getEdgeFeatures();\r\n if (!navItems) {\r\n return false\r\n }\r\n\r\n let edge = navItems.find(edge => edge.part.dbFeature.id === featureId);\r\n if (!edge) {\r\n return false\r\n }\r\n\r\n const edgeName = edge.part.getFeatureName();\r\n\r\n return MITER_EDGE_NAMES.includes(edgeName);\r\n}\r\n\r\nexport const getEdgeByFeatureId = (featureId) => {\r\n const navItems = getEdgeFeatures();\r\n if (!navItems) {\r\n return null\r\n }\r\n\r\n let edge = navItems.find(edge => edge.part.dbFeature.id === featureId);\r\n if (!edge) {\r\n return null\r\n }\r\n\r\n return edge\r\n}\r\n\r\nconst parseNumberFromString = (str) => {\r\n // Convert the string \"1 1/2\" to 1.5\r\n const fractionMatch = str.match(/(\\d+)\\s+(\\d+)\\/(\\d+)/);\r\n if (fractionMatch) {\r\n const [_, whole, numerator, denominator] = fractionMatch;\r\n void _;\r\n return parseFloat(whole) + (parseFloat(numerator) / parseFloat(denominator));\r\n }\r\n\r\n // Convert a string like \"1 1/2\", \"2-3\" into separate numbers\r\n const numberMatch = str.match(/\\d+(\\.\\d+)?/g);\r\n if (numberMatch) {\r\n return Math.max(...numberMatch.map(Number));\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport const getMiterEdgeHeight = (featureId = null) => {\r\n //get height from featureName\r\n if (featureId) {\r\n const miterEdgeFeature = getEdgeByFeatureId(featureId);\r\n if (miterEdgeFeature) {\r\n const edgeName = miterEdgeFeature.part.getFeatureName();\r\n\r\n const heightFromFeatureName = parseNumberFromString(edgeName);\r\n\r\n if (edgeName !== 'Rimrock - 981' // don't get height from this edge\r\n && heightFromFeatureName > 0.5\r\n ) {\r\n return heightFromFeatureName\r\n }\r\n }\r\n }\r\n\r\n return sqftConfig.measureUnit === \"Imperial\" ? sqftConfig.miteredEdgeAdditionalImperialArea : sqftConfig.miteredEdgeAdditionalMetricArea;\r\n};\r\n\r\nexport const getMiterEdgeFeature = () => {\r\n const navItems = getEdgeFeatures();\r\n if (!navItems) {\r\n return null\r\n }\r\n\r\n let edgeFeature = navItems.find(edge => {\r\n return MITER_EDGE_NAMES.includes(edge.part.partName);\r\n });\r\n\r\n if (!edgeFeature) {\r\n edgeFeature = navItems.find(edge => edge.part.partName.toLowerCase().includes('miter'));\r\n }\r\n\r\n if (edgeFeature) {\r\n return edgeFeature.part\r\n }\r\n\r\n return null\r\n}\r\n\r\nexport const getMiterUnderwrap = () => {\r\n const navItems = getEdgeFeatures();\r\n if (!navItems) {\r\n return null\r\n }\r\n\r\n let edgeFeature = navItems.find(edge => {\r\n return MITER_UNDERWRAP_EDGE_NAMES.includes(edge.part.partName.toLowerCase());\r\n });\r\n\r\n if (edgeFeature) {\r\n return edgeFeature.part\r\n }\r\n\r\n return null\r\n}\r\n\r\nexport const getBumpoutFeature = () => {\r\n const bumpoutFeatureGroup = getFeatureGroup(FEATUREGROUP_PART_ID.specialty_cut_and_designs);\r\n const layout = getCurrentLayout();\r\n\r\n return layout.designNavigationItems(bumpoutFeatureGroup,\r\n {},\r\n 'bumpout',\r\n true,\r\n true,\r\n [],\r\n { firstFeature: null, firstConditions: null },\r\n )\r\n}\r\n\r\nexport const isFeatureUnitUseEach = (feature) => {\r\n return feature.dbFeature.unit === \"Each\"\r\n}\r\n\r\nexport const createApplianceOnTheWorkspace = (\r\n itemName,\r\n featureId = null,\r\n size = null,\r\n params = {\r\n canSnap: true,\r\n isResizable: true\r\n }) => {\r\n const getSize = (itemName) => {\r\n switch (itemName) {\r\n case SQFT_APPLIANCES.sink:\r\n return {width: 22, height: 30}\r\n case SQFT_APPLIANCES.doubleSink:\r\n return {width: 22, height: 33}\r\n default:\r\n return {width: 30, height: 26}\r\n }\r\n }\r\n if (!size) {\r\n size = getSize(itemName);\r\n }\r\n\r\n let iconFullName = 'icon-'+ itemName +'-placeholder';\r\n let svg = document.getElementById(iconFullName);\r\n if (!svg) {\r\n console.log('svg not found', 'icon-'+ itemName +'-placeholder');\r\n return\r\n }\r\n //console.log('svg', iconFullName);\r\n\r\n let img = new Image(),\r\n xml = new XMLSerializer().serializeToString(svg), // get svg data\r\n svg64 = btoa(xml); // make it base64\r\n\r\n img.src = 'data:image/svg+xml;base64,' + svg64; // set it as the source of the img element\r\n\r\n const movableImage = workspace.addImage(\r\n img,\r\n size.width,\r\n size.height,\r\n null,\r\n null,\r\n SHAPE_TYPE.appliances,\r\n itemName,\r\n function () {},\r\n undefined,\r\n null,\r\n null,\r\n null,\r\n featureId,\r\n false,\r\n params\r\n );\r\n void movableImage\r\n //movableImage.setFeatureId(featureId);\r\n\r\n return movableImage;\r\n}\r\n\r\nexport const getDbFeatureName = (dbFeature) => {\r\n return dbFeature.metaData.ActualDisplayedName\r\n ? dbFeature.customDisplayName && (dbFeature.customDisplayName !== dbFeature.sharedFeatureName)\r\n ? dbFeature.customDisplayName\r\n : metaData.ActualDisplayedName[0]\r\n : dbFeature.customDisplayName || dbFeature.displayName || dbFeature.sharedFeatureName;\r\n};\r\n\r\n/**\r\n * Sort features By Width ASC\r\n * @param features\r\n */\r\nexport const getSortedFeatures = (features) => {\r\n features.sort((a, b) => {\r\n const indexA = a.dbFeature.description.indexOf('Width');\r\n const indexB = b.dbFeature.description.indexOf('Width');\r\n\r\n // Check if 'Width' was found in descriptions\r\n if (indexA !== -1 && indexB !== -1) {\r\n const widthA = parseInt(a.dbFeature.description.substr(indexA + 6, 3), 10);\r\n const widthB = parseInt(b.dbFeature.description.substr(indexB + 6, 3), 10);\r\n\r\n return widthB - widthA;\r\n } else if (indexA !== -1) {\r\n // Place items without 'Width' in descriptions below\r\n return -1; // Move item b lower in the list\r\n } else if (indexB !== -1) {\r\n // Place items without 'Width' in descriptions below\r\n return 1; // Move item a lower in the list\r\n } else {\r\n // If neither has 'Width' in description, maintain current order\r\n return 0;\r\n }\r\n })\r\n\r\n return features\r\n}\r\n\r\n// const getSplittedDbFeatureName = (dbFeature) => {\r\n// if (dbFeature.customDisplayName == null) {\r\n// dbFeature.customDisplayName = dbFeature.sharedFeatureName || dbFeature.partName || \"\";\r\n// if (dbFeature.partId === \"center_island_countertop\") {\r\n// dbFeature.customDisplayName = dbFeature.customDisplayName\r\n// .replace(/2 0 /g, \"\")\r\n// .replace(/Center Island Countertop 1 /g, \"\");\r\n// }\r\n// }\r\n// return dbFeature.customDisplayName\r\n// };\r\n//\r\n// export const getFilteredRelatedDbFeatures = (relatedDbFeaturesToCheck) => {\r\n// // console.log(\"relatedFeaturesToCheck\", relatedFeaturesToCheck);\r\n// let relatedDbFeatures = [];\r\n// relatedDbFeaturesToCheck.forEach((relFeature) => {\r\n// const featureAlreadyExistIndex = relatedDbFeatures.findIndex(currentFeature => {\r\n// return getSplittedDbFeatureName(currentFeature) === getSplittedDbFeatureName(relFeature)\r\n// })\r\n// if (featureAlreadyExistIndex > -1) {\r\n// if (relFeature.getParent().navigationSubItems().some(navItem => {\r\n// return navItem.part.dbFeature.id === relFeature.dbFeature.id\r\n// })) {\r\n// relatedDbFeatures.splice(featureAlreadyExistIndex, 1, relFeature)\r\n// }\r\n// } else {\r\n// relatedDbFeatures.push(relFeature);\r\n// }\r\n// });\r\n// // console.log(\"relatedFeatures\", relatedFeatures);\r\n// return relatedDbFeatures\r\n// };\r\n","import invert from \"lodash/invert\";\r\nimport {CountsType} from \"../../bvComponent/core/constants\";\r\nimport {LayoutAbbreviation} from \"../../kvComponent/core/constants\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport Config from \"../../../config\";\r\n\r\nexport const getActivePartsCounts = (activePart, layoutName) => {\r\n let counts = 0;\r\n switch (document.kvConfig.visualizerType) {\r\n case \"Bathroom\":\r\n case \"BV\": {\r\n if (activePart.counts) {\r\n counts = activePart.counts.allLayoutFeaturesCount + activePart.counts[invert(CountsType)[layoutName]];\r\n }\r\n break;\r\n }\r\n case \"Kitchen\":\r\n case \"KV\": {\r\n const excluded = [\r\n \"range\", \"center_island_range\", \"stovetop\", \"center_island_stovetop\", \"faucet\", \"sink\", \"bottom_cabinet\",\r\n \"countertop\", \"center_island_faucet\", \"center_island_sink\", \"center_island_countertop\", \"top_cabinet\",\r\n \"center_island_edge\", \"edge_profile\"\r\n ];\r\n if (!excluded.includes(activePart.partId) && activePart.counts) {\r\n const layoutAbbr = LayoutAbbreviation[layoutName].toLowerCase();\r\n counts = activePart.counts[layoutAbbr];\r\n }\r\n break;\r\n }\r\n }\r\n return counts\r\n};\r\n\r\nexport const getAvailableLayouts = () => {\r\n const layout = getCurrentLayout();\r\n const parents = layout.getFeatures();\r\n\r\n if (document.kvConfig.visualizerType === \"bvScene\") { // removed Layout4 from bvScene as it is really buggy on some profiles (\"userId\": 224022)\r\n return [\"Layout1\"]\r\n }\r\n\r\n return Object.keys(layout.layoutNames)\r\n .filter(key => key !== \"All\" && parents.some(parent => {\r\n const exisitngRelItemWithFeatures = parent.relatedItems && parent.relatedItems.find(relItem => {\r\n return relItem.featuresList[key] && relItem.featuresList[key].length && relItem.featuresList[key].some(feature => {\r\n return feature.dbFeature.s3Bindings\r\n })\r\n })\r\n // console.log(\"exisitngRelItemWithFeatures\", exisitngRelItemWithFeatures);\r\n return exisitngRelItemWithFeatures\r\n }))\r\n}\r\n\r\nexport const getShowOtherLayouts = (fabricatorSettings) => {\r\n if (document.kvConfig.toolVersion >= 5 && !Config.isVisualizerManagement()) {\r\n return false\r\n }\r\n let showOtherLayouts =\r\n (document.kvConfig.visualizerType === \"Bathroom\" || document.kvConfig.visualizerType === \"BV\")\r\n ? fabricatorSettings && (fabricatorSettings.showSmallDesignForClients\r\n || (fabricatorSettings.showSmallDesignFromDashboard && document.kvConfig.isBackend))\r\n : true;\r\n if (showOtherLayouts) {\r\n showOtherLayouts = getAvailableLayouts().length > 1\r\n }\r\n return showOtherLayouts\r\n};\r\n\r\nexport const getAvailableRoomScenes = () => {\r\n let availableRoomScenes = [];\r\n const layout = getCurrentLayout();\r\n const allFeatures = layout.getAllFeatures();\r\n for (let i = 0; i < allFeatures.length; i++) {\r\n const feature = allFeatures[i];\r\n if (feature.dbFeature.metaData && Array.isArray(feature.dbFeature.metaData[\"RoomScene\"])) {\r\n feature.dbFeature.metaData[\"RoomScene\"].forEach(scene => {\r\n if (!availableRoomScenes.includes(scene)) {\r\n availableRoomScenes.push(scene)\r\n }\r\n })\r\n }\r\n }\r\n return availableRoomScenes.sort()\r\n}\r\n\r\nexport const scrolledVerticalToTheEnd = ({clientHeight, scrollHeight, scrollTop}) => {\r\n const ceilScrollHeight = Math.ceil(scrollHeight);\r\n const floorScrollHeight = Math.floor(scrollHeight);\r\n const ceilScrollTop = Math.ceil(scrollTop);\r\n const floorScrollTop = Math.floor(scrollTop);\r\n const ceilClientHeight = Math.ceil(clientHeight);\r\n const floorClientHeight = Math.floor(clientHeight);\r\n\r\n return (ceilScrollHeight - ceilScrollTop === ceilClientHeight)\r\n || (ceilScrollHeight - floorScrollTop === ceilClientHeight)\r\n || (ceilScrollHeight - ceilScrollTop === floorClientHeight)\r\n || (ceilScrollHeight - floorScrollTop === floorClientHeight)\r\n || (floorScrollHeight - ceilScrollTop === ceilClientHeight)\r\n || (floorScrollHeight - floorScrollTop === ceilClientHeight)\r\n || (floorScrollHeight - floorScrollTop === floorClientHeight)\r\n || (floorScrollHeight - floorScrollTop === floorClientHeight)\r\n}\r\n\r\n/**\r\n * when the new customer is created - the system creates a job for him with only one userState property\r\n * @param parentGroup {object}\r\n // * @param fabricatorData {object}\r\n * @returns {array}\r\n */\r\nexport const getSideBarSubParts = (parentGroup) => {\r\n if (!parentGroup || !parentGroup.subParts || !parentGroup.layout) {\r\n return []\r\n }\r\n let subParts = parentGroup.subParts(true, true) || [];\r\n const layout = parentGroup.layout;\r\n if (!Config.showAllVisualizerGroups()) {\r\n subParts = subParts.filter(subPart => {\r\n return layout.hasNavItemsLength(subPart)\r\n // && !(fabricatorData && fabricatorData.isEncore && Array.isArray(layout.disabledClickablePartIds)\r\n // && layout.disabledClickablePartIds.includes(subPart.part.partId)) // hide if it's not clickable (for encore)\r\n })\r\n }\r\n return subParts\r\n}\r\n","import store from \"../../../store\";\r\nimport {\r\n END_CAP_AREA_PART_IDS,\r\n END_CAP_CABINETS_PART_IDS,\r\n END_CAP_PART_IDS, SHAPE_PART_ID, SIDEBAR_NAVIGATION_BUTTONS,\r\n SQFT_AREA_TYPE_PART_IDS, SQFT_FEATURES,\r\n SQFT_GROUP\r\n} from \"../constants\";\r\nimport {getUrlSQFTHashParam} from \"./sqftHelper\";\r\nimport sqftConfig from \"../components/canvas/store/sqftConfig\";\r\nimport { SIDEBAR_NAVIGATION_CABINET_BUTTONS, SQFT_APPLIANCES } from \"../constants\";\r\nimport endCapCanvas from \"../components/canvas/core/controls/endCapCanvas\";\r\nimport {setSelectedFeature} from \"../../../actions/sqftResourceFunctions\";\r\nimport {setSelectedCountertop, setSelectedWall} from \"../../../actions/sqftMenuFunctions\";\r\n\r\nexport const getSQFTGroupFromUrl = () => {\r\n return getUrlSQFTHashParam(\"group\")\r\n}\r\n\r\n/**\r\n * Is SQFT in Area Group TYPE\r\n */\r\nexport const getIsSFTAreaGroup = () => {\r\n const isSFTAreaGroupInUrl = getSQFTGroupFromUrl();\r\n const {sqftState} = store.getState();\r\n const {sqftFromFeature} = sqftState;\r\n\r\n return isSFTAreaGroupInUrl || sqftFromFeature && (Object.keys(SQFT_AREA_TYPE_PART_IDS).includes(sqftFromFeature.cartFeature.partId));\r\n}\r\n\r\n/**\r\n * Is SQFT in Cabinets Group TYPE\r\n */\r\nexport const isSFTCabinetsGroup = () => {\r\n const isCabinetGroupInURL = sqftConfig.isCabinetGroupInURL();\r\n const {sqftState} = store.getState();\r\n const {SQFTGroup} = sqftState;\r\n\r\n return isCabinetGroupInURL || SQFTGroup === SQFT_GROUP.cabinets;\r\n}\r\n\r\n/**\r\n * Is SQFT Group Type\r\n */\r\nexport const getSQFTGroup = () => {\r\n const isSFTAreaGroupInUrl = getSQFTGroupFromUrl();\r\n const {sqftState} = store.getState();\r\n const {SQFTGroup} = sqftState;\r\n\r\n if (isSFTAreaGroupInUrl) {\r\n return isSFTAreaGroupInUrl\r\n }\r\n\r\n if (SQFTGroup) {\r\n return SQFTGroup;\r\n }\r\n\r\n return SQFT_GROUP.default\r\n}\r\n\r\nexport const getPartIdsFromMenuOpened = (menuOpened) => {\r\n let partIds = menuOpened ? [menuOpened] : [];\r\n if (menuOpened === SIDEBAR_NAVIGATION_CABINET_BUTTONS.centerIsland) {\r\n partIds = ['countertop'];\r\n } else if (menuOpened === SQFT_APPLIANCES.refrigerator) {\r\n partIds = ['fridge'];\r\n } else if (menuOpened === SQFT_APPLIANCES.stovetop) {\r\n partIds = ['stove'];\r\n } else if (menuOpened === SIDEBAR_NAVIGATION_CABINET_BUTTONS.end_panel) {\r\n partIds = END_CAP_CABINETS_PART_IDS;\r\n } else if (menuOpened === SIDEBAR_NAVIGATION_BUTTONS.end_cap) {\r\n partIds = END_CAP_AREA_PART_IDS;\r\n } else if (menuOpened === SIDEBAR_NAVIGATION_CABINET_BUTTONS.wall) {\r\n partIds = [SQFT_FEATURES.front_wall];\r\n }\r\n\r\n return partIds;\r\n};\r\n\r\nexport const getSearchTextFromMenuOpened = (menuOpened) => {\r\n let searchText = \"\";\r\n if (menuOpened === SIDEBAR_NAVIGATION_CABINET_BUTTONS.end_panel) {\r\n searchText = \"\";//'End Panel';\r\n }\r\n return searchText;\r\n};\r\n\r\nexport const getItemClickCallbackForPartId = (partId) => {\r\n let itemClickCallback = new Function();\r\n if (END_CAP_PART_IDS.includes(partId)) {\r\n itemClickCallback = (e, feature) => {\r\n endCapCanvas.setHighlighting(false);\r\n endCapCanvas.setCursorImage();\r\n store.dispatch(setSelectedFeature(feature));\r\n };\r\n } else if (partId === SHAPE_PART_ID.countertop) {\r\n itemClickCallback = (e, feature) => {\r\n store.dispatch(setSelectedCountertop(feature.dbFeature.id));\r\n }\r\n } else if (partId === SHAPE_PART_ID.front_wall) {\r\n itemClickCallback = (e, feature) => {\r\n store.dispatch(setSelectedWall(feature.dbFeature.id));\r\n }\r\n }\r\n\r\n return itemClickCallback;\r\n};\r\n","import React, {useEffect, useRef} from \"react\";\r\nimport $ from \"jquery\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst WithOverlay = (props) => {\r\n\r\n const {children, visible, className, onClick, popupClassName} = props;\r\n\r\n const overlayElement = useRef(null);\r\n\r\n useEffect(() => {\r\n if (overlayElement && overlayElement.current) {\r\n $(overlayElement.current).fadeIn(300)\r\n }\r\n }, [visible]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n const hideOverlay = (closePopup) => {\r\n if (overlayElement && overlayElement.current) {\r\n $(overlayElement.current).fadeOut(300, () => {\r\n if (closePopup) {\r\n closePopup();\r\n }\r\n })\r\n }\r\n };\r\n\r\n const onOverlayClick = (event) => {\r\n if (!onClick) {\r\n return;\r\n }\r\n if (popupClassName && event.target.closest(\".\" + popupClassName)) {\r\n return\r\n }\r\n hideOverlay(onClick);\r\n }\r\n\r\n return (\r\n
\r\n {children(hideOverlay)}\r\n
\r\n )\r\n};\r\n\r\nWithOverlay.propTypes = {\r\n children: PropTypes.any,\r\n className: PropTypes.string,\r\n popupClassName: PropTypes.string,\r\n onClick: PropTypes.func,\r\n}\r\n\r\nexport default WithOverlay\r\n","import {Shower} from \"../../parts/shower\";\r\nimport {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerComboTubType, SIDE_POSITIONS} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\n\r\nexport default class AccessoryCommon extends IntermediatePart {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n if (this.partId === \"grab_bar\") {\r\n const showerCondition = showerParent.showerTubComboIsActive() && layout.parts[ShowerTubCombo.id]\r\n && (layout.parts[ShowerTubCombo.id].bottomTub === ShowerComboTubType.walk_in_tub)\r\n ? \"Tub\"\r\n : \"Shower\";\r\n conditions.push({\r\n propName: \"Shower\",\r\n propValue: showerCondition\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n checkRelatedFeatureGroupPositions(position) {\r\n const accessoriesParent = this.getParent();\r\n const showerParent = accessoriesParent.layout.parts[Shower.id]; // no need for another check\r\n const showerSize = showerParent.showerSize();\r\n let otherFeatureGroup = null;\r\n switch (this.partId) {\r\n case \"grab_bar\":\r\n otherFeatureGroup = accessoriesParent.soapDish;\r\n break;\r\n case \"soap_dish\":\r\n otherFeatureGroup = accessoriesParent.grabBar;\r\n break;\r\n case \"shower_seats\":\r\n otherFeatureGroup = accessoriesParent.largeCornerSeat;\r\n break;\r\n case \"large_corner_seat\":\r\n otherFeatureGroup = accessoriesParent.seats;\r\n break;\r\n default:\r\n break;\r\n }\r\n if (showerSize === \"30\") {\r\n if (otherFeatureGroup && otherFeatureGroup.layerPositions && !this.disabled && Object.keys(this.layerPositions).some(key => this.layerPositions[key])) {\r\n Object.keys(otherFeatureGroup.layerPositions).forEach(key => {\r\n otherFeatureGroup.layerPositions[key] = null\r\n });\r\n }\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (key !== position) {\r\n this.layerPositions[key] = null; // it can be only on one side on small shower size\r\n }\r\n })\r\n }\r\n } else {\r\n if (this.layerPositions[position] && otherFeatureGroup && otherFeatureGroup.layerPositions[position] && !otherFeatureGroup.disabled) {\r\n const newPosition = position === SIDE_POSITIONS[0] ? SIDE_POSITIONS[1] : SIDE_POSITIONS[0];\r\n if (!this.layerPositions[newPosition]) {\r\n const matchingPositionFeature = otherFeatureGroup.getMatchingPositionFeature(newPosition, otherFeatureGroup.layerPositions[position]);\r\n if (matchingPositionFeature) {\r\n otherFeatureGroup.layerPositions[newPosition] = matchingPositionFeature;\r\n }\r\n }\r\n otherFeatureGroup.layerPositions[position] = null; //2) remove old soap dish position\r\n }\r\n }\r\n }\r\n\r\n}\r\n","import {getCurrentLayout} from \"../../../appLayout\";\r\nimport {getGroupDescription} from \"../../../selectionWindow/selectionDescriptionCoverTranslates\";\r\nimport {CART_ITEM_ADDED_BY} from \"../../../shoppingCart/cartItemInterface\";\r\nimport {cartItemInStock} from \"../../lookNavigation/lookFunctions2\";\r\nimport {IS_LIXIL_SERVERS, IS_PRODUCT_JOURNEY} from \"../../../../config\";\r\nimport {getCartItemUnit, getFeatureUnit} from \"../../../../misc/helpers\";\r\nimport store from \"../../../../store\";\r\n// import {getBvFeatures} from \"../../../../api/server-api\";\r\n\r\n/**\r\n * Returns qtCatProperties\r\n * @param lookActiveFeature {object}\r\n * @returns {object} objects\r\n */\r\nexport const getAvailableWizardList = (lookActiveFeature) => {\r\n if (!lookActiveFeature) {\r\n return {}\r\n }\r\n const parent = lookActiveFeature.getParent();\r\n\r\n return parent.qtCatProperties ? parent.qtCatProperties : {};\r\n}\r\n\r\n/**\r\n * Returns subParts\r\n * @param qtCategoryName {string}\r\n * @returns {array} array of objects\r\n */\r\nexport const getWizardSubParts = (qtCategoryName) => {\r\n const layout = getCurrentLayout();\r\n if (layout.qtCategories) { // set default if index is not matching\r\n //console.log(\"qtCategories\", layout.qtCategories);//virtualized list //navigation subitems\r\n\r\n let qtCategory = layout.qtCategories.find(qtCat => qtCat.name === qtCategoryName);\r\n if (qtCategory && qtCategory.subParts) {\r\n return qtCategory.subParts\r\n }\r\n }\r\n return []\r\n}\r\n\r\n/**\r\n * Returns active features list for\r\n * @param subPart {object}\r\n * @param intl {object}\r\n * @param fabricatorData array\r\n * @returns {array} array of objects\r\n */\r\nexport const getFeatureGroupDescription = (subPart, intl, fabricatorData) => {\r\n const name = (subPart.customGroupDisplayName || subPart.partName || \"\").toLowerCase();\r\n if ((fabricatorData.isLowes || fabricatorData.isCaesarStone) && intl.messages) {\r\n if (intl.locale === \"fr-FR\" && intl.messages[\"transDoc.description_FR.\" + name]) {\r\n return intl.formatMessage({id: \"transDoc.description_FR.\" + name})\r\n } else if (intl.locale === \"pl-PL\" && intl.messages[\"transDoc.customTranslateDescription_PL.\" + name]) {\r\n return intl.formatMessage({id: \"transDoc.customTranslateDescription_PL.\" + name})\r\n }\r\n }\r\n return subPart.customDescription || subPart.description\r\n || intl.formatMessage({ id: getGroupDescription(subPart.partName) });\r\n};\r\n\r\n// const getMissingFeatures = (missingFeatures) => {\r\n// getBvFeatures(missingFeatures)\r\n// .then(response => {\r\n// const layout = getCurrentLayout();\r\n// layout.loadNewFeatures(response.data);\r\n// return true\r\n// })\r\n// .catch(() => false)\r\n// }\r\n\r\n/**\r\n * returns bundled features\r\n * @param feature {featureInterface}\r\n * @returns {array}\r\n */\r\nexport const getLixilRequiredNotIncludedFeatures = (feature) => {\r\n if (Array.isArray(feature.dbFeature.lixilRequiredNotIncluded) && feature.dbFeature.lixilRequiredNotIncluded.length) {\r\n // todo remove\r\n //feature.dbFeature.lixilRequiredNotIncluded.push(90068248, 90068237, 90068210, 90074461, 90068828, 90074449,\r\n // 90068281, 90068389, 90069955, 90069948, 90069950, 90071177, 90070070, 90069587 );\r\n // await getMissingFeatures(feature.dbFeature.lixilRequiredNotIncluded);\r\n\r\n const layout = getCurrentLayout();\r\n let allFeatures = layout.getAllFeatures(true);\r\n let lixilRequiredNotIncluded = allFeatures.filter((checkFeature) => {\r\n return feature.dbFeature.lixilRequiredNotIncluded.includes(checkFeature.dbFeature.id)\r\n });\r\n console.log(\"lixilRequiredNotIncluded\", lixilRequiredNotIncluded);\r\n\r\n return lixilRequiredNotIncluded\r\n }\r\n return []\r\n}\r\n\r\n/**\r\n * returns formatted string\r\n * @param str {string}\r\n * @returns {string}\r\n */\r\nexport const formatStrToUrl = (str) => {\r\n if (!str) {\r\n return \"\"\r\n }\r\n\r\n return str.replace(/\\s+/g, '-').toLowerCase();\r\n}\r\n\r\n\r\n/**\r\n * removes check collection for specific fabricator\r\n * @param feature {featureInterface}\r\n * @returns {boolean}\r\n */\r\nexport const allowCheckForCollection = (feature) => {\r\n if (!feature) {\r\n return true\r\n }\r\n // For shower fixture we have same customDisplayName, but different collection name (\"Euphoria\" and \"Shower Configuration\").\r\n // But they still should match\r\n // return feature.partId !== \"shower_fixture\"\r\n return true\r\n}\r\n\r\nconst unitsToCountQuantity = [\"unit\", \"units\", \"qty\", \"each\", \"Each\", \"no quantity\"];\r\n\r\n/**\r\n * returns current cart items length (with all quantites or only cart Items)\r\n * @param cartItems {[cartItemInterface]}\r\n * @param intl {object}\r\n * @param forceCheckAllQuantitties {boolean}\r\n * @returns {number}\r\n */\r\nexport const getCartItemsCount = (cartItems, intl = null, forceCheckAllQuantitties = IS_LIXIL_SERVERS) => {\r\n\r\n const fabricatorData = store.getState().fabricatorState;\r\n\r\n return cartItems.reduce((total, cartItem) => {\r\n const shouldBeCounted = !cartItem.relatedProductParent && !cartItem.isRemoved && cartItemInStock(cartItem);\r\n if (!shouldBeCounted || (IS_PRODUCT_JOURNEY && cartItem.addedBy !== CART_ITEM_ADDED_BY.user)) {\r\n return total\r\n }\r\n // || (featureIsBundle(cartItem.cartFeature, cartItems) && getBundledFeatures(cartItem.cartFeature).some(relFeature => relFeature.dbFeature.lixilAvailableQty > 0))\r\n if (forceCheckAllQuantitties) {\r\n return total + cartItem.quantity\r\n } else if (intl) {\r\n const featureUnit = getFeatureUnit(cartItem.cartFeature, intl, fabricatorData, cartItem.quantity);\r\n const cartItemUnit = getCartItemUnit(cartItem, intl);\r\n const unit = cartItemUnit || featureUnit || \"\";\r\n if (unit && unitsToCountQuantity.includes(unit.toLowerCase())) {\r\n return total + cartItem.quantity\r\n }\r\n }\r\n // Items in visualizer should equal total quantity of items minus out of stock (Shower bundle will count as 1 not 7)\r\n return total + 1 // simple return cart items count\r\n }, 0)\r\n}\r\n\r\n","import $ from 'jquery';\r\nimport Config, {\r\n getCommonVisualizerType,\r\n IS_LIXIL_SERVERS, IS_OFFLINE_MODE,\r\n USE_SERVER_CACHING\r\n} from \"../config\";\r\nimport {toBoolean} from \"../misc/utils\";\r\nimport {getCurrentLayout} from '../bvcomponents/appLayout';\r\nimport store from \"../store\";\r\nimport AxiosInstance from \"./axiosInstance\";\r\nimport {renderErrorPopup} from \"./api-popups\";\r\nimport {HOST_NAME} from \"./api\";\r\nimport {fixFeaturesResponse} from \"../misc/backendFunctions\";\r\n\r\n//Axios.defaults.headers.get['Content-Type'] = 'application/json';\r\n\r\nif (!String.prototype.endsWith) {\r\n Object.defineProperty(String.prototype, 'endsWith', {\r\n value: function(searchString, position) {\r\n var subjectString = this.toString();\r\n if (position === undefined || position > subjectString.length) {\r\n position = subjectString.length;\r\n }\r\n position -= searchString.length;\r\n var lastIndex = subjectString.indexOf(searchString, position);\r\n return lastIndex !== -1 && lastIndex === position;\r\n }\r\n });\r\n}\r\n\r\nconst serverConfig = document.kvConfig;\r\nconst __hideFeatures = toBoolean(serverConfig.hide) ? 1 : 0;\r\n\r\nfunction _get(url, axiosController) {\r\n return axiosController ? AxiosInstance.get(url, {\r\n signal: axiosController.signal\r\n }) : AxiosInstance.get(url)\r\n}\r\n\r\nfunction _post(url, data, headers = null) {\r\n return AxiosInstance.post(url, data, headers ? {headers} : {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n 'x-antiforgery-token': $('input[name=__RequestVerificationToken]').val()\r\n }\r\n });\r\n}\r\n\r\nlet __urlBase = null;\r\n\r\nfunction _getUrlBase() {\r\n if (__urlBase) return __urlBase;\r\n let {subDomain} = document.kvConfig;\r\n // let {domain} = document.kvConfig;\r\n // domain = domain || 'quotesflooring.com';\r\n subDomain = subDomain ? subDomain + '.' : '';\r\n __urlBase = subDomain + HOST_NAME;\r\n return __urlBase;\r\n}\r\n\r\nfunction _urlBase() {\r\n return serverConfig.type === 'Fabricator' ? _getUrlBase() + '/Job/QuickQuote/' + serverConfig.userId : '.';\r\n}\r\n\r\nconst addUrlMode = (baseUrl, visualizerType = \"\") => {\r\n const visType = getCommonVisualizerType(visualizerType);\r\n if (IS_LIXIL_SERVERS && (document.kvConfig.visualizerType === \"bvLook\")) { // temporarily, until the backend is fixed\r\n return baseUrl\r\n }\r\n return baseUrl + (baseUrl.includes(\"?\") ? \"&\" : \"?\") + `mode=${visType}`\r\n}\r\n\r\nconst hardcodeResponsesFolder = () => {\r\n if (document.kvConfig.visualizerType === \"bvLook\") {\r\n return \"node/responses/lixil\"\r\n }\r\n return \"node/responses\"\r\n}\r\n\r\nexport default class JsonApi {\r\n static allAvailableStones(jobId, type) {\r\n jobId = jobId || 0;\r\n type = type || 'Fabricator';\r\n return _get(`${_getUrlBase()}/api/Public/${serverConfig.userId}/AvailableStones?jobId=${jobId}&type=${type}&loadStoneFilters=true`);\r\n // return _get(`${_getUrlBase()}/Job/QuickQuote/${serverConfig.userId}/AvailableStones?jobId=${jobId}&type=${type}`);\r\n }\r\n\r\n static getNewQuoteData(jobId, type) {\r\n jobId = jobId || 0;\r\n type = type || 'Fabricator';\r\n // let url = `${_getUrlBase()}/Job/QuickQuote/${serverConfig.userId}/GetNewQuoteData?jobId=${jobId}&type=${type}&hide=${__hideFeatures}`;\r\n let url = `${_getUrlBase()}/api/Public/${serverConfig.userId}/GetNewQuoteData?jobId=${jobId}&type=${type}&hide=${__hideFeatures}`;\r\n if (Config.isMobile()) {\r\n url += '&w=150';\r\n }\r\n return _get(url);\r\n }\r\n\r\n static getMenuNavigation (forTool) {\r\n if (document.kvConfig.noInternetMode) {\r\n return Promise.resolve({data: []})\r\n }\r\n const url = forTool\r\n ? `${_getUrlBase()}/api/PublicFabricatorVisualizerNavigation/List?FabricatorId=${serverConfig.userId}&forTool=${forTool}`\r\n : `${_getUrlBase()}/api/PublicFabricatorVisualizerNavigation/List?FabricatorId=${serverConfig.userId}`\r\n return _get(url);\r\n }\r\n\r\n static userLogin(data) {\r\n if(document.kvConfig.kioskMode) {\r\n var response = this.saveUserKiosk(data);\r\n return Promise.resolve(response);\r\n } else {\r\n return _post(_getUrlBase() + \"/api/Public/LoginClient\", data);\r\n }\r\n // return _post(_urlBase() + \"/LoginClient\", {email: email, password: password});\r\n }\r\n\r\n static userRegister(data) {\r\n if(document.kvConfig.kioskMode) {\r\n var response = this.saveUserKiosk(data);\r\n return Promise.resolve(response);\r\n } else {\r\n return _post(`${_getUrlBase()}/api/Public/RegisterClient`, data);\r\n }\r\n // return _post(_urlBase() + \"/RegisterClient\", data);\r\n }\r\n\r\n static saveQuote(data) {\r\n if(document.kvConfig.kioskMode) {\r\n const state = store.getState();\r\n const {serverState, userState} = state;\r\n const userInfo = userState.userInfo;\r\n return this.saveQuoteKiosk(JSON.stringify({\r\n subDomain: document.kvConfig.subDomain,\r\n encodedUserId: userInfo.encodedUserId,\r\n quoteData: JSON.stringify(data),\r\n id: serverState.jobId\r\n }));\r\n } else {\r\n return _post(_getUrlBase() + \"/api/Public/SaveQuote\", data);\r\n }\r\n // return _post(_urlBase() + \"/SaveMultiQuickQuote\", data);\r\n }\r\n\r\n static submitPayment(data) {\r\n return _post(_getUrlBase() + \"/api/Public/SubmitPayment\", data);\r\n }\r\n\r\n // email must be post-fixed by the /, see here\r\n // https://stackoverflow.com/questions/13298542/apicontroller-returns-404-when-id-contains-period\r\n // the accepted answer\r\n static resetUserPassword(email, language) {\r\n return _post(_getUrlBase() + '/api/Public/SendResetPassword', {\r\n email,\r\n language,\r\n fabricatorId: document.kvConfig.userId,\r\n });\r\n }\r\n\r\n static scheduleCustomer(data) {\r\n if(document.kvConfig.kioskMode) {\r\n return this.saveSchedule(JSON.stringify({\r\n subDomain: document.kvConfig.subDomain,\r\n json: JSON.stringify(data)\r\n }));\r\n } else {\r\n return _post(_getUrlBase() + \"/api/Public/Schedule\", data);\r\n }\r\n }\r\n\r\n static getJobData(jobId) {\r\n return _get(_urlBase() + \"/GetJobDataById?jobId=\" + jobId);\r\n }\r\n\r\n static getBVJobData(jobId, editToken) {\r\n return _get(_getUrlBase() + '/api/Public/getBvJobData/' + jobId + (editToken ? \"?editToken=\" + editToken : \"\"))\r\n }\r\n\r\n static getEmployees() {\r\n if(document.kvConfig.kioskMode) {\r\n return Promise.resolve(this.getKioskApiResponse(document.kvConfig.userId, `/api/Public/getEmployees/${+document.kvConfig.userId}`));\r\n } else {\r\n return _get(`${_getUrlBase()}/api/Public/getEmployees/${+document.kvConfig.userId}`);\r\n }\r\n }\r\n\r\n static generateAuthenticationToken() {\r\n const userState = store.getState().userState;\r\n const {userInfo} = userState;\r\n if (userInfo && userInfo.phoneNumber && userInfo.phoneNumber.indexOf(\"555-555-5555\") === -1) {\r\n return _get(_getUrlBase() + \"/api/TwoFactorAuthentication/GenerateAuthenticationRequest?encodedCustomerId=\" + encodeURIComponent(userState.encodedUserId));\r\n } else if(userInfo && userInfo.phoneNumber && userInfo.phoneNumber.indexOf('555-555-5555') !== -1) {\r\n return Promise.resolve(\"93eacff8-d2cf-488b-b10d-12c81dd806e2\");\r\n } else {\r\n return Promise.reject();\r\n }\r\n }\r\n\r\n static sendAuthenticationRequest(token, to, type) {\r\n if(token !== \"93eacff8-d2cf-488b-b10d-12c81dd806e2\")\r\n return _post(_getUrlBase() + \"/api/TwoFactorAuthentication/SendAuthenticationRequest\", {token, to, type});\r\n else\r\n return Promise.resolve(true);\r\n }\r\n\r\n static validateAuthenticationRequest(token, code, phoneNumber) {\r\n const userState = store.getState().userState;\r\n if(token === \"93eacff8-d2cf-488b-b10d-12c81dd806e2\") {\r\n return Promise.resolve({data: code === \"568127\"});\r\n } else {\r\n return _post(_getUrlBase() + \"/api/TwoFactorAuthentication/ValidateAuthenticationRequest\", {token, code, phoneNumber, encodedCustomerId: userState.encodedUserId});\r\n }\r\n }\r\n\r\n static postDisplayRoom(bvState) {\r\n return _post(`${_getUrlBase()}/api/public/saveDefaults/${+document.kvConfig.userId}/client/bathroomvisualizer`, [bvState]);\r\n }\r\n\r\n static getDisplayRoom() {\r\n return _get(`${_getUrlBase()}/api/public/getDefaults/${+document.kvConfig.userId}/client/bathroomvisualizer`);\r\n }\r\n\r\n static resendActivationEmail(email) {\r\n return _post(`${_getUrlBase()}/api/public/resendActivationEmail`,\r\n {email, fabricatorId: +document.kvConfig.userId});\r\n }\r\n\r\n static async getBathroomVisualizerData(featuresCount, forVisualizerType) {\r\n const visualizerType = forVisualizerType || document.kvConfig.visualizerType;\r\n if (document.kvConfig.noInternetMode) {\r\n const featuresResponse = await _get(hardcodeResponsesFolder() + \"/mainVisualizerResponseFeatures.json\");\r\n let allResponse = await _get(hardcodeResponsesFolder() + \"/mainVisualizerResponse.json\");\r\n allResponse.data.features = featuresResponse.data;\r\n return allResponse\r\n }\r\n let localUrl = addUrlMode(`/api/public/bvdata/${+document.kvConfig.userId}`, visualizerType);\r\n let remoteUrl = visualizerType === \"bvLook\"\r\n ? addUrlMode(`/api/public/bvdata/${+document.kvConfig.userId}${(featuresCount ? \"?featuresPerGroup=\"+featuresCount : \"\")}`, visualizerType)\r\n : addUrlMode(`/api/public/bvdata/${+document.kvConfig.userId}${(featuresCount ? \"/\"+featuresCount : \"\")}`, visualizerType)\r\n return document.kvConfig.kioskMode\r\n ? this.getKioskApiResponse(document.kvConfig.userId, localUrl)\r\n : _get(`${_getUrlBase()}${remoteUrl}`);\r\n }\r\n\r\n static getBathroomVisualizerFeatures(arrayOfIds, arrayOfSkus, requestSharedFeatureNames = false, visualizerType) {\r\n if (document.kvConfig.noInternetMode || IS_OFFLINE_MODE) { // no need to receive features, we already received 50k, all of them\r\n return Promise.resolve({data: []})\r\n }\r\n const baseUrl = addUrlMode(`${_getUrlBase()}/api/public/bvdata/${+document.kvConfig.userId}/features`, visualizerType);\r\n return _post(baseUrl, arrayOfSkus\r\n ? requestSharedFeatureNames ? {sharedFeatureNames: arrayOfSkus} : {skus: arrayOfSkus}\r\n : {Ids: arrayOfIds});\r\n }\r\n\r\n static getBathroomVisualizerGroups(visualizerType) {\r\n if (document.kvConfig.noInternetMode) {\r\n return _get(hardcodeResponsesFolder() + \"/featureGroupsCounts.json\")\r\n }\r\n const localUrl = addUrlMode(`/api/public/bvdata/${+document.kvConfig.userId}/groups`, visualizerType);\r\n return document.kvConfig.kioskMode\r\n ? this.getKioskApiResponse(document.kvConfig.userId, localUrl)\r\n : _get(`${_getUrlBase()}${localUrl}`);\r\n }\r\n\r\n static fixGroupName(groupName) {\r\n return groupName.trim().replace(/\\//g,\"%23%23\").replace(/ /g,\"%20\").replace(/&/g,\"%26\");\r\n }\r\n\r\n static async getBathroomVisualizerGroupFeatures(groupName,\r\n page = 0,\r\n pageSize = 1000,\r\n filterValues = [],\r\n searchText = \"\",\r\n layoutAbbreviation = \"\",\r\n axiosController,\r\n requestOldFeatures = false,\r\n visualizerType = document.kvConfig.visualizerType) {\r\n if (IS_OFFLINE_MODE) {\r\n return Promise.resolve({data: []})\r\n }\r\n pageSize = (groupName === \"EX L\") ? 1500 : pageSize;\r\n const fixedGroupName = JsonApi.fixGroupName(groupName);\r\n const layout = getCurrentLayout();\r\n\r\n let localUrl = layout.isNewLayout && (visualizerType === \"kvScene\" && !IS_LIXIL_SERVERS)\r\n ? `/api/public/bvdataR/${+document.kvConfig.userId}/features/${fixedGroupName}`\r\n : `/api/public/bvdata/${+document.kvConfig.userId}/features/${fixedGroupName}`;\r\n\r\n let requestUrl = `${_getUrlBase()}${localUrl}/${page}/${pageSize}/`;\r\n\r\n const searchGroupName = layout.isNewLayout && groupName.includes(\" Crop\") ? groupName.replace(\" Crop\", \"\") : groupName;\r\n const featureGroup = layout.getFeatureGroupByGroupName(searchGroupName);\r\n\r\n if (USE_SERVER_CACHING && (visualizerType === \"KV\" || visualizerType === \"Kitchen\")\r\n || (!requestOldFeatures && featureGroup && featureGroup.nextFeaturesPageToLoadArray)) {\r\n let layoutName = layoutAbbreviation || `${layout.getCurrentLayoutAbbreviation()}/`;\r\n if (layout.isNewLayout) {\r\n layoutName = layoutName.replace(\"Layout\", \"\");\r\n }\r\n requestUrl += layoutName; // should go before filters\r\n }\r\n\r\n requestUrl = addUrlMode(requestUrl, visualizerType);\r\n\r\n if (filterValues.length) {\r\n filterValues.forEach((filterValue) => {\r\n requestUrl += (requestUrl.includes(\"?\") ? \"&\" : \"?\") + \"filterId=\" + filterValue;\r\n });\r\n }\r\n if (searchText) {\r\n requestUrl += (requestUrl.includes(\"?\") ? \"&\" : \"?\") + \"filter=\" + searchText\r\n }\r\n\r\n const fabricatorSettings = store.getState().fabricatorState.settings;\r\n if (fabricatorSettings.leadCapture) {\r\n requestUrl += (requestUrl.includes(\"?\") ? \"&\" : \"?\") + \"sortBy=unlocked\";\r\n }\r\n if (requestOldFeatures) {\r\n const oldVersion = getCommonVisualizerType(visualizerType) === \"kitchen\" ? \"kv4\" : \"bv4\";\r\n requestUrl += (requestUrl.includes(\"?\") ? \"&\" : \"?\") + \"toolVersion=\" + oldVersion; // should go before filters\r\n }\r\n\r\n const response = document.kvConfig.kioskMode\r\n ? await this.getKioskApiResponse(document.kvConfig.userId, localUrl, {filterValues, searchText, page, pageSize, type: \"features\" })\r\n : await _get(requestUrl, axiosController)\r\n if (Config.isDevMode()) {\r\n console.log(requestUrl + \" response\", response);\r\n }\r\n if (!response || !response.data || response.data.error) {\r\n renderErrorPopup(response.data.error);\r\n return []\r\n }\r\n return fixFeaturesResponse(response.data)\r\n }\r\n\r\n static getBathroomVisualizerGroupFilterValues(groupName = \"\", filterId = null, withStoneFilters = true) {\r\n if (document.kvConfig.noInternetMode) { // no need to receive features, we already received 50k, all of them\r\n return Promise.resolve({data: []})\r\n }\r\n const fixedGroupName = JsonApi.fixGroupName(groupName);\r\n var localUrl = `/api/public/bvdata/${+document.kvConfig.userId}/filters/${fixedGroupName}/`;\r\n var featureLocal = `/api/public/bvdata/${+document.kvConfig.userId}/features/${fixedGroupName}`;\r\n // const layout = getCurrentLayout();\r\n if (USE_SERVER_CACHING) {\r\n localUrl += `ALL/`;\r\n }\r\n localUrl = addUrlMode(localUrl);\r\n featureLocal = addUrlMode(featureLocal);\r\n let requestUrl = `${_getUrlBase()}${localUrl}`;\r\n if (filterId) {\r\n requestUrl = requestUrl + filterId\r\n }\r\n if (!withStoneFilters) {\r\n requestUrl = requestUrl + (requestUrl.includes(\"?\") ? \"&\" : \"?\") + \"stoneFilters=false\";\r\n }\r\n\r\n if(document.kvConfig.kioskMode) {\r\n return this.getKioskApiResponse(document.kvConfig.userId, localUrl, {type: 'filters', filterId, featureLocal});\r\n } else {\r\n return _get(requestUrl);\r\n }\r\n }\r\n\r\n static getQtCategories(layoutName, forVisualizerType) {\r\n if (document.kvConfig.noInternetMode) {\r\n return _get(hardcodeResponsesFolder() + \"/featureGroupCategories.json\")\r\n }\r\n const featuresPerGroupAmount = window.location.href.includes(\"cutting_edge_countertops\")\r\n || (document.kvConfig.userId === 138452) ? 200 : 50;\r\n const visualizerType = getCommonVisualizerType(forVisualizerType);\r\n // return _get(`${_getUrlBase()}/api/public/featureGroupCategories/${+document.kvConfig.userId}/${visualizerType}/?featuresPerGroup=${featuresPerGroupAmount}&mode=${visualizerType}&layout=${layoutName}`);\r\n\r\n const layout = getCurrentLayout(forVisualizerType);\r\n const localUrl = layout.isNewLayout\r\n ? `/api/public/featureGroupCategoriesLite/${+document.kvConfig.userId}/${visualizerType}/`\r\n : `/api/public/featureGroupCategories/${+document.kvConfig.userId}/${visualizerType}/?featuresPerGroup=${featuresPerGroupAmount}&mode=${visualizerType}&layout=${layoutName}`;\r\n return document.kvConfig.kioskMode\r\n ? this.getKioskApiResponse(document.kvConfig.userId, localUrl)\r\n : _get(`${_getUrlBase()}${localUrl}`);\r\n }\r\n\r\n static saveQuoteFast(data) {\r\n if(document.kvConfig.kioskMode) {\r\n return Promise.resolve(this.getKioskData(\"quickSave\", JSON.stringify({\r\n id: data.jobId,\r\n saveData: data.data\r\n })));\r\n }\r\n else {\r\n return _post(`${_getUrlBase()}/api/public/SaveQuoteFast`, data);\r\n }\r\n }\r\n\r\n static contractSign(data) {\r\n return _post(`${_getUrlBase()}/api/public/replace-and-sign`, data);\r\n }\r\n\r\n static getDocumentForJob(jobId, forceNew = false) {\r\n return _post(`${_getUrlBase()}/api/public/document-for-job/${jobId}/${forceNew}`, {});\r\n }\r\n\r\n static getContractDocuments(fabricatorId = document.kvConfig.userId) {\r\n return _get(`${_getUrlBase()}/api/document-signing/documents/${fabricatorId}`);\r\n }\r\n\r\n static getDocumentForFabricator(fabricatorId = document.kvConfig.userId) {\r\n if (document.kvConfig.noInternetMode) {\r\n return _get(hardcodeResponsesFolder() + \"/documentsForFabricator.json\")\r\n }\r\n return _post(`${_getUrlBase()}/api/public/document-for-fab/${fabricatorId}/`);\r\n }\r\n\r\n static getFabricatorSubscriptions(fabricatorId) {\r\n if (document.kvConfig.noInternetMode) {\r\n return _get(hardcodeResponsesFolder() + \"/fabricatorSubscriptions.json\")\r\n }\r\n const localUrl = `/api/public/GetFabricatorSubscriptionInfo/${fabricatorId}`;\r\n return document.kvConfig.kioskMode\r\n ? this.getKioskApiResponse(fabricatorId, localUrl)\r\n : _get(`${_getUrlBase()}${localUrl}`);\r\n }\r\n\r\n static getFabricatorDiscounts(fabricatorId) {\r\n if (document.kvConfig.noInternetMode) {\r\n return _get(hardcodeResponsesFolder() + \"/fabricatorDiscounts.json\")\r\n }\r\n return _get(`${_getUrlBase()}/api/public/fabricator-discounts/${fabricatorId}`);\r\n }\r\n\r\n static async getKioskApiResponse(fabricatorId, localUrl, otherData = null) {\r\n let data = {\r\n fabricatorId,\r\n localUrl,\r\n additionalInfo: {...otherData}\r\n };\r\n return this.getKioskData(\"getJson\", data);\r\n }\r\n\r\n static async getKioskData(type, data) {\r\n var kioskData = await this.getRawKioskData(type, data);\r\n if(typeof(kioskData) == \"string\") {\r\n kioskData = JSON.parse(kioskData);\r\n }\r\n return {data: kioskData};\r\n }\r\n\r\n static getRawKioskData(type, data) {\r\n var kioskData = KioskApp.PostMessage({\r\n type,\r\n data\r\n });\r\n return kioskData;\r\n }\r\n\r\n static saveQuoteKiosk(data) { return this.getKioskData('saveQuote', data); }\r\n static saveUserKiosk(data) { return this.getKioskData('saveUser', data); }\r\n static saveSchedule(data) { return this.getKioskData('schedule', data); }\r\n\r\n static getCustomersAndEmployees(fabricatorId = document.kvConfig.userId) {\r\n if (document.kvConfig.noInternetMode) {\r\n return _get(hardcodeResponsesFolder() + \"/customersAndEmployees.json\")\r\n }\r\n return _get(`${_getUrlBase()}/api/public/fabricator-customer-employees/${fabricatorId}/`);\r\n }\r\n\r\n static getCustomerById(customerId) {\r\n return _get(`${_getUrlBase()}/api/public/getCustomerData/${customerId}?format=json`);\r\n }\r\n static copySqftImages(fabricatorId, postData) {\r\n return _post(`${_getUrlBase()}/api/public/copySqftImages/${fabricatorId}/`, postData);\r\n }\r\n static getPassedUserInfo(userData) {\r\n return _post(`${_getUrlBase()}/api/public/EncSSOLoginClient/`, userData);\r\n }\r\n static postSaveVisualizerImage(fabricatorId, postData) {\r\n return _post(`${_getUrlBase()}/api/public/saveVisualizerImage/${fabricatorId}`, postData);\r\n }\r\n static postSaveTempData(postData, id = \"\", expiresIn = \"\") {\r\n let postString = `${_getUrlBase()}/api/public/saveTempData`;\r\n if (id) {\r\n postString+= `/${id}`;\r\n }\r\n if (expiresIn) {\r\n postString+= `/${expiresIn}`;\r\n }\r\n return _post(postString, {\"data\": postData});\r\n }\r\n static getSaveTempData(id = \"\") {\r\n return _get(`${_getUrlBase()}/api/public/getTempData/${id}`);\r\n }\r\n static postSureTax(postData, fabricatorId = document.kvConfig.userId) {\r\n return _post(`${_getUrlBase()}/api/public/postSureTaxRequest/${fabricatorId}`, postData);\r\n }\r\n static postVerifyAddress(postData) {\r\n return _post(`${_getUrlBase()}/api/public/verifyAddress`, postData);\r\n }\r\n static getTrumbleShippingOptions(skuList, zipCode) {\r\n return _get(`${_getUrlBase()}/api/public/getTrumbleShippingOptions/${skuList}/${zipCode}`);\r\n }\r\n static postTrumbleShippingOptions(postData, zipCode) {\r\n return _post(`${_getUrlBase()}/api/public/trumbleShippingOptions/${zipCode}`, postData);\r\n }\r\n static postTrumbleInventory(postData) {\r\n return _post(`${_getUrlBase()}/api/public/trumbullInventory`, postData);\r\n }\r\n static postShipperHqShipping(postData) {\r\n return _post(`${_getUrlBase()}/api/public/shipperHqShipping`, postData);\r\n }\r\n static getFilterGroups(fabricatorId = document.kvConfig.userId) {\r\n return _get(`${_getUrlBase()}/api/public/filterGroups/${fabricatorId}`);\r\n }\r\n static getMarkUpForFeatures(featuresArray) {\r\n return _post(`${_getUrlBase()}/api/markup/get-features/`, featuresArray);\r\n }\r\n static loginAdmin(data) {\r\n return _post(`${_getUrlBase()}/api/admin-edit/token`, data);\r\n }\r\n static postEditFeatures(data, headers) {\r\n return _post(`${_getUrlBase()}/api/admin-edit/${document.kvConfig.userId}/update-features`, data, headers);\r\n }\r\n}\r\n","import {\r\n getPriceWithCurrency,\r\n getQuotePriceWithDiscounts,\r\n getTotalPrice, sortByOrder,\r\n toFixedPrice\r\n} from \"../../misc/helpers\";\r\nimport {DISCOUNT_MAIN_TYPES, DISCOUNT_SECTION_TYPES, DISCOUNT_TYPES} from \"./discounstInterface\";\r\nimport {PMT} from \"../../misc/excelFunctions\";\r\nimport {getPercentage} from \"../../misc/misc2\";\r\n\r\nexport const getSubTotalPrice = (discountSections, discountSection, discount, withoutCurrent = false, customAddedDiscounts = []) => {\r\n const totalPrice = getTotalPrice(null, false);\r\n\r\n const allDiscounts = sortByOrder(getDiscountsForSection(discountSection, customAddedDiscounts));\r\n let ignoreDiscounts = allDiscounts.filter(currentDiscount => {\r\n if (!shouldCalculateDiscount(currentDiscount)) {\r\n return false\r\n }\r\n return withoutCurrent\r\n ? currentDiscount.order >= discount.order\r\n : currentDiscount.order > discount.order\r\n });\r\n discountSections.forEach(disSection => {\r\n if (disSection.order > discountSection.order) {\r\n ignoreDiscounts = [...ignoreDiscounts, ...disSection.discounts] // ignore other sections\r\n }\r\n });\r\n customAddedDiscounts.forEach(customDiscount => {\r\n const section = discountSections.find(sec => sec.id === customDiscount.categoryId);\r\n if (!section) {\r\n return\r\n }\r\n if (section.order > discountSection.order) {\r\n ignoreDiscounts = [...ignoreDiscounts, customDiscount] // ignore other custom discounts\r\n }\r\n });\r\n\r\n const grandTotal = getQuotePriceWithDiscounts(totalPrice, ignoreDiscounts);\r\n return toFixedPrice(grandTotal);\r\n};\r\n\r\nexport const getDiscountsForSection = (discountSection, customAddedDiscounts) => {\r\n const customDiscounts = customAddedDiscounts.filter(dis => {\r\n return dis.selected && (dis.categoryId === discountSection.id)\r\n })\r\n return [...discountSection.discounts, ...customDiscounts];\r\n}\r\n\r\nexport const calculateCellValue = ({discountSections, financePercentage, fabricatorSettings}, numberOfMonths = 0, finalPrice = 0) => {\r\n if (!numberOfMonths || !finalPrice) {\r\n return \"N/A\"\r\n }\r\n const fixedDeposit = getCustomDepositAmount(discountSections, finalPrice) || 0;\r\n const rate = financePercentage / 100 / 12; // Converts the annual interest rate into a monthly rate by dividing it by 12\r\n const nper = numberOfMonths; // The number of months in the repayment term\r\n const pv = -(finalPrice - fixedDeposit); // The present value (loan amount to be repaid). This is the negative of:\r\n // finalPrice - Today's final price of the good.\r\n // fixedDeposit - A $1000 deposit applied to the total loan amount.\r\n\r\n // const cellValue = pv * rate / (1 - Math.pow((1 + rate), -nper)); // this works fine, but the func below returns the same\r\n const cellValue = PMT(rate, nper, pv);\r\n\r\n return getPriceWithCurrency(fabricatorSettings, cellValue, null, false, true)\r\n}\r\n\r\nexport const getNextCustomDiscountOrder = (fromDiscount) => {\r\n return +(fromDiscount.order + 0.01).toFixed(2)\r\n}\r\n\r\nexport const getFilteredSections = (discountSections) => {\r\n return discountSections.filter(section => {\r\n return section.type !== DISCOUNT_SECTION_TYPES.finance\r\n })\r\n}\r\n\r\nexport const isSaveOnlyDiscount = (discount) => {\r\n return discount.discountType === DISCOUNT_MAIN_TYPES.finance || discount.discountType === DISCOUNT_MAIN_TYPES.deposit\r\n}\r\n\r\nexport const shouldDisplayDiscount = (discount) => {\r\n return discount.selected && !isSaveOnlyDiscount(discount)\r\n}\r\n\r\nexport const shouldCalculateDiscount = (discount) => {\r\n if (discount.isRidged) {\r\n const approveOptions = discount.approveOptions ? JSON.parse(discount.approveOptions) : null;\r\n if (approveOptions && approveOptions.options && approveOptions.options.length && !approveOptions.selectedOption) {\r\n return false\r\n }\r\n }\r\n return shouldDisplayDiscount(discount) && !discount.isSubTotal\r\n}\r\n\r\nexport const getDepositDiscount = (discountSections) => {\r\n let depositDiscount = null;\r\n discountSections.forEach(discountSection => {\r\n discountSection.discounts.forEach(discount => {\r\n if (discount.discountType === DISCOUNT_MAIN_TYPES.deposit) {\r\n depositDiscount = discount;\r\n }\r\n })\r\n });\r\n return depositDiscount\r\n}\r\n\r\n/**\r\n *\r\n * @param discountSections {array}\r\n * @param grandTotal {number}\r\n * @returns {string|number}\r\n */\r\nexport const getCustomDepositAmount = (discountSections, grandTotal = 0) => {\r\n const depositDiscount = getDepositDiscount(discountSections);\r\n if (!depositDiscount) {\r\n return null\r\n }\r\n if (depositDiscount.type === DISCOUNT_TYPES.price) {\r\n return depositDiscount.amount\r\n }\r\n const priceTaken = getPercentage(grandTotal, depositDiscount.amount) // for ex. 25% from 2700 = 625\r\n return toFixedPrice(Math.trunc(priceTaken * 100) / 100);\r\n}\r\n\r\nexport const getDepositAmount = (discountSections, grandTotal, fabricatorData) => {\r\n const customDeposit = getCustomDepositAmount(discountSections, grandTotal);\r\n if (customDeposit !== null) {\r\n return customDeposit\r\n }\r\n return fabricatorData.settings.deposit\r\n ? Math.floor((grandTotal * (fabricatorData.settings.deposit / 100)) * 100) / 100\r\n : 0\r\n}\r\n\r\nexport const getPriceWorkSheetSaveValues = (priceWorksheetState) => {\r\n const selectedDiscounts = [];\r\n priceWorksheetState.discountSections.forEach(disSection => {\r\n if (disSection.type === DISCOUNT_SECTION_TYPES.finance) {\r\n return\r\n }\r\n disSection.discounts.forEach(discount => {\r\n if (discount.selected) {\r\n selectedDiscounts.push(Object.assign({}, discount, {\r\n categoryId: disSection.id,\r\n }));\r\n }\r\n })\r\n })\r\n return {\r\n selectedDiscounts,\r\n financePercentage: priceWorksheetState.financePercentage,\r\n customAddedDiscounts: priceWorksheetState.customAddedDiscounts, // save as is for now\r\n }\r\n}\r\n","import {connect} from \"react-redux\";\r\nimport {withRouter} from \"react-router-dom\";\r\n\r\nimport {addToCart, clearCart, removeFromCart, restoreCart, updateCanvasCount} from \"../../../actions/actionFunctions\";\r\nimport {getCartItemObject} from \"../../../misc/helpers\";\r\nimport {\r\n createCartList,\r\n getMatchingColorFeature,\r\n navFeatureCLick\r\n} from \"../lookNavigation/lookFunctions\";\r\nimport {setLookRemovedCartItems} from \"../../../actions/shoppingCartFunctions\";\r\nimport {\r\n featureIsBundle,\r\n getCartItemsArrayFromFeature, getFeatureUrl,\r\n} from \"../lookNavigation/lookFunctions2\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../config\";\r\nimport {CART_ITEM_ADDED_BY} from \"../../shoppingCart/cartItemInterface\";\r\n\r\nconst WithUpdateLookCartItem = (props) => {\r\n\r\n const {cartItems, removeFromCart, addToCart, qtActiveCategory, lookActiveFeature, history, children, updateCanvasCount,\r\n lookRemovedCartItems, setLookRemovedCartItems, filterGroups, groheActiveFeatureQuantity,\r\n clearCart, restoreCart, fabricatorSettings} = props;\r\n\r\n /**\r\n * Creates cart items list depending on quotingTool features\r\n * @param neededFeature {featureInterface} current active updated feature\r\n * @param withAddToCart {boolean} should we add it to the cart (for product journey) or just update\r\n */\r\n const updateLookCartItem = (neededFeature = lookActiveFeature, withAddToCart = false) => {\r\n // if (!checkIfFeatureCanBeAddedToTheCart(neededFeature)) {\r\n // return false\r\n // }\r\n\r\n return updateLookCartItemsNew(neededFeature, withAddToCart); // temp test, if everything is ok - remove redundant code below\r\n\r\n let itemsToAdd = [];\r\n // const urlPartId = neededFeature.partId.replace(/_/gi, \"-\");\r\n const layout = getCurrentLayout();\r\n const addedCartItems = cartItems.filter(cItem => {\r\n // if (featureGroup.layerPositions) {\r\n // return (cItem.partId === neededFeature.partId)\r\n // && (cItem.cartFeature.metaData.layerPosition === neededFeature.metaData.layerPosition)\r\n // }\r\n const parent = layout.getFeatureGroupByPartId(cItem.partId);\r\n if (!IS_PRODUCT_JOURNEY && parent && parent.disabled) { // remove these cartItems too\r\n return true\r\n }\r\n return cItem.partId === neededFeature.partId\r\n });\r\n if (addedCartItems.length && !IS_PRODUCT_JOURNEY) {\r\n addedCartItems.forEach(addedCartItem => {\r\n removeFromCart(addedCartItem);\r\n if (featureIsBundle(addedCartItem.cartFeature, cartItems)) {\r\n cartItems.forEach(cItem => {\r\n if (cItem.relatedProductParent && cItem.relatedProductParent.dbFeature.id === addedCartItem.cartFeature.dbFeature.id) {\r\n removeFromCart(cItem)\r\n }\r\n })\r\n }\r\n })\r\n }\r\n // let newQuantity = IS_PRODUCT_JOURNEY\r\n // ? groheActiveFeatureQuantity\r\n // : addedCartItems.length ? addedCartItems[0].quantity : 1;\r\n let newQuantity = groheActiveFeatureQuantity;\r\n if (neededFeature.metaData.layerPosition && !IS_PRODUCT_JOURNEY) {\r\n const featureGroup = neededFeature.getParent();\r\n Object.keys(featureGroup.layerPositions).forEach(position => {\r\n if (featureGroup.layerPositions[position]) {\r\n if (position !== neededFeature.metaData.layerPosition) {\r\n if (neededFeature.dbFeature.sharedFeatureName === featureGroup.layerPositions[position].dbFeature.sharedFeatureName) {\r\n if (newQuantity === 1) {\r\n newQuantity += 1\r\n }\r\n } else {\r\n // here we update cart with same partId, but different position (for now it should not be executed since we have all positions same)\r\n itemsToAdd.push(getCartItemObject(featureGroup.layerPositions[position], 1, qtActiveCategory));\r\n if (newQuantity > 1) {\r\n newQuantity--;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n if (neededFeature.partId === \"vanity_faucet\") {\r\n const sinkParent = featureGroup.getParent().sink;\r\n const addedSinkItem = cartItems.find(cItem => {\r\n return cItem.partId === sinkParent.partId\r\n });\r\n if (addedSinkItem && addedSinkItem.cartFeature.dbFeature.sharedFeatureName && sinkParent.activeFeature && sinkParent.activeFeature.dbFeature.sharedFeatureName\r\n && (addedSinkItem.cartFeature.dbFeature.sharedFeatureName !== sinkParent.activeFeature.dbFeature.sharedFeatureName)) {\r\n // here we update cart with automatically changed feature (via the metadata)\r\n itemsToAdd.push(getCartItemObject(sinkParent.activeFeature, addedSinkItem.quantity, qtActiveCategory));\r\n removeFromCart(addedSinkItem);\r\n }\r\n }\r\n }\r\n itemsToAdd = [...itemsToAdd, ...getCartItemsArrayFromFeature(neededFeature, newQuantity, qtActiveCategory)]; // here we update cart with clicked feature\r\n\r\n if (!IS_PRODUCT_JOURNEY) {\r\n const featureGroups = getLookList(true);\r\n if (featureGroups && featureGroups.length) {\r\n let shouldBeAdded = [];\r\n featureGroups.forEach(parentObject => {\r\n if (parentObject.featureGroup.layerPositions) {\r\n Object.keys(parentObject.featureGroup.layerPositions).forEach(position => {\r\n if (parentObject.featureGroup.layerPositions[position]) {\r\n if (position !== neededFeature.metaData.layerPosition) {\r\n if (neededFeature.dbFeature.sharedFeatureName === parentObject.featureGroup.layerPositions[position].dbFeature.sharedFeatureName) {\r\n if (newQuantity === 1) {\r\n newQuantity += 1\r\n }\r\n } else {\r\n // here we update cart with same partId, but different position (for now it should not be executed since we have all positions same)\r\n itemsToAdd.push(getCartItemObject(parentObject.featureGroup.layerPositions[position], 1, qtActiveCategory));\r\n if (newQuantity > 1) {\r\n newQuantity--;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n })\r\n itemsToAdd = [...itemsToAdd, ...shouldBeAdded]; // here we update cart with enabled but not added features\r\n }\r\n }\r\n\r\n addToCart(itemsToAdd);\r\n\r\n updateRemovedCartItems(itemsToAdd);\r\n layout.updateLocalStorage();\r\n }\r\n\r\n const updateRemovedCartItems = (itemsToAdd) => {\r\n if (lookRemovedCartItems.length) {\r\n let newRemovedCartItems = [...lookRemovedCartItems];\r\n itemsToAdd.forEach(cartItem => {\r\n const existingIndex = newRemovedCartItems.findIndex(removedCartItem => {\r\n if (cartItem.cartFeature.metaData.layerPosition) {\r\n return (removedCartItem.partId === cartItem.partId)\r\n && (cartItem.cartFeature.metaData.layerPosition === removedCartItem.cartFeature.metaData.layerPosition)\r\n }\r\n return removedCartItem.partId === cartItem.partId || (\r\n removedCartItem.relatedProductParent && removedCartItem.relatedProductParent.partId === cartItem.partId\r\n )\r\n });\r\n if (existingIndex > -1) {\r\n newRemovedCartItems.splice(existingIndex, 1);\r\n }\r\n });\r\n if (newRemovedCartItems.length !== lookRemovedCartItems.length) {\r\n setLookRemovedCartItems(newRemovedCartItems);\r\n }\r\n }\r\n }\r\n\r\n const updateLookCartItemsNew = (neededFeature, withAddToCart) => {\r\n\r\n clearCart();\r\n let itemsToAdd = createCartList(qtActiveCategory, null);\r\n itemsToAdd.forEach(currentCartItem => {\r\n const oldExistingCartItem = cartItems.find(cItem => cItem.partId === currentCartItem.partId);\r\n if (oldExistingCartItem && !IS_PRODUCT_JOURNEY) {\r\n currentCartItem.addedBy = oldExistingCartItem.addedBy; // if it was changed by user - keep it\r\n if (oldExistingCartItem.quantity > currentCartItem.quantity) {\r\n if (currentCartItem.cartFeature.getParent) {\r\n const parent = currentCartItem.cartFeature.getParent();\r\n if (parent.layerPositions) {\r\n currentCartItem.quantity = Object.keys(parent.layerPositions).filter(positionKey => parent.layerPositions[positionKey]).length\r\n } else {\r\n currentCartItem.quantity = oldExistingCartItem.quantity;\r\n }\r\n } else {\r\n currentCartItem.quantity = oldExistingCartItem.quantity;\r\n }\r\n }\r\n }\r\n if (IS_PRODUCT_JOURNEY && neededFeature && !neededFeature.notAvailableInVisualizer) {\r\n if (currentCartItem.partId === neededFeature.partId\r\n || (currentCartItem.relatedProductParent\r\n && (currentCartItem.relatedProductParent.dbFeature.id === neededFeature.dbFeature.id))) {\r\n currentCartItem.quantity = groheActiveFeatureQuantity;\r\n if (withAddToCart) {\r\n currentCartItem.addedBy = CART_ITEM_ADDED_BY.user;\r\n }\r\n }\r\n }\r\n });\r\n if (neededFeature && neededFeature.notAvailableInVisualizer) {\r\n const newCartItem = getCartItemObject(neededFeature, groheActiveFeatureQuantity, qtActiveCategory);\r\n newCartItem.addedBy = withAddToCart ? CART_ITEM_ADDED_BY.user : CART_ITEM_ADDED_BY.auto;\r\n itemsToAdd.push(newCartItem);\r\n }\r\n if (IS_PRODUCT_JOURNEY && fabricatorSettings.checkout) {\r\n itemsToAdd = [...itemsToAdd, ...cartItems.filter(cItem => cItem.addedBy === CART_ITEM_ADDED_BY.user)]; // keep old added cartItems!\r\n }\r\n if (fabricatorSettings.checkout) {\r\n cartItems.forEach(cItem => {\r\n if (!cItem.keepOnLookUpdate) {\r\n return\r\n }\r\n if (!itemsToAdd.some(itemToAdd => itemToAdd.id === cItem.id)) {\r\n itemsToAdd.push(cItem) // keep old added cartItems! that was added from wizard list for example\r\n }\r\n })\r\n }\r\n restoreCart({cartItems: itemsToAdd});\r\n updateRemovedCartItems(itemsToAdd);\r\n const layout = getCurrentLayout();\r\n layout.updateLocalStorage();\r\n }\r\n\r\n /**\r\n * updates array of features\r\n * @param notMatchingFeatures {array}\r\n * @param fromFeature {featureInterface}\r\n * @param changeUrl {boolean}\r\n * @param directChange {boolean} // if only update\r\n */\r\n const updateAllLookCartItems = (notMatchingFeatures = [],\r\n fromFeature = lookActiveFeature,\r\n changeUrl = true,\r\n directChange = false) => {\r\n let needToBeUpdated = [fromFeature];\r\n if (notMatchingFeatures.length) {\r\n const currentFeatureName = fromFeature.getSplittedFeatureName();\r\n let toiletEnabled = false;\r\n notMatchingFeatures.forEach(notMatchingFeature => {\r\n if (notMatchingFeature.dbFeature.id !== fromFeature.dbFeature.id) {\r\n const sameFeatureAsActive = directChange ? {part: notMatchingFeature} : getMatchingColorFeature(fromFeature, notMatchingFeature, filterGroups)\r\n if (sameFeatureAsActive) {\r\n navFeatureCLick(sameFeatureAsActive.part, false);\r\n needToBeUpdated.push(sameFeatureAsActive.part);\r\n switch (sameFeatureAsActive.part.partId) {\r\n case \"toilet_brush\":\r\n case \"paper_holder\": {\r\n if (!toiletEnabled) {\r\n const layout = getCurrentLayout();\r\n const relatedFeatureGroup = layout.getFeatureGroupByPartId(\"toilet\");\r\n if (relatedFeatureGroup && relatedFeatureGroup.disabled && relatedFeatureGroup.activeFeature && !toiletEnabled) {\r\n navFeatureCLick(relatedFeatureGroup.activeFeature, false);\r\n needToBeUpdated.push(relatedFeatureGroup.activeFeature);\r\n }\r\n }\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n } else {\r\n console.log(\"sameFeatureAsActive not found\", notMatchingFeature.partId, currentFeatureName);\r\n }\r\n }\r\n })\r\n }\r\n needToBeUpdated.forEach(featureToClick => {\r\n navFeatureCLick(featureToClick, false);\r\n });\r\n // console.log(\"needToBeUpdated\", needToBeUpdated);\r\n updateLookCartItem(fromFeature)\r\n updateCanvasCount();\r\n // if (IS_PRODUCT_JOURNEY) {\r\n // setLookActiveCategory(\"\");\r\n // }\r\n // if (changeUrl && IS_PRODUCT_JOURNEY) {\r\n if (changeUrl) {\r\n history.push(getFeatureUrl(fromFeature, true));\r\n }\r\n }\r\n\r\n return children(updateLookCartItem, updateAllLookCartItems)\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeature} = store.lookState;\r\n const {cartItems, lookRemovedCartItems} = store.cartState;\r\n const {qtActiveCategory} = store.qtState;\r\n const {filterGroups} = store.filterState;\r\n const {groheActiveFeatureQuantity} = store.groheState;\r\n const {settings} = store.fabricatorState;\r\n\r\n return {\r\n lookActiveFeature,\r\n cartItems,\r\n qtActiveCategory,\r\n lookRemovedCartItems,\r\n filterGroups,\r\n groheActiveFeatureQuantity,\r\n fabricatorSettings: settings,\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n removeFromCart,\r\n addToCart,\r\n updateCanvasCount,\r\n setLookRemovedCartItems,\r\n clearCart,\r\n restoreCart\r\n};\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(WithUpdateLookCartItem)\r\n)\r\n","import {useHistory, useRouteMatch} from \"react-router-dom\";\r\nimport {hashHistory} from \"react-router\"; // omg pls don't kill me for that\r\n\r\nimport {setWizardActiveItem, setWizardActiveStep, setWizardSelectedValues} from \"../../../actions/wizardFunctions\";\r\nimport store from \"../../../store\";\r\nimport {\r\n getAvailableSteps,\r\n getCurrentGroups,\r\n getDefaultMaterialsWizardItem, getFeatureGroupFromWizardGroup, getWizardGroupFromCurrentSteps, navItemIsExcluded\r\n} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport Misc from \"../../../misc/misc\";\r\nimport {ROUTES} from \"../../../routes\";\r\nimport {IS_LIXIL_UI} from \"../../../config\";\r\nimport {\r\n getNextWizardSteps,\r\n isSameVisualizerWizard, selectedWizardGroupIsNotInCurrentStepAnymore\r\n} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\nimport {showWizardStepDoneCheckMark} from \"./materialsWizardDoneCheckMark\";\r\n\r\nexport const getNextNotCheckedStep = (wizardActiveItem, wizardActiveStep, wizardSelectedValues, cartItems, activeQuoteIndex) => {\r\n let nextStep = wizardActiveStep + 1;\r\n\r\n return nextStep // removed to prevent bugs (per Alan)\r\n\r\n // if (!wizardSelectedValues[nextStep]) { // if the next step is free - just go next, otherwise - let's find where to jump\r\n // changeWizardStepRoute(nextStep);\r\n // return\r\n // }\r\n const wizardSteps = getNextWizardSteps(wizardActiveItem, wizardActiveStep, wizardSelectedValues);\r\n while (nextStep <= wizardSteps.length - 1) {\r\n if (!wizardSteps[nextStep]) {\r\n break;\r\n }\r\n const wizardGroup = wizardSteps[nextStep].stepGroups[0];\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n const showDoneCheckMark = showWizardStepDoneCheckMark(wizardSelectedValues[nextStep], featureGroup, cartItems, activeQuoteIndex, wizardSteps[nextStep].stepGroups);\r\n // console.log(\"showDoneCheckMark\", wizardGroup, featureGroup, showDoneCheckMark);\r\n if (!showDoneCheckMark) {\r\n break;\r\n }\r\n // console.log(\"activePartRelatedItemIndex skipped\", activePartRelatedItemIndex);\r\n nextStep = nextStep + 1;\r\n }\r\n return nextStep\r\n}\r\n\r\nconst getSkippedWizardValues = (nextStep, wizardActiveStep, wizardItem, wizardSelectedValues) => {\r\n if (nextStep > wizardActiveStep) {\r\n\r\n const wizardSteps = getAvailableSteps(wizardItem, wizardSelectedValues, true);\r\n wizardSteps.forEach((step, stepIndex) => {\r\n if ((stepIndex < nextStep) && (!wizardSelectedValues[stepIndex]\r\n || selectedWizardGroupIsNotInCurrentStepAnymore(wizardSelectedValues[stepIndex], step.stepGroups))) {\r\n const wizardGroup = step.stepGroups[0];\r\n if (wizardGroup) {\r\n const skippedValue = {\r\n [stepIndex]: {\r\n wizardGroup,\r\n }\r\n }\r\n store.dispatch(setWizardSelectedValues(skippedValue));\r\n wizardSelectedValues = Object.assign(wizardSelectedValues, skippedValue); // this is needed for code below\r\n }\r\n }\r\n });\r\n }\r\n return wizardSelectedValues\r\n}\r\n\r\n/**\r\n * is used for SQFT to prevent bug when advanced quoting is missing selected value\r\n * @param cartItems {[cartItemInterface]}\r\n */\r\nexport const setWizardValuesFromCartItems = (cartItems) => {\r\n const {wizardSelectedValues, wizardActiveItem} = store.getState().wizardState;\r\n if (!wizardActiveItem || !cartItems.length) {\r\n return\r\n }\r\n let shouldUpdate = false;\r\n let wizardValues = Object.assign({}, wizardSelectedValues);\r\n const wizardSteps = getAvailableSteps(wizardActiveItem, wizardSelectedValues, true);\r\n // console.log(\"wizardSteps\", wizardSteps);\r\n // console.log(\"cartItems\", cartItems);\r\n // console.log(\"wizardValues\", wizardValues);\r\n cartItems.forEach((cartItem) => {\r\n if (!cartItem.fromWizardGroupId\r\n || !Number.isInteger(cartItem.fromWizardStep)\r\n || !cartItem.fromWizardId || (cartItem.fromWizardId !== wizardActiveItem.id)\r\n || wizardValues[cartItem.fromWizardStep]) {\r\n return\r\n }\r\n if (wizardSteps[cartItem.fromWizardStep] && wizardSteps[cartItem.fromWizardStep].stepGroups) {\r\n const wizardGroup = wizardSteps[cartItem.fromWizardStep].stepGroups.find(wG => wG.id === cartItem.fromWizardGroupId)\r\n // yes, we added a cart item from the wizard step, we should select it\r\n if (wizardGroup) {\r\n wizardValues[cartItem.fromWizardStep] = {\r\n wizardGroup,\r\n }\r\n if (!navItemIsExcluded({part: cartItem.cartFeature}, wizardGroup)) {\r\n wizardValues[cartItem.fromWizardStep].selectedFeature = cartItem.cartFeature;\r\n wizardValues[cartItem.fromWizardStep].partId = cartItem.partId;\r\n }\r\n shouldUpdate = true;\r\n }\r\n }\r\n });\r\n if (shouldUpdate) {\r\n // console.log(\"shouldUpdate\", wizardValues);\r\n store.dispatch(setWizardSelectedValues(wizardValues, true, wizardActiveItem));\r\n }\r\n}\r\n\r\nexport const switchToWizardItem = (wizardItem, nextStep, quoteIndex, wizardGroupId = null, changeRoute = true) => {\r\n const {quotesState, wizardState} = store.getState();\r\n const {allWizardsValues, wizardActiveStep} = wizardState;\r\n\r\n if (!wizardItem) {\r\n wizardItem = getDefaultMaterialsWizardItem();\r\n }\r\n\r\n let wizardValues = {};\r\n const foundWizardSelectedObject = allWizardsValues.find(wizSelObject => {\r\n return (wizSelObject.quoteIndex === quotesState.activeQuoteIndex) && (wizSelObject.wizardItemId === wizardItem.id)\r\n && isSameVisualizerWizard(wizSelObject)\r\n });\r\n if (foundWizardSelectedObject) {\r\n wizardValues = Object.assign({}, foundWizardSelectedObject.wizardSelectedValues);\r\n wizardValues = getSkippedWizardValues(nextStep, wizardActiveStep, wizardItem, wizardValues);\r\n }\r\n store.dispatch(setWizardActiveItem(wizardItem, quoteIndex));\r\n store.dispatch(setWizardSelectedValues(wizardValues, true, wizardItem));\r\n if (Number.isInteger(nextStep)) {\r\n if (wizardGroupId) {\r\n const {neededStep} = getWizardGroupFromCurrentSteps(wizardItem, wizardValues, wizardGroupId);\r\n if (neededStep && (neededStep.stepIndex !== nextStep)) {\r\n nextStep = neededStep.stepIndex\r\n }\r\n }\r\n store.dispatch(setWizardActiveStep(nextStep));\r\n } else {\r\n nextStep = foundWizardSelectedObject && Number.isInteger(foundWizardSelectedObject.lastVisitedStep)\r\n ? foundWizardSelectedObject.lastVisitedStep // restore last step\r\n : wizardValues ? Object.keys(wizardValues).length : 0 // restore last step (just in case lastVisitedStep is missing)\r\n if (nextStep === 0 && wizardActiveStep !== 0) {\r\n store.dispatch(setWizardActiveStep(0)); // cases when someone changes the wizard\r\n }\r\n }\r\n if (!changeRoute) {\r\n return\r\n }\r\n const urlStepNumber = nextStep + 1; // because we don't want to have 0 in the URL\r\n const nextUrl = \"/materials/\" + Misc.getUrlFromString(wizardItem.name) + \"/\" + urlStepNumber;\r\n const currentHash = window.location.hash.split(\"#\")[1];\r\n if (!currentHash || (currentHash !== nextUrl)) {\r\n hashHistory.push(nextUrl);\r\n }\r\n}\r\n\r\nexport const useChangeWizardStepRoute = () => {\r\n\r\n let history = useHistory();\r\n let routeMatch = useRouteMatch();\r\n // {\r\n // isExact: true,\r\n // params: {partName: 'kitchen-cabinets', subPartName: '1'},\r\n // path: \"/materials/:partName/:subPartName\",\r\n // url: \"/materials/kitchen-cabinets/3/upper-cabinet-boxes\"\r\n // }\r\n // let {partName, subPartName} = routeMatch.params;\r\n let {partName} = routeMatch.params;\r\n\r\n const changeWizardStepRoute = (nextStep, propsWizardItem) => {\r\n\r\n const {wizardActiveItem, wizardActiveStep, wizardList} = store.getState().wizardState;\r\n let {wizardSelectedValues} = store.getState().wizardState;\r\n\r\n const currentWizardItem = propsWizardItem || wizardActiveItem;\r\n\r\n wizardSelectedValues = getSkippedWizardValues(nextStep, wizardActiveStep, currentWizardItem, wizardSelectedValues);\r\n\r\n const currentGroups = getCurrentGroups(currentWizardItem, nextStep, wizardSelectedValues);\r\n\r\n if (wizardActiveStep > -1 && !currentGroups.length) { // wizard finished! congratulations\r\n const currentWizardIndex = wizardList.findIndex(wizardItem => wizardItem.id === currentWizardItem.id);\r\n\r\n if (nextStep === -1 && wizardActiveStep === 0) { // go to the previous wizard\r\n const prevEnabledWizard = wizardList.find((wizardItem, wizardItemIndex) => {\r\n return (wizardItem.id !== currentWizardItem.id) && (wizardItemIndex < currentWizardIndex)\r\n });\r\n if (prevEnabledWizard) {\r\n switchToWizardItem(prevEnabledWizard);\r\n } else {\r\n history.push(ROUTES.quoteDesign);\r\n }\r\n return;\r\n }\r\n\r\n const nextEnabledWizard = wizardList.find((wizardItem, wizardItemIndex) => {\r\n return (wizardItem.id !== currentWizardItem.id) && (wizardItemIndex > currentWizardIndex)\r\n });\r\n if (nextEnabledWizard) {\r\n switchToWizardItem(nextEnabledWizard);\r\n } else {\r\n history.push(ROUTES.shoppingcart);\r\n }\r\n return;\r\n }\r\n\r\n // console.log(\"nextStep\", nextStep);\r\n store.dispatch(setWizardActiveStep(nextStep));\r\n\r\n if (IS_LIXIL_UI) {\r\n return; // no need to change url\r\n }\r\n\r\n // console.log(\"subPartName\", subPartName);\r\n // console.log(\"partName\", partName);\r\n // console.log(\"history\", history);\r\n\r\n if (!partName) {\r\n partName = Misc.getUrlFromString(currentWizardItem.name)\r\n }\r\n\r\n const wizardGroup = currentGroups[0];\r\n if (!wizardGroup) {\r\n console.info(\"no wizard group found, something is wrong with the wizard\", );\r\n return\r\n }\r\n const stepUrl = Misc.getUrlFromString(wizardGroup.customDisplayName || wizardGroup.groupName || \"\");\r\n\r\n const urlStepNumber = nextStep + 1; // because we don't want to have 0 in the URL\r\n history.push(\"/materials/\" + partName + \"/\" + urlStepNumber + (stepUrl ? \"/\" + stepUrl : \"\"));\r\n }\r\n\r\n return {changeWizardStepRoute}\r\n}\r\n","import uuid from \"uuid\";\r\nimport _ from 'lodash';\r\n\r\nimport EventManager from \"../../store/sqftEventManager\";\r\nimport point from \"./point\";\r\nimport lineLength from \"./overlays/lineLength\";\r\nimport pnpoly, {isPointInsidePolygon} from \"../../../../lib/pnpoly\";\r\nimport workspace from \"../workspace\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport {\r\n addDecimalToLength,\r\n get45CornerLegDistanceByHypotenuse,\r\n getClosestPoint,\r\n getIntersectCords,\r\n getIntersectCordsBetweenLines,\r\n getMousePositionOnShape,\r\n getParallelPoints,\r\n getPointBetweenPoints,\r\n getPointDistance, getPointField,\r\n getPointOnTheLine, getTanDeg,\r\n isInnerCorner,\r\n measureDistanceToInches,\r\n orientation\r\n} from \"../../../../helpers/sqftHelper\";\r\n//todo sqft-react\r\nimport moveDiagonalLine from \"../../../../lib/moveDiagonalLine\";\r\nimport bumpout from \"./overlays/bumpout\";\r\nimport label from \"./overlays/label\";\r\nimport LineCorner from \"./lineHooks/lineCorner\";\r\n// import Color from \"./core/draw/color\";\r\nimport COLOR_THEMES, {COLOR} from \"../../store/colorThemes\";\r\nimport Color from \"../workspace/textBox/draw/color\";\r\nimport store from \"../../../../../../store\";\r\nimport {\r\n RESOURCE_ATTACHED_TO_NAME,\r\n RESOURCE_ATTACHED_TO_TYPE,\r\n RESOURCE_TYPE, SHAPE_PART_ID,\r\n SIDEBAR_SLAB_SEAM_BUTTONS,\r\n SQFT_MODE\r\n} from \"../../../../constants\";\r\nimport {updateSQFTCalculations} from \"../../../../../../actions/sqftFunctions\";\r\nimport sqftSlabManager from \"../../store/sqftSlabManager\";\r\nimport {addMiteredSection} from \"../../../../../../actions/sqftMiteredFunctions\";\r\nimport {addResource, deleteResourceAttachedTo} from \"../../../../../../actions/sqftResourceFunctions\";\r\nimport SqftStore from \"../../store/sqftStore\";\r\nimport {getAngleBetween3Points, getLineDirection, getLineOrientation} from \"../../../../helpers/shapeHelper\";\r\nimport RenderFigures from \"../../helpers/renderFigures\";\r\nimport {\r\n getLineBordersArrayV2,\r\n updateMiteredLength,\r\n updateShapeWaterfallLength,\r\n updateUnderlaymentLength\r\n} from \"../../helpers/lineHelper\";\r\nimport {isSFTCabinetsGroup} from \"../../../../helpers/sqftNavigationHelper\";\r\nimport MiteredController from \"../controls/mitered\";\r\nimport SlabWorkspace from \"../slab/slabWorkspace\";\r\nimport sqftResourcesManager from \"../../store/sqftResoursesManager\";\r\nimport BlinkingHighlight from \"../../helpers/commonParts/blink\";\r\nimport workspaceControllers from \"../../store/workspaceControllers\";\r\nimport {createSlabModeWaterfallShapes} from \"../../store/canvasHelper\";\r\nimport {isMiterEdge, isWaterfallFeature} from \"../../../../helpers/featureHelper\";\r\nimport {getCurrentLayout} from \"../../../../../appLayout\";\r\nimport LineAttachmentsComposite from \"./lineHooks/lineAttachmentsComposite\";\r\nimport UnderlaymentController from \"../controls/underlayment\";\r\nimport sqftEventManager from \"../../store/sqftEventManager\";\r\nimport {getClosestPointOnLine} from \"../../../../helpers/coordinatesHelper\";\r\n// import Menu from \"../controls/menu\";\r\n// import MiteredController from \"../controls/mitered\";\r\n\r\nexport default function (from, to, parent = null) {\r\n //private variables\r\n var self = this,\r\n //parent = null,\r\n state = {\r\n mousePos: {},\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n isHovering: false,\r\n withEdge: false,\r\n withBacksplash: false,\r\n withWall: false,\r\n withBumpout: false,\r\n isWithMitered: false, // mitered tool\r\n isWithUnderlayment: false,\r\n isWithWaterfallEdge: false, // waterfallTool edges\r\n isWithPeninsulaUnderwrapEdge: false, // Peninsula Underwrap Edge edges\r\n isWithFakeEdge: false,\r\n withId: null,\r\n attachedHandleId: null,\r\n attachedHandleUrl: null,\r\n attachedCrownMoldingFeatureId: null,\r\n attachedCrownMoldingUrl: null,\r\n backsplashFeatureId: null,\r\n backsplashHeight: 0, //this is backsplash size\r\n backsplashName: \"\", //this is backsplash size\r\n backsplashType: \"\", //this is backsplash size\r\n attachedItems: {\r\n isWithCrownMolding: false,\r\n isWithEndCap: false,\r\n },\r\n movePointDistance: 0, // is needed for diagonal lines\r\n angleLinePoints: {},\r\n slabModeSkipMiteredEdgeCreation: false,\r\n isHiddenForever: false,\r\n seamCutPoint: null,\r\n },\r\n design = {\r\n aroundLineColor: '#E3E1E3',\r\n cornerGutterSize: 0.1,\r\n outlineWidth: 8,\r\n outlineMargin: 9,\r\n horizontalOutlineMargin: 5,\r\n lineThickness: 4\r\n },\r\n overlayImportData = null,\r\n lineCornerImportData = null,\r\n overlayMiteredData = null,\r\n overlayUnderlaymentData = null,\r\n lineDirection = {};\r\n //public properties\r\n this.id = uuid();\r\n this.from = from;\r\n this.to = to;\r\n this.ctx = null;\r\n this.attachedShape = null;\r\n this.overlay = null;\r\n this.lineCorner = null;\r\n this.bumpoutOverlay = null;\r\n this.miteredOverlay = null;\r\n this.waterfallOverlay = null;\r\n this.labelOverlay = null;\r\n this.titleOverlay = null;\r\n this.staticOffset = null;\r\n this.isLine = true;\r\n this.blink = new BlinkingHighlight();\r\n //todo\r\n this.lineAttachmentsComposite = new LineAttachmentsComposite();\r\n\r\n //private property setters\r\n function setParent(value) { parent = value; }\r\n //public property getters\r\n this.getParent = function() { return parent; };\r\n this.getAttachedShape = () => { return this.attachedShape; };\r\n this.isWithBumpout = function() { return state.withBumpout; };\r\n this.isWithEdge = function() { return state.withEdge; };\r\n this.isWithWaterfallToolEdge = () => { return state.isWithWaterfallEdge; };\r\n this.isWithPeninsulaUnderwrapEdge = () => { return state.isWithPeninsulaUnderwrapEdge; };\r\n this.isWithBacksplash = () => { return state.withBacksplash; };\r\n this.isWithMitered = function() { return state.isWithMitered; };\r\n this.isWithUnderlayment = function() { return state.isWithUnderlayment; };\r\n this.isWithHandle = function() { return state.attachedHandleId; };\r\n this.isWithMiteredPrev = function() {\r\n const prevLine = parent.getPrevLine(self);\r\n return prevLine.isWithMitered();\r\n };\r\n this.isWithMiterEdge = () => {\r\n const attachedResource = workspace.getAttachedTo(this);\r\n if (attachedResource) {\r\n return isMiterEdge(attachedResource.featureId);\r\n }\r\n };\r\n /** this will return if green edge is waterfall (not waterfall tool) */\r\n this.isWithWaterfallEdgeFeature = () => {\r\n const attachedResource = workspace.getAttachedTo(this);\r\n if (attachedResource) {\r\n return isWaterfallFeature(attachedResource.featureId);\r\n }\r\n };\r\n this.isWithCrownMolding = () => {\r\n return state.attachedItems.isWithCrownMolding\r\n }\r\n\r\n this.getAttachedFeature = () => {\r\n const attachedResource = workspace.getAttachedTo(this);\r\n const layout = getCurrentLayout();\r\n\r\n return layout.getFeatureById(attachedResource.featureId, true);\r\n }\r\n this.isHovering = (shouldExcludePoints = false) => {\r\n if (!shouldExcludePoints && this.from.isHovering()) {\r\n return true\r\n }\r\n return state.isHovering;\r\n };\r\n this.isAngleHovering = function() { return this.lineCorner.state.isHovering; };\r\n this.isCornerLineHovering = function() { return this.lineCorner.state.isCornerLineHovering; };\r\n this.getDesign = function() { return design };\r\n this.getWithId = () => { return state.withId };\r\n this.setWithId = (value) => { state.withId = value };\r\n this.getBacksplashHeight = () => { return state.backsplashHeight };\r\n this.setBacksplashHeight = (value) => {\r\n //update resource height\r\n const attachedToResource = {...sqftResourcesManager.getAttachedToLineResource(this)};\r\n attachedToResource.height = value;\r\n sqftResourcesManager.updateAttachedToLineResource(attachedToResource);\r\n\r\n state.backsplashHeight = value\r\n this.overlay.renderBacksplashText(state.backsplashName, state.backsplashType);\r\n };\r\n this.getHandleId = () => { return state.attachedHandleId};\r\n this.setHandleId = (featureId) => { state.attachedHandleId = featureId};\r\n this.getHandle3dURL = () => { return state.attachedHandleUrl};\r\n this.setHandle3dURL = (url) => { state.attachedHandleUrl = url};\r\n this.getCrownMolding3dURL = () => { return state.attachedCrownMoldingUrl};\r\n this.setCrownMolding3dURL = (url) => { state.attachedCrownMoldingUrl = url};\r\n this.getCrownMoldingFeatureId = () => { return state.attachedCrownMoldingFeatureId};\r\n this.setCrownMoldingFeatureId = (url) => { state.attachedCrownMoldingFeatureId = url};\r\n this.getBacksplashFeatureId = () => { return sqftResourcesManager.getAttachedToLineResource(this).backsplashFeatureId };\r\n this.setBacksplashFeatureId = (featureId) => {\r\n state.backsplashFeatureId = featureId\r\n\r\n //update resource feature id\r\n const attachedToResource = {...sqftResourcesManager.getAttachedToLineResource(this)};\r\n attachedToResource.backsplashFeatureId = featureId;\r\n sqftResourcesManager.updateAttachedToLineResource(attachedToResource);\r\n\r\n //update slab shapes feature\r\n SlabWorkspace.slabAdditionalShapes.updateAdditionalShapeFeature(this, featureId);\r\n };\r\n\r\n this.getState = () => { return state };\r\n this.setStateParams = (params) => {\r\n state = {...state, ...params};\r\n };\r\n this.getPointsFeatures = function () {\r\n return {\r\n from: {\r\n arcLength: self.from.arcLength,\r\n angle: self.from.angle,\r\n x: self.from.x,\r\n y: self.from.y,\r\n pointDirection: self.from.pointDirection,\r\n corner: self.from.corner\r\n },\r\n to: {\r\n arcLength: self.to.arcLength,\r\n angle: self.to.angle,\r\n x: self.to.x,\r\n y: self.to.y,\r\n pointDirection: self.to.pointDirection,\r\n corner: self.to.corner\r\n },\r\n }\r\n };\r\n this.getOrientation = () => {\r\n return getLineOrientation(this.from, this.to);\r\n };\r\n this.getAttachedItems = function () {\r\n let isAnyItemsAttached = false;\r\n for (const attachedItemKey in state.attachedItems) {\r\n if (state.attachedItems[attachedItemKey]) {\r\n isAnyItemsAttached = true\r\n }\r\n }\r\n return state.withEdge\r\n || state.withBacksplash\r\n || state.withWall\r\n || state.withBumpout\r\n || state.isWithMitered\r\n || state.isWithUnderlayment\r\n || this.isWithWaterfallToolEdge()\r\n || this.isWithPeninsulaUnderwrapEdge()\r\n || state.withId\r\n || isAnyItemsAttached\r\n };\r\n this.setTutotialImage = function (image) {\r\n self.tutorialImage = image\r\n };\r\n this.isWithFakeEdge = () => { return state.isWithFakeEdge }\r\n this.setFakeEdge = (value) => { state.isWithFakeEdge = value };\r\n this.setHiddenForever = (value) => { state.isHiddenForever = value }; // this is for slab placeholder\r\n\r\n //private functions\r\n this.calculateRenderPosition = (point, sqftMode) => {\r\n const state = store.getState();\r\n const isShowSlabTool = state.sqftSlabState.isShowSlabTool;\r\n let offset = this.staticOffset ? this.staticOffset : this.getOffset();\r\n let scale = config.scale;\r\n let xCord = 0;\r\n let yCord = 0;\r\n if (!isShowSlabTool || sqftMode === SQFT_MODE.regular) {\r\n xCord = point.pos.x;\r\n yCord = point.pos.y;\r\n } else {\r\n if (point.posSlab) {\r\n xCord = point.posSlab.x;\r\n yCord = point.posSlab.y;\r\n } else {\r\n console.error(\"point.posSlab was not set\");\r\n }\r\n }\r\n\r\n return {\r\n x: (xCord * scale) + offset.x,\r\n y: (yCord * scale) + offset.y\r\n };\r\n };\r\n // function calculatePointPosition(renderPoint) {\r\n // var offset = self.getOffset();\r\n // var scale = config.scale;\r\n // return {\r\n // x: (renderPoint.x - offset.x) / scale,\r\n // y: (renderPoint.y - offset.y) / scale\r\n // };\r\n // }\r\n\r\n const getLineField = () => {\r\n var fieldSquares = {\r\n from: null,\r\n to: null,\r\n points: [],\r\n isHovering: state.isHovering,\r\n };\r\n\r\n fieldSquares.from = self.from.getPointField();\r\n fieldSquares.to = self.to.getPointField();\r\n var lineOrientation = getLineOrientation(this.from, this.to);\r\n if (lineOrientation == orientation.HORIZONTAL || lineOrientation == orientation.VERTICAL) {\r\n if (self.from.x > self.to.x) {\r\n var x = fieldSquares.from.x;\r\n fieldSquares.from.x = fieldSquares.to.x;\r\n fieldSquares.to.x = x;\r\n }\r\n if (self.from.y > self.to.y) {\r\n var y = fieldSquares.from.y;\r\n fieldSquares.from.y = fieldSquares.to.y;\r\n fieldSquares.to.y = y;\r\n }\r\n }\r\n\r\n var f = fieldSquares.from;\r\n var t = fieldSquares.to;\r\n var fieldSquareResizeRatio = 2,\r\n squeezeRatio = 0,\r\n marginFromCenter = 10;\r\n\r\n // var windowWidth = $(window).width(),\r\n // fieldSquareResizeRatio = 0;\r\n // if (windowWidth <= 1024) {\r\n // fieldSquareResizeRatio = 10;\r\n // }\r\n // if (windowWidth <= 768) {\r\n // fieldSquareResizeRatio = 15;\r\n // }\r\n\r\n switch(lineDirection.orientation) {\r\n case \"horizontal\": {\r\n if (lineDirection.newDirection === \"east\") {\r\n squeezeRatio =((t.x + f.width/2) - (f.x + f.width/2)) > 80 ? 15 : 0;\r\n fieldSquares.points.push({x: f.x + f.width/2 + squeezeRatio, y: f.y + fieldSquareResizeRatio - marginFromCenter});\r\n fieldSquares.points.push({x: t.x + f.width/2 - squeezeRatio, y: t.y + fieldSquareResizeRatio - marginFromCenter});\r\n fieldSquares.points.push({x: t.x + f.width/2 - squeezeRatio, y: t.y + t.height - fieldSquareResizeRatio - marginFromCenter});\r\n fieldSquares.points.push({x: f.x + f.width/2 + squeezeRatio, y: f.y + f.height - fieldSquareResizeRatio - marginFromCenter});\r\n } else if (lineDirection.newDirection === \"west\") {\r\n squeezeRatio =((t.x + f.width/2) - (f.x + f.width/2)) > 80 ? 15 : 0;\r\n fieldSquares.points.push({x: f.x + f.width/2 + squeezeRatio, y: f.y + fieldSquareResizeRatio + marginFromCenter});\r\n fieldSquares.points.push({x: t.x + f.width/2 - squeezeRatio, y: t.y + fieldSquareResizeRatio + marginFromCenter});\r\n fieldSquares.points.push({x: t.x + f.width/2 - squeezeRatio, y: t.y + t.height - fieldSquareResizeRatio + marginFromCenter});\r\n fieldSquares.points.push({x: f.x + f.width/2 + squeezeRatio, y: f.y + f.height - fieldSquareResizeRatio + marginFromCenter});\r\n }\r\n break;\r\n }\r\n case \"vertical\": {\r\n if (lineDirection.newDirection === \"south\") {\r\n squeezeRatio =((t.y + t.height/2) - (f.y + t.height/2)) > 80 ? 15 : 0;\r\n fieldSquares.points.push({x: f.x + fieldSquareResizeRatio + marginFromCenter, y: f.y + t.height/2 + squeezeRatio});\r\n fieldSquares.points.push({x: f.x + f.width - fieldSquareResizeRatio + marginFromCenter, y: f.y + t.height/2 + squeezeRatio});\r\n fieldSquares.points.push({x: t.x + t.width - fieldSquareResizeRatio + marginFromCenter, y: t.y + t.height/2 - squeezeRatio});\r\n fieldSquares.points.push({x: t.x + fieldSquareResizeRatio + marginFromCenter, y: t.y + t.height/2 - squeezeRatio });\r\n } else if (lineDirection.newDirection === \"north\") {\r\n squeezeRatio =((t.y + t.height/2) - (f.y + t.height/2)) > 80 ? 15 : 0;\r\n fieldSquares.points.push({x: f.x + fieldSquareResizeRatio - marginFromCenter, y: f.y + t.height/2 + squeezeRatio});\r\n fieldSquares.points.push({x: f.x + f.width - fieldSquareResizeRatio - marginFromCenter, y: f.y + t.height/2 + squeezeRatio});\r\n fieldSquares.points.push({x: t.x + t.width - fieldSquareResizeRatio - marginFromCenter, y: t.y + t.height/2 - squeezeRatio});\r\n fieldSquares.points.push({x: t.x + fieldSquareResizeRatio - marginFromCenter, y: t.y + t.height/2 - squeezeRatio });\r\n }\r\n break;\r\n }\r\n case \"SOUTHWEST\":\r\n case \"NORTHEAST\":\r\n fieldSquares.points.push({x: f.x, y: f.y });\r\n fieldSquares.points.push({x: t.x, y: t.y });\r\n fieldSquares.points.push({x: t.x + t.width, y: t.y + t.height });\r\n fieldSquares.points.push({x: f.x + f.width, y: f.y + f.height });\r\n break;\r\n case \"NORTHWEST\":\r\n case \"SOUTHEAST\":\r\n fieldSquares.points.push({x: f.x + f.width, y: f.y });\r\n fieldSquares.points.push({x: t.x + t.width, y: t.y });\r\n fieldSquares.points.push({x: t.x, y: t.y + t.height });\r\n fieldSquares.points.push({x: f.x, y: f.y + f.height });\r\n break;\r\n }\r\n return fieldSquares;\r\n }\r\n // function getDistance(point1, point2) {\r\n // var scale = workspace.getScale(),\r\n // xDiff = (point2.x - point1.x),\r\n // yDiff = (point2.y - point1.y),\r\n // distance = Math.sqrt(Math.pow(xDiff, 2) + Math.pow(yDiff, 2));\r\n // distance *= (xDiff + yDiff > 0 ? -1 : 1) / scale;\r\n // return distance;\r\n // }\r\n // function isLeft(a, b, c){\r\n // return ((b.x - a.x)*(c.y - a.y) - (b.y - a.y)*(c.x - a.x)) > 0;\r\n // }\r\n // function getDistanceToLine(p1, p2, p3) {\r\n // var scale = workspace.getScale(),\r\n // x0 = p3.x, y0 = p3.y,\r\n // x1 = p1.x, y1 = p1.y,\r\n // x2 = p2.x, y2 = p2.y,\r\n // distanceToLine = Math.abs(\r\n // ((y2 - y1) * x0) - ((x2 - x1) * y0) + (x2 * y1) - (y2 * x1)\r\n // ) / Math.sqrt(\r\n // Math.pow(y2 - y1, 2) + Math.pow(x2 - x1, 2)\r\n // ),\r\n // xDiff = (x2 - x1),\r\n // yDiff = (y2 - y1);\r\n // distanceToLine *= (isLeft(p1, p2, p3) ? -1 : 1) / scale;\r\n // return distanceToLine;\r\n // }\r\n // function getCanvasDimensions() {\r\n // var canvas = workspace.getCanvas(),\r\n // canvasWidth = canvas.width,\r\n // canvasHeight = canvas.height,\r\n // scale = config.scale,\r\n // gridSize = config.workspace.gridSize * scale,\r\n // adjustedSize = (gridSize / 3),\r\n // rulerSize = adjustedSize + 6;\r\n // return {\r\n // rulerSize: rulerSize,\r\n // canvasWidth: canvasWidth,\r\n // canvasHeight: canvasHeight\r\n // }\r\n // }\r\n // function lockPointToCanvas(point) {\r\n // var dim = getCanvasDimensions(),\r\n // pos = self.calculateRenderPosition(point),\r\n // rulerSize = calculatePointPosition({x: dim.rulerSize, y: dim.rulerSize}),\r\n // heightWidth = calculatePointPosition({x: dim.canvasWidth, y: dim.canvasHeight}),\r\n // drop = false;\r\n //\r\n //\r\n // console.log('dim', dim);\r\n // console.log('pos', pos);\r\n // console.log('rulerSize', rulerSize);\r\n // console.log('heightWidth', heightWidth);\r\n //\r\n // if (pos.x < dim.rulerSize) {\r\n // point.x = rulerSize.x + 1;\r\n // drop = true;\r\n // } else if (pos.x >= dim.canvasWidth) {\r\n // point.x = heightWidth.x - 1;\r\n // drop = true;\r\n // }\r\n // if (pos.y < dim.rulerSize) {\r\n // point.y = rulerSize.y + 1;\r\n // drop = true;\r\n // } else if (pos.y >= dim.canvasHeight) {\r\n // point.y = heightWidth.y - 1;\r\n // drop = true;\r\n // }\r\n // if (drop) {\r\n // state.isHovering = false;\r\n // state.mouseDown = false;\r\n // }\r\n // return point;\r\n // }\r\n\r\n function setMouseOverLine(mousePos) {\r\n var field = getLineField();\r\n var vertx = [];\r\n var verty = [];\r\n for(var i = 0; i < field.points.length; i++) {\r\n vertx.push(field.points[i].x);\r\n verty.push(field.points[i].y);\r\n }\r\n state.isHovering = pnpoly(field.points.length, vertx, verty, mousePos.x, mousePos.y);\r\n\r\n return state.isHovering || state.mouseDown;\r\n }\r\n\r\n /*\r\n * This is more accurate hover area used for cabinets\r\n */\r\n this.getMouseOverLineV2 = (mousePos) => {\r\n this.updateLineHovering(mousePos)\r\n return state.isHovering || state.mouseDown;\r\n }\r\n this.updateLineHovering = (mousePos = sqftEventManager.getMousePos()) => {\r\n state.isHovering = isPointInsidePolygon(mousePos, getLineBordersArrayV2(this.from, this.to, design.lineThickness + design.lineThickness * 0.2));\r\n }\r\n this.getLineHovering = () => {\r\n return state.isHovering\r\n }\r\n\r\n function onMouseUp(mousePos, e) {\r\n void mousePos;\r\n void e;\r\n if (state.mouseDown) {\r\n state.mouseDown = false;\r\n state.mouseDownPosition = null;\r\n self.from.snapToGrid();\r\n self.to.snapToGrid();\r\n }\r\n }\r\n const onMouseDown = (mousePos, e) => {\r\n void e;\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n\r\n if (( EventManager.getCursor().indexOf(\"n-resize\") >= 0\r\n || EventManager.getCursor().indexOf(\"e-resize\") >= 0\r\n || EventManager.getCursor().indexOf(\"ne-resize\") >= 0\r\n || EventManager.getCursor().indexOf(\"nw-resize\") >= 0\r\n ) && state.isHovering\r\n ){\r\n state.mouseDown = true;\r\n state.movePointDistance = getPointDistance(self.from, self.to);\r\n state.mouseDownPosition = mousePos;\r\n return true;\r\n }\r\n\r\n //Add free seam cut point in the slabMode\r\n if (activeButton === SIDEBAR_SLAB_SEAM_BUTTONS.addFreeSeam && state.isHovering) {\r\n const mousePosOnShape = getMousePositionOnShape(mousePos.x, mousePos.y, this.getParent());\r\n const lineStart = self.from;\r\n const lineEnd = self.to;\r\n const seamCutPoint = getClosestPointOnLine(lineStart, lineEnd, mousePosOnShape);\r\n\r\n const shape = this.getParent();\r\n if (shape.seamCutPoints.length >= 2) {\r\n shape.seamCutPoints.shift(); // Удаляем самую старую точку\r\n }\r\n shape.seamCutPoints.push(seamCutPoint);\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n const onMouseMove = (mousePos, e) => {\r\n void e;\r\n // if (e.terminate && !parent.isHovering()) {\r\n // state.isHovering = false;\r\n // return false;\r\n // }\r\n const isCabinet = isSFTCabinetsGroup();\r\n const isSlabMode = SqftStore.isSlabMode();\r\n const isMouseOverLine = isCabinet || isSlabMode ? this.getMouseOverLineV2(mousePos) : setMouseOverLine(mousePos);\r\n if (isMouseOverLine) {\r\n if (workspace.getAllowEdges() && !self.from.angleIsChanged && !self.to.angleIsChanged) {\r\n if (state.mouseDown) {\r\n this.moveLine(mousePos);\r\n }\r\n EventManager.releaseStealLock(parent);\r\n EventManager.stealCursor();\r\n switch(getLineOrientation(this.from, this.to)) {\r\n case orientation.HORIZONTAL:\r\n EventManager.setCursor(\"n-resize\", self);\r\n break;\r\n case orientation.VERTICAL:\r\n EventManager.setCursor(\"e-resize\", self);\r\n break;\r\n case orientation.NORTHWEST:\r\n case orientation.SOUTHEAST:\r\n EventManager.setCursor(\"ne-resize\", self);\r\n break;\r\n case orientation.NORTHEAST:\r\n case orientation.SOUTHWEST:\r\n EventManager.setCursor(\"nw-resize\", self);\r\n break;\r\n }\r\n return state.mouseDown;\r\n }\r\n\r\n if (config.highlight.lines && state.isHovering) {\r\n EventManager.releaseStealLock(parent);\r\n EventManager.stealCursor();\r\n return false;\r\n }\r\n // prevent all other mouseover's\r\n if (this.getAttachedItems()) {\r\n return true\r\n }\r\n }\r\n\r\n this.lineCorner.updateCornerHoverState(mousePos);\r\n\r\n if (workspace.getHoverShape() !== parent) {\r\n //state.isHovering = false; // allow hovering multiple shapes\r\n }\r\n EventManager.resetCursor(self);\r\n return false;\r\n }\r\n function onMouseLeave() {\r\n state.isHovering = false;\r\n state.mouseDown = false;\r\n }\r\n\r\n //public functions\r\n this.export = () => {\r\n return {\r\n id: this.id,\r\n from: this.from.export(),\r\n to: this.to.export(),\r\n bumpout: this.bumpoutOverlay ? this.bumpoutOverlay.export() : null,\r\n //todo\r\n mitered: this.miteredOverlay ? this.miteredOverlay.export() : null,\r\n underlayment: this.underlaymentOverlay ? this.underlaymentOverlay.export() : null,\r\n waterfallData: this.waterfallOverlay ? this.waterfallOverlay.export() : null,\r\n label: this.labelOverlay ? this.labelOverlay.export() : null,\r\n titleOverlay: this.titleOverlay ? this.titleOverlay.export() : null,\r\n overlay: this.overlay ? this.overlay.export() : null,\r\n lineCorner: this.lineCorner ? this.lineCorner.export() : null,\r\n state: _.clone(state),\r\n }\r\n };\r\n\r\n this.import = (value, existing) => {\r\n state = value.state;\r\n overlayImportData = value.overlay;\r\n lineCornerImportData = value.lineCorner;\r\n var foundFrom = null, foundTo = null;\r\n for (var i = 0; i < existing.length && !(foundFrom && foundTo); i++) {\r\n if (!foundFrom && existing[i].from.id == value.from.id) {\r\n foundFrom = existing[i].from;\r\n } else if (!foundFrom && existing[i].to.id == value.from.id) {\r\n foundFrom = existing[i].to;\r\n } else if (!foundTo && existing[i].to.id == value.to.id) {\r\n foundTo = existing[i].to;\r\n } else if (!foundTo && existing[i].from.id == value.to.id) {\r\n foundTo = existing[i].from;\r\n }\r\n }\r\n self.id = value.id;\r\n if (foundFrom) {\r\n self.from = foundFrom;\r\n } else {\r\n self.from = new point();\r\n self.from.import(value.from);\r\n }\r\n if (foundTo) {\r\n self.to = foundTo;\r\n } else {\r\n self.to = new point();\r\n self.to.import(value.to);\r\n }\r\n if (value.bumpout) {\r\n // self.overlay.setMidpointOffset(value.overlay.midpoint.xOffset, value.overlay.midpoint.yOffset);\r\n self.bumpoutOverlay = new bumpout();\r\n self.bumpoutOverlay.import(self, value.bumpout);\r\n state.withBumpout = true;\r\n }\r\n if (value.mitered) {\r\n //addMiteredToLine\r\n if (workspace.miteredController === null) {\r\n workspace.miteredController = new MiteredController();\r\n }\r\n this.miteredOverlay = workspace.miteredController.createMiteredOverlay(this);\r\n this.miteredOverlay.import(self, value.mitered);\r\n overlayMiteredData = value.mitered;\r\n state.isWithMitered = true;\r\n store.dispatch(addMiteredSection(this.miteredOverlay));\r\n }\r\n if (value.underlayment) {\r\n //addMiteredToLine isWithUnderlayment\r\n if (workspace.underlaymentController === null) {\r\n workspace.underlaymentController = new UnderlaymentController();\r\n }\r\n this.underlaymentOverlay = workspace.underlaymentController.createUnderlaymentOverlay(this);\r\n this.underlaymentOverlay.import(this, value.underlayment);\r\n overlayUnderlaymentData = value.underlayment;\r\n state.isWithUnderlayment = true;\r\n store.dispatch(addResource(RESOURCE_TYPE.underlaymentSections, this.underlaymentOverlay));\r\n }\r\n if (value.label) {\r\n // self.overlay.setMidpointOffset(value.overlay.midpoint.xOffset, value.overlay.midpoint.yOffset);\r\n self.labelOverlay = new label();\r\n self.labelOverlay.init(self, value.label.labelText, value.label.partId);\r\n self.labelOverlay.import(value.label);\r\n }\r\n if (value.titleOverlay) {\r\n // self.overlay.setMidpointOffset(value.overlay.midpoint.xOffset, value.overlay.midpoint.yOffset);\r\n self.titleOverlay = new label();\r\n self.titleOverlay.init(self, value.titleOverlay.state.labelText, value.titleOverlay.state.partId);\r\n self.titleOverlay.import(value.titleOverlay);\r\n }\r\n if (value.waterfallData) {\r\n this.waterfallOverlay = workspaceControllers.waterfall.createWaterfallOverlay(this, value.waterfallData);\r\n }\r\n };\r\n this.init = (parent, temp) => {\r\n temp = temp || false;\r\n setParent(parent);\r\n this.lineCorner = new LineCorner(this);\r\n if (lineCornerImportData) {\r\n this.lineCorner.import(lineCornerImportData);\r\n }\r\n if (!temp) {\r\n this.initEvents();\r\n self.from.init(self);\r\n }\r\n if (!temp && !parent.shapeCabinet && parent.partId !== SHAPE_PART_ID.spacer) {\r\n self.overlay = new lineLength();\r\n self.overlay.init(self);\r\n if (overlayImportData) {\r\n self.overlay.import(overlayImportData);\r\n }\r\n }\r\n if (this.miteredOverlay) {\r\n this.miteredOverlay.init(overlayMiteredData); // init after import\r\n //store.dispatch(addMiteredSection(this.miteredOverlay));\r\n //Menu.miteredController.updateInfo();\r\n //this.miteredOverlay.afterImport(overlayMiteredData);\r\n }\r\n if (this.underlaymentOverlay) {\r\n this.underlaymentOverlay.init(overlayUnderlaymentData);\r\n }\r\n if (this.isWithWaterfallToolEdge()) {\r\n this.overlay.renderWaterfallText(RESOURCE_ATTACHED_TO_NAME.waterfall, RESOURCE_ATTACHED_TO_TYPE.waterfall);\r\n }\r\n\r\n lineDirection = parent.getAngleDirection(self); // {direction:{x: \"forward\", y: \"forward\"},facing:\"sw\"}, cornerMargins, orientation. newDirection\r\n\r\n if (self.historyPointFeatures) {\r\n self.from.angle = self.historyPointFeatures.from.angle;\r\n self.from.arcLength = self.historyPointFeatures.from.arcLength;\r\n self.from.x = self.historyPointFeatures.from.x;\r\n self.from.y = self.historyPointFeatures.from.y;\r\n self.from.pointDirection = self.historyPointFeatures.from.pointDirection;\r\n self.from.corner = self.historyPointFeatures.from.corner;\r\n\r\n self.to.angle = self.historyPointFeatures.to.angle;\r\n self.to.arcLength = self.historyPointFeatures.to.arcLength;\r\n self.to.x = self.historyPointFeatures.to.x;\r\n self.to.y = self.historyPointFeatures.to.y;\r\n self.to.pointDirection = self.historyPointFeatures.to.pointDirection;\r\n self.to.corner = self.historyPointFeatures.to.corner;\r\n\r\n self.historyPointFeatures = null;\r\n }\r\n\r\n // console.log('lineDirection', lineDirection);\r\n };\r\n this.initEvents = () => {\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n onMouseMove,\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n onMouseDown,\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n onMouseUp,\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_LEAVE,\r\n onMouseLeave,\r\n this,\r\n EventManager.priorities.OVERALL\r\n );\r\n };\r\n this.deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n this.from.deregisterEvents();\r\n this.overlay.deregisterEvents();\r\n if (this.bumpoutOverlay) {\r\n this.bumpoutOverlay.deregisterEvents();\r\n }\r\n if (this.miteredOverlay) {\r\n this.miteredOverlay.deregisterEvents();\r\n }\r\n if (this.titleOverlay) {\r\n this.titleOverlay.deregisterEvents();\r\n }\r\n if (this.overlay) {\r\n this.overlay.deregisterEvents();\r\n }\r\n };\r\n this.reInitEvents = () => {\r\n if (state.isHiddenForever) {\r\n return\r\n }\r\n this.initEvents();\r\n this.from.reInitEvents();\r\n if (!this.miteredOverlay) {\r\n this.overlay.reInitEvents();\r\n }\r\n if (this.bumpoutOverlay) {\r\n this.bumpoutOverlay.deregisterEvents();\r\n }\r\n if (this.miteredOverlay) {\r\n this.miteredOverlay.reInitEvents();\r\n }\r\n if (this.titleOverlay) {\r\n this.titleOverlay.reInitEvents();\r\n }\r\n if (this.overlay) {\r\n this.overlay.reInitEvents();\r\n }\r\n };\r\n this.deregisterPartEvents = () => {\r\n if (this.bumpoutOverlay) {\r\n this.bumpoutOverlay.deregisterEvents();\r\n }\r\n if (this.miteredOverlay) {\r\n this.miteredOverlay.deregisterEvents();\r\n }\r\n if (this.underlaymentOverlay) {\r\n this.underlaymentOverlay.deregisterEvents();\r\n }\r\n if (this.labelOverlay) {\r\n this.labelOverlay.deregisterPartEvents();\r\n }\r\n if (this.titleOverlay) {\r\n this.titleOverlay.deregisterPartEvents();\r\n }\r\n if (this.overlay) {\r\n this.overlay.deregisterEvents();\r\n }\r\n this.from.deregisterPartEvents();\r\n };\r\n this.reInitPartEvents = () => {\r\n if (this.bumpoutOverlay) {\r\n this.bumpoutOverlay.reInitEvents();\r\n }\r\n if (this.miteredOverlay) {\r\n this.miteredOverlay.reInitEvents();\r\n }\r\n if (this.underlaymentOverlay) {\r\n this.underlaymentOverlay.deregisterEvents();\r\n }\r\n if (this.labelOverlay) {\r\n this.labelOverlay.reInitPartEvents();\r\n }\r\n if (this.titleOverlay) {\r\n this.titleOverlay.reInitPartEvents();\r\n }\r\n if (this.overlay && !this.miteredOverlay) {\r\n this.overlay.reInitEvents();\r\n }\r\n this.from.reInitPartEvents();\r\n };\r\n this.reInitTitleEvents = () => {\r\n if (this.titleOverlay) {\r\n this.titleOverlay.reInitPartEvents();\r\n }\r\n };\r\n this.destroy = function(protect) {\r\n if (!protect) {\r\n var image = workspace.getImagesAttachedTo(self);\r\n if (image) {\r\n image.destroy();\r\n }\r\n EventManager.removeEvent(self);\r\n self.from.destroy();\r\n if (self.overlay)\r\n self.overlay.destroy();\r\n if (self.miteredOverlay) {\r\n self.miteredOverlay.destroy();\r\n }\r\n }\r\n };\r\n this.moveLine = (mousePos) => {\r\n\r\n // console.log(\"mousePos\", mousePos);\r\n // console.log(\"self.from.x\", self.from.x);\r\n // console.log(\"self.from.x\", self.to.x);\r\n\r\n var scale = workspace.getScale();\r\n\r\n var xDiff = (state.mouseDownPosition.x - mousePos.x) / scale;\r\n var yDiff = (state.mouseDownPosition.y - mousePos.y) / scale;\r\n // var slope = -getSlope(); // OLD LOGIC, let's keep it in case we found an issue with this moveDiagonalLine(see git diff)\r\n\r\n var o = getLineOrientation(this.from, this.to);\r\n if (o === orientation.VERTICAL) {\r\n self.from.x -= xDiff;\r\n self.to.x -= xDiff;\r\n if (self.isWithBumpout()) {\r\n self.bumpoutOverlay.moveBumpout(xDiff, 0);\r\n } else if (self.isWithMitered()) {\r\n self.miteredOverlay.moveMitered(xDiff, 0);\r\n } else if (this.isWithUnderlayment()) {\r\n this.underlaymentOverlay.moveMitered(xDiff, 0);\r\n }\r\n state.mouseDownPosition.x = mousePos.x;\r\n } else if (o === orientation.HORIZONTAL) {\r\n self.from.y -= yDiff;\r\n self.to.y -= yDiff;\r\n if (self.isWithBumpout()) {\r\n self.bumpoutOverlay.moveBumpout(0, yDiff);\r\n } else if (self.isWithMitered()) {\r\n self.miteredOverlay.moveMitered(0, yDiff);\r\n } else if (this.isWithUnderlayment()) {\r\n this.underlaymentOverlay.moveMitered(0, yDiff);\r\n }\r\n state.mouseDownPosition.y = mousePos.y;\r\n } else {\r\n const nextLine = parent.getNextLine(self);\r\n const prevLine = parent.getPrevLine(self);\r\n moveDiagonalLine(self, nextLine, prevLine, state.movePointDistance, yDiff, o);\r\n state.mouseDownPosition = mousePos;\r\n }\r\n // self.from = lockPointToCanvas(self.from); // removed locking because of this issue http://jira.mozidev.com/browse/QC-802\r\n // self.to = lockPointToCanvas(self.to);\r\n\r\n updateShapeWaterfallLength(this);\r\n updateMiteredLength(this);\r\n updateUnderlaymentLength(this);\r\n\r\n const reduxState = store.getState();\r\n const updateCalculations = reduxState.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n };\r\n this.getLineDirection = function() {\r\n return parent.getAngleDirection(self); // line text direction\r\n };\r\n this.getLineDirectionV2 = function() {\r\n return getLineDirection(this.from, this.to); // line text direction\r\n };\r\n this.getPairedLines = function() {\r\n let pairedLines = [];\r\n switch (parent.shapeType) {\r\n case \"horseshoe\": {\r\n const prevLine = parent.getPrevLine(self);\r\n const nextLine = parent.getNextLine(self);\r\n const prevLineStep2 = parent.getPrevLine(prevLine);\r\n const nextLineStep2 = parent.getNextLine(nextLine);\r\n const prevLineStep3 = parent.getPrevLine(prevLineStep2);\r\n const nextLineStep3 = parent.getNextLine(nextLineStep2);\r\n\r\n pairedLines = [nextLineStep3, prevLineStep3];\r\n break;\r\n }\r\n default:\r\n pairedLines = [parent.getPrevLine(self), parent.getNextLine(self)];\r\n break;\r\n }\r\n\r\n return pairedLines;\r\n };\r\n this.getLineLength = function () {\r\n let distance = getPointDistance(self.from, self.to);\r\n\r\n return self.addDecimalToLength(measureDistanceToInches(distance))\r\n };\r\n\r\n this.getLineLengthMm = function () {\r\n let distance = getPointDistance(self.from, self.to);\r\n\r\n return measureDistanceToInches(distance).millimeters\r\n };\r\n\r\n this.getLineDistance = function () {\r\n return getPointDistance(self.from, self.to);\r\n };\r\n\r\n this.getLineBumpoutTotalHeight = function () {\r\n return self.addDecimalToLength(self.bumpoutOverlay.getBumpoutTotalHeight())\r\n };\r\n\r\n this.addDecimalToLength = function(lineLength) {\r\n return addDecimalToLength(lineLength);\r\n };\r\n this.getBiggestXPoint = function() {\r\n return self.from.x > self.to.x ? self.from : self.to\r\n };\r\n this.getBiggestYPoint = function() {\r\n return self.from.y > self.to.y ? self.from : self.to\r\n };\r\n this.getSmallestXPoint = function() {\r\n return self.from.x < self.to.x ? self.from : self.to\r\n };\r\n this.getSmallestYPoint = function() {\r\n return self.from.y < self.to.y ? self.from : self.to\r\n };\r\n /**\r\n * @deprecated use getLinePointsWithoutCorners\r\n * @return {[null, null, (\"default\"|*), (\"default\"|*)]}\r\n */\r\n this.getSmallestAndBiggestPointWithCorners = () => {\r\n let o = getLineOrientation(this.from, this.to),\r\n lineDirection = this.getLineDirection(),\r\n //nextLine = parent.getNextLine(self),\r\n prevLine = parent.getPrevLine(self),\r\n toCornerLength = self.to.getArcLength() || self.get45CornerLegDistance(),\r\n fromCornerLength = prevLine.to.getArcLength() || prevLine.get45CornerLegDistance(),\r\n toLinePoint = Object.assign({}, self.to),\r\n fromLinePoint = Object.assign({}, self.from),\r\n biggestLinePoint = null,\r\n smallestLinePoint = null,\r\n toCornerMargin = null,\r\n fromCornerMargin = null;\r\n\r\n if (o === orientation.VERTICAL) {\r\n //line biggest and smallest points\r\n biggestLinePoint = Object.assign({}, this.getBiggestYPoint());\r\n smallestLinePoint = Object.assign({}, this.getSmallestYPoint());\r\n if (lineDirection.newDirection === \"north\" ) {\r\n toCornerMargin = -fromCornerLength;\r\n fromCornerMargin = +toCornerLength;\r\n toLinePoint.y += fromCornerMargin;\r\n fromLinePoint.y += toCornerMargin;\r\n } else {\r\n toCornerMargin = -toCornerLength;\r\n fromCornerMargin = +fromCornerLength;\r\n toLinePoint.y += toCornerMargin;\r\n fromLinePoint.y += fromCornerMargin;\r\n }\r\n biggestLinePoint.y += toCornerMargin;\r\n smallestLinePoint.y += fromCornerMargin;\r\n } else if (o === orientation.HORIZONTAL) {\r\n //line biggest and smallest points\r\n biggestLinePoint = Object.assign({}, this.getBiggestXPoint());\r\n smallestLinePoint = Object.assign({}, this.getSmallestXPoint());\r\n if (lineDirection.newDirection === \"east\" ) {\r\n toCornerMargin = -toCornerLength;\r\n fromCornerMargin = +fromCornerLength;\r\n toLinePoint.x += toCornerMargin;\r\n fromLinePoint.x += fromCornerMargin;\r\n } else {\r\n toCornerMargin = -fromCornerLength;\r\n fromCornerMargin = +toCornerLength;\r\n toLinePoint.x += fromCornerMargin;\r\n fromLinePoint.x += toCornerMargin;\r\n }\r\n biggestLinePoint.x += toCornerMargin;\r\n smallestLinePoint.x += fromCornerMargin;\r\n }\r\n\r\n return [smallestLinePoint, biggestLinePoint, toLinePoint, fromLinePoint]\r\n };\r\n this.getLinePointsWithoutCorners = () => {\r\n let toCornerLength = this.to.getArcLength(),\r\n toAngleLength = this.to.getAngle(),\r\n fromCornerLength = this.from.getArcLength(),\r\n fromAngleLength = this.from.getAngle();\r\n\r\n const toPoint = getPointOnTheLine(this.to, this.from, -toCornerLength || -toAngleLength);\r\n const fromPoint = getPointOnTheLine(this.from, this.to, -fromCornerLength || -fromAngleLength);\r\n\r\n return [fromPoint, toPoint]\r\n }\r\n this.getOffset = function() {\r\n var scale = config.scale;\r\n var workspacePos = workspace.getOffset();\r\n if (parent) {\r\n var _pos = parent.getPosition();\r\n if (config.workspace.snapToGrid) {\r\n _pos = parent.getSnappedPosition();\r\n }\r\n var offset = {\r\n x: workspacePos.x + (_pos.x * scale),\r\n y: workspacePos.y + (_pos.y * scale)\r\n }\r\n } else {\r\n return {x: 0, y: 0};\r\n }\r\n return offset;\r\n };\r\n this.stealCursor = function(who) {\r\n if (self.from === who) {\r\n EventManager.resetCursor(self);\r\n }\r\n };\r\n this.resetState = () => {\r\n state.mouseDown = false;\r\n state.mouseDownPosition = null;\r\n state.isHovering = false;\r\n };\r\n this.hasIntersections = () => {\r\n const lines = parent.getLines();\r\n const fromPosition = getPointField(this.from.x, this.from.y);\r\n const toPosition = getPointField(this.to.x, this.to.y);\r\n\r\n return lines.some(testLine => {\r\n const prevLine = parent.getPrevLine(this);\r\n const nextLine = parent.getNextLine(this);\r\n // skip closest lines\r\n if (testLine.id === this.id || testLine.id === prevLine.id || testLine.id === nextLine.id) {\r\n return false\r\n }\r\n const testLineFromPosition = getPointField(testLine.from.x, testLine.from.y);\r\n const testLineToPosition = getPointField(testLine.to.x, testLine.to.y);\r\n const intersections = getIntersectCordsBetweenLines(\r\n fromPosition, toPosition, testLineFromPosition, testLineToPosition\r\n )\r\n void intersections;\r\n // console.log(\"intersections\", intersections);\r\n // if (intersections) {\r\n // console.log(\"fromPosition\", fromPosition);\r\n // console.log(\"toPosition\", toPosition);\r\n // console.log(\"testLineFromPosition\", testLineFromPosition);\r\n // console.log(\"testLineToPosition\", testLineToPosition);\r\n // }\r\n return intersections\r\n })\r\n }\r\n\r\n /**\r\n * This will render blue shape\r\n * @param ctx\r\n * @param toOnly\r\n * @param sqftMode\r\n */\r\n this.render = (ctx, toOnly, sqftMode) => {\r\n this.renderLineBorder(ctx, toOnly, sqftMode);\r\n }\r\n\r\n /**\r\n * This will render blue shape\r\n * @param ctx\r\n * @param toOnly\r\n * @param sqftMode\r\n */\r\n this.renderLineBorder = (ctx, toOnly, sqftMode) => {\r\n if (workspace && workspace.getState().loading) return;\r\n this.ctx = ctx;\r\n toOnly = toOnly || false;\r\n const renderTo = self.calculateRenderPosition(self.to, sqftMode);\r\n const renderFrom = self.calculateRenderPosition(self.from, sqftMode);\r\n // if (!toOnly) {\r\n // let x = renderFrom.x;\r\n // let y = renderFrom.y;\r\n // if (self.from.arcLength > 0 || self.from.angle > 0) {\r\n // const radius = Math.sqrt(Math.pow(self.from.arcLength || self.from.angle, 2) / 2) * config.scale;\r\n // const o = getLineOrientation(this.from, this.to);\r\n // switch(o) {\r\n // case orientation.HORIZONTAL:\r\n // if (self.from.x < self.to.x)\r\n // x += radius;\r\n // else\r\n // x -= radius;\r\n // break;\r\n // case orientation.VERTICAL:\r\n // if (self.from.y < self.to.y)\r\n // y += radius;\r\n // else\r\n // y -= radius;\r\n // break;\r\n // case orientation.NORTHWEST:\r\n // case orientation.SOUTHEAST:\r\n // case orientation.NORTHEAST:\r\n // case orientation.SOUTHWEST:\r\n // //todo\r\n // break;\r\n // }\r\n // }\r\n // ctx.moveTo(x, y);\r\n // }\r\n\r\n if (state.withBumpout && !SqftStore.isSlabMode() && !this.isDisabledInPopup) {\r\n drawBumpoutLine(ctx);\r\n }\r\n // don't render arc Length and angle in the slab mode\r\n if (self.to.arcLength > 0 && !SqftStore.isSlabMode()) { // changes blue corner if radius or angle exists\r\n this.renderArcLength(ctx, renderFrom, renderTo);\r\n } else if (self.to.angle > 0) {\r\n this.renderAngle(ctx, renderFrom, renderTo);\r\n } else {\r\n ctx.lineTo(renderTo.x, renderTo.y);\r\n }\r\n }\r\n\r\n this.renderArcLength = (ctx, renderFrom, renderTo) => {\r\n let radiusMultiplier = this.to.arcLength;\r\n let radius = radiusMultiplier * config.scale;\r\n let dir = parent.getAngleDirection(this);\r\n\r\n switch (dir.orientation) {\r\n case \"horizontal\":\r\n case \"vertical\":\r\n case \"NORTHWEST\":\r\n case \"NORTHEAST\":\r\n case \"SOUTHWEST\":\r\n case \"SOUTHEAST\":\r\n default: {\r\n const nextLine = parent.getNextLine(this);\r\n const nextLineRenderTo = nextLine.calculateRenderPosition(nextLine.to);\r\n const angle = getAngleBetween3Points(renderFrom, renderTo, nextLineRenderTo);\r\n const radiusMultiplier = this.to.arcLength * config.scale;\r\n const marginFrom = Math.abs(radiusMultiplier / getTanDeg(Math.round(angle / 2)));\r\n const pointA = getPointBetweenPoints(renderTo, renderFrom, marginFrom); // *2 is made to fit arcTo\r\n const pointB = getPointBetweenPoints(renderTo, self.calculateRenderPosition(nextLine.to), radius);\r\n\r\n ctx.lineTo(pointA.x, pointA.y);\r\n //ctx.lineTo(renderFrom.x, renderFrom.y)\r\n ctx.arcTo(renderTo.x, renderTo.y, pointB.x, pointB.y, radius);\r\n break;\r\n }\r\n }\r\n };\r\n this.renderAngle = (ctx, renderFrom, renderTo) => {\r\n let radiusMultiplier = Math.sqrt( Math.pow(this.to.angle, 2) * 2); //todo\r\n let radius = radiusMultiplier * config.scale;\r\n let dir = parent.getAngleDirection(this);\r\n\r\n switch (dir.orientation) {\r\n case \"horizontal\":\r\n case \"vertical\":\r\n case \"NORTHWEST\":\r\n case \"NORTHEAST\":\r\n case \"SOUTHWEST\":\r\n case \"SOUTHEAST\": {\r\n const nextLine = parent.getNextLine(this);\r\n const nextLineRenderTo = this.calculateRenderPosition(nextLine.to);\r\n const pointA = getPointBetweenPoints(renderTo, renderFrom, radius / 2);\r\n const pointB = getPointBetweenPoints(renderTo, nextLineRenderTo, radius / 2);\r\n ctx.lineTo(pointA.x, pointA.y);\r\n ctx.lineTo(pointB.x, pointB.y);\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n this.renderLineOverlay = function(ctx) {\r\n lineLength.render(ctx, self);\r\n };\r\n\r\n const highLightBorder = (color) => {\r\n if (!self.from.angleIsChanged && !self.to.angleIsChanged) {\r\n let [fromPointWithIndent, toPointWithIndent] = this.getLinePointsWithoutCorners(),\r\n renderFrom = getPointField(fromPointWithIndent.x, fromPointWithIndent.y, this),\r\n renderTo = getPointField(toPointWithIndent.x, toPointWithIndent.y, this);\r\n //\r\n // let [smallestLinePoint, biggestLinePoint, to, from] = self.getSmallestAndBiggestPointWithCorners(),\r\n // renderFrom1 = self.calculateRenderPosition(from),\r\n // renderTo1 = self.calculateRenderPosition(to);\r\n //\r\n // void smallestLinePoint;\r\n // void biggestLinePoint;\r\n // console.log(\"renderFrom\", renderFrom);\r\n // console.log(\"renderFrom1\", renderFrom1);\r\n //\r\n // console.log(\"renderTo\", renderTo);\r\n // console.log(\"renderTo1\", renderTo1);\r\n //\r\n // debugger // eslint-disable-line no-debugger\r\n self.ctx.beginPath();\r\n self.ctx.moveTo(renderFrom.x, renderFrom.y);\r\n if (state.withBumpout) {\r\n drawBumpoutLine(self.ctx);\r\n }\r\n self.ctx.lineTo(renderTo.x, renderTo.y);\r\n self.ctx.lineWidth = 4;\r\n self.ctx.strokeStyle = color;\r\n self.ctx.stroke();\r\n self.ctx.closePath();\r\n\r\n /*var lineField = getLineField();\r\n var field = lineField.points;\r\n self.from.render(self.ctx);\r\n\r\n self.ctx.save();\r\n self.ctx.beginPath();\r\n self.ctx.moveTo(field[0].x, field[0].y);\r\n for(var i = 1; i < field.length; i++) {\r\n var p = field[i];\r\n var x = p.x, y = p.y;\r\n self.ctx.lineTo(x, y);\r\n }\r\n self.ctx.closePath();\r\n self.ctx.fillStyle = 'rgba(159,197,34,0.47)';\r\n self.ctx.fill();\r\n self.ctx.restore();*/ // this is old hovering, m.b. would be needed for tests\r\n }\r\n }\r\n\r\n function drawBumpoutLine(ctx) {\r\n var bumpoutPoints = self.bumpoutOverlay.getBumpoutPoints(),\r\n point1 = self.calculateRenderPosition(bumpoutPoints.point1),\r\n point2 = self.calculateRenderPosition(bumpoutPoints.point2),\r\n point3 = self.calculateRenderPosition(bumpoutPoints.point3),\r\n point4 = self.calculateRenderPosition(bumpoutPoints.point4);\r\n\r\n ctx.lineTo(point1.x, point1.y);\r\n ctx.lineTo(point2.x, point2.y);\r\n ctx.lineTo(point3.x, point3.y);\r\n ctx.lineTo(point4.x, point4.y);\r\n }\r\n\r\n const drawResizeCursor = () => {\r\n var\r\n renderFrom = self.calculateRenderPosition(self.from),\r\n renderTo = self.calculateRenderPosition(self.to);\r\n var o = getLineOrientation(this.from, this.to);\r\n const size = +self.tutorialImage.dataset.size;\r\n if (o === orientation.VERTICAL) {\r\n self.ctx.drawImage(self.tutorialImage, 0, 0, size, size, renderFrom.x - size/2, renderFrom.y - (renderFrom.y - renderTo.y)/2 - size/2, size, size);\r\n } else if (o === orientation.HORIZONTAL) {\r\n self.ctx.drawImage(self.tutorialImage, 0, 0, size, size, renderFrom.x - (renderFrom.x - renderTo.x)/2 - size/2, renderFrom.y - size/2, size, size);\r\n }\r\n }\r\n\r\n this.setLinePoints = () => {\r\n let renderFrom = self.calculateRenderPosition(self.from),\r\n renderTo = self.calculateRenderPosition(self.to),\r\n marginFrom = 0,\r\n marginTo = 0,\r\n //len = 0,\r\n afterIntersectionMargin = 9;\r\n const prevLine = parent.getPrevLine(self);\r\n const nextLine = parent.getNextLine(self);\r\n lineDirection = parent.getAngleDirection(self);\r\n\r\n if (this.from.arcLength > 0) {\r\n const prevLineRenderFrom = prevLine.calculateRenderPosition(prevLine.from);\r\n const angle = getAngleBetween3Points(prevLineRenderFrom, renderFrom, renderTo);\r\n const radiusMultiplier = self.from.arcLength * config.scale;\r\n marginFrom = Math.abs(radiusMultiplier / getTanDeg(Math.round(angle / 2))) ;\r\n\r\n // console.clear();\r\n // console.log(\"self.from.arcLength\", self.from.arcLength);\r\n // console.log(\"radiusMultiplier\", radiusMultiplier);\r\n // console.log(\"marginFrom\", marginFrom);\r\n // console.log(\"angle\", angle);\r\n // console.log(\"getTanDeg(Math.round(angle / 2))\", getTanDeg(Math.round(angle / 2)));\r\n // console.log(\"marginFrom < radiusMultiplier\", marginFrom < radiusMultiplier);\r\n } else if (this.from.angle > 0) {\r\n marginFrom = self.from.angle * config.scale / 1.48 + design.outlineMargin; // +design.outlineMargin is to prevent overlapping\r\n }\r\n\r\n if (this.to.arcLength > 0) {\r\n const nextLineRenderTo = nextLine.calculateRenderPosition(nextLine.to);\r\n const angle = getAngleBetween3Points(renderFrom, renderTo, nextLineRenderTo);\r\n const radiusMultiplier = this.to.arcLength * config.scale;\r\n marginTo = Math.abs(radiusMultiplier / getTanDeg(Math.round(angle / 2)));\r\n // console.clear();\r\n // console.log(\"self.to.arcLength\", self.to.arcLength);\r\n // console.log(\"radiusMultiplier\", radiusMultiplier);\r\n // console.log(\"marginTo\", marginTo);\r\n // console.log(\"angle\", angle);\r\n // console.log(\"getTanDeg(Math.round(angle / 2))\", getTanDeg(Math.round(angle / 2)));\r\n // console.log(\"marginFrom < radiusMultiplier\", marginTo < radiusMultiplier);\r\n } else if (this.to.angle > 0) {\r\n marginTo = self.to.angle * config.scale / 1.48; // not sure why 1.48\r\n }\r\n\r\n self.drawLineFrom = self.drawLineFrom || null;\r\n self.drawLineTo = self.drawLineTo || null;\r\n if (state.withBumpout) {\r\n var bumpoutPoints = self.bumpoutOverlay.getBumpoutPoints(),\r\n point1 = self.calculateRenderPosition(bumpoutPoints.point1),\r\n point2 = self.calculateRenderPosition(bumpoutPoints.point2),\r\n point3 = self.calculateRenderPosition(bumpoutPoints.point3),\r\n point4 = self.calculateRenderPosition(bumpoutPoints.point4);\r\n\r\n self.drawLineBumpoutPoints = self.drawLineBumpoutPoints || null;\r\n }\r\n\r\n //let prevParallelLine, nextParallelLine, rotateAnglePart, rotatedAngleValue;\r\n\r\n\r\n if (lineDirection.orientation !== \"horizontal\" && lineDirection.orientation !== \"vertical\") {\r\n //nextLineDirection = parent.getAngleDirection(nextLine);\r\n //prevLineDirection = parent.getAngleDirection(prevLine);\r\n // prevParallelLine = parent.getPrevLine(prevLine);\r\n // nextParallelLine = parent.getNextLine(nextLine);\r\n // rotateAnglePart = self.from.rotateAnglePart;\r\n // rotatedAngleValue = self.from.rotateAnglePart ? self.from.rotateAnglePart.rotatedAngleValue : 0;\r\n }\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\":\r\n if (lineDirection.newDirection === 'east') {\r\n marginFrom = (prevLine.getLineDirection().newDirection === 'south') ? marginFrom + 18 : marginFrom;\r\n marginTo = (nextLine.getLineDirection().newDirection === 'north') ? marginTo + 18 : marginTo;\r\n self.drawLineFrom = {x: renderFrom.x + marginFrom, y: renderFrom.y - 9};\r\n self.drawLineTo = {x: renderTo.x - marginTo, y: renderTo.y - 9};\r\n if (state.withBumpout) {\r\n self.drawLineBumpoutPoints = this.bumpoutOverlay.bumpoutInOrOut() === 'out' ?\r\n {\r\n point1: {x: point1.x - 9, y: renderTo.y - 9},\r\n point2: {x: point2.x - 9, y: point2.y - 9},\r\n point3: {x: point3.x + 9, y: point3.y - 9},\r\n point4: {x: point4.x + 9, y: point4.y - 9},\r\n } : {\r\n point1: {x: point1.x + 9, y: renderTo.y - 9},\r\n point2: {x: point2.x + 9, y: point2.y - 9},\r\n point3: {x: point3.x - 9, y: point3.y - 9},\r\n point4: {x: point4.x - 9, y: point4.y - 9},\r\n }\r\n }\r\n setPointsOutlineIntersection(prevLine, nextLine);\r\n self.drawLineFrom = {x: self.drawLineFrom.x + afterIntersectionMargin, y: self.drawLineFrom.y};\r\n self.drawLineTo = {x: self.drawLineTo.x - afterIntersectionMargin, y: self.drawLineTo.y};\r\n } else if (lineDirection.newDirection === \"west\") {\r\n marginFrom = (prevLine.getLineDirection().newDirection === 'north') ? marginFrom + 18 : marginFrom;\r\n marginTo = (nextLine.getLineDirection().newDirection === 'south') ? marginTo + 18 : marginTo;\r\n self.drawLineFrom = {x: renderFrom.x - marginFrom, y: renderFrom.y + 9};\r\n self.drawLineTo = {x: renderTo.x + 1 + marginTo, y: renderTo.y + 9};\r\n\r\n if (state.withBumpout) {\r\n self.drawLineBumpoutPoints = this.bumpoutOverlay.bumpoutInOrOut() === 'out' ?\r\n {\r\n point1: {x: point1.x + 9, y: renderTo.y + 9},\r\n point2: {x: point2.x + 9, y: point2.y + 9},\r\n point3: {x: point3.x - 9, y: point3.y + 9},\r\n point4: {x: point4.x - 9, y: point4.y + 9},\r\n } : {\r\n point1: {x: point1.x - 9, y: renderTo.y + 9},\r\n point2: {x: point2.x - 9, y: point2.y + 9},\r\n point3: {x: point3.x + 9, y: point3.y + 9},\r\n point4: {x: point4.x + 9, y: point4.y + 9},\r\n }\r\n }\r\n setPointsOutlineIntersection(prevLine, nextLine);\r\n self.drawLineFrom = {x: self.drawLineFrom.x - afterIntersectionMargin, y: self.drawLineFrom.y};\r\n self.drawLineTo = {x: self.drawLineTo.x + afterIntersectionMargin, y: self.drawLineTo.y};\r\n }\r\n break;\r\n case \"vertical\":\r\n if (lineDirection.newDirection === 'south') {\r\n marginFrom = (prevLine.getLineDirection().newDirection === 'west') ? marginFrom + 18 : marginFrom;\r\n marginTo = (nextLine.getLineDirection().newDirection === 'east') ? marginTo + 18 : marginTo;\r\n self.drawLineFrom = {x: renderFrom.x + 9, y: renderFrom.y + marginFrom};\r\n self.drawLineTo = {x: renderTo.x + 9, y: renderTo.y - marginTo};\r\n if (state.withBumpout) {\r\n self.drawLineBumpoutPoints = this.bumpoutOverlay.bumpoutInOrOut() === 'out' ?\r\n {\r\n point1: {x: point1.x + 9, y: point1.y - 9},\r\n point2: {x: point2.x + 9, y: point2.y - 9},\r\n point3: {x: point3.x + 9, y: point3.y + 9},\r\n point4: {x: point4.x + 9, y: point4.y + 9},\r\n } : {\r\n point1: {x: point1.x + 9, y: point1.y + 9},\r\n point2: {x: point2.x + 9, y: point2.y + 9},\r\n point3: {x: point3.x + 9, y: point3.y - 9},\r\n point4: {x: point4.x + 9, y: point4.y - 9},\r\n }\r\n }\r\n setPointsOutlineIntersection(prevLine, nextLine);\r\n self.drawLineFrom = {x: self.drawLineFrom.x, y: self.drawLineFrom.y + afterIntersectionMargin};\r\n self.drawLineTo = {x: self.drawLineTo.x, y: self.drawLineTo.y - afterIntersectionMargin};\r\n } else if (lineDirection.newDirection === 'north') {\r\n marginTo = (nextLine.getLineDirection().newDirection === 'west') ? marginTo + 18 : marginTo;\r\n marginFrom = (prevLine.getLineDirection().newDirection === 'east') ? marginFrom + 18 : marginFrom;\r\n self.drawLineFrom = {x: renderFrom.x - 9, y: renderFrom.y - marginFrom};\r\n self.drawLineTo = {x: renderTo.x - 9, y: renderTo.y + marginTo};\r\n if (state.withBumpout) {\r\n self.drawLineBumpoutPoints = this.bumpoutOverlay.bumpoutInOrOut() === 'out' ?\r\n {\r\n point1: {x: point1.x - 9, y: point1.y + 9},\r\n point2: {x: point2.x - 9, y: point2.y + 9},\r\n point3: {x: point3.x - 9, y: point3.y - 9},\r\n point4: {x: point4.x - 9, y: point4.y - 9},\r\n } : {\r\n point1: {x: point1.x - 9, y: point1.y - 9},\r\n point2: {x: point2.x - 9, y: point2.y - 9},\r\n point3: {x: point3.x - 9, y: point3.y + 9},\r\n point4: {x: point4.x - 9, y: point4.y + 9},\r\n }\r\n }\r\n setPointsOutlineIntersection(prevLine, nextLine);\r\n self.drawLineFrom = {x: self.drawLineFrom.x, y: self.drawLineFrom.y - afterIntersectionMargin};\r\n self.drawLineTo = {x: self.drawLineTo.x, y: self.drawLineTo.y + afterIntersectionMargin};\r\n }\r\n break;\r\n case \"NORTHWEST\":\r\n case \"NORTHEAST\":\r\n case \"SOUTHWEST\":\r\n case \"SOUTHEAST\":\r\n default: {\r\n let distanceFromLine = 9;\r\n if (marginFrom) {\r\n const prevLineFrom = this.calculateRenderPosition(prevLine.from);\r\n if (isInnerCorner(parent, renderFrom, renderTo, prevLineFrom)) {\r\n marginFrom = marginFrom + 8;\r\n }\r\n renderFrom = getPointOnTheLine(renderFrom, renderTo, -marginFrom);\r\n }\r\n if (marginTo) {\r\n const nextLineTo = this.calculateRenderPosition(nextLine.to);\r\n if (isInnerCorner(parent, renderFrom, renderTo, nextLineTo)) {\r\n marginTo = marginTo + 8;\r\n }\r\n renderTo = getPointOnTheLine(renderTo, renderFrom, -marginTo);\r\n }\r\n\r\n [this.drawLineFrom, this.drawLineTo] = getParallelPoints(renderTo, renderFrom, distanceFromLine);\r\n setPointsOutlineIntersection(prevLine, nextLine);\r\n }\r\n break;\r\n// case \"SOUTHEAST\": {\r\n// if (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") {\r\n// if (rotatedAngleValue < 90) {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(nextParallelLine.to));\r\n// self.drawLineTo = getParralelPoint(self.calculateRenderPosition(nextLine.from), self.calculateRenderPosition(nextLine.to));\r\n// } else {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(prevLine.from));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(nextLine.to));\r\n// }\r\n// } else if (rotateAnglePart && rotateAnglePart.angleDirection === \"left\") {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(prevLine.from));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(prevParallelLine.from))\r\n// } else {\r\n// [this.drawLineFrom, this.drawLineTo] = getParallelPoints(renderTo, renderFrom, 9);\r\n//\r\n// RenderFigures.renderCircle(this.drawLineFrom, 12,1, '#63b141');\r\n// RenderFigures.renderCircle(this.drawLineTo, 10, 1);\r\n//\r\n// debugger // eslint-disable-line no-debugger\r\n//\r\n// // self.drawLineFrom = {x: renderFrom.x + 9, y: renderFrom.y - 9};\r\n// // self.drawLineTo = {x: renderTo.x + 9, y: renderTo.y - 9};\r\n// setPointsOutlineIntersection(prevLine, nextLine);\r\n// }\r\n// if (marginFrom) {\r\n// self.drawLineFrom = getPointBetweenPoints(self.drawLineFrom, self.drawLineTo, marginFrom)\r\n// }\r\n// if (marginTo) {\r\n// self.drawLineTo = getPointBetweenPoints(self.drawLineTo, self.drawLineFrom, marginTo)\r\n// }\r\n// break;\r\n// }\r\n// case \"NORTHEAST\": {\r\n// if (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(nextParallelLine.to));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(nextLine.to));\r\n// } else if (rotateAnglePart && rotateAnglePart.angleDirection === \"left\") {\r\n// if (rotatedAngleValue < 90) {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(prevLine.from));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(prevParallelLine.from));\r\n// } else {\r\n// // self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(prevLine.from));\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(nextParallelLine.to));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(nextLine.to));\r\n// }\r\n// } else {\r\n// // self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(nextParallelLine.to));\r\n// // self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(nextLine.to));\r\n// self.drawLineFrom = {x: renderFrom.x - 9, y: renderFrom.y - 9};\r\n// self.drawLineTo = {x: renderTo.x - 9, y: renderTo.y - 9};\r\n// setPointsOutlineIntersection(prevLine, nextLine);\r\n// }\r\n// if (marginFrom) {\r\n// self.drawLineFrom = getPointBetweenPoints(self.drawLineFrom, self.drawLineTo, marginFrom)\r\n// }\r\n// if (marginTo) {\r\n// self.drawLineTo = getPointBetweenPoints(self.drawLineTo, self.drawLineFrom, marginTo)\r\n// }\r\n// break;\r\n// }\r\n// case \"SOUTHWEST\": {\r\n// if (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") {\r\n// if (rotatedAngleValue < 90 && rotateAnglePart && rotateAnglePart.shapeType !== \"wideangle\") {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(prevLine.from));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(nextLine.to));\r\n// } else {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(prevLine.from));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(prevParallelLine.from));\r\n// }\r\n// } else if (rotateAnglePart && rotateAnglePart.angleDirection === \"left\") {\r\n// if (rotatedAngleValue < 90) {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(nextParallelLine.to));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(nextLine.to));\r\n// } else {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(prevLine.from));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(prevParallelLine.from));\r\n// }\r\n// } else {\r\n// // self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(nextParallelLine.to));\r\n// // self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(nextLine.to));\r\n// self.drawLineFrom = {x: renderFrom.x + 9, y: renderFrom.y + 9};\r\n// self.drawLineTo = {x: renderTo.x + 9, y: renderTo.y + 9};\r\n// setPointsOutlineIntersection(prevLine, nextLine);\r\n// }\r\n// if (marginFrom) {\r\n// self.drawLineFrom = getPointBetweenPoints(self.drawLineFrom, self.drawLineTo, marginFrom)\r\n// }\r\n// if (marginTo) {\r\n// self.drawLineTo = getPointBetweenPoints(self.drawLineTo, self.drawLineFrom, marginTo)\r\n// }\r\n// break;\r\n// }\r\n// case \"NORTHWEST\": {\r\n// if (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(prevLine.from));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(prevParallelLine.from));\r\n// } else if (rotateAnglePart && rotateAnglePart.angleDirection === \"left\") {\r\n// if (rotatedAngleValue < 90) {\r\n// // self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(prevLine.from));\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(nextParallelLine.to));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(nextLine.to));\r\n// } else {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(nextParallelLine.to));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(nextLine.to));\r\n// }\r\n// } else {\r\n// // self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(prevLine.from));\r\n// // self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(nextLine.to));\r\n//\r\n// self.drawLineFrom = {x: renderFrom.x - 9, y: renderFrom.y + 9};\r\n// self.drawLineTo = {x: renderTo.x - 9, y: renderTo.y + 9};\r\n// setPointsOutlineIntersection(prevLine, nextLine);\r\n// }\r\n// if (marginFrom) {\r\n// self.drawLineFrom = getPointBetweenPoints(self.drawLineFrom, self.drawLineTo, marginFrom)\r\n// }\r\n// if (marginTo) {\r\n// self.drawLineTo = getPointBetweenPoints(self.drawLineTo, self.drawLineFrom, marginTo)\r\n// }\r\n// break;\r\n// }\r\n //default:\r\n }\r\n };\r\n const setPointsOutlineIntersection = (prevLine, nextLine) => {\r\n const fromBorderIntersectionPoint = getBorderFromIntersection(prevLine);\r\n const fromOutlineIntersectionPoint = getOutlineFromIntersection(prevLine);\r\n if ((fromBorderIntersectionPoint || fromOutlineIntersectionPoint)\r\n && !(this.from.isWithAngle())\r\n && !(this.from.isWithCorner())\r\n ) {\r\n let intersectionPoints = [];\r\n if (fromBorderIntersectionPoint) intersectionPoints.push(fromBorderIntersectionPoint);\r\n if (fromOutlineIntersectionPoint) intersectionPoints.push(fromOutlineIntersectionPoint);\r\n const closestIntersectionPoint = getClosestPoint(self.drawLineTo, intersectionPoints);\r\n\r\n // render dev circles intersection\r\n // if (lineDirection.orientation === \"NORTHWEST\") {\r\n // if (fromBorderIntersectionPoint) RenderFigures.renderCircle(fromBorderIntersectionPoint, 10,1, '#e5bf37')\r\n // if (fromOutlineIntersectionPoint) RenderFigures.renderCircle(fromOutlineIntersectionPoint, 10,1, '#de5f5f')\r\n // RenderFigures.renderCircle(closestIntersectionPoint, 20,1, '#63b141');\r\n // RenderFigures.renderCircle(self.drawLineTo, 25, 1);\r\n // debugger // eslint-disable-line no-debugger\r\n // }\r\n if (closestIntersectionPoint.x && closestIntersectionPoint.y) {\r\n this.drawLineFrom = {x: closestIntersectionPoint.x, y: closestIntersectionPoint.y};\r\n }\r\n }\r\n\r\n const toBorderIntersectionPoint = getBorderToIntersection(nextLine);\r\n const toOutlineIntersectionPoint = getOutlineToIntersection(nextLine);\r\n\r\n if ((toBorderIntersectionPoint || toOutlineIntersectionPoint)\r\n && !(this.to.isWithAngle())\r\n && !(this.to.isWithCorner())\r\n ) {\r\n let intersectionPoints = [];\r\n if (toBorderIntersectionPoint) { intersectionPoints.push(toBorderIntersectionPoint)}\r\n if (toOutlineIntersectionPoint) { intersectionPoints.push(toOutlineIntersectionPoint)}\r\n const closestIntersectionPoint = getClosestPoint(self.drawLineFrom, intersectionPoints);\r\n void RenderFigures.renderCircle;\r\n // if (lineDirection.orientation === \"SOUTHWEST\") {\r\n // if (toBorderIntersectionPoint) RenderFigures.renderCircle(toBorderIntersectionPoint, 10,1, '#e5bf37')\r\n // if (toOutlineIntersectionPoint) RenderFigures.renderCircle(toOutlineIntersectionPoint, 15,1, '#de5f5f')\r\n // RenderFigures.renderCircle(closestIntersectionPoint, 20, 1, '#63b141');\r\n // RenderFigures.renderCircle(self.drawLineFrom, 25);\r\n // debugger // eslint-disable-line no-debugger\r\n // }\r\n if (closestIntersectionPoint.x && closestIntersectionPoint.y) {\r\n this.drawLineTo = {x: closestIntersectionPoint.x, y: closestIntersectionPoint.y};\r\n }\r\n }\r\n\r\n // todo bumpout\r\n // self.drawLineBumpoutPoints = state.withBumpout ?\r\n // {\r\n // point1: {x: point1.x + 9, y: point1.y - 9},\r\n // point2: {x: point2.x + 9, y: point2.y - 9},\r\n // point3: {x: point3.x + 9, y: point3.y + 9},\r\n // point4: {x: point4.x + 9, y: point4.y + 9},\r\n // } : null;\r\n }\r\n // const getOutlineIntersectionPointWithPrevLine = () => {\r\n // const prevLine = parent.getPrevLine(this);\r\n // if (!prevLine.drawLineTo) {\r\n // debugger // eslint-disable-line no-debugger\r\n // prevLine.setLinePoints();\r\n // }\r\n //\r\n // const pointOnTheLine = getPointOnTheLine(this.drawLineTo, this.drawLineFrom, 300);\r\n // const pointOnThePrevLine = getPointOnTheLine(prevLine.drawLineFrom, prevLine.drawLineTo, 300);\r\n // console.log(\"this\", this);\r\n // debugger // eslint-disable-line no-debugger\r\n // return getIntersectCords(\r\n // this.drawLineFrom.x,\r\n // this.drawLineFrom.y,\r\n // pointOnTheLine.x,\r\n // pointOnTheLine.y,\r\n // pointOnThePrevLine.x,\r\n // pointOnThePrevLine.y,\r\n // prevLine.drawLineFrom.x,\r\n // prevLine.drawLineFrom.y,\r\n // );\r\n // }\r\n\r\n const getOutlineIntersectionPointWithNextTLine = () => {\r\n const nextLine = parent.getNextLine(this);\r\n nextLine.setLinePoints();\r\n const pointOnTheLine = getPointOnTheLine(this.drawLineTo, this.drawLineFrom, 1000);\r\n const pointOnTheNextLine = getPointOnTheLine(nextLine.drawLineFrom, nextLine.drawLineTo, 1000);\r\n return getIntersectCords(\r\n this.drawLineFrom.x,\r\n this.drawLineFrom.y,\r\n pointOnTheLine.x,\r\n pointOnTheLine.y,\r\n pointOnTheNextLine.x,\r\n pointOnTheNextLine.y,\r\n nextLine.drawLineFrom.x,\r\n nextLine.drawLineFrom.y,\r\n );\r\n }\r\n const getBorderToIntersection = (nextLine) => {\r\n let intersectionCords = false\r\n if (nextLine.drawLineTo) {\r\n const nextLineToPointField = nextLine.to.getPointField(false);\r\n const nextLineFromPointField = nextLine.from.getPointField(false);\r\n const pointOnTheLine = getPointOnTheLine(self.drawLineTo, self.drawLineFrom,25);\r\n const pointOnTheNextLine = getPointOnTheLine(nextLineFromPointField, nextLineToPointField, 25);\r\n\r\n intersectionCords = getIntersectCords(\r\n self.drawLineFrom.x,\r\n self.drawLineFrom.y,\r\n pointOnTheLine.x,\r\n pointOnTheLine.y,\r\n pointOnTheNextLine.x,\r\n pointOnTheNextLine.y,\r\n nextLineToPointField.x,\r\n nextLineToPointField.y,\r\n );\r\n // if (lineDirection.orientation === \"SOUTHWEST\") {\r\n // console.log(\"--------\");\r\n // console.log(\"pointOnTheLine\", pointOnTheLine);\r\n // console.log(\" self.drawLineFrom\", self.drawLineFrom);\r\n // console.log(\" self.drawLineTo\", self.drawLineTo);\r\n // console.log(\"--\");\r\n // console.log(\"pointOnTheNextLine\", pointOnTheNextLine);\r\n // console.log(\"nextLine.drawLineFrom\", nextLineFromPointField);\r\n // console.log(\" nextLine.drawLineTo\", nextLineToPointField);\r\n // console.log(\"intersectionCords\", intersectionCords);\r\n // debugger // eslint-disable-line no-debugger\r\n // }\r\n }\r\n\r\n return intersectionCords\r\n }\r\n\r\n const getBorderFromIntersection = (prevLine) => {\r\n let intersectionCords = false\r\n\r\n if (prevLine.drawLineFrom) {\r\n const prevLineToPointField = prevLine.to.getPointField(false);\r\n const prevLineFromPointField = prevLine.from.getPointField(false);\r\n const pointOnTheLineBeforeFrom = getPointOnTheLine(this.drawLineFrom, this.drawLineTo,25);\r\n const pointOnThePrevLine = getPointOnTheLine(prevLineToPointField, prevLineFromPointField, 25);\r\n intersectionCords = getIntersectCords(\r\n pointOnTheLineBeforeFrom.x,\r\n pointOnTheLineBeforeFrom.y,\r\n this.drawLineTo.x,\r\n this.drawLineTo.y,\r\n prevLineFromPointField.x,\r\n prevLineFromPointField.y,\r\n pointOnThePrevLine.x,\r\n pointOnThePrevLine.y,\r\n );\r\n // if (lineDirection.orientation === \"SOUTHWEST\") {\r\n // console.log(\"--------\");\r\n // console.log(\"pointOnTheLineBeforeFrom\", pointOnTheLineBeforeFrom);\r\n // console.log(\"self.drawLineFrom\", self.drawLineFrom);\r\n // console.log(\"self.drawLineTo\", self.drawLineTo);\r\n // console.log(\"--\");\r\n // console.log(\"pointOnThePrevLine\", pointOnThePrevLine);\r\n // console.log(\"prevLine.drawLineFrom\", prevLine.drawLineFrom);\r\n // console.log(\"prevLine.drawLineTo\", prevLine.drawLineTo);\r\n // console.log(\"intersectionCords\", intersectionCords);\r\n // debugger // eslint-disable-line no-debugger\r\n // }\r\n }\r\n\r\n return intersectionCords\r\n }\r\n\r\n function getOutlineFromIntersection (prevLine) {\r\n let intersectionCords = false\r\n\r\n if (prevLine.drawLineFrom) {\r\n const pointOnTheLineBeforeFrom = getPointOnTheLine(self.drawLineFrom, self.drawLineTo,15);\r\n const pointOnThePrevLine = getPointOnTheLine(prevLine.drawLineTo, prevLine.drawLineFrom, 15);\r\n intersectionCords = getIntersectCords(\r\n pointOnTheLineBeforeFrom.x,\r\n pointOnTheLineBeforeFrom.y,\r\n self.drawLineTo.x,\r\n self.drawLineTo.y,\r\n prevLine.drawLineFrom.x,\r\n prevLine.drawLineFrom.y,\r\n pointOnThePrevLine.x,\r\n pointOnThePrevLine.y,\r\n );\r\n // if (lineDirection.orientation === \"SOUTHWEST\") {\r\n // console.log(\"--------\");\r\n // console.log(\"pointOnTheLineBeforeFrom\", pointOnTheLineBeforeFrom);\r\n // console.log(\"self.drawLineFrom\", self.drawLineFrom);\r\n // console.log(\"self.drawLineTo\", self.drawLineTo);\r\n // console.log(\"--\");\r\n // console.log(\"pointOnThePrevLine\", pointOnThePrevLine);\r\n // console.log(\"prevLine.drawLineFrom\", prevLine.drawLineFrom);\r\n // console.log(\"prevLine.drawLineTo\", prevLine.drawLineTo);\r\n // console.log(\"intersectionCords\", intersectionCords);\r\n // debugger // eslint-disable-line no-debugger\r\n // }\r\n }\r\n return intersectionCords\r\n }\r\n\r\n function getOutlineToIntersection (nextLine) {\r\n let intersectionCords = false\r\n if (nextLine.drawLineTo) {\r\n const pointOnTheLine = getPointOnTheLine(self.drawLineTo, self.drawLineFrom,12);\r\n const pointOnTheNextLine = getPointOnTheLine(nextLine.drawLineFrom, nextLine.drawLineTo, 12);\r\n intersectionCords = getIntersectCords(\r\n self.drawLineFrom.x,\r\n self.drawLineFrom.y,\r\n pointOnTheLine.x,\r\n pointOnTheLine.y,\r\n pointOnTheNextLine.x,\r\n pointOnTheNextLine.y,\r\n nextLine.drawLineTo.x,\r\n nextLine.drawLineTo.y,\r\n );\r\n\r\n // if (lineDirection.orientation === \"SOUTHWEST\") {\r\n // console.log(\"--------\");\r\n // console.log(\"pointOnTheLine\", pointOnTheLine);\r\n // console.log(\" self.drawLineFrom\", self.drawLineFrom);\r\n // console.log(\" self.drawLineTo\", self.drawLineTo);\r\n // console.log(\"--\");\r\n // console.log(\"pointOnTheNextLine\", pointOnTheNextLine);\r\n // console.log(\"nextLine.drawLineFrom\", nextLine.drawLineFrom);\r\n // console.log(\"nextLine.drawLineTo\", nextLine.drawLineTo);\r\n // console.log(\"intersectionCords\", intersectionCords);\r\n // debugger // eslint-disable-line no-debugger\r\n // }\r\n }\r\n return intersectionCords\r\n }\r\n\r\n /**\r\n * Draw grey outline\r\n */\r\n const drawLine = (color, border) => {\r\n void border;\r\n self.setLinePoints();// dev remove to hide gray outline border\r\n self.ctx.beginPath();\r\n if (self.drawLineFrom && self.drawLineTo) {\r\n if (state.withBumpout) {\r\n self.ctx.moveTo(self.drawLineFrom.x, self.drawLineFrom.y);\r\n self.ctx.lineTo(self.drawLineBumpoutPoints.point1.x, self.drawLineBumpoutPoints.point1.y);\r\n\r\n self.ctx.moveTo(self.drawLineBumpoutPoints.point1.x, self.drawLineBumpoutPoints.point1.y);\r\n self.ctx.lineTo(self.drawLineBumpoutPoints.point2.x, self.drawLineBumpoutPoints.point2.y);\r\n\r\n self.ctx.moveTo(self.drawLineBumpoutPoints.point2.x, self.drawLineBumpoutPoints.point2.y);\r\n self.ctx.lineTo(self.drawLineBumpoutPoints.point3.x, self.drawLineBumpoutPoints.point3.y);\r\n\r\n self.ctx.moveTo(self.drawLineBumpoutPoints.point3.x, self.drawLineBumpoutPoints.point3.y);\r\n self.ctx.lineTo(self.drawLineBumpoutPoints.point4.x, self.drawLineBumpoutPoints.point4.y);\r\n\r\n self.ctx.lineTo(self.drawLineBumpoutPoints.point4.x, self.drawLineBumpoutPoints.point4.y);\r\n self.ctx.lineTo(self.drawLineTo.x, self.drawLineTo.y);\r\n } else {\r\n self.ctx.moveTo(self.drawLineFrom.x, self.drawLineFrom.y);\r\n self.ctx.lineTo(self.drawLineTo.x, self.drawLineTo.y);\r\n }\r\n }\r\n self.ctx.lineWidth = 8;\r\n self.ctx.strokeStyle = color;\r\n self.ctx.stroke();\r\n self.ctx.closePath();\r\n }\r\n\r\n const drawCorner = (color) => {\r\n self.ctx.beginPath();\r\n self.ctx.lineWidth = 8;\r\n self.ctx.strokeStyle = color;\r\n\r\n let\r\n renderTo = self.calculateRenderPosition(self.to),\r\n renderFrom = self.calculateRenderPosition(self.from),\r\n //radius = Math.sqrt(Math.pow(self.to.arcLength, 2) / 2) * config.scale + 18,\r\n radius = self.to.arcLength * config.scale,\r\n nextLine = parent.getNextLine(self);\r\n\r\n lineDirection = parent.getAngleDirection(self);\r\n // var midHyp = getMidPoint(ap.line1, ap.line2);\r\n if (lineDirection.orientation !== \"horizontal\" && lineDirection.orientation !== \"vertical\") {\r\n //prevLine = parent.getPrevLine(self);\r\n //nextLine = parent.getNextLine(self);\r\n //prevParallelLine = parent.getPrevLine(prevLine);\r\n }\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\":\r\n case \"vertical\":\r\n case \"NORTHWEST\":\r\n case \"NORTHEAST\":\r\n case \"SOUTHWEST\":\r\n case \"SOUTHEAST\": {\r\n const interSectionPoint = getOutlineIntersectionPointWithNextTLine();\r\n //v1\r\n const nextLineTo = this.calculateRenderPosition(nextLine.to);\r\n if (isInnerCorner(parent, renderFrom, renderTo, nextLineTo)) {\r\n radius = radius - 18\r\n if (radius < -8) { // set minimum radius to display\r\n radius = -8\r\n }\r\n }\r\n this.ctx.moveTo(this.drawLineTo.x, this.drawLineTo.y);\r\n this.ctx.arcTo(interSectionPoint.x, interSectionPoint.y, nextLine.drawLineFrom.x, nextLine.drawLineFrom.y, radius + 9);\r\n\r\n this.ctx.moveTo(nextLine.drawLineFrom.x, nextLine.drawLineFrom.y);\r\n this.ctx.arcTo(interSectionPoint.x, interSectionPoint.y, this.drawLineTo.x, this.drawLineTo.y, radius + 9);\r\n //v2\r\n // this.ctx.moveTo(this.drawLineFrom.x, this.drawLineFrom.y);\r\n // this.ctx.arcTo(interSectionPoint.x, interSectionPoint.y, nextLine.drawLineFrom.x, nextLine.drawLineFrom.y, radius + 9);\r\n // this.ctx.stroke();\r\n // this.ctx.closePath();\r\n //\r\n // this.ctx.beginPath();\r\n // this.ctx.strokeStyle = design.aroundLineColor;\r\n // this.ctx.moveTo(this.drawLineFrom.x, this.drawLineFrom.y);\r\n // this.ctx.lineTo(this.drawLineTo.x, this.drawLineTo.y);\r\n\r\n //v3\r\n //this.ctx.moveTo(this.drawLineTo.x, this.drawLineTo.y);\r\n //this.ctx.quadraticCurveTo(renderTo.x, renderTo.y, nextLine.drawLineFrom.x, nextLine.drawLineFrom.y);\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n\r\n self.ctx.stroke();\r\n self.ctx.closePath();\r\n }\r\n\r\n const drawAngle = (color) => {\r\n let strokeStyle;\r\n\r\n this.ctx.beginPath();\r\n this.ctx.lineWidth = 8;\r\n\r\n this.ctx.strokeStyle = design.aroundLineColor;\r\n this.ctx.lineCap = 'square';\r\n //this.ctx.lineCap = 'round';\r\n\r\n if (this.lineCorner.state.isHovering && EventManager.getCursor().indexOf(\"delete\") >= 0\r\n && (this.lineCorner.state.withEdge || this.lineCorner.state.withBacksplash || this.lineCorner.state.withWall || (this.lineCorner.state.attachedItems && this.lineCorner.state.attachedItems.isWithEndCap))) {\r\n strokeStyle = 'rgba(208,1,27,0.5)';\r\n } else if (this.lineCorner.state.withEdge) {\r\n strokeStyle = Color.getOutlineStrokeStyle('edge');\r\n } else if (this.lineCorner.state.withBacksplash) {\r\n strokeStyle = Color.getOutlineStrokeStyle('backsplash');\r\n } else if (this.lineCorner.state.attachedItems && this.lineCorner.state.attachedItems.isWithEndCap) {\r\n strokeStyle = Color.getOutlineStrokeStyle(RESOURCE_ATTACHED_TO_TYPE.end_cap);\r\n } else if (this.lineCorner.state.withWall) {\r\n strokeStyle = Color.getOutlineStrokeStyle('wall');\r\n } else if (config.highlight.lines && this.lineCorner.state.isHovering) {\r\n strokeStyle = Color.getOutlineHoverStrokeStyle();\r\n this.ctx.strokeStyle = strokeStyle;\r\n } else if (config.highlight.lines && config.highlight.demoShow && (config.highlight.id !== state.withId)) {\r\n strokeStyle = Color.getOutlineHoverStrokeStyle();\r\n }\r\n\r\n let angleLinePoints = this.lineCorner.getAnglePoints();\r\n\r\n this.ctx.strokeStyle = strokeStyle ? strokeStyle : color;\r\n this.ctx.moveTo(angleLinePoints.cord1.x, angleLinePoints.cord1.y);\r\n this.ctx.lineTo(angleLinePoints.cord2.x, angleLinePoints.cord2.y);\r\n this.ctx.lineTo(angleLinePoints.cord3.x, angleLinePoints.cord3.y);\r\n this.ctx.lineTo(angleLinePoints.cord4.x, angleLinePoints.cord4.y);\r\n\r\n this.ctx.moveTo(angleLinePoints.cord4.x, angleLinePoints.cord4.y);\r\n\r\n //this.ctx.moveTo(angleLinePoints.cord2.x, angleLinePoints.cord2.y);\r\n //this.ctx.lineTo(angleLinePoints.cord3.x, angleLinePoints.cord3.y);\r\n this.ctx.stroke();\r\n this.ctx.closePath();\r\n\r\n //purple line v2\r\n // this.ctx.beginPath();\r\n // this.ctx.strokeStyle = strokeStyle ? strokeStyle : color;\r\n // this.ctx.moveTo(angleLinePoints.cordCornerFrom.x, angleLinePoints.cordCornerFrom.y);\r\n // this.ctx.lineTo(angleLinePoints.cordCornerTo.x, angleLinePoints.cordCornerTo.y);\r\n\r\n //purple line v3\r\n // this.ctx.beginPath();\r\n // this.ctx.strokeStyle = color;\r\n // this.ctx.moveTo(angleLinePoints.cordCornerFrom.x, angleLinePoints.cordCornerFrom.y);\r\n // this.ctx.lineTo(angleLinePoints.cordCornerTo.x, angleLinePoints.cordCornerTo.y);\r\n\r\n this.ctx.stroke();\r\n this.ctx.closePath();\r\n }\r\n\r\n this.get45CornerLegDistanceScaled = () => {\r\n return get45CornerLegDistanceByHypotenuse(this.to.angle || this.to.arcLength) * config.scale\r\n };\r\n\r\n this.get45CornerLegDistance = () => {\r\n return get45CornerLegDistanceByHypotenuse(this.to.angle || this.to.arcLength)\r\n };\r\n\r\n this.deleteBumpout = () => {\r\n state.withBumpout = false;\r\n this.bumpoutOverlay.destroy();\r\n this.overlay.setMidpointOffset(0, 0);\r\n let bumpoutPoints = this.bumpoutOverlay.getBumpoutPoints();\r\n for (const pointName in bumpoutPoints) {\r\n if (bumpoutPoints.hasOwnProperty(pointName)) {\r\n bumpoutPoints[pointName].destroy();\r\n }\r\n }\r\n this.bumpoutOverlay = null;\r\n };\r\n\r\n this.deleteMitered = () => {\r\n state.isWithMitered = false;\r\n this.miteredOverlay.destroy();\r\n this.miteredOverlay = null;\r\n this.overlay.setMidpointOffset(0, 0);\r\n this.createLineLength();\r\n };\r\n\r\n this.deleteUnderlayment = () => {\r\n state.isWithUnderlayment = false;\r\n this.underlaymentOverlay.destroy();\r\n this.underlaymentOverlay = null;\r\n this.overlay.setMidpointOffset(0, 0);\r\n this.createLineLength();\r\n };\r\n\r\n this.deleteWaterfallTool = () => {\r\n this.waterfallOverlay.destroy();\r\n workspaceControllers.waterfall.destroy(this.waterfallOverlay);\r\n this.waterfallOverlay = null;\r\n };\r\n\r\n this.createLineLength = () => {\r\n this.overlay = new lineLength();\r\n this.overlay.init(self);\r\n };\r\n\r\n this.deleteAttachedItem = () => {\r\n state.withEdge = false;\r\n state.isWithWaterfallEdge = false;\r\n state.isWithPeninsulaUnderwrapEdge = false;\r\n state.withBacksplash = false;\r\n state.withWall = false;\r\n state.withBumpout = false;\r\n state.withId = null;\r\n for (const attachedItemsKey in state.attachedItems) {\r\n state.attachedItems[attachedItemsKey] = false\r\n }\r\n this.attachedShape = null;\r\n if (this.overlay) {\r\n this.overlay.removeLineText();\r\n }\r\n\r\n if (this.bumpoutOverlay) {\r\n this.deleteBumpout();\r\n }\r\n if (this.labelOverlay) {\r\n this.labelOverlay.destroy();\r\n }\r\n if (this.titleOverlay) {\r\n this.titleOverlay.destroy();\r\n }\r\n if (this.miteredOverlay) {\r\n this.deleteMitered();\r\n }\r\n if (this.underlaymentOverlay) {\r\n this.deleteUnderlayment();\r\n }\r\n if (this.waterfallOverlay) {\r\n this.deleteWaterfallTool();\r\n }\r\n sqftSlabManager.deleteSlabBacksplashByLine(this);\r\n store.dispatch(deleteResourceAttachedTo(RESOURCE_TYPE.attachedToLine, this));\r\n };\r\n\r\n this.addEdgeToLine = function(edgeName, id) {\r\n state.withEdge = true;\r\n state.withBacksplash = false;\r\n state.withWall = false;\r\n state.isWithWaterfallEdge = false;\r\n state.isWithPeninsulaUnderwrapEdge = false;\r\n state.withId = id;\r\n for (const attachedItemKey in state.attachedItems) {\r\n state.attachedItems[attachedItemKey] = false\r\n }\r\n self.overlay.renderEdgeText(edgeName);\r\n };\r\n\r\n this.addBacksplashToLine = (backsplashName, type, featureId, backsplashHeight) => {\r\n if (type === \"wall\") {\r\n state.withWall = true;\r\n state.withBacksplash = false;\r\n } else {\r\n state.withBacksplash = true;\r\n state.withWall = false;\r\n }\r\n state.withEdge = false;\r\n state.backsplashName = backsplashName;\r\n state.backsplashType = type;\r\n state.isWithWaterfallEdge = false;\r\n state.isWithPeninsulaUnderwrapEdge = false;\r\n state.withId = featureId;\r\n this.setBacksplashHeight(backsplashHeight);\r\n for (const attachedItemKey in state.attachedItems) {\r\n state.attachedItems[attachedItemKey] = false\r\n }\r\n self.overlay.renderBacksplashText(backsplashName, type);\r\n };\r\n\r\n this.addCrownMoldingToLine = (crownMoldingName, type, id) => {\r\n state.withBacksplash = false;\r\n state.withWall = false;\r\n state.withEdge = false;\r\n state.isWithWaterfallEdge = false;\r\n state.isWithPeninsulaUnderwrapEdge = false;\r\n state.attachedItems.isWithCrownMolding = true;\r\n state.withId = id;\r\n //this.overlay.renderBacksplashText(crownMoldingName, type);\r\n };\r\n\r\n this.addEndCapToLine = (endCapName, type, id) => {\r\n state.withBacksplash = false;\r\n state.withWall = false;\r\n state.withEdge = false;\r\n state.isWithWaterfallEdge = false;\r\n state.isWithPeninsulaUnderwrapEdge = false;\r\n state.attachedItems.isWithEndCap = true;\r\n state.attachedItems.isWithCrownMolding = false;\r\n state.withId = id;\r\n //this.overlay.renderBacksplashText(crownMoldingName, type);\r\n };\r\n\r\n this.addBumpoutToLine = function(mousePos, pointName, id) {\r\n void mousePos;\r\n void pointName;\r\n void id;\r\n //todo allow add multiple bumpout\r\n if (!state.withBumpout) {\r\n //todo fix rotation\r\n if (self.getOrientation() === orientation.VERTICAL || self.getOrientation() === orientation.HORIZONTAL) {\r\n state.withBumpout = true;\r\n self.bumpoutOverlay = new bumpout();\r\n self.bumpoutOverlay.init(self);\r\n }\r\n }\r\n };\r\n\r\n this.addMiteredToLine = () => {\r\n for (const attachedItemKey in state.attachedItems) {\r\n state.attachedItems[attachedItemKey] = false\r\n }\r\n if (!state.isWithMitered) {\r\n this.deleteAttachedItem();\r\n state.isWithMitered = true;\r\n if (workspace.miteredController === null) {\r\n workspace.miteredController = new MiteredController();\r\n }\r\n this.miteredOverlay = workspace.miteredController.createMiteredOverlay(this);\r\n this.miteredOverlay.init();\r\n\r\n return this.miteredOverlay;\r\n }\r\n\r\n return this.miteredOverlay\r\n };\r\n\r\n this.addUnderlaymentToLine = () => {\r\n for (const attachedItemKey in state.attachedItems) {\r\n state.attachedItems[attachedItemKey] = false\r\n }\r\n if (!state.isWithUnderlayment) {\r\n //todo fix rotation\r\n this.deleteAttachedItem();\r\n if (this.getOrientation() === orientation.VERTICAL || this.getOrientation() === orientation.HORIZONTAL) {\r\n state.isWithUnderlayment = true;\r\n if (workspace.underlaymentController === null) {\r\n workspace.underlaymentController = new UnderlaymentController();\r\n }\r\n this.underlaymentOverlay = workspace.underlaymentController.createUnderlaymentOverlay(this);\r\n this.underlaymentOverlay.init();\r\n\r\n return this.underlaymentOverlay;\r\n }\r\n }\r\n\r\n return this.underlaymentOverlay\r\n };\r\n\r\n this.addWaterfallToLine = (name = RESOURCE_ATTACHED_TO_NAME.waterfall) => {\r\n for (const attachedItemKey in state.attachedItems) {\r\n state.attachedItems[attachedItemKey] = false\r\n }\r\n if (!this.isWithWaterfallToolEdge()) {\r\n this.deleteAttachedItem();\r\n if (this.getOrientation() === orientation.VERTICAL || this.getOrientation() === orientation.HORIZONTAL) {\r\n state.isWithWaterfallEdge = true;\r\n state.isWithPeninsulaUnderwrapEdge = false;\r\n state.withBacksplash = false;\r\n state.withWall = false;\r\n state.withEdge = false;\r\n this.waterfallOverlay = workspaceControllers.waterfall.createWaterfallOverlay(this);\r\n createSlabModeWaterfallShapes();\r\n this.overlay.renderWaterfallText(name, RESOURCE_ATTACHED_TO_TYPE.waterfall);\r\n\r\n return this.waterfallOverlay;\r\n }\r\n }\r\n return this.waterfallOverlay\r\n };\r\n\r\n this.addPeninsulaUnderwrapToLine = () => {\r\n for (const attachedItemKey in state.attachedItems) {\r\n state.attachedItems[attachedItemKey] = false\r\n }\r\n if (!this.isWithPeninsulaUnderwrapEdge()) {\r\n if (this.getOrientation() === orientation.VERTICAL || this.getOrientation() === orientation.HORIZONTAL) {\r\n state.isWithPeninsulaUnderwrapEdge = true;\r\n state.isWithWaterfallEdge = false;\r\n state.withBacksplash = false;\r\n state.withWall = false;\r\n state.withEdge = false;\r\n this.waterfallOverlay = workspaceControllers.waterfall.createPeninsulaUnderwrapOverlay(this);\r\n createSlabModeWaterfallShapes();\r\n\r\n return this.waterfallOverlay;\r\n }\r\n }\r\n return this.waterfallOverlay\r\n };\r\n\r\n this.renderLineField = (ctx) => {\r\n\r\n this.ctx = ctx;\r\n\r\n if (config.highlight.tutorial && self.highLightedByTutorial) {\r\n drawLine('#E3E1E3');\r\n highLightBorder('#b263a8');\r\n if (self.tutorialImage) {\r\n drawResizeCursor();\r\n }\r\n } else if (config.highlight.lines && state.isHovering) {\r\n\r\n switch (config.highlight.type) {\r\n case 'edge':\r\n if (config.highlight.id !== state.withId) {\r\n drawLine(COLOR_THEMES[config.activeTheme].active_transparent);\r\n } else {\r\n drawLine(COLOR_THEMES[config.activeTheme].active);\r\n }\r\n break;\r\n case RESOURCE_ATTACHED_TO_TYPE.backsplash:\r\n case RESOURCE_ATTACHED_TO_TYPE.waterfall:\r\n if (config.highlight.id !== state.withId) {\r\n drawLine(COLOR_THEMES[config.activeTheme].primary_transparent);\r\n } else {\r\n drawLine(COLOR_THEMES[config.activeTheme].primary);\r\n }\r\n break;\r\n case 'wall':\r\n if (config.highlight.id !== state.withId) {\r\n drawLine('rgba(0,0,0,0.5)');\r\n } else {\r\n drawLine(COLOR_THEMES[config.activeTheme].primary);\r\n }\r\n break;\r\n case RESOURCE_ATTACHED_TO_TYPE.end_cap:\r\n if (config.highlight.id !== state.withId) {\r\n drawLine(COLOR.red_transparent);\r\n } else {\r\n drawLine(COLOR.red);\r\n }\r\n break;\r\n default:\r\n drawLine(COLOR_THEMES[config.activeTheme].active_transparent);\r\n break;\r\n }\r\n\r\n } else if (config.highlight.lines && config.highlight.demoShow && (config.highlight.id !== state.withId)) {\r\n switch (config.highlight.type) {\r\n case 'edge':\r\n default:\r\n drawLine(COLOR_THEMES[config.activeTheme].active_transparent);\r\n break;\r\n case RESOURCE_ATTACHED_TO_TYPE.backsplash:\r\n case RESOURCE_ATTACHED_TO_TYPE.end_cap:\r\n case RESOURCE_ATTACHED_TO_TYPE.waterfall:\r\n drawLine(COLOR_THEMES[config.activeTheme].primary_transparent);\r\n break;\r\n case 'wall':\r\n drawLine('rgba(0,0,0,0.5)');\r\n break;\r\n }\r\n } else if (this.blink.isHighlightedLightOn) {\r\n if (state.withEdge || this.isWithPeninsulaUnderwrapEdge()) {\r\n drawLine(COLOR_THEMES[config.activeTheme].active_transparent);\r\n } else if (state.withBacksplash || state.withBumpout || this.isWithWaterfallToolEdge()) {\r\n drawLine(COLOR_THEMES[config.activeTheme].primary_transparent);\r\n } else if (state.withWall) {\r\n drawLine('rgba(0,0,0,0.5)');\r\n } else if (state.attachedItems && state.attachedItems.isWithEndCap) {\r\n drawLine(COLOR.red_transparent);\r\n }\r\n } else {\r\n if (workspace.getAllowEdges() && workspace.getAllowLineHighlight()) {\r\n highLightBorder('#b263a8');\r\n }\r\n\r\n if (config.workspace.debug || state.isHovering && !config.highlight.lines && workspace.getAllowEdges()) {\r\n highLightBorder('#b263a8');\r\n }\r\n\r\n const orientation = this.getLineDirection().orientation;\r\n const isBumpoutHighlighted = workspace.getAllowBumpoutEdges() && workspace.getAllowLineHighlight();\r\n const isMiteredHighlighted = workspace.getAllowMiteredEdges() && workspace.getAllowLineHighlight();\r\n if ((isBumpoutHighlighted || isMiteredHighlighted)\r\n && (orientation === \"vertical\" || orientation === \"horizontal\")\r\n ) {\r\n highLightBorder(COLOR_THEMES[config.activeTheme].primary);\r\n }\r\n\r\n if (config.workspace.debug\r\n || state.isHovering && !config.highlight.lines\r\n && (\r\n (workspace.getAllowBumpoutEdges() || workspace.getAllowMiteredEdges())\r\n && (orientation === \"vertical\" || orientation === \"horizontal\")\r\n )\r\n ) {\r\n highLightBorder(COLOR_THEMES[config.activeTheme].primary);\r\n }\r\n\r\n if (state.isHovering && EventManager.getCursor().indexOf(\"delete\") >= 0\r\n && (state.withEdge\r\n || state.withBacksplash\r\n || (state.attachedItems && state.attachedItems.isWithEndCap)\r\n || state.withWall\r\n || this.isWithPeninsulaUnderwrapEdge()\r\n || this.isWithWaterfallToolEdge())\r\n ) {\r\n drawLine('rgba(208,1,27,0.5)');\r\n } else if (state.withEdge || this.isWithPeninsulaUnderwrapEdge()) {\r\n drawLine(COLOR_THEMES[config.activeTheme].active);\r\n if (self.tutorialImage) {\r\n drawResizeCursor();\r\n }\r\n } else if (state.withBacksplash) {\r\n drawLine(COLOR_THEMES[config.activeTheme].primary);\r\n } else if (this.isWithWaterfallToolEdge()) {\r\n drawLine(COLOR_THEMES[config.activeTheme].primary);\r\n } else if (state.withWall) {\r\n drawLine('#000000');\r\n } else if (state.withBumpout) {\r\n drawLine('#E3E1E3'); //todo enable border\r\n } else if (state.attachedItems && state.attachedItems.isWithEndCap) {\r\n drawLine(COLOR.red);\r\n } else {\r\n drawLine('#E3E1E3');\r\n }\r\n\r\n }\r\n\r\n if (self.to.arcLength > 0) {\r\n if (EventManager.getCursor().indexOf(\"delete\") >= 0 && !state.isHovering && self.to.isOverPointField()) {\r\n drawCorner('rgba(208,1,27,0.5)');\r\n } else {\r\n drawCorner(\"#b263a8\")\r\n }\r\n }\r\n\r\n //todo move this to lineCorner\r\n if (self.to.angle > 0) {\r\n if (EventManager.getCursor().indexOf(\"delete\") >= 0\r\n && !state.isHovering\r\n && (self.to.isOverPointField() || self.lineCorner.state.isCornerLineHovering) // todo perhaps hover over Point should be removed?\r\n ) {\r\n drawAngle('rgba(208,1,27,0.5)');\r\n } else {\r\n drawAngle(\"#b263a8\")\r\n }\r\n }\r\n ctx.restore();\r\n\r\n }\r\n}\r\n","import uuid from \"uuid\";\r\nimport _ from 'lodash';\r\n\r\n//todo sqft-react\r\nimport EventManager from \"./../../store/sqftEventManager\";\r\nimport PointRadius from \"./overlays/pointRadius\";\r\nimport workspace from \"../workspace\";\r\nimport sqftConfig from \"../../store/sqftConfig\";\r\nimport COLOR_THEMES, {COLOR} from \"../../store/colorThemes\";\r\n// import Radius from \"../controls/radius\";\r\nimport FitSize from \"../../../../helpers/sqftFitSize\";\r\nimport SqftStore from \"../../store/sqftStore\";\r\nimport store from \"../../../../../../store\";\r\nimport sqftShape from \"./sqftShape\";\r\nimport line from \"./line\";\r\nimport {\r\n getMidPoint,\r\n getPointOnTheLine,\r\n isDisabledInPopupWithParents\r\n} from \"../../../../helpers/sqftHelper\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport {isDisabledInPopupShouldBeHidden, SIDEBAR_NAVIGATION_BUTTONS} from \"../../../../constants\";\r\nimport MiteredOverlay from \"./overlays/mitered\";\r\nimport {getAngleBetween3Points} from \"../../../../helpers/shapeHelper\";\r\n//import MiteredOverlay from \"../overlays/mitered\";\r\nimport {updateSQFTCalculations} from \"../../../../../../actions/sqftFunctions\";\r\nimport {isSFTCabinetsGroup} from \"../../../../helpers/sqftNavigationHelper\";\r\nimport {renderResetSeamPopup, shouldResetSlabModePopupOnPointMoveBeDisplayed} from \"../../canvasPopup/resetSeam\";\r\nimport sqftShapeManager from \"../../store/sqftShapeManager\";\r\n\r\nexport const allowedNavItemsForMovingPoint = [\r\n SIDEBAR_NAVIGATION_BUTTONS.freeDraw,\r\n SIDEBAR_NAVIGATION_BUTTONS.resize\r\n];\r\n\r\nexport default function (x, y, direction, corner, canBeMoved = true) {\r\n //private variables\r\n let self = this,\r\n parent = null,\r\n state = {\r\n isMovable: false,\r\n mouseDown: false,\r\n mouseDownPosition: {},\r\n selected: false,\r\n isHovering: false,\r\n mousePos: {},\r\n pointWasMoved: false,\r\n canBeMoved,\r\n miteredFeatureId: null,\r\n },\r\n fillStyle = \"#E3E1E3\",\r\n fillStyleEdge = COLOR_THEMES[sqftConfig.activeTheme].active,\r\n fillStyleWhite = \"#FFFFFF\",\r\n fillStyleBlack = \"#4a4a4a\",\r\n fillStyleDelete = \"#e77f8d\", //\"rgba(253,2,33, 0.5)\",\r\n fillStyleBlue = COLOR_THEMES[sqftConfig.activeTheme].primary,\r\n //highlightFillStyle = \"rgba(0,255,0,0.5)\",\r\n //hoverFillStyle = \"#D0011B\",\r\n radiusFillStyle = \"#b263a8\",\r\n translateX,\r\n translateY,\r\n pointRadiusOverlay = null;\r\n //public properties\r\n this.id = uuid();\r\n this.pos = {x, y};\r\n this.posSlab = {\r\n x: x ? JSON.parse(JSON.stringify(x)) : 0,\r\n y: y ? JSON.parse(JSON.stringify(y)) : 0\r\n };\r\n Object.defineProperty(this, \"x\", {\r\n set: (value) => {\r\n setPointWasChangedInRegularMode();\r\n if (SqftStore.isRegularMode() && shouldResetSlabModePopupOnPointMoveBeDisplayed(this.getGrandParent())) {\r\n renderResetSeamPopup(this.getGrandParent())\r\n }\r\n return SqftStore.isSlabMode() ? this.posSlab.x = parseFloat(value) : this.pos.x = parseFloat(value);\r\n },\r\n get: () => {\r\n if (this.pos === undefined) {\r\n console.log(\"point pos not defined\");\r\n return 0;\r\n }\r\n return SqftStore.isSlabMode() ? this.posSlab.x : this.pos.x;\r\n }\r\n });\r\n Object.defineProperty(this, \"y\", {\r\n set: (value) => {\r\n setPointWasChangedInRegularMode();\r\n if (SqftStore.isRegularMode() && shouldResetSlabModePopupOnPointMoveBeDisplayed(this.getGrandParent())) {\r\n renderResetSeamPopup(this.getGrandParent())\r\n }\r\n return SqftStore.isSlabMode() ? this.posSlab.y = value : this.pos.y = value;\r\n },\r\n get: () => {\r\n if (this.pos === undefined) {\r\n console.log(\"point pos not defined\");\r\n return 0;\r\n }\r\n return SqftStore.isSlabMode() ? this.posSlab.y : this.pos.y;\r\n }\r\n });\r\n this.arcLength = 0;\r\n this.angle = 0;\r\n this.featureId = null;\r\n this.pointDirection = direction;\r\n this.corner = corner;\r\n this.renderAngleCircle = false;\r\n this.renderAngleArc = false;\r\n this.angleIsChanged = false;\r\n this.layout = null;\r\n this.rotateAnglePart = null; // link to the whole rotation part\r\n this.exportAndImportProperties = [\r\n \"id\", \"x\", \"y\", \"pos\", \"posSlab\", \"arcLength\", \"angle\", \"pointDirection\", \"corner\", \"rotateAnglePart\", \"angleIsChanged\",\r\n \"renderAngleCircle\", \"renderAngleArc\", \"featureId\"\r\n ];\r\n this.isHidden = () => {\r\n const reduxState = store.getState();\r\n let isShowSlabTool = reduxState.sqftSlabState.isShowSlabTool;\r\n\r\n const shape = this.getGrandParent();\r\n\r\n return !!(\r\n isShowSlabTool\r\n || (shape && shape.shapeCabinet)\r\n || (shape && shape.shapeSpacer)\r\n );\r\n }\r\n this.setPos = (value) => {\r\n this.pos = value\r\n }\r\n this.setPosSlab = (value) => {\r\n this.posSlab = value\r\n }\r\n this.isWithAngle = () => {\r\n return this.angle > 0\r\n }\r\n this.isWithCorner = () => {\r\n return this.arcLength > 0\r\n }\r\n //private functions\r\n // var snappedPos = function(pos) {\r\n // var scaledGridSize = sqftConfig.workspace.getScaledGridSize(),\r\n // newX = Math.round(self.x / scaledGridSize) * scaledGridSize,\r\n // newY = Math.round(self.y / scaledGridSize) * scaledGridSize;\r\n //\r\n // return {\r\n // x: newX,\r\n // y: newY\r\n // };\r\n // };\r\n this.getMiteredFeatureId = () => {\r\n return state.miteredFeatureId\r\n }\r\n this.setMiteredFeatureId = (id) => {\r\n state.miteredFeatureId = id\r\n }\r\n const setPointWasChangedInRegularMode = () => {\r\n const regularMode = SqftStore.isRegularMode();\r\n regularMode ? setPointWasChanged() : null;\r\n }\r\n const setPointWasChanged = () => {\r\n let parent = this.getParent();\r\n if (parent && parent.hasOwnProperty('getParent')) {\r\n let shape = parent.getParent();\r\n if (shape instanceof line) {\r\n shape.getParent().setIsPointsChanged(true);\r\n } else if (shape instanceof sqftShape) {\r\n shape.setIsPointsChanged(true);\r\n }\r\n }\r\n }\r\n const setPointWasMoved = () => {\r\n let parent = this.getParent();\r\n if (parent && parent.hasOwnProperty('getParent')) {\r\n let shape = parent.getParent();\r\n if (shape instanceof line) {\r\n shape.getParent().isPointsMoved = true;\r\n } else if (shape instanceof sqftShape) {\r\n shape.isPointsMoved = true;\r\n }\r\n }\r\n }\r\n const isMovable = () => {\r\n let shape = parent.getParent();\r\n\r\n return (state.isMovable || shape.getState().isPointsMovable);\r\n }\r\n\r\n function setTranslates() {\r\n switch (self.pointDirection) {\r\n case \"lefttop\":\r\n translateX = -10;\r\n translateY = -9;\r\n break;\r\n case \"righttop\":\r\n translateX = 9;\r\n translateY = -9;\r\n break;\r\n case \"rightbottom\":\r\n translateX = 9;\r\n translateY = 10;\r\n break;\r\n case \"leftbottom\":\r\n translateX = -10;\r\n translateY = 10;\r\n break;\r\n default:\r\n translateX = 0;\r\n translateY = 0;\r\n break;\r\n }\r\n }\r\n\r\n const onMouseMove = (mousePos, e) => {\r\n state.mousePos = mousePos;\r\n state.isHovering = this.isOverPointField();\r\n if (e.terminate) {\r\n state.isHovering = false;\r\n return false;\r\n }\r\n\r\n if (state.mouseDown) {\r\n EventManager.setCursor('move', this, true);\r\n if (isMovable()) {\r\n if (shouldResetSlabModePopupOnPointMoveBeDisplayed(this.getGrandParent())) {\r\n renderResetSeamPopup(this.getGrandParent());\r\n } else {\r\n this.movePosition(mousePos);\r\n }\r\n }\r\n }\r\n\r\n if (sqftConfig.highlight.points && state.isHovering) {\r\n EventManager.stealCursor();\r\n EventManager.setCursor('pointer', self);\r\n return true;\r\n } else {\r\n EventManager.resetCursor(self);\r\n }\r\n return false;\r\n }\r\n\r\n const onMouseUp = (mousePos, e) => {\r\n void mousePos;\r\n void e;\r\n state.mouseDown = false;\r\n state.mouseDownPosition = null;\r\n // if (state.isHovering) {\r\n // let shape = parent.getParent();\r\n // if (shape instanceof sqftShape) {\r\n // shape.setIsPointsMovable(false);\r\n // }\r\n // }\r\n }\r\n const canPointBeMoved = () => {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n const isShowSlabTool = reduxState.sqftSlabState.isShowSlabTool;\r\n\r\n // const disallowedNavItems = [\r\n // SIDEBAR_NAVIGATION_BUTTONS.edge,\r\n // SIDEBAR_NAVIGATION_BUTTONS.rotate,\r\n // SIDEBAR_NAVIGATION_BUTTONS.text,\r\n // SIDEBAR_NAVIGATION_BUTTONS.angle,\r\n // SIDEBAR_NAVIGATION_BUTTONS.backsplash,\r\n // SIDEBAR_NAVIGATION_BUTTONS.bumpout,\r\n // SIDEBAR_NAVIGATION_BUTTONS.corners,\r\n // SIDEBAR_NAVIGATION_BUTTONS.radius,\r\n // SIDEBAR_NAVIGATION_BUTTONS.resize,\r\n // SIDEBAR_NAVIGATION_BUTTONS.label,\r\n // SIDEBAR_NAVIGATION_BUTTONS.appliances,\r\n // SIDEBAR_NAVIGATION_BUTTONS.mitered,\r\n // SIDEBAR_BUTTONS_MENU.delete\r\n // ];\r\n\r\n const allowedNavItems = allowedNavItemsForMovingPoint;\r\n\r\n const shape = parent.getParent();\r\n let isLineWithBumpout = false;\r\n let isPrevLineWithBumpout = false;\r\n if (shape instanceof sqftShape) {\r\n const prevLine = shape.getPrevLine(parent);\r\n isLineWithBumpout = this.getParent().isWithBumpout();\r\n isPrevLineWithBumpout = prevLine.isWithBumpout();\r\n }\r\n\r\n return state.canBeMoved\r\n //&& !disallowedNavItems.includes(activeButton) // allow move points only when this button is not active\r\n && allowedNavItems.includes(activeButton) // allow move points only when button is active\r\n && !isShowSlabTool\r\n && !isLineWithBumpout\r\n && !isPrevLineWithBumpout\r\n && !this.isWithAngle()\r\n && !this.isWithCorner()\r\n ;\r\n }\r\n\r\n const onMouseDown = (mousePos, e) => {\r\n void mousePos;\r\n void e;\r\n if (state.isHovering && canPointBeMoved()) {\r\n let shape = parent.getParent();\r\n if (shape instanceof sqftShape) {\r\n shape.setIsPointsMovable(true);\r\n }\r\n state.mouseDown = true;\r\n state.mouseDownPosition = mousePos;\r\n //console.log(\"state.mouseDown\", state.mouseDown);\r\n return true;\r\n }\r\n\r\n if (state.isHovering) {\r\n // Set shape point with mitered edge id\r\n if (parent instanceof MiteredOverlay) {\r\n const miteredPoints = parent.getPoints();\r\n if (this.id === miteredPoints[miteredPoints.length - 1].id || this.id === miteredPoints[0].id) {\r\n const hoveredPoint = workspace.getHoverPoint();\r\n hoveredPoint.addEdgeToPoint();\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n this.addEdgeToPoint = () => {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (activeButton === SIDEBAR_NAVIGATION_BUTTONS.edge) {\r\n const featureId = reduxState.sqftMenuState.activeSubMenuButton;\r\n this.setMiteredFeatureId(featureId);\r\n }\r\n const updateCalculations = reduxState.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n }\r\n\r\n this.movePosition = (mousePos) => {\r\n let scale = workspace.getScale();\r\n let xDiff = (state.mouseDownPosition.x - mousePos.x) / scale;\r\n let yDiff = (state.mouseDownPosition.y - mousePos.y) / scale;\r\n\r\n state.mouseDownPosition.x = mousePos.x;\r\n state.mouseDownPosition.y = mousePos.y;\r\n this.pos.x -= xDiff;\r\n this.pos.y -= yDiff;\r\n this.revertPositionIfHasIntersections(xDiff, yDiff);\r\n setPointWasChangedInRegularMode();\r\n setPointWasMoved();\r\n state.pointWasMoved = true;\r\n }\r\n this.revertPositionIfHasIntersections = (xDiff, yDiff) => {\r\n let shape = parent.getParent();\r\n let isShapeHasIntersections = false;\r\n if (shape instanceof sqftShape) {\r\n isShapeHasIntersections = shape.isShapeHasIntersections();\r\n //console.log(\"isShapeHasIntersections\", isShapeHasIntersections);\r\n if (isShapeHasIntersections) {\r\n this.pos.x += xDiff;\r\n this.pos.y += yDiff;\r\n }\r\n }\r\n }\r\n //private property setters\r\n function setParent(value) { parent = value; }\r\n\r\n //private functions\r\n\r\n //public functions\r\n this.export = () => {\r\n let exportPoint = {};\r\n this.exportAndImportProperties.forEach((property) => {\r\n exportPoint[property] = _.clone(this[property]);\r\n });\r\n return exportPoint;\r\n };\r\n this.import = (importPoint) => {\r\n this.exportAndImportProperties.forEach((property) => {\r\n this[property] = _.clone(importPoint[property]);\r\n });\r\n //compatibility with old visualizer\r\n if (!importPoint[\"pos\"] && importPoint[\"x\"] !== undefined && importPoint[\"y\"] !== undefined ) {\r\n this.pos = { x: _.clone(importPoint[\"x\"]), y: _.clone(importPoint[\"y\"])}\r\n }\r\n };\r\n this.isHovering = function() { return state.isHovering; };\r\n this.getParent = function() { return parent };\r\n this.getGrandParent = () => {\r\n const parent = this.getParent();\r\n if (parent && parent.getParent) {\r\n return parent.getParent();\r\n }\r\n return null\r\n };\r\n this.isOverPointField = () => {\r\n let field = this.getPointField();\r\n\r\n state.isHovering = (\r\n state.mousePos.x >= field.x - this.arcLength - this.angle &&\r\n state.mousePos.x <= field.x + field.width + this.arcLength + this.angle &&\r\n state.mousePos.y >= field.y - this.arcLength - this.angle &&\r\n state.mousePos.y <= field.y + field.height + this.arcLength + this.angle\r\n );\r\n\r\n return state.isHovering;\r\n };\r\n this.getAngle = function () {\r\n return this.angle;\r\n };\r\n this.getArcLength = function () {\r\n return this.arcLength;\r\n };\r\n this.removeAttachedItem = function () {\r\n this.arcLength = 0;\r\n this.angle = 0;\r\n this.setMiteredFeatureId(null);\r\n sqftShapeManager.updateMinMaxMiteredPoints(this.getGrandParent());\r\n //reset seam shape changes in the slab mode\r\n sqftShapeManager.resetShapeChangesInTheSlabMode(this.getGrandParent());\r\n };\r\n this.rotate = (origin, angle, isSlabMode) => {\r\n let ret = {x: 0, y: 0};\r\n let tr = {x: this.x - origin.x, y: this.y - origin.y};\r\n\r\n ret.x = tr.x * Math.cos(angle) - tr.y * Math.sin(angle);\r\n ret.y = tr.x * Math.sin(angle) + tr.y * Math.cos(angle);\r\n\r\n //console.log(\"isSlabMode in point rotation\", isSlabMode)\r\n const xPos = Math.round10(Math.round10(ret.x, -5) + Math.round10(origin.x, -5), -5);\r\n const yPos = Math.round10(Math.round10(ret.y, -5) + Math.round10(origin.y, -5), -5);\r\n isSlabMode ? this.setPosSlab({x: xPos, y: yPos}) : this.setPos({x: xPos, y: yPos});\r\n };\r\n this.getPointDirection =function () {\r\n return this.pointDirection\r\n };\r\n this.changeCornerDirection = function(line1, line2) {\r\n\r\n // console.log('line1', line1);\r\n // console.log('line2', line2);\r\n\r\n if (line1.orientation === \"vertical\" && line1.newDirection === \"north\"\r\n && line2.orientation === \"horizontal\" && line2.newDirection === \"west\") {\r\n this.pointDirection = \"leftbottom\";\r\n }\r\n if (line1.orientation === \"horizontal\" && line1.newDirection === \"east\"\r\n && line2.orientation === \"vertical\" && line2.newDirection === \"north\") {\r\n this.pointDirection = \"lefttop\";\r\n }\r\n if (line1.orientation === \"vertical\" && line1.newDirection === \"south\"\r\n && line2.orientation === \"horizontal\" && line2.newDirection === \"east\") {\r\n this.pointDirection = \"righttop\";\r\n }\r\n if (line1.orientation === \"horizontal\" && line1.newDirection === \"west\"\r\n && line2.orientation === \"vertical\" && line2.newDirection === \"south\") {\r\n this.pointDirection = \"rightbottom\";\r\n }\r\n\r\n if (line1.orientation === \"vertical\" && line1.newDirection === \"north\"\r\n && line2.orientation === \"horizontal\" && line2.newDirection === \"east\") {\r\n this.pointDirection = \"lefttop\";\r\n }\r\n if (line1.orientation === \"horizontal\" && line1.newDirection === \"east\"\r\n && line2.orientation === \"vertical\" && line2.newDirection === \"south\") {\r\n this.pointDirection = \"righttop\";\r\n }\r\n if (line1.orientation === \"vertical\" && line1.newDirection === \"south\"\r\n && line2.orientation === \"horizontal\" && line2.newDirection === \"west\") {\r\n this.pointDirection = \"rightbottom\";\r\n }\r\n if (line1.orientation === \"horizontal\" && line1.newDirection === \"west\"\r\n && line2.orientation === \"vertical\" && line2.newDirection === \"north\") {\r\n this.pointDirection = \"leftbottom\";\r\n }\r\n\r\n };\r\n this.getPointField = (useFieldWidth = true) => {\r\n const isCabinet = isSFTCabinetsGroup();\r\n let fieldWidth = isCabinet ? sqftConfig.fieldWidthCabinet : sqftConfig.fieldWidth,\r\n center = fieldWidth / 2,\r\n scale = workspace.getScale(),\r\n offset = parent.getOffset();\r\n\r\n return {\r\n x: (this.x * scale) + offset.x - (useFieldWidth ? center : 0),\r\n y: (this.y * scale) + offset.y - (useFieldWidth ? center : 0),\r\n height: fieldWidth,\r\n width: fieldWidth\r\n };\r\n };\r\n\r\n this.getPointPosOnWorkspace = (shouldGetRegularPosition) => {\r\n const shp = this.getGrandParent();\r\n let position;\r\n if (shp) {\r\n position = shouldGetRegularPosition && shp.pos ? shp.pos : shp.getPosition();\r\n } else {\r\n position = shouldGetRegularPosition && parent.pos ? parent.pos : parent.getPosition();\r\n }\r\n const x = shouldGetRegularPosition ? +this.pos.x : +this.x;\r\n const y = shouldGetRegularPosition ? +this.pos.y : +this.y;\r\n\r\n return {\r\n x: x + position.x,\r\n y: y + position.y,\r\n };\r\n };\r\n\r\n this.getPointCords = () => {\r\n let pointField = this.getPointField();\r\n\r\n return {\r\n x: pointField.x + pointField.width / 2,\r\n y: pointField.y + pointField.width / 2\r\n }\r\n };\r\n\r\n this.snapToGrid = () => {\r\n /*var pos = snappedPos();\r\n this.x = pos.x;\r\n this.y = pos.y;*/\r\n };\r\n\r\n this.destroy = function(protect) {\r\n if (!protect) {\r\n EventManager.removeEvent(self);\r\n pointRadiusOverlay.destroy();\r\n }\r\n };\r\n\r\n this.init = function(parent) {\r\n setParent(parent);\r\n this.initEvents();\r\n pointRadiusOverlay = new PointRadius();\r\n pointRadiusOverlay.init(self);\r\n };\r\n this.initEvents = () => {\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n onMouseMove,\r\n self,\r\n EventManager.priorities.POINT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n onMouseDown,\r\n self,\r\n EventManager.priorities.POINT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n onMouseUp,\r\n self,\r\n EventManager.priorities.POINT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render,\r\n self,\r\n EventManager.priorities.POINT\r\n );\r\n };\r\n this.deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n };\r\n this.reInitEvents = () => {\r\n this.initEvents();\r\n };\r\n this.deregisterPartEvents = () => {\r\n if (pointRadiusOverlay) {\r\n pointRadiusOverlay.deregisterPartEvents();\r\n }\r\n };\r\n this.reInitPartEvents = () => {\r\n if (pointRadiusOverlay) {\r\n pointRadiusOverlay.reInitPartEvents();\r\n }\r\n };\r\n // check if corner can be applied to another side of the line\r\n this.isFitSize = function () {\r\n if (parent.isLine) {\r\n let fitSize = new FitSize(parent);\r\n\r\n return fitSize.isFitSize(SqftStore.radius.angle || SqftStore.radius.arcLength);\r\n }\r\n return true\r\n };\r\n\r\n this.isWithoutMitered = function () {\r\n return !(this.getParent() ? this.getParent().isWithMitered() : false)\r\n && !(this.getParent() ? this.getParent().isWithMiteredPrev() : false)\r\n };\r\n this.rememberPos = () => {\r\n this.backupX = this.x;\r\n this.backupY = this.y;\r\n }\r\n this.restorePos = () => {\r\n this.x = this.backupX;\r\n this.y = this.backupY;\r\n }\r\n\r\n this.render = (ctx) => {\r\n if (workspace && workspace.getState().loading) {\r\n return\r\n }\r\n\r\n if (isDisabledInPopupShouldBeHidden() && isDisabledInPopupWithParents(this)) {\r\n return\r\n }\r\n\r\n if (this.isHidden()) { return; }\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n const o = parent.getOffset();\r\n let\r\n pointField = self.getPointField(),\r\n scale = sqftConfig.scale,\r\n marginX,\r\n marginY;\r\n\r\n switch (this.pointDirection) {\r\n case \"lefttop\":\r\n marginX = -13;\r\n marginY = -13;\r\n break;\r\n case \"righttop\":\r\n marginX = 5;\r\n marginY = -13;\r\n break;\r\n case \"rightbottom\":\r\n marginX = 5;\r\n marginY = self.pointDiff ? 5 - self.pointDiff : 5;\r\n break;\r\n case \"leftbottom\":\r\n marginX = self.pointDiff ? -13 + self.pointDiff : -13;\r\n marginY = 5;\r\n break;\r\n default:\r\n marginX = 0;\r\n marginY = 0;\r\n break;\r\n }\r\n\r\n let pos = {\r\n x: o.x + (this.x * scale) + marginX,\r\n y: o.y + (this.y * scale) + marginY\r\n };\r\n\r\n let pos2 = {\r\n x: o.x + (this.x * scale),\r\n y: o.y + (this.y * scale)\r\n };\r\n void pos2;\r\n\r\n const shouldHighLightRadius = sqftConfig.highlight.points\r\n && !(this.arcLength > 0 || this.angle > 0)\r\n && !self.angleIsChanged\r\n && this.isFitSize();\r\n\r\n const isNotHighlighted = !(sqftConfig.highlight.points && !(this.arcLength > 0 || this.angle > 0))\r\n || sqftConfig.highlight.points && !this.isFitSize();\r\n\r\n ctx.save();\r\n ctx.beginPath();\r\n\r\n if (this.layout === 'white-circle') {\r\n this.renderCircleLayout(ctx, pointField);\r\n\r\n if (EventManager.getCursor().indexOf(\"delete\") >= 0 && state.isHovering && parent instanceof MiteredOverlay) {\r\n ctx.fillStyle = fillStyleDelete;\r\n } else {\r\n ctx.fillStyle = fillStyleWhite;\r\n }\r\n ctx.fill();\r\n\r\n } else if (this.layout === 'small-white-circle' || state.isHovering && canPointBeMoved()) {\r\n this.renderSmallCircleLayout(ctx, pointField);\r\n\r\n } else if (this.layout === 'black-circle') {\r\n this.renderCircleLayout(ctx, pointField);\r\n ctx.fillStyle = fillStyleBlack;\r\n ctx.fill();\r\n\r\n } else if (this.layout === 'arrow-circle') {\r\n this.renderArrowCircleLayout(ctx, pointField);\r\n\r\n } else if (this.layout === 'blank') {\r\n this.renderBlankLayout(ctx, pos);\r\n\r\n } else if (shouldHighLightRadius) {\r\n this.renderHighlightRadiusLayout(ctx, pointField);\r\n\r\n } else if (sqftConfig.highlight.rotateAngle && this.renderAngleCircle) {\r\n this.renderRotateAngleLayout(ctx, pointField);\r\n\r\n } else {\r\n if (this.getMiteredFeatureId()) {\r\n ctx.fillStyle = fillStyleEdge\r\n } else {\r\n ctx.fillStyle = fillStyle;\r\n }\r\n\r\n if (this.arcLength > 0 || this.angle > 0) {\r\n //this.renderArcLayoutOld(ctx, pointField, pos);\r\n\r\n } else if (isNotHighlighted) {\r\n if (allowedNavItemsForMovingPoint.includes(activeButton)) {\r\n this.renderWhitePointLayout(ctx, pos2);\r\n } else {\r\n // old gray rectangle\r\n //this.renderGrayPointLayoutV2(ctx, pos);\r\n\r\n // gray rectangle version 2\r\n this.renderGrayPointLayoutV2(ctx);\r\n }\r\n }\r\n }\r\n\r\n ctx.closePath();\r\n ctx.restore();\r\n };\r\n\r\n this.renderRotateAngleLayout = (ctx, pointField) => {\r\n //todo fix bumpout rotation and remove this\r\n ////////////////////////////////////////////////\r\n if (!parent.getParent().isWithBumpout()\r\n && !parent.getParent().isWithMitered()\r\n && !parent.getParent().isPointsMoved\r\n && parent.getParent().rotatedDegrees === 0\r\n ) {\r\n ///////////////////////////////////\r\n setTranslates();\r\n ctx.arc(\r\n pointField.x + translateX + pointField.width / 2,\r\n pointField.y + translateY - 2 + pointField.width / 2,\r\n this.renderAngleCircle,\r\n 0,\r\n 2 * Math.PI\r\n );\r\n ctx.closePath();\r\n ctx.lineWidth = 2;\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].active;\r\n ctx.fillStyle = \"rgba(159, 197, 34, 0.25)\";\r\n ctx.fill();\r\n ctx.stroke();\r\n ctx.beginPath();\r\n ctx.arc(pointField.x + 45 / 2 + translateX + 2, pointField.y + 45 / 2 + translateY, this.renderAngleCircle / 2, 0, 2 * Math.PI);\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].active;\r\n ctx.fill();\r\n ctx.closePath();\r\n\r\n if (this.renderAngleArc) {\r\n ctx.beginPath();\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].active;\r\n ctx.arc(\r\n pointField.x + translateX + 4 + pointField.width / 2,\r\n pointField.y + pointField.width / 2,\r\n this.renderAngleArc,\r\n 0,\r\n Math.PI / 2\r\n );\r\n ctx.stroke();\r\n }\r\n }\r\n }\r\n\r\n this.renderHighlightRadiusLayout = (ctx, pointField) => {\r\n //todo hide if override\r\n\r\n setTranslates();\r\n ctx.arc(\r\n pointField.x + translateX + pointField.width / 2,\r\n pointField.y + translateY + pointField.width / 2,\r\n pointField.width / 2,\r\n 0,\r\n 2 * Math.PI\r\n );\r\n ctx.closePath();\r\n ctx.lineWidth = 2;\r\n ctx.strokeStyle = radiusFillStyle;\r\n ctx.stroke();\r\n\r\n ctx.beginPath();\r\n ctx.arc(pointField.x + 45/2 + translateX + 2, pointField.y + 45/2 + translateY, 8, 0, 2 * Math.PI, false);\r\n ctx.fillStyle = radiusFillStyle;\r\n ctx.fill();\r\n }\r\n\r\n this.renderCircleLayout = (ctx, pointField) => {\r\n setTranslates();\r\n ctx.arc(\r\n pointField.x + translateX + pointField.width / 2,\r\n pointField.y + translateY + pointField.width / 2,\r\n 9,\r\n 0,\r\n 2 * Math.PI\r\n );\r\n ctx.closePath();\r\n ctx.lineWidth = 2;\r\n ctx.strokeStyle = fillStyleBlack;\r\n ctx.stroke();\r\n\r\n ctx.beginPath();\r\n ctx.arc(\r\n pointField.x + translateX + pointField.width / 2,\r\n pointField.y + translateY + pointField.width / 2,\r\n 8,\r\n 0,\r\n 2 * Math.PI,\r\n false\r\n );\r\n }\r\n\r\n this.renderSmallCircleLayout = (ctx, pointField) => {\r\n let arcRadius;\r\n ctx.lineWidth = 2;\r\n if (state.isHovering) {\r\n arcRadius = 6\r\n ctx.fillStyle = COLOR.blackLight;\r\n } else {\r\n arcRadius = 5\r\n ctx.fillStyle = COLOR.white;\r\n }\r\n\r\n ctx.arc(\r\n pointField.x + pointField.width / 2,\r\n pointField.y + pointField.width / 2,\r\n arcRadius,\r\n 0,\r\n 2 * Math.PI,\r\n false\r\n );\r\n\r\n ctx.strokeStyle = COLOR_THEMES[config.activeTheme].primary;\r\n\r\n ctx.stroke();\r\n ctx.fill();\r\n }\r\n\r\n this.renderBlankLayout = (ctx, pos) => {\r\n ctx.rect(pos.x, pos.y, 1, 1); // draw simple rectangle\r\n ctx.fill();\r\n }\r\n\r\n this.renderArrowCircleLayout = (ctx, pointField) => {\r\n setTranslates();\r\n\r\n ctx.beginPath();\r\n ctx.arc(\r\n pointField.x + translateX + pointField.width / 2,\r\n pointField.y + translateY + pointField.width / 2,\r\n 10,\r\n 0,\r\n 2 * Math.PI,\r\n false\r\n );\r\n ctx.fillStyle = fillStyleBlue;\r\n ctx.fill();\r\n }\r\n\r\n this.renderGrayPointLayout = (ctx, pos) => {\r\n ctx.rect(pos.x, pos.y, 8, 8); // draw simple rectangle\r\n ctx.fillStyle = 'rgba(205,202,202,0.5)';\r\n ctx.fill();\r\n ctx.closePath();\r\n }\r\n\r\n this.renderArcLayoutOld = (ctx, pointField, pos) => {\r\n console.log('pointField.x', pointField.x);\r\n console.log('pointField.y', pointField.y);\r\n console.log('radius', this.arcLength);\r\n\r\n ctx.beginPath();\r\n ctx.lineWidth = 8;\r\n ctx.strokeStyle = radiusFillStyle;\r\n ctx.strokeStyle = \"#b263a8\";\r\n ctx.moveTo(pointField.x + 15, pointField.y + 45); // P0\r\n ctx.arcTo(pointField.x + 15, pointField.y + 15, pointField.x + 45, pointField.y + 15, 30); // P1, P2 and the radius\r\n ctx.stroke();\r\n console.log('stroked2!');\r\n\r\n ctx.moveTo(pos.x, pos.y);\r\n ctx.arcTo(pos.x, pos.y, pos.x + 15, pos.y + 15, this.arcLength); // draw arc radius\r\n ctx.stroke();\r\n console.log('stroked!');\r\n }\r\n\r\n this.renderGrayPointLayoutV2 = (ctx) => {\r\n ctx.beginPath();\r\n const shape = parent.getParent();\r\n const nextLine = shape.getNextLine(parent);\r\n //const prevLine = shape.getPrevLine(parent);\r\n const angleBetweenTwoLines = getAngleBetween3Points(parent.from, parent.to, nextLine.to);\r\n //console.log(\"angleBetweenTwoLines\", angleBetweenTwoLines);\r\n\r\n void angleBetweenTwoLines;\r\n\r\n const pointOnTheLine = getPointOnTheLine(\r\n parent.to.getPointField(false),\r\n parent.from.getPointField(false),\r\n 15\r\n );\r\n const pointOnTheNextLine = getPointOnTheLine(\r\n nextLine.from.getPointField(false),\r\n nextLine.to.getPointField(false),\r\n 15\r\n );\r\n const midpoint = getMidPoint(pointOnTheLine, pointOnTheNextLine);\r\n let posX = midpoint.x; //o.x + (midpoint.x * scale);\r\n let posY = midpoint.y; //o.y + (midpoint.y * scale);\r\n void posX;\r\n void posY;\r\n\r\n ctx.rect(\r\n posX - 4,\r\n posY - 4,\r\n 8, 8\r\n ); // draw simple rectangle\r\n ctx.fillStyle = 'rgba(205,202,202,0.5)';\r\n ctx.fill();\r\n }\r\n\r\n this.renderWhitePointLayout = (ctx, pos2) => {\r\n ctx.arc(\r\n pos2.x,\r\n pos2.y,\r\n 5,\r\n 0,\r\n 2 * Math.PI\r\n );\r\n ctx.fillStyle = 'rgb(255,255,255)';\r\n ctx.fill();\r\n ctx.lineWidth = 2;\r\n ctx.strokeStyle = fillStyleBlue;\r\n ctx.stroke();\r\n }\r\n}\r\n","import workspace from \"../../core/workspace\";\r\n\r\nexport class SQFTResourceController {\r\n resourceName = null\r\n\r\n constructor(resourceName) {\r\n this.resourceName = resourceName\r\n }\r\n\r\n getResources() {\r\n return workspace[this.resourceName];\r\n }\r\n\r\n addResource(resource) {\r\n workspace[this.resourceName].push(resource);\r\n\r\n return workspace[this.resourceName];\r\n }\r\n\r\n destroyResource(resource) {\r\n const index = workspace[this.resourceName].indexOf(resource);\r\n if (index > -1) {\r\n resource.destroy();\r\n workspace[this.resourceName].splice(index, 1);\r\n }\r\n\r\n return workspace[this.resourceName];\r\n }\r\n\r\n removeResource = (resource) => {\r\n const index = workspace[this.resourceName].indexOf(resource);\r\n if (index > -1) {\r\n workspace[this.resourceName].splice(index, 1);\r\n }\r\n\r\n return workspace[this.resourceName];\r\n };\r\n\r\n getResourceById(searchedId) {\r\n return workspace[this.resourceName].find(resource => resource.id === searchedId);\r\n }\r\n\r\n removeAllResources() {\r\n for (let resource of workspace[this.resourceName]) {\r\n resource.destroy()\r\n }\r\n workspace[this.resourceName] = [];\r\n }\r\n\r\n exportData() {\r\n const exportedData = [];\r\n for (let resource of workspace[this.resourceName]) {\r\n exportedData.push(resource.export ? resource.export() : resource);\r\n }\r\n return exportedData\r\n }\r\n\r\n importData(data) {\r\n workspace[this.resourceName] = [];\r\n for (let resource of data) {\r\n workspace[this.resourceName].push(resource.import ? resource.import() : resource);\r\n }\r\n }\r\n}\r\n\r\n","import SlabWorkspace from \"../core/slab/slabWorkspace\";\r\nimport workspace from \"../core/workspace\";\r\nimport {SHAPE_PART_ID} from \"../../../constants\";\r\nimport SQFTShapeOffset from \"../core/shapes/sqftShapeOffset\";\r\nimport sqftShape from \"../core/shapes/sqftShape\";\r\nimport createEventManager from \"./subscriptionEventManager\";\r\n\r\nconst eventManager = createEventManager();\r\n\r\nconst sqftSlabManager = {\r\n ...eventManager,\r\n\r\n centerButton: {\r\n width: 10,\r\n height: 9,\r\n },\r\n\r\n importSlabBacksplashes: (values) => {\r\n SlabWorkspace.slabAdditionalShapes.resetBacksplashes();\r\n SlabWorkspace.slabAdditionalShapes.importData(values);\r\n },\r\n removeAllSlabBacksplashes: (values) => {\r\n SlabWorkspace.slabAdditionalShapes.resetBacksplashes(values);\r\n },\r\n deleteSlabBacksplashByLine: (line) => {\r\n SlabWorkspace.slabAdditionalShapes.removeActiveBacksplashByLine(line);\r\n },\r\n getSlabPlaceHolderShapes: () => {\r\n return workspace.getShapes().filter(shp => shp.partId === SHAPE_PART_ID.slabPlaceHolder);\r\n },\r\n deleteShapeOffset: () => {\r\n if (SlabWorkspace.shapeOffset) {\r\n SlabWorkspace.shapeOffset.delete()\r\n }\r\n SlabWorkspace.shapeOffset = null\r\n },\r\n hideShapeOffset: () => {\r\n if (SlabWorkspace.shapeOffset) {\r\n SlabWorkspace.shapeOffset.deregisterEvents();\r\n }\r\n },\r\n reInitShapeOffset: () => {\r\n if (SlabWorkspace.shapeOffset) {\r\n SlabWorkspace.shapeOffset.reInitEvents();\r\n }\r\n },\r\n initShapeOffset: function (shape) {\r\n const shapes = workspace.getShapes();\r\n if (shape instanceof sqftShape) {\r\n if (SlabWorkspace.shapeOffset === null) {\r\n SlabWorkspace.shapeOffset = new SQFTShapeOffset(shapes[0]);\r\n SlabWorkspace.shapeOffset.init();\r\n SlabWorkspace.shapeOffset.setParent(shape);\r\n this.emit('shapeOffsetChanged', SlabWorkspace.shapeOffset);\r\n } else {\r\n SlabWorkspace.shapeOffset.animateShapeTransition(\r\n shape,\r\n () => {this.emit('shapeOffsetChanged', SlabWorkspace.shapeOffset)}\r\n );\r\n }\r\n\r\n }\r\n }\r\n}\r\n\r\nexport default sqftSlabManager\r\n","import {baseNewImagesPath} from \"../assets\";\r\n\r\nexport const iconPlusGreen = `${baseNewImagesPath}images/sqft-icons/cursors/plus_green.png`;\r\nexport const iconPlusBlack = `${baseNewImagesPath}images/sqft-icons/cursors/plus_black.png`;\r\nexport const iconPlusBlue = `${baseNewImagesPath}images/sqft-icons/cursors/plus_blue.png`;\r\nexport const iconplusPurple = `${baseNewImagesPath}images/sqft-icons/cursors/plus_purple.png`;\r\nexport const objectFlipVertical = `${baseNewImagesPath}images/sqft-icons/cursors/object_flip_vertical.png`;\r\nexport const objectFlipHorizontal = `${baseNewImagesPath}images/sqft-icons/cursors/object_flip_horizontal.png`;\r\nexport const iconGreenPlus32 = `${baseNewImagesPath}images/sqft-icons/icon-green-plus-32.png`;\r\nexport const iconGreenClip = `${baseNewImagesPath}images/greenclip.svg`;\r\nexport const iconHeight = `${baseNewImagesPath}images/sqft-icons/icon-height.svg`;\r\nexport const iconLength = `${baseNewImagesPath}images/sqft-icons/icon-length.svg`;\r\nexport const iconLink = `${baseNewImagesPath}images/sqft-icons/icon-link.svg`;\r\nexport const iconThickness = `${baseNewImagesPath}images/sqft-icons/icon-thickness.svg`;\r\nexport const iconEyeball = `${baseNewImagesPath}images/sqft-icons/icon-eyeball.svg`;\r\nexport const iconCursorPointer = `${baseNewImagesPath}images/sqft-icons/cursors/pointer.svg`;\r\nexport const iconLibrary = `${baseNewImagesPath}images/sqft-icons/icon-length.svg`;\r\nexport const iconUpload = `${baseNewImagesPath}images/sqft-icons/icon-upload.svg`;\r\nexport const iconImage = `${baseNewImagesPath}images/sqft-icons/icon-image.svg`;\r\n\r\n","import * as types from \"./actionTypes\";\r\n\r\nexport const showSlabTool = (isShowSlabTool) => ({\r\n type: types.SHOW_SLAB_TOOL,\r\n payload: {isShowSlabTool}\r\n});\r\n\r\nexport const setActiveSlabId = (activeSlabId) => ({\r\n type: types.SET_ACTIVE_SLAB_ID,\r\n payload: {activeSlabId}\r\n});\r\n\r\nexport const setActiveSlabUrl = (activeSlabUrl) => ({\r\n type: types.SET_ACTIVE_SLAB_URL,\r\n payload: {activeSlabUrl}\r\n});\r\n\r\nexport const setActiveStep = (activeStep) => ({\r\n type: types.SET_SQFT_SLAB_ACTIVE_STEP,\r\n payload: {activeStep}\r\n});\r\n\r\nexport const setSlabSearchText = (searchText) => ({\r\n type: types.SET_SQFT_SLAB_SEARCH_TEXT,\r\n payload: {searchText}\r\n});\r\n\r\nexport const setSlabAspectRatio = (slabAspectRatio) => ({\r\n type: types.SET_SQFT_SLAB_ASPECT_RATIO,\r\n payload: {slabAspectRatio}\r\n});\r\n\r\nexport const setSlabImageType = (slabImageType) => ({\r\n type: types.SET_SLAB_IMAGE_TYPE,\r\n payload: {slabImageType}\r\n});\r\n\r\nexport const setSlabImageWidth = (slabImageWidth) => ({\r\n type: types.SET_SQFT_SLAB_IMAGE_WIDTH,\r\n payload: {slabImageWidth}\r\n});\r\n\r\nexport const setSlabImageHeight = (slabImageHeight) => ({\r\n type: types.SET_SQFT_SLAB_IMAGE_HEIGHT,\r\n payload: {slabImageHeight}\r\n});\r\n\r\nexport const setCropperData = (cropperData) => ({\r\n type: types.SET_SQFT_SLAB_CROPPER_DATA,\r\n payload: {cropperData}\r\n});\r\n\r\nexport const setSqftCroppedSlabImages = (croppedSlabImages) => ({\r\n type: types.SET_SQFT_CROPPED_SLAB_IMAGES,\r\n payload: {croppedSlabImages}\r\n});\r\n\r\nexport const addSqftCroppedSlabImage = (croppedSlabImage) => ({\r\n type: types.ADD_SQFT_CROPPED_SLAB_IMAGE,\r\n payload: croppedSlabImage\r\n});\r\n\r\nexport const setSqftSlabToolVisited = (isSlabToolVisited) => ({\r\n type: types.SET_SLAB_TOOL_VISITED,\r\n payload: {isSlabToolVisited}\r\n});\r\n\r\nexport const addRoomWithVisitedSlabTool = (qtCatName) => ({\r\n type: types.ADD_ROOM_WITH_VISITED_SLAB_TOOL,\r\n payload: qtCatName\r\n});\r\n\r\nexport const deleteCroppedSlabImage = (id) => ({\r\n type: types.DELETE_CROPPED_SLAB_IMAGE,\r\n payload: {id}\r\n});\r\n\r\nexport const setPricePerArea = (pricePerArea) => ({\r\n type: types.SET_PRICE_PER_AREA,\r\n payload: {pricePerArea}\r\n});\r\n\r\nexport const setMeasurementVisibleInSlabMode = (isMeasurementVisibleInSlabMode) => ({\r\n type: types.SET_IS_MEASUREMENT_VISIBLE_IN_SLAB_MODE,\r\n payload: {isMeasurementVisibleInSlabMode}\r\n});\r\n\r\nexport const setIsSizeValidationFailed = (isSizeValidationFailed) => ({\r\n type: types.SET_IS_SIZE_VALIDATION_FAILED,\r\n payload: {isSizeValidationFailed}\r\n});\r\n\r\nexport const setIsSlabPricingEnabled = (isSlabPricingEnabled) => ({\r\n type: types.SET_IS_SLAB_PRICING_ENABLED,\r\n payload: {isSlabPricingEnabled}\r\n});\r\n","import {Part} from \"../part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {LayoutType, ShowerComboTubType} from \"../constants\";\r\nimport { showerTubComboThumbnail, custom60in30X8Shower } from '../../../bvComponent/core/assets';\r\n\r\nimport BathTubLiner from \"../subparts/showerTubCombo/bathtubLiner\";\r\nimport ReplacementTub from \"../subparts/showerTubCombo/replacementTub\";\r\nimport WalkInTub from \"../subparts/showerTubCombo/walkInTub\";\r\nimport JettedTub from \"../subparts/showerTubCombo/jettedTub\";\r\nimport WallConfiguration from \"../subparts/showerTubCombo/wallConfiguration\";\r\nimport {fixDbFeatureProperties} from \"../../../../misc/helpers\";\r\nimport WalkInTubFixture from \"../subparts/showerTubCombo/walkInTubFixture\";\r\nimport ReplacementTubFixture from \"../subparts/showerTubCombo/replacementTubFixture\";\r\n\r\nexport class ShowerTubCombo extends Part {\r\n static id = 'Shower Tub Combo';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.showerTubComboIsActive = false; // param needed to check if shower is still active or not\r\n this.menuType = PartMenuType.Complex;\r\n this.partThumbnail = showerTubComboThumbnail;\r\n this.partName = 'Shower Tub Combo';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo\";\r\n this.relatedItems = [];\r\n this.wallConfiguration = null;\r\n this.bathTubLiner = null;\r\n this.replacementTub = null;\r\n this.replacementTubFixture = null;\r\n this.walkInTub = null;\r\n this.jettedTub = null;\r\n\r\n // Kohler hardcode, they don't have bathtub_liner\r\n this.bottomTub = ShowerComboTubType.replacement_tub;\r\n this.leftShowerWallType = 'Pony';\r\n this.showerComboSize = '60in';\r\n this.relatedGroupNames = [\"Bathtub Liner\", \"Replacement Tub\", \"Walk In Tub\", \"Jetted Tub\", \"Replacement tub Fixture\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Bathtub Liner\":\r\n relatedItemName = \"bathTubLiner\";\r\n RelatedItemClass = BathTubLiner;\r\n break;\r\n case \"Replacement Tub\":\r\n relatedItemName = \"replacementTub\";\r\n RelatedItemClass = ReplacementTub;\r\n break;\r\n case \"Walk In Tub Fixture\":\r\n relatedItemName = \"walkInTubFixture\";\r\n RelatedItemClass = WalkInTubFixture;\r\n break;\r\n case \"Replacement tub Fixture\":\r\n case \"Replacement Tub Fixture\":\r\n relatedItemName = \"replacementTubFixture\";\r\n RelatedItemClass = ReplacementTubFixture;\r\n break;\r\n case \"Walk In Tub\":\r\n case \"Walk in Tub\":\r\n relatedItemName = \"walkInTub\";\r\n RelatedItemClass = WalkInTub;\r\n break;\r\n case \"Jetted Tub\":\r\n relatedItemName = \"jettedTub\";\r\n RelatedItemClass = JettedTub;\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n setSpecificRules() {\r\n if (!this.wallConfiguration) {\r\n this.wallConfiguration = new WallConfiguration(true);\r\n this.wallConfiguration.counts = {\r\n allLayoutFeaturesCount: 0,\r\n largeLayoutFeaturesCount: 0,\r\n smallLayoutFeaturesCount: 0\r\n };\r\n this.relatedItems.unshift(this.wallConfiguration);\r\n this.wallConfiguration.getParent = () => this;\r\n }\r\n const wallConfigurations = [\r\n // ShowerTubCombo.createCustomWallConfiguration(\r\n // custom60inPonyShower,\r\n // \"Pony Wall 60in\",\r\n // \"Pony\",\r\n // \"60in\",\r\n // {\r\n // \"ShowerSize\": ['60in'],\r\n // \"CountertopSize\": [\"20in\", \"24in\", \"30in\", \"36in\", \"48in\", \"60in\", \"72in\"],\r\n // },\r\n // this,\r\n // 100000\r\n // ),\r\n ShowerTubCombo.createCustomWallConfiguration(\r\n custom60in30X8Shower,\r\n \"Full Wall 60in\",\r\n \"30X8\",\r\n \"60in\",\r\n {\r\n \"ShowerSize\": ['60in'],\r\n \"CountertopSize\": [\"20in\", \"24in\", \"30in\", \"36in\", \"48in\", \"60in\", \"72in\"],\r\n },\r\n this,\r\n 100001\r\n ),\r\n ];\r\n Object.keys(LayoutType).forEach(layoutType => {\r\n this.wallConfiguration.featuresList[layoutType] = wallConfigurations;\r\n if (this.wallConfiguration.counts) {\r\n this.wallConfiguration.counts[layoutType.toLowerCase() + \"LayoutFeaturesCount\"]++;\r\n }\r\n });\r\n }\r\n\r\n static createCustomWallConfiguration(customThumbnail, name, leftShowerWallType, showerComboSize, metaData, parent, id) {\r\n const conf = new WallConfiguration();\r\n conf.partName = name;\r\n conf.showerBodyId = name.toLowerCase().replace(/ /gi, \"-\");\r\n conf.dbFeature = {};\r\n conf.featureName = name;\r\n conf.groupName = \"Wall Configuration\";\r\n conf.showerComboSize = showerComboSize;\r\n // conf.parent = parent;\r\n conf.getParent = () => parent.wallConfiguration;\r\n conf.metaData = metaData;\r\n conf.leftShowerWallType = leftShowerWallType;\r\n conf.customThumbnail = customThumbnail;\r\n conf.dbFeature = fixDbFeatureProperties({\r\n metaData,\r\n id,\r\n unlocked: true\r\n });\r\n return conf;\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n\r\n if (!this.showerTubComboIsActive) {\r\n return null\r\n }\r\n\r\n return super.setLayers(layout, placeholdersNeeded)\r\n }\r\n\r\n subParts() {\r\n\r\n let subParts = [\r\n ...this.getRelatedItems().filter(item => item.visible).map(_ => new DesignNavigationItem(_.partName, _)),\r\n ...this.layout.parts.Shower.subParts().filter(subPart => {\r\n return (subPart.text === \"Fixture\")\r\n || (subPart.text === \"Shower Head\")\r\n || (subPart.text === \"Shower Walls\")\r\n || (subPart.text === \"Shower Walls Accent\")\r\n || (subPart.text === \"Shower Door\")\r\n || (subPart.text === \"Handle\")\r\n || (subPart.text === \"Pony Wall\")\r\n || (subPart.text === \"Pony Wall Cap\")\r\n || (subPart.text === \"Pony Wall Glass\")\r\n })\r\n ];\r\n\r\n if (this.bottomTub === ShowerComboTubType.walk_in_tub) {\r\n subParts = subParts.filter(subPart => {\r\n return subPart.part.partId !== \"shower_door\" && subPart.part.partId !== \"shower_door_handle\" && subPart.part.partId !== \"shower_fixture\"\r\n })\r\n }\r\n\r\n return subParts\r\n }\r\n\r\n getShowerRelatedItems() {\r\n return this.layout.parts.Shower.getRelatedItems().filter(relItem => {\r\n return (relItem.partId === \"shower_fixture\")\r\n || (relItem.partId === \"shower_head\")\r\n || (relItem.partId === \"shower_wall\")\r\n || (relItem.partId === \"shower_wall_accent\")\r\n || (relItem.partId === \"shower_door\")\r\n || (relItem.partId === \"shower_door_handle\")\r\n || (relItem.partId === \"pony_wall\")\r\n || (relItem.partId === \"pony_wall_cap\")\r\n || (relItem.partId === \"pony_wall_glass\")\r\n })\r\n }\r\n\r\n setShowerTubCombo() {\r\n this.showerTubComboIsActive = true;\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false\r\n }\r\n\r\n handleSubPartClick() {}\r\n\r\n setZIndex(zIndexes) {\r\n if (!this.showerTubComboIsActive) {\r\n return null\r\n }\r\n\r\n if(zIndexes)\r\n this.relatedItems.forEach(_ => _.setZIndex(zIndexes));\r\n }\r\n\r\n setActiveTub(bottomTub) {\r\n this.bottomTub = bottomTub;\r\n }\r\n\r\n showerSize() {\r\n return this.showerComboSize\r\n }\r\n\r\n showerDimensions() {\r\n return this.leftShowerWallType\r\n }\r\n\r\n setShowerSize(leftShowerWallType, showerComboSize) {\r\n this.leftShowerWallType = leftShowerWallType;\r\n this.showerComboSize = showerComboSize;\r\n }\r\n\r\n}\r\n","import {PartMenuType} from \"../../visComponents/constants\";\r\nimport {iCmp} from \"../../../misc/utils\";\r\nimport Layer from \"../../visComponents/layer\";\r\nimport {LayoutType, METADATA} from \"./constants\";\r\nimport PartCommon from \"../../visComponents/partCommon\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\n\r\nexport class Part extends PartCommon {\r\n\r\n constructor(isParent, isChild, menuType) {\r\n super();\r\n if (isChild || (isParent && menuType === PartMenuType.Simple)) {\r\n this.featuresList = {};\r\n this.featuresPartsList = {};\r\n this.modulePartsList = {};\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this.featuresList[layoutName] = [];\r\n this.featuresPartsList[layoutName] = [];\r\n this.modulePartsList[layoutName] = [];\r\n });\r\n this.allFeaturesReceived = false;\r\n this.realFeaturesReceived = false; // this prop is need on Scroll (if features count more that 1000)\r\n this.nextFeaturesPageToLoad = 0;\r\n this.activeFeature = null;\r\n this.placeholderFeature = null;\r\n this.shadowFeature = null;\r\n this.placeholderChanged = false;\r\n this.firstClick = {\r\n \"0\": false\r\n };\r\n this.activeLockedFeature = null;\r\n this.activeNotInVisualizerFeature = null; // is needed to display in the QT selected activeNotInVisualizerFeature, but render proper activeFeature layer(for example, countertop)\r\n // name = \"\";\r\n this.visible = true;\r\n this.categoryEnabled = false;\r\n this.layout = null;\r\n this.featureGroupVisible = true; // dashboard's feature group eye ball logic\r\n this.featureGroupEnabled = true; // dashboard's feature group checkbox logic\r\n this.selectedFeaturesHistory = []; // array of strings(names). updated every time item is selected\r\n this.filtersReceived = null; // array of filters values, comes from BE, for ex [1221, 347, 1124]\r\n }\r\n if (isParent) {\r\n this.partThumbnail = '';\r\n this.relatedItems = [];\r\n }\r\n if (!isChild && !isParent) {\r\n this.dbFeature = null;\r\n this.layer = new Layer(\"kv\");\r\n this._customDisplayName = null;\r\n this.notesList = {};\r\n }\r\n this.partName = \"\";\r\n }\r\n\r\n set features(featuresList) {\r\n // features can't be set directly, we need to change featuresList array\r\n }\r\n get features() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresList[layout.getCurrentLayoutName()]\r\n }\r\n set featuresParts(featuresList) {\r\n // featuresParts can't be set directly, we need to change featuresPartsList array\r\n }\r\n get featuresParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresPartsList[layout.getCurrentLayoutName()]\r\n }\r\n get moduleParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.modulePartsList[layout.getCurrentLayoutName()]\r\n }\r\n\r\n /**\r\n * Checks whether a given for condition matches the needed value (or array of values)\r\n * @param name {string}\r\n * @param value {string || array}\r\n * @returns {boolean}\r\n */\r\n matchesMetaForCondition(name, value) {\r\n if (!this.metaData[name]) {\r\n return false\r\n }\r\n if (Array.isArray(this.metaData[name])) {\r\n return this.metaData[name].some(condValue => {\r\n return condValue === METADATA.ALL || (Array.isArray(value) ? value.some(val => iCmp(condValue, val)) : iCmp(condValue, value))\r\n });\r\n }\r\n return this.metaData[name] === METADATA.ALL\r\n || (Array.isArray(value) ? value.some(val => iCmp(this.metaData[name], val)) : iCmp(this.metaData[name], value))\r\n }\r\n\r\n matchesMetaForArrayOfConditions(arrayOfConditions) {\r\n return arrayOfConditions.every((condition) => {\r\n return this.matchesMetaForCondition(condition.propName, condition.propValue);\r\n })\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem(this.partName, this);\r\n }\r\n}\r\n\r\n\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {applianceThumbnail} from \"../assets\";\r\n\r\nimport Dishwasher from \"../subparts/appliances/dishwasher\";\r\nimport Fridge from \"../subparts/appliances/fridge\";\r\nimport Hood from \"../subparts/appliances/hood\";\r\nimport Microwave from \"../subparts/appliances/microwave\";\r\nimport Range from \"../subparts/appliances/range\";\r\nimport Oven from \"../subparts/appliances/oven\";\r\nimport Stove from \"../subparts/appliances/stove\";\r\nimport FridgeEnclosure from \"../subparts/appliances/fridgeEnclosure\";\r\nimport FridgeEnclosureHandle from \"../subparts/appliances/fridgeEnclosureHandle\";\r\nimport Stovetop from \"../subparts/appliances/stovetop\";\r\n\r\nexport default class Appliance extends Part {\r\n static id = 'Appliances';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Appliances';\r\n this.partThumbnail = applianceThumbnail;\r\n this.partThumbnailSize = \"70%\";\r\n this.translateId = \"visualizer.kitchen.appliance\";\r\n\r\n // related items\r\n this.dishwasher = null;\r\n this.fridge = null;\r\n this.hood = null;\r\n this.microwave = null;\r\n this.range = null;\r\n this.stove = null;\r\n this.stovetop = null;\r\n this.fridgeEnclosure = null;\r\n this.fridgeEnclosureHandle = null;\r\n this.oven = null;\r\n this.relatedGroupNames = [\"Dishwasher\", \"Fridge\", \"Fridge Enclosure\", \"Hood\", \"Microwave\", \"Range\", \"Stove\",\r\n \"Stovetop\", \"Oven\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Dishwasher\":\r\n relatedItemName = \"dishwasher\";\r\n RelatedItemClass = Dishwasher;\r\n break;\r\n case \"Fridge\":\r\n relatedItemName = \"fridge\";\r\n RelatedItemClass = Fridge;\r\n break;\r\n case \"Fridge Enclosure Handle\":\r\n relatedItemName = \"fridgeEnclosureHandle\";\r\n RelatedItemClass = FridgeEnclosureHandle;\r\n break;\r\n case \"Fridge Enclosure\":\r\n relatedItemName = \"fridgeEnclosure\";\r\n RelatedItemClass = FridgeEnclosure;\r\n break;\r\n case \"Hood\":\r\n relatedItemName = \"hood\";\r\n RelatedItemClass = Hood;\r\n break;\r\n case \"Microwave\":\r\n relatedItemName = \"microwave\";\r\n RelatedItemClass = Microwave;\r\n break;\r\n case \"Range\":\r\n relatedItemName = \"range\";\r\n RelatedItemClass = Range;\r\n break;\r\n case \"Stove\":\r\n relatedItemName = \"stove\";\r\n RelatedItemClass = Stove;\r\n break;\r\n case \"StoveTop\":\r\n case \"Stovetop\":\r\n relatedItemName = \"stovetop\";\r\n RelatedItemClass = Stovetop;\r\n break;\r\n case \"Oven\":\r\n relatedItemName = \"oven\";\r\n RelatedItemClass = Oven;\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import workspace from \"../workspace\";\r\nimport {v4 as uuidv4} from \"uuid\";\r\nimport store from \"../../../../../../store\";\r\nimport {addResource, changeResource} from \"../../../../../../actions/sqftResourceFunctions\";\r\nimport {getEdgeFeatures} from \"../../../../helpers/shapeHelper\";\r\nimport {getBacksplashArea, getEdgeArea, getEdgeLength} from \"../../../../helpers/sqftHelper\";\r\nimport {RESOURCE_ATTACHED_TO_TYPE, RESOURCE_TYPE} from \"../../../../constants\";\r\nimport {setSQFTPopup} from \"../../../../../../actions/sqftMenuFunctions\";\r\nimport {getQtCatName} from \"../../../../helpers/sqftQuotesHelper\";\r\nimport sqftConfig from \"../../store/sqftConfig\";\r\n\r\n/**\r\n * Prepare and attach resourceType(edge, backsplash, bumpout, mitered) to the line or lineCorner\r\n * @param {*} seg\r\n * @param {*} segCorner\r\n * @param {*} resourceType\r\n * @param {number} featureId\r\n * @param {string} partId\r\n * @param {*} featureName\r\n * @param height\r\n * @param {string} resourceId\r\n * @param qtCatName\r\n * @param {boolean} addResourceToStore\r\n * @param {boolean} shouldShowEyeBall\r\n */\r\nexport const attachResource = (\r\n seg,\r\n segCorner,\r\n resourceType,\r\n featureId,\r\n partId,\r\n featureName,\r\n height = 0,\r\n resourceId = null,\r\n qtCatName = null,\r\n addResourceToStore = true,\r\n shouldShowEyeBall = true,\r\n) => {\r\n const attachedToHovered = segCorner || seg;\r\n const attachedToExisting = workspace.getAttachedTo(attachedToHovered);\r\n const attachedToResource = prepareResource(seg, segCorner, resourceType, featureId, partId, featureName, resourceId, qtCatName, height, shouldShowEyeBall);\r\n\r\n attachResourceToLine(seg, segCorner, resourceType, featureId, partId, featureName, height, shouldShowEyeBall);\r\n\r\n if (addResourceToStore) {\r\n createAttachedResourceInStore(attachedToExisting, attachedToResource);\r\n }\r\n\r\n closeSQFTPopup();\r\n}\r\n\r\nconst createAttachedResourceInStore = (shouldChangeExisting, attachedToResource) => {\r\n const action = shouldChangeExisting ? changeResource : addResource;\r\n store.dispatch(action(RESOURCE_TYPE.attachedToLine, attachedToResource));\r\n}\r\n\r\nconst attachResourceToLine = (seg, segCorner, resourceType, featureId, partId, featureName, height) => {\r\n let historyCallBack = () => {};\r\n let newSection;\r\n\r\n const resourceActionMap = {\r\n 'edge': (segCorner) ? segCorner.addEdgeToCornerLine.bind(this, featureName, featureId) : seg.addEdgeToLine.bind(this, featureName, featureId),\r\n 'backsplash': (segCorner) ? segCorner.addBacksplashToCornerLine.bind(this, featureName, resourceType, featureId, height) : seg.addBacksplashToLine.bind(this, featureName, resourceType, featureId, height),\r\n [RESOURCE_ATTACHED_TO_TYPE.bumpout]: () => {\r\n if (seg && !seg.isWithBumpout()) seg.addBumpoutToLine();\r\n },\r\n [RESOURCE_ATTACHED_TO_TYPE.mitered]: () => {\r\n if (seg && !seg.isWithMitered()) {\r\n newSection = seg.addMiteredToLine();\r\n if (newSection) workspace.miteredController.addSection(newSection);\r\n }\r\n if (segCorner && !segCorner.isWithMitered()) {\r\n newSection = segCorner.addMiteredToCornerLine();\r\n if (newSection) workspace.miteredController.addSection(newSection);\r\n }\r\n },\r\n [RESOURCE_ATTACHED_TO_TYPE.underlayment]: () => {\r\n if (seg && !seg.isWithMitered()) {\r\n newSection = seg.addUnderlaymentToLine();\r\n if (newSection) workspace.underlaymentController.addSection(newSection);\r\n }\r\n },\r\n [RESOURCE_ATTACHED_TO_TYPE.crown_molding]: () => seg.addCrownMoldingToLine(featureName, featureId),\r\n [RESOURCE_ATTACHED_TO_TYPE.end_cap]: () => seg.addEndCapToLine(featureName, featureId),\r\n };\r\n\r\n if (resourceActionMap[resourceType]) {\r\n historyCallBack = resourceActionMap[resourceType];\r\n }\r\n\r\n historyCallBack();\r\n}\r\n\r\nexport const closeSQFTPopup = () => {\r\n const state = store.getState();\r\n const isSQFTPopupOpened = state.sqftMenuState.sqftPopup.isOpened;\r\n\r\n if (isSQFTPopupOpened) {\r\n store.dispatch(setSQFTPopup({\r\n title: workspace.intl.formatMessage({ id: \"sqft.popup.title.systemMessage\" }),\r\n content: '',\r\n isOpened: false,\r\n confirmCallback: () => {},\r\n confirmText: '',\r\n cancelCallback: () => {},\r\n cancelText: ''\r\n }));\r\n }\r\n}\r\n\r\nconst prepareResource = (seg, segCorner, resourceType, featureId, partId, featureName, resourceId, qtCatName, height, shouldShowEyeBall = true) => {\r\n const attachedToHovered = segCorner || seg;\r\n const id = resourceId || (attachedToHovered && attachedToHovered.id) || uuidv4();\r\n\r\n let attachedToParentId = null;\r\n if (attachedToHovered && attachedToHovered.getParent) {\r\n const parent = attachedToHovered.getParent();\r\n attachedToParentId = parent ? parent.id : null;\r\n }\r\n\r\n return {\r\n id,\r\n type: resourceType,\r\n featureId,\r\n name: featureName,\r\n attachedToId: attachedToHovered ? attachedToHovered.id : null,\r\n partId,\r\n part: segCorner ? 'lineCorner' : 'line',\r\n attachedToParentId,\r\n isDisabledInPopup: attachedToHovered ? attachedToHovered.isDisabledInPopup : null,\r\n qtCatName: qtCatName || getQtCatName(),\r\n shouldShowEyeBall,\r\n height,\r\n\r\n export() {\r\n let length = 0, realLength = 0, lineLength = 0, area = 0;\r\n const line = workspace.getLineOrCornerLineById(this.attachedToId);\r\n\r\n if (line) {\r\n switch (resourceType) {\r\n case RESOURCE_ATTACHED_TO_TYPE.edge: {\r\n const navItems = getEdgeFeatures();\r\n const navItem = navItems.find(edge => edge.part.dbFeature.id === this.featureId);\r\n const feature = navItem ? navItem.part : null;\r\n const unit = feature ? feature.dbFeature.unit : null;\r\n length = (unit && unit.toLowerCase() === \"each\") ? 1 : getEdgeLength(line);\r\n realLength = getEdgeLength(line);\r\n lineLength = sqftConfig.measureUnit === \"Imperial\" ? line.getLineLength() : line.getLineLengthMm();\r\n area = getEdgeArea(line, lineLength, featureId);\r\n break;\r\n }\r\n case RESOURCE_ATTACHED_TO_TYPE.backsplash:\r\n length = getBacksplashArea(line.getBacksplashHeight(), line);\r\n break;\r\n default:\r\n length = realLength = getEdgeLength(line);\r\n break;\r\n }\r\n return { ...this, length, realLength, lineLength, area };\r\n }\r\n\r\n return {};\r\n }\r\n };\r\n};\r\n\r\n","import * as types from \"./actionTypes\";\r\n\r\nexport const setResources = (resourceType, resources) => ({\r\n type: types.SET_RESOURCES,\r\n payload: {resourceType, resources}\r\n});\r\n\r\nexport const addResource = (resourceType, resource) => ({\r\n type: types.ADD_RESOURCE,\r\n payload: {resourceType, resource}\r\n});\r\n\r\nexport const changeResource = (resourceType, resource) => ({\r\n type: types.CHANGE_RESOURCE,\r\n payload: {resourceType, resource}\r\n});\r\n\r\nexport const deleteResource = (resourceType, id) => ({\r\n type: types.DELETE_RESOURCE,\r\n payload: {resourceType, id}\r\n});\r\n\r\nexport const deleteResourceAttachedTo = (resourceType, attachedTo) => ({\r\n type: types.DELETE_RESOURCE_ATTACHED_TO,\r\n payload: {resourceType, attachedTo}\r\n});\r\n\r\nexport const deleteAllResources = () => ({\r\n type: types.DELETE_ALL_RESOURCES,\r\n payload: {}\r\n});\r\n\r\nexport const setSelectedFeature = (selectedFeature) => ({\r\n type: types.SET_SELECTED_FEATURE,\r\n payload: {selectedFeature}\r\n});\r\n\r\nexport const setSelectedPartIds = (selectedPartIds) => ({\r\n type: types.SET_SELECTED_PART_IDS,\r\n payload: {selectedPartIds}\r\n});\r\n","import React, {Component} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport store from \"../../store\";\r\nimport {toggleUserPopup} from \"../../actions/actionFunctions\";\r\nimport Analytics from './../../analytics';\r\nimport {UserPopupTypes} from \"../visComponents/constants\";\r\nimport {toggleShowAssignQuotePopup} from \"../../actions/assignPopupFunctions\";\r\n\r\nclass UserLoginButton extends Component {\r\n\r\n static propTypes = {\r\n className: PropTypes.string\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n userLogoutActive: false\r\n }\r\n }\r\n\r\n static handleLoginClick = ({\r\n toggleUserPopup, toggleMobileButton = null,\r\n saveQuoteAfterLogin = false, userPopupType = UserPopupTypes.Unlock,\r\n checkout = false\r\n }) => {\r\n const state = store.getState();\r\n const fabricatorSettings = state.fabricatorState.settings;\r\n // console.log(\"state.userState.userIsLoggedIn\", state.userState.userIsLoggedIn);\r\n // console.log(\"state.userState.isPhoneNumberValidated:\", state.userState.isPhoneNumberValidated);\r\n // console.log(\"fabricatorSettings.twoFA:\", fabricatorSettings.twoFA);\r\n if (state.userState.userIsLoggedIn) {\r\n if (fabricatorSettings.twoFA) {\r\n if (!state.userState.isPhoneNumberValidated) {\r\n toggleUserPopup({userPopupOpened: true, saveQuoteAfterLogin, userPopupType, checkout});\r\n return false;\r\n } else {\r\n if (toggleMobileButton) {\r\n toggleMobileButton();\r\n return false;\r\n }\r\n }\r\n } else {\r\n if (toggleMobileButton) {\r\n toggleMobileButton();\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n } else {\r\n if (document.kvConfig.isBackend) {\r\n store.dispatch(toggleShowAssignQuotePopup(true));\r\n return false;\r\n }\r\n toggleUserPopup({userPopupOpened: true, saveQuoteAfterLogin, userPopupType, checkout});\r\n if (userPopupType !== UserPopupTypes.NewDesign) {\r\n window.allowClickLeadCapturePopup = false;\r\n }\r\n return false;\r\n }\r\n };\r\n\r\n handleUserLoginClick = (userPopupType = UserPopupTypes.Unlock) => {\r\n Analytics.sendClickEvent('user-login');\r\n UserLoginButton.handleLoginClick({...this.props, toggleMobileButton: this.toggleMobileButton, userPopupType})\r\n };\r\n\r\n toggleMobileButton = () => {\r\n this.setState({\r\n userLogoutActive: !this.state.userLogoutActive\r\n }, () => {\r\n setTimeout(() => {\r\n this.state.userLogoutActive\r\n ? window.addEventListener('click', this.handleDropdownWrapperBlur)\r\n : window.removeEventListener('click', this.handleDropdownWrapperBlur)\r\n }, 0)\r\n })\r\n };\r\n\r\n handleDropdownWrapperBlur = (e) => {\r\n const questionLogout = e.target.closest('[class*=\"scart-content__question\"]');\r\n if (!questionLogout) {\r\n this.toggleMobileButton();\r\n }\r\n };\r\n\r\n handleLogOutButtonClick = (logout) => {\r\n Analytics.sendClickEvent('user-logout');\r\n if (logout) {\r\n this.props.toggleUserPopup({\r\n userPopupOpened: false,\r\n userIsLoggedIn: false,\r\n isPhoneNumberValidated: false\r\n });\r\n }\r\n this.toggleMobileButton()\r\n };\r\n\r\n render() {\r\n return (\r\n
\r\n this.handleUserLoginClick()}>\r\n \r\n {this.props.userIsLoggedIn\r\n ? \r\n : }\r\n \r\n \r\n
\r\n
\r\n

\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n toggleUserPopup,\r\n toggleShowAssignQuotePopup\r\n})(UserLoginButton);\r\n","import RenderCabinets from \"./renderCabinets\";\r\nimport sqftConfig from \"../store/sqftConfig\";\r\nimport {\r\n getParallelPoints,\r\n getPointBetweenPoints,\r\n getPointOnTheLine,\r\n rotatePoint,\r\n getPointDistance,\r\n measureDistanceToInches, addDecimalToLength\r\n} from \"../../../helpers/sqftHelper\";\r\nimport workspace from \"../core/workspace\";\r\nimport {attachResource} from \"../core/controls/resourseCanas\";\r\nimport {MEASURE_UNITS, RESOURCE_ATTACHED_TO_TYPE} from \"../../../constants\";\r\nimport workspaceControllers from \"../store/workspaceControllers\";\r\nimport {areCollinearAndOverlap, calculateLeg, roundShapePoints} from \"../../../helpers/coordinatesHelper\";\r\nimport {DIRECTIONS} from \"../../../helpers/shapeHelper\";\r\nimport Point from \"../core/shapes/point\";\r\nimport Line from \"../core/shapes/line\";\r\n\r\n/**\r\n * @param line {{}}\r\n * @return {PointV2}\r\n */\r\nexport const getLineCrownMoldingPoints = (line) => {\r\n const linePointsIds = [\r\n line.from.id,\r\n line.to.id,\r\n ]\r\n const shapePoints = line.getParent().getPointsPointField();\r\n\r\n return RenderCabinets.getDiagonalPointsForTheLine(shapePoints, sqftConfig.crownMoldingParams.distance, linePointsIds);\r\n}\r\n\r\n/**\r\n * @param point1 {point}\r\n * @param point2 {point}\r\n * @param outlineDistance {int}\r\n * @return {[]}\r\n */\r\nexport const getLineBordersArrayV1 = (point1, point2, outlineDistance) => {\r\n const pointField1 = point1.getPointField(false);//point1 instanceof PointV2 ? point1.getPointField(false) : getPointField(point1.x, point1.y, point1.getParent());\r\n const pointField2 = point2.getPointField(false);//point2 instanceof PointV2 ? point2.getPointField() : getPointField(point2.x, point2.y, point2.getParent());\r\n const pointOnTheLine = getPointOnTheLine(pointField1, pointField2, outlineDistance);\r\n const pointOnTheLine2 = getPointOnTheLine(pointField2, pointField1, outlineDistance);\r\n return [\r\n rotatePoint(pointField1, pointOnTheLine, 90),\r\n rotatePoint(pointField1, pointOnTheLine, -90),\r\n rotatePoint(pointField2, pointOnTheLine2, 90),\r\n rotatePoint(pointField2, pointOnTheLine2, -90)\r\n ];\r\n}\r\n\r\n/**\r\n * @param point1 {point}\r\n * @param point2 {point}\r\n * @param outlineDistance {int}\r\n * @return {[]}\r\n */\r\nexport const getLineBordersArrayV2 = (point1, point2, outlineDistance) => {\r\n const pointField1 = point1.getPointField(false);//point1 instanceof PointV2 ? point1.getPointField(false) : getPointField(point1.x, point1.y, point1.getParent());\r\n const pointField2 = point2.getPointField(false);//point2 instanceof PointV2 ? point2.getPointField() : getPointField(point2.x, point2.y, point2.getParent());\r\n const [parallelPoint1, parallelPoint2] = getParallelPoints(pointField1, pointField2, outlineDistance);\r\n const [parallelPoint4, parallelPoint3] = getParallelPoints(pointField1, pointField2, -outlineDistance);\r\n return [\r\n parallelPoint1,\r\n parallelPoint2,\r\n parallelPoint3,\r\n parallelPoint4\r\n ];\r\n}\r\n\r\n\r\n/**\r\n * @param from {point}\r\n * @param to {point}\r\n * @param lineThickness {int}\r\n * @return {[]}\r\n */\r\nexport const getBordersOfTwoPoints = (from, to, lineThickness) => {\r\n const lineBorderArray = getLineBordersArrayV2(from, to, lineThickness);\r\n\r\n //console.log(\"lineBorderArray\", lineBorderArray);\r\n let virtualLines = [];\r\n for (const borderPointKey in lineBorderArray) {\r\n const len = lineBorderArray.length;\r\n const currentLineBorderPoint = lineBorderArray[+borderPointKey];\r\n //const previousLineBorderPoint = lineBorderArray[(lineBorderPointIndex + len - 1) % len];\r\n const nextLineBorderPoint = lineBorderArray[(+borderPointKey + 1) % len];\r\n let virtualLine = {\r\n from: {\r\n ...currentLineBorderPoint,\r\n modelCorePoint: {\r\n getPosX: function () { return currentLineBorderPoint.x },\r\n getPosY: function () { return currentLineBorderPoint.y }\r\n },\r\n getPointField: function () { return currentLineBorderPoint }\r\n },\r\n to: {\r\n ...nextLineBorderPoint,\r\n modelCorePoint: {\r\n getPosX: function () { return nextLineBorderPoint.x },\r\n getPosY: function () { return nextLineBorderPoint.y }\r\n },\r\n getPointField: function () { return nextLineBorderPoint }\r\n },\r\n getOffset: () => {\r\n return this.getOffset()\r\n }\r\n }\r\n virtualLines.push(virtualLine);\r\n }\r\n\r\n return virtualLines\r\n}\r\n\r\nexport const addEdgeToTheLines = (shapeId, edge, lineNumbers, shouldShowEyeBall = true) => {\r\n const shape = workspace.getShapeById(shapeId);\r\n const lines = shape.getLines();\r\n\r\n lines.forEach((line, index) => {\r\n if (lineNumbers.includes(index)) {\r\n //line.addEdgeToLine(edge.getFeatureName(), edge.dbFeature.id); // old functional\r\n attachResource(line,\r\n null,\r\n RESOURCE_ATTACHED_TO_TYPE.edge,\r\n edge.dbFeature.id,\r\n null,\r\n edge.getFeatureName(),\r\n 0,\r\n null,\r\n null,\r\n true,\r\n shouldShowEyeBall)\r\n }\r\n })\r\n}\r\n\r\n/**\r\n * Add Edge Without feature for the slab and material calculation\r\n * @param shapeId\r\n * @param lineNumbers\r\n */\r\nexport const addFakeEdgeToLines = (shapeId, lineNumbers) => {\r\n const shape = workspace.getShapeById(shapeId);\r\n const lines = shape.getLines();\r\n\r\n lines.forEach((line, index) => {\r\n if (lineNumbers.includes(index)) {\r\n line.setFakeEdge(true);\r\n }\r\n })\r\n}\r\n\r\nexport const setLineParams = (shapeId, lineNumbers, params) => {\r\n const shape = workspace.getShapeById(shapeId);\r\n const lines = shape.getLines();\r\n\r\n lines.forEach((line, index) => {\r\n if (lineNumbers.includes(index)) {\r\n line.setStateParams(params);\r\n }\r\n })\r\n}\r\n\r\nexport const updateShapeWaterfallLength = (line) => {\r\n const shape = line.getParent();\r\n for (const shapeLine of shape.getLines()) {\r\n if (shapeLine.isWithWaterfallToolEdge() || shapeLine.isWithPeninsulaUnderwrapEdge()) {\r\n workspaceControllers.waterfall.updateWaterfallLength(shapeLine);\r\n }\r\n }\r\n}\r\n\r\nexport const updateMiteredLength = (line) => {\r\n const shape = line.getParent();\r\n for (const shapeLine of shape.getLines()) {\r\n if (shapeLine.isWithMitered()) {\r\n shapeLine.miteredOverlay.setNewLineWidth();\r\n }\r\n }\r\n}\r\n\r\nexport const updateUnderlaymentLength = (line) => {\r\n const shape = line.getParent();\r\n for (const shapeLine of shape.getLines()) {\r\n if (shapeLine.isWithUnderlayment()) {\r\n shapeLine.underlaymentOverlay.setNewLineWidth();\r\n }\r\n }\r\n}\r\n\r\n/**\r\n *\r\n * @param points[]\r\n * @return lines[{}]\r\n */\r\nexport const createSimpleLinesFromPoints = (points) => {\r\n let lines = [];\r\n\r\n for (let i = 0; i < points.length; i++) {\r\n let line = {\r\n from: points[i],\r\n to: points[(i + 1) % points.length]\r\n };\r\n lines.push(line);\r\n }\r\n\r\n return lines;\r\n};\r\n\r\nexport const initAllLineLength = () => {\r\n const lines = workspace.getLines();\r\n for (const line of lines) {\r\n if (line.overlay) {\r\n line.overlay.reInitEvents();\r\n }\r\n }\r\n}\r\n\r\nexport const hideAllLineLength = () => {\r\n const lines = workspace.getLines();\r\n for (const line of lines) {\r\n if (line.overlay) {\r\n line.overlay.deregisterEvents();\r\n }\r\n }\r\n}\r\n\r\nexport const findCollinearLine = (searchLine) => {\r\n const lines = workspace.getLines();\r\n const roundedSearchLinePoints = roundShapePoints([searchLine.from.getPointPosOnWorkspace(), searchLine.to.getPointPosOnWorkspace()]);\r\n for (const testLine of lines) {\r\n const roundedTestPoints = roundShapePoints([testLine.from.getPointPosOnWorkspace(), testLine.to.getPointPosOnWorkspace()]);\r\n if (areCollinearAndOverlap(roundedSearchLinePoints[0], roundedSearchLinePoints[1], roundedTestPoints[0], roundedTestPoints[1], 1)) {\r\n return testLine\r\n }\r\n }\r\n}\r\n\r\nexport const isHorizontalDirection = (lineDirection) => {\r\n return [DIRECTIONS.WEST, DIRECTIONS.EAST].includes(lineDirection)\r\n}\r\n\r\nexport const isVerticalDirection = (lineDirection) => {\r\n return [DIRECTIONS.NORTH, DIRECTIONS.SOUTH].includes(lineDirection)\r\n}\r\n\r\nexport const isWesternHemisphere = (lineDirection) => {\r\n return [DIRECTIONS.WEST, DIRECTIONS.NORTHWEST, DIRECTIONS.NORTH, DIRECTIONS.NORTHEAST].includes(lineDirection);\r\n}\r\n\r\nexport const isEasternHemisphere = (lineDirection) => {\r\n return [DIRECTIONS.EAST, DIRECTIONS.SOUTHWEST, DIRECTIONS.SOUTH, DIRECTIONS.SOUTHEAST].includes(lineDirection);\r\n}\r\n\r\n/**\r\n *\r\n */\r\nexport const getLinesWithoutAnglePoints = (lines) => {\r\n const adjustedLines = [];\r\n\r\n lines.forEach((line) => {\r\n if (line.to.angle > 0 && line.from.angle > 0) {\r\n // Both 'to' and 'from' have angles, adjust both points\r\n const legLengthTo = calculateLeg(line.to.angle);\r\n const legLengthFrom = calculateLeg(line.from.angle);\r\n\r\n // Calculate new points for 'to' and 'from'\r\n const linePosTo = getPointBetweenPoints(line.to, line.from, legLengthFrom, -2);\r\n const linePointTo = new Point(linePosTo.x, linePosTo.y);\r\n\r\n const linePosFrom = getPointBetweenPoints(line.from, line.to, legLengthFrom, -2);\r\n const linePointFrom = new Point(linePosFrom.x, linePosFrom.y);\r\n\r\n // Add current line resized\r\n const cloneLine = { ...line };\r\n cloneLine.to = linePointTo;\r\n cloneLine.from = linePointFrom;\r\n adjustedLines.push(cloneLine);\r\n\r\n // Create adjusted line\r\n const nextLine = line.getParent().getNextLine(line);\r\n const newLinePosFrom = getPointBetweenPoints(nextLine.from, nextLine.to, legLengthTo, -2);\r\n const newLinePointFrom = new Point(newLinePosFrom.x, newLinePosFrom.y);\r\n\r\n adjustedLines.push(new Line(linePointTo, newLinePointFrom, line.getParent()));\r\n\r\n debugger // eslint-disable-line no-debugger\r\n } else if (line.to.angle > 0) {\r\n // Only 'to' has an angle\r\n const legLength = calculateLeg(line.to.angle);\r\n const newLinePosFrom = getPointBetweenPoints(line.to, line.from, legLength, -2);\r\n const newLinePointFrom = new Point(newLinePosFrom.x, newLinePosFrom.y);\r\n\r\n const nextLine = line.getParent().getNextLine(line);\r\n const newLinePosTo = getPointBetweenPoints(nextLine.from, nextLine.to, legLength, -2);\r\n const newLinePointTo = new Point(newLinePosTo.x, newLinePosTo.y);\r\n\r\n // Add current line resized\r\n const cloneLine = { ...line };\r\n cloneLine.to = newLinePointFrom;\r\n adjustedLines.push(cloneLine);\r\n\r\n // Create adjusted line\r\n adjustedLines.push(new Line(newLinePointFrom, newLinePointTo, line.getParent()));\r\n\r\n } else if (line.from.angle > 0) {\r\n // Only 'from' has an angle\r\n const legLength = calculateLeg(line.from.angle);\r\n const newLinePosTo = getPointBetweenPoints(line.from, line.to, legLength, -2);\r\n const newLinePointTo = new Point(newLinePosTo.x, newLinePosTo.y);\r\n\r\n const cloneLine = { ...line };\r\n cloneLine.from = newLinePointTo;\r\n adjustedLines.push(cloneLine);\r\n\r\n } else {\r\n // No angles, add line as is\r\n adjustedLines.push(line);\r\n }\r\n });\r\n\r\n return adjustedLines;\r\n};\r\n\r\n\r\n/**\r\n * Function to find the longest line in an array of lines.\r\n * @param {Array} lines - Array of lines where each line has properties from and to.\r\n * @returns {Object} The longest line object.\r\n */\r\nexport function findLongestLine(lines) {\r\n if (!lines || lines.length === 0) {\r\n return null;\r\n }\r\n\r\n let longestLine = lines[0];\r\n let maxLength = getPointDistance(longestLine.from, longestLine.to);\r\n\r\n lines.forEach(line => {\r\n const length = getPointDistance(line.from, line.to);\r\n if (length > maxLength) {\r\n maxLength = length;\r\n longestLine = line;\r\n }\r\n });\r\n\r\n return longestLine;\r\n}\r\n\r\nexport function getDistanceLength(distance) {\r\n switch (sqftConfig.measureUnit) {\r\n case MEASURE_UNITS.Metric:\r\n return measureDistanceToInches(distance).millimeters\r\n case MEASURE_UNITS.Imperial:\r\n default:\r\n return addDecimalToLength(measureDistanceToInches(distance))\r\n }\r\n}\r\n","import {s3Path} from \"../../misc/utils\";\r\n\r\nexport default class Layer {\r\n zIndex = 0;\r\n\r\n src = '';\r\n\r\n fromS3 = true;\r\n\r\n /**\r\n * @param visualizer {string} bv or kv\r\n * @param zIndex {number}\r\n * @param src {string}\r\n * @param fromS3 {boolean} Whether the layer comes from S3 bucket ir from local resources\r\n */\r\n constructor(visualizer, zIndex = 0, src = '', fromS3 = true) {\r\n this.zIndex = zIndex;\r\n this.src = src;\r\n this.fromS3 = fromS3;\r\n this.visualizer = visualizer;\r\n this.bucketName = \"\";\r\n }\r\n\r\n /**\r\n *\r\n * @returns {{backgroundImage}|*}\r\n */\r\n bgImg(isCropped) {\r\n return this.fromS3 ? s3Path(this.src, this.visualizer, isCropped, this.bucketName) : this.src;\r\n }\r\n\r\n fromS3Binding(s3Binding) {\r\n this.src = s3Binding ? s3Binding.path : null;\r\n this.bucketName = s3Binding ? s3Binding.bucketName : \"\";\r\n }\r\n\r\n /**\r\n *\r\n * @param ar {Array.}\r\n */\r\n addTo(ar) {\r\n if (this.src)\r\n ar.push(this);\r\n }\r\n}\r\n\r\n\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\nimport {LOOK_ROOM_TYPES} from \"../../constants\";\r\n\r\nconst splitWallPartIds = [\"left_wall\", \"right_wall\", \"split_wall\", \"left_wall_splitter\"];\r\nconst shouldCheckAdditionalPartsConditions = [\"front_wall\", \"right_wall\", \"left_wall\"];\r\n\r\nexport default class WallCommon extends IntermediatePart {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n const showerSize = showerParent ? showerParent.showerSize() : null;\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n })\r\n }\r\n\r\n if (getCurrentRoomType(showerParent.layout) === LOOK_ROOM_TYPES.as && splitWallPartIds.every(partId => this.partId !== partId)) {\r\n const wallParent = this.getParent();\r\n if (wallParent && wallParent.splitWall) {\r\n conditions.push({\r\n propName: \"SplitWallType\",\r\n propValue: wallParent.getSplitWallType()\r\n })\r\n }\r\n }\r\n return conditions\r\n }\r\n\r\n getAdditionalPartsConditions(arrayOfConditions = []) {\r\n if (shouldCheckAdditionalPartsConditions.every(partId => this.partId !== partId)) {\r\n return arrayOfConditions\r\n }\r\n const layout = this.getParent().layout;\r\n if (!layout) {\r\n return arrayOfConditions\r\n }\r\n const vanityParent = layout.parts[Vanity.id];\r\n if (!vanityParent) {\r\n return arrayOfConditions\r\n }\r\n // if (!arrayOfConditions.some(condition => condition.propName === \"VanitySize\")) {\r\n // const vanitySize = vanityParent.counterTopSize(this);\r\n // if (vanitySize) {\r\n // arrayOfConditions.push({\r\n // propName: \"VanitySize\",\r\n // propValue: vanitySize\r\n // })\r\n // }\r\n // }\r\n if (!arrayOfConditions.some(condition => condition.propName === \"MirrorShape\")) {\r\n const mirror = vanityParent.mirror;\r\n if (mirror && mirror.activeFeature && !mirror.disabled && mirror.activeFeature.metaData[\"MirrorShape\"]) {\r\n arrayOfConditions.push({\r\n propName: \"MirrorShape\",\r\n propValue: mirror.activeFeature.metaData[\"MirrorShape\"]\r\n })\r\n }\r\n }\r\n return arrayOfConditions\r\n }\r\n\r\n}\r\n","import {Shower} from \"../../parts/shower\";\r\nimport {IntermediatePart} from \"../../intermediatePart\";\r\nimport {SIDE_POSITIONS} from \"../../constants\";\r\n// import {SIDE_POSITIONS} from \"../../constants\";\r\n\r\nexport default class AccessoryCommon extends IntermediatePart {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n checkRelatedFeatureGroupPositions(position) {\r\n const accessoriesParent = this.getParent();\r\n const showerParent = accessoriesParent.layout.parts[Shower.id]; // no need for another check\r\n const showerSize = showerParent.showerSize();\r\n let otherFeatureGroup = null;\r\n switch (this.partId) {\r\n case \"grab_bar\":\r\n otherFeatureGroup = accessoriesParent.soapDish;\r\n break;\r\n case \"soap_dish\":\r\n otherFeatureGroup = accessoriesParent.grabBar;\r\n break;\r\n case \"shower_seats\":\r\n otherFeatureGroup = accessoriesParent.largeCornerSeat;\r\n break;\r\n case \"large_corner_seat\":\r\n otherFeatureGroup = accessoriesParent.seats;\r\n break;\r\n default:\r\n break;\r\n }\r\n if (showerSize === \"30\") {\r\n Object.keys(otherFeatureGroup.layerPositions).forEach(key => {\r\n otherFeatureGroup.layerPositions[key] = null\r\n })\r\n } else {\r\n if (this.layerPositions[position] && otherFeatureGroup && otherFeatureGroup.layerPositions[position] && !otherFeatureGroup.disabled) {\r\n const newPosition = position === SIDE_POSITIONS[0] ? SIDE_POSITIONS[1] : SIDE_POSITIONS[0];\r\n if (!this.layerPositions[newPosition]) {\r\n const matchingPositionFeature = otherFeatureGroup.getMatchingPositionFeature(newPosition, otherFeatureGroup.layerPositions[position]);\r\n if (matchingPositionFeature) {\r\n otherFeatureGroup.layerPositions[newPosition] = matchingPositionFeature;\r\n }\r\n }\r\n otherFeatureGroup.layerPositions[position] = null; //2) remove old soap dish position\r\n }\r\n }\r\n }\r\n\r\n}\r\n","import React, {Component} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport findIndex from \"lodash/findIndex\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport * as actions from '../../../../actions/actionFunctions';\r\n\r\n// import {DesignNavigationItem, Layout} from \"../core/layout\";\r\n\r\nexport const toggleFilterArrayValue = (array, {filterId, filterGroupId}) => {\r\n let index = findIndex(array, {filterGroupId});\r\n if (index >= 0) {\r\n array[index].filterId === filterId ? array.splice(index, 1) : array.splice(index, 1, {filterId, filterGroupId})\r\n } else {\r\n array.push({filterId, filterGroupId});\r\n }\r\n return array;\r\n};\r\n\r\nexport const replaceFilterArrayValue = (array, {filterId, filterGroupId}) => {\r\n let index = findIndex(array, {filterGroupId});\r\n if (index >= 0) {\r\n array.splice(index, 1, {filterId, filterGroupId})\r\n } else {\r\n array.push({filterId, filterGroupId});\r\n }\r\n return array;\r\n};\r\n\r\nconst setDefaultFilterArrayValue = (array, filterGroupId) => {\r\n let index = findIndex(array, {filterGroupId});\r\n if (index >= 0) {\r\n array.splice(index, 1);\r\n }\r\n return array;\r\n};\r\n\r\nclass FilterSwitchers extends Component {\r\n\r\n static propTypes = {\r\n // layout: PropTypes.instanceOf(Layout),\r\n isMobile: PropTypes.bool,\r\n activePart: PropTypes.object.isRequired,\r\n filterGroupName: PropTypes.string.isRequired\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n availableFilterValues: [],\r\n filterGroup: {}\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.setAvailableFiltersValues(this.props);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.activePart && this.props.activePart && nextProps.activePart.partName !== this.props.activePart.partName) {\r\n this.setAvailableFiltersValues(nextProps);\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this.setDefaultFilterValue();\r\n }\r\n\r\n setAvailableFiltersValues(nextProps = this.props) {\r\n const availableFilterValues = [];\r\n const filterGroup = nextProps.filterGroups.find(group => group.name === nextProps.filterGroupName);\r\n const fabricatorData = this.props.fabricatorData;\r\n if (filterGroup) {\r\n nextProps.activePart.features.forEach((feature) => {\r\n if (feature.dbFeature.filterValueIDs[filterGroup.id]) {\r\n feature.dbFeature.filterValueIDs[filterGroup.id].forEach((filterValue) => {\r\n if (!availableFilterValues.includes(filterValue)) {\r\n const fValue = filterGroup.values.find(val => val.id === filterValue);\r\n if (fValue.value === \"Slab\") { // we need to look for existing DuraBath Natural Stone features filter\r\n if (!fabricatorData || (fabricatorData && !fabricatorData.isRebath)) {\r\n availableFilterValues.push(filterValue)\r\n }\r\n } else if (fValue.value === \"DuraBath Natural Stone\") {\r\n if (!fabricatorData || (fabricatorData && fabricatorData.isRebath)) {\r\n availableFilterValues.push(filterValue)\r\n }\r\n } else {\r\n availableFilterValues.push(filterValue)\r\n }\r\n }\r\n })\r\n }\r\n });\r\n this.setState({\r\n availableFilterValues,\r\n filterGroup\r\n })\r\n }\r\n }\r\n\r\n setActiveFilterValue = (filterId, filterGroupId) => {\r\n this.props.setSelectedFilters(toggleFilterArrayValue([...this.props.selectedFilters], {filterId, filterGroupId}));\r\n };\r\n\r\n setDefaultFilterValue = () => {\r\n this.props.setSelectedFilters(setDefaultFilterArrayValue([...this.props.selectedFilters], this.state.filterGroup.id));\r\n };\r\n\r\n render() {\r\n\r\n // console.log('parentItem', this.props.parentItem);\r\n // console.log('activePart', this.props.activePart);\r\n // console.log('selectedFilters', this.props.selectedFilters);\r\n // console.log('availableFilterValues:', this.state.availableFilterValues);\r\n let activeFilterValueId = null;\r\n if (this.state.availableFilterValues.length && this.state.filterGroup && this.props.selectedFilters.length) {\r\n const appliedFilter = this.props.selectedFilters.find(filterObj => filterObj.filterGroupId === this.state.filterGroup.id);\r\n if (appliedFilter) {\r\n activeFilterValueId = appliedFilter.filterId\r\n }\r\n }\r\n\r\n return this.state.availableFilterValues.length ? (\r\n this.props.isMobile ? (\r\n
\r\n
    \r\n
  • \r\n \r\n
  • \r\n {this.state.availableFilterValues.map((filterValueId, index) => {\r\n const filterValueObject = this.state.filterGroup.values.find(val => val.id === filterValueId);\r\n return (\r\n
  • this.setActiveFilterValue(filterValueId, this.state.filterGroup.id)}>\r\n {filterValueObject.value}\r\n
  • \r\n )\r\n })}\r\n
\r\n
\r\n ) : (\r\n
\r\n
    \r\n
  • \r\n \r\n \r\n \r\n
  • \r\n {this.state.availableFilterValues.map((filterValueId, index) => {\r\n const filterValueObject = this.state.filterGroup.values.find(val => val.id === filterValueId);\r\n return (\r\n
  • this.setActiveFilterValue(filterValueId, this.state.filterGroup.id)}>\r\n \r\n {filterValueObject.value}\r\n
  • \r\n )\r\n })}\r\n
\r\n
\r\n )\r\n ) : null\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n filterGroups: store.filterState.filterGroups,\r\n fabricatorData: store.fabricatorState,\r\n selectedFilters: store.filterState.selectedFilters\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n setSelectedFilters: (selectedFilters) => dispatch(actions.setSelectedFilters(selectedFilters)),\r\n});\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(FilterSwitchers);\r\n","import {PartMenuType} from \"../../visComponents/constants\";\r\nimport {iCmp} from \"../../../misc/utils\";\r\nimport Layer from \"../../visComponents/layer\";\r\nimport store from '../../../store';\r\nimport {LayoutType, METADATA} from \"./constants\";\r\nimport PartCommon from \"../../visComponents/partCommon\";\r\n\r\nexport class Part extends PartCommon {\r\n\r\n constructor(isParent, isChild, menuType) {\r\n super();\r\n if (isChild || (isParent && menuType === PartMenuType.Simple)) {\r\n this.featuresList = {};\r\n this.featuresPartsList = {};\r\n this.modulePartsList = {};\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this.featuresList[layoutName] = [];\r\n this.featuresPartsList[layoutName] = [];\r\n this.modulePartsList[layoutName] = [];\r\n });\r\n this.allFeaturesReceived = false;\r\n this.realFeaturesReceived = false; // this prop is need on Scroll (if features count more that 1000)\r\n this.nextFeaturesPageToLoad = 0;\r\n this.activeFeature = null;\r\n this.placeholderFeature = null;\r\n this.shadowFeature = null;\r\n this.placeholderChanged = false;\r\n this.firstClick = {\r\n \"0\": false\r\n };\r\n this.activeLockedFeature = null;\r\n this.activeNotInVisualizerFeature = null; // is needed to display in the QT selected activeNotInVisualizerFeature, but render proper activeFeature layer(for example, countertop)\r\n // name = \"\";\r\n this.visible = true;\r\n this.categoryEnabled = false;\r\n this.layout = null;\r\n this.featureGroupVisible = true; // dashboard's feature group eye ball logic\r\n this.featureGroupEnabled = true; // dashboard's feature group checkbox logic\r\n this.selectedFeaturesHistory = []; // array of strings(names). updated every time item is selected\r\n this.filtersReceived = null; // array of filters values, comes from BE, for ex [1221, 347, 1124]\r\n }\r\n if (isParent) {\r\n this.partThumbnail = '';\r\n this.relatedItems = [];\r\n }\r\n if (!isChild && !isParent) {\r\n this.dbFeature = null;\r\n this.layer = new Layer(\"kv\");\r\n this._customDisplayName = null;\r\n this.notesList = {};\r\n }\r\n this.partName = \"\";\r\n }\r\n\r\n set features(featuresList) {\r\n // features can't be set directly, we need to change featuresList array\r\n }\r\n get features() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresList[layout.getCurrentLayoutName()]\r\n }\r\n set featuresParts(featuresList) {\r\n // featuresParts can't be set directly, we need to change featuresPartsList array\r\n }\r\n get featuresParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresPartsList[layout.getCurrentLayoutName()]\r\n }\r\n get moduleParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.modulePartsList[layout.getCurrentLayoutName()]\r\n }\r\n\r\n setGroupFeatures(dbFeaturesArray, pageSize = 1000, setNextPage = true, layoutAbbr = \"\", loadedPage = null, fromSearch = false) {\r\n\r\n super.setGroupFeatures(dbFeaturesArray, pageSize, setNextPage, layoutAbbr, loadedPage, fromSearch)\r\n\r\n if (this.partId === \"edge_profile\" || this.partId === \"center_island_edge\") {\r\n const countertop = this.getParent().countertop;\r\n // console.log('countertop', countertop);\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const edgeGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n if (edgeGroup && countertop) {\r\n Object.keys(this.featuresList).forEach(layoutType => {\r\n for (let i = 0; i < this.featuresList[layoutType].length; i++) {\r\n const feature = this.featuresList[layoutType][i];\r\n if (feature.dbFeature.filterValueIDs[edgeGroup.id]) {\r\n const edgeValue = feature.dbFeature.filterValueIDs[edgeGroup.id][0];\r\n const edgeExist = countertop.featuresList[layoutType].some(countertopFeature => {\r\n return countertopFeature.dbFeature.filterValueIDs[edgeGroup.id]\r\n && countertopFeature.dbFeature.filterValueIDs[edgeGroup.id].includes(edgeValue)\r\n });\r\n if (edgeExist) {\r\n feature.notAvailableInVisualizer = false\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Checks whether a given for condition matches the needed value (or array of values)\r\n * @param name {string}\r\n * @param value {string || array}\r\n * @returns {int} -1 - no such for condition, 0 - no match, 1 - matches\r\n */\r\n matchesMetaForCondition(name, value) {\r\n return this.metaData[name] && this.metaData[name].some(condValue => {\r\n return condValue === METADATA.ALL || (Array.isArray(value) ? value.some(val => iCmp(condValue, val, true)) : iCmp(condValue, value, true))\r\n });\r\n }\r\n\r\n matchesMetaForArrayOfConditions(arrayOfConditions) {\r\n return arrayOfConditions.every((condition) => {\r\n return this.matchesMetaForCondition(condition.propName, condition.propValue);\r\n })\r\n }\r\n}\r\n\r\n\r\n","import React, {Component} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport findIndex from \"lodash/findIndex\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport * as actions from '../../../../actions/actionFunctions';\r\n\r\nexport const addFilterArrayValue = (array, {filterId, filterGroupId}) => {\r\n let index = findIndex(array, {filterGroupId});\r\n if (index >= 0) {\r\n array.splice(index, 1, {filterId, filterGroupId})\r\n } else {\r\n array.push({filterId, filterGroupId});\r\n }\r\n return array;\r\n};\r\n\r\nclass FilterSelection extends Component {\r\n\r\n static propTypes = {\r\n removeFilterSelection: PropTypes.func.isRequired,\r\n isMobile: PropTypes.bool,\r\n activePart: PropTypes.object\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n availableFilterValues: [],\r\n filterGroup: {}\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.setAvailableFiltersValues(this.props);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.activePart && this.props.activePart && nextProps.activePart.partName !== this.props.activePart.partName) {\r\n this.setAvailableFiltersValues(nextProps);\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n // this.setDefaultFilterValue();\r\n }\r\n\r\n /**\r\n * Fucntion is needed to find among filterGroups needed group & to return only those filters that has\r\n * at least 1 feature with it assigned\r\n * @param {Array} filterGroups\r\n * @param {String} filterGroupName\r\n * @param {Object} activePart\r\n * @param {Object} fabricatorData\r\n * @param {Array} selectedFilters // example: [{filterId: 1113, filterGroupId: 15}]\r\n * @return {Array} ArrayOf filterIds // example: [1231, 1587, 1596]\r\n */\r\n static getAvailableFilterValues(filterGroups, filterGroupName, activePart, fabricatorData, selectedFilters = []) {\r\n const availableFilterValues = [];\r\n const filterGroup = filterGroups.find(group => group.name === filterGroupName);\r\n if (filterGroup && activePart.featuresList) {\r\n const featuresToFind = (filterGroup.name === \"Inlay Type\") ? activePart.moduleParts : activePart.features;\r\n // console.log(\"featuresToFind\", featuresToFind);\r\n // let missingFilters = {};\r\n featuresToFind.forEach((feature) => {\r\n if (feature.dbFeature.filterValueIDs[filterGroup.id] && selectedFilters.every(filterObject => {\r\n return feature.dbFeature.filterValueIDs[filterObject.filterGroupId]\r\n && feature.dbFeature.filterValueIDs[filterObject.filterGroupId].includes(filterObject.filterId)\r\n })) {\r\n feature.dbFeature.filterValueIDs[filterGroup.id].forEach((filterValue) => {\r\n if (!availableFilterValues.includes(filterValue)) {\r\n // console.log(\"feature with the filter:\", feature);\r\n const fValue = filterGroup.values.find(val => val.id === filterValue);\r\n if (fValue) {\r\n if (fValue.value === \"Slab\") { // we need to look for existing DuraBath Natural Stone features filter\r\n if (!fabricatorData || (fabricatorData && !fabricatorData.isRebath)) {\r\n // const duraBathNaturalStoneFilter = filterGroup.values.find(val => val.value === \"DuraBath Natural Stone\");\r\n // if (!activePart.features.some(testFeature => {\r\n // return testFeature.dbFeature\r\n // && testFeature.dbFeature.filterValueIDs\r\n // && testFeature.dbFeature.filterValueIDs[filterGroup.id]\r\n // && testFeature.dbFeature.filterValueIDs[filterGroup.id].includes(duraBathNaturalStoneFilter.id)\r\n // })) {\r\n // availableFilterValues.push(filterValue)\r\n // }\r\n availableFilterValues.push(filterValue)\r\n }\r\n } else if (fValue.value === \"DuraBath Natural Stone\") {\r\n if (!fabricatorData || (fabricatorData && fabricatorData.isRebath)) {\r\n availableFilterValues.push(filterValue)\r\n }\r\n // const slabFilter = filterGroup.values.find(val => val.value === \"Slab\");\r\n // if (!activePart.features.some.feature(testFeature => {\r\n // return testFeature.dbFeature && testFeature.dbFeature.filterValueIDs\r\n // && feature.dbFeature.filterValueIDs[duraBathNaturalStoneFilter.id]\r\n // })) {\r\n // availableFilterValues.push(filterValue)\r\n // }\r\n } else {\r\n availableFilterValues.push(filterValue)\r\n }\r\n } else {\r\n // if (!missingFilters[filterValue]) {\r\n // missingFilters[filterValue] = [feature]\r\n // } else {\r\n // missingFilters[filterValue].push(feature)\r\n // }\r\n }\r\n }\r\n })\r\n }\r\n });\r\n // if (Object.keys(missingFilters).length) {\r\n // console.error(\"Filter values are missing or wrong filter assigned!\", missingFilters);\r\n // console.info(\"Existing filters\", filterGroup.values);\r\n // }\r\n }\r\n // console.log(\"availableFilterValues\", availableFilterValues);\r\n return availableFilterValues\r\n }\r\n\r\n setAvailableFiltersValues(nextProps = this.props) {\r\n const filterGroup = nextProps.filterGroups.find(group => group.name === nextProps.filterGroupName);\r\n const availableFilterValues = FilterSelection.getAvailableFilterValues(\r\n nextProps.filterGroups, nextProps.filterGroupName, nextProps.activePart, this.props.fabricatorData\r\n );\r\n if (filterGroup) {\r\n this.setState({\r\n availableFilterValues,\r\n filterGroup\r\n })\r\n }\r\n }\r\n\r\n setActiveFilterValue = (filterId, filterGroupId) => {\r\n this.props.setSelectedFilters(addFilterArrayValue([...this.props.selectedFilters], {filterId, filterGroupId}));\r\n this.props.removeFilterSelection();\r\n };\r\n\r\n render() {\r\n\r\n // console.log('parentItem', this.props.parentItem);\r\n // console.log('activePart', this.props.activePart);\r\n // console.log('selectedFilters', this.props.selectedFilters);\r\n // console.log('availableFilterValues:', this.state.availableFilterValues);\r\n // let activeFilterValueId = null;\r\n // if (this.state.availableFilterValues.length && this.state.filterGroup && this.props.selectedFilters.length) {\r\n // const appliedFilter = this.props.selectedFilters.find(filterObj => filterObj.filterGroupId === this.state.filterGroup.id);\r\n // if (appliedFilter) {\r\n // activeFilterValueId = appliedFilter.filterId\r\n // }\r\n // }\r\n\r\n return this.state.availableFilterValues.length ? (\r\n
\r\n
    \r\n
  • \r\n \r\n
  • \r\n {this.state.availableFilterValues.map((filterValueId, index) => {\r\n const filterValueObject = this.state.filterGroup.values.find(val => val.id === filterValueId);\r\n return (\r\n
  • this.setActiveFilterValue(filterValueId, this.state.filterGroup.id)}>\r\n \r\n \r\n \r\n
  • \r\n )\r\n })}\r\n
\r\n
\r\n ) : null\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n filterGroups: store.filterState.filterGroups,\r\n fabricatorData: store.fabricatorState,\r\n selectedFilters: store.filterState.selectedFilters\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n setSelectedFilters: (selectedFilters) => dispatch(actions.setSelectedFilters(selectedFilters)),\r\n});\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(FilterSelection);\r\n","import React, {useEffect, useState} from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport LoadingSpinner from \"../ui/loadingSpinner\";\r\nimport {featureThumbnailUrl, isIE} from \"../../misc/helpers\";\r\nimport {baseNewImagesPath} from \"../assets\";\r\nimport {THUMBNAIL_SIZES} from \"../../misc/utils\";\r\nimport Config, {IS_LIXIL_UI} from \"../../config\";\r\n\r\nconst FeatureThumbnail = (props) => {\r\n\r\n const {feature, dbFeatureId, isMobile} = props;\r\n const [isLoading, toggleLoader] = useState(true);\r\n const [thumbnailUrl, setThumbnailUrl] = useState(\"\");\r\n const [smallerSizeTried, setSmallerSizeTried] = useState(isIE() || Config.isDevMode()); // if it is ie - set smallerSizeTried to true\r\n\r\n\r\n const setBaseThumbnail = () => {\r\n const size = isMobile && IS_LIXIL_UI\r\n ? THUMBNAIL_SIZES.small\r\n : isIE() || Config.isDevMode() ? THUMBNAIL_SIZES.medium : THUMBNAIL_SIZES.large\r\n const baseThumbnail = featureThumbnailUrl(feature, size) // if it is ie - set small Thumbnails by the default\r\n setThumbnailUrl(baseThumbnail || `${baseNewImagesPath}images/image-not-found.png`);\r\n return baseThumbnail;\r\n }\r\n\r\n useEffect(() => {\r\n toggleLoader(true);\r\n setSmallerSizeTried(isIE() || Config.isDevMode());\r\n setBaseThumbnail();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [dbFeatureId])\r\n\r\n const onImageLoadError = () => {\r\n if (isMobile || smallerSizeTried) {\r\n setThumbnailUrl(`${baseNewImagesPath}images/image-not-found.png`);\r\n } else if (!smallerSizeTried) {\r\n toggleLoader(true);\r\n setThumbnailUrl(featureThumbnailUrl(feature, THUMBNAIL_SIZES.medium))\r\n setSmallerSizeTried(true)\r\n }\r\n };\r\n\r\n if (!thumbnailUrl && smallerSizeTried) { // no need to load anything, show not found\r\n return (\r\n
\r\n \"\"/\r\n
\r\n )\r\n }\r\n\r\n return (\r\n
\r\n {thumbnailUrl\r\n ? {\r\n toggleLoader(false);\r\n }}\r\n onError={onImageLoadError}\r\n alt=\"\"/>\r\n : null}\r\n {isLoading ? : null}\r\n
\r\n )\r\n};\r\n\r\nFeatureThumbnail.propTypes = {\r\n feature: PropTypes.object.isRequired,\r\n isMobile: PropTypes.bool,\r\n};\r\n\r\nexport default FeatureThumbnail\r\n","import store from \"../store\";\r\nimport {getCommonVisualizerType} from \"../config\";\r\n\r\n/**\r\n *\r\n * @param feature {featureInterface} (object which has dbFeature property)\r\n * @param cartItems {[cartItemInterface]}\r\n * @param currentQuote {number}\r\n * @param allWizardsValues {array}\r\n * @return {object} // {quantity, isMatching}\r\n */\r\nexport default function featureIsMatchingDisplayLogic(feature, cartItems = [], currentQuote = 0, allWizardsValues) {\r\n\r\n let visible = feature.dbFeature.displayLogic.action === \"show\";\r\n let quantity = 0;\r\n const displayRules = feature.dbFeature.displayRules;\r\n\r\n if (Array.isArray(displayRules) && displayRules.length) {\r\n\r\n const currentQuoteCartItems = cartItems.filter(cItem => cItem.currentQuote === currentQuote);\r\n let visibleUpdated = false; // we need to rewrite this, when we have time\r\n\r\n for (let i = 0; i < displayRules.length; i++) {\r\n const rule = displayRules[i];\r\n let entityVal = 0;\r\n // if (!rule) {\r\n // console.log(\"feature\", feature);\r\n // }\r\n if (rule && rule.entityId) {\r\n if (rule.entityId === -1) { // Material (should look for added Countertops value)\r\n let countertopCount = 0;\r\n currentQuoteCartItems.forEach((cartItem) => {\r\n if (cartItem.partId.includes(\"countertop\")) {\r\n countertopCount += cartItem.quantity;\r\n }\r\n });\r\n entityVal = countertopCount\r\n } else {\r\n const matchingCartItem = currentQuoteCartItems.find((cartItem) => {\r\n return rule.entityId === cartItem.cartFeature.dbFeature.id\r\n });\r\n if (matchingCartItem) {\r\n entityVal = matchingCartItem.quantity\r\n }\r\n }\r\n let result = true;\r\n const\r\n entVal = parseInt(entityVal),\r\n ruleVal = parseInt(rule.value);\r\n switch (rule.comparison) {\r\n case \"<\":\r\n result = (entVal === 0 && ruleVal === 0 ) ? true : entVal < ruleVal;\r\n break;\r\n case \"<=\":\r\n result = entVal <= ruleVal;\r\n break;\r\n case \"=\":\r\n result = entVal === ruleVal;\r\n break;\r\n case \">\":\r\n result = entVal > ruleVal;\r\n break;\r\n case \">=\":\r\n result = entVal >= ruleVal;\r\n break;\r\n case \"wizard\":\r\n result = allWizardsValues && allWizardsValues.some(wizObject => {\r\n return wizObject.quoteIndex === currentQuote && wizObject.wizardSelectedValues\r\n && Object.keys(wizObject.wizardSelectedValues).some(key => {\r\n return wizObject.wizardSelectedValues[key].selectedFeature\r\n && wizObject.wizardSelectedValues[key].selectedFeature.dbFeature.id === rule.entityId\r\n })\r\n });\r\n break;\r\n }\r\n if (!result) {\r\n if (!visibleUpdated) {\r\n visible = !visible;\r\n visibleUpdated = true;\r\n }\r\n quantity = quantity + entityVal;\r\n }\r\n }\r\n }\r\n }\r\n if (visible && !quantity) {\r\n quantity = 1;\r\n }\r\n return {quantity, isMatching: visible};\r\n}\r\n\r\n/**\r\n *\r\n * @param feature {object} (object which has dbFeature property)\r\n * @param propertyName {string}\r\n * @param originalValue {any}\r\n * @param fromQtCategory {string} (cart feature should be calculated from the category it was added)\r\n * @return {number}\r\n */\r\nexport const checkIfInCatProperty = (feature, propertyName, originalValue, fromQtCategory) => {\r\n const finalValue = (typeof originalValue !== \"undefined\") ? originalValue : feature.dbFeature[propertyName];\r\n if (feature.inCatProperties && fromQtCategory && feature.inCatProperties.hasOwnProperty(fromQtCategory)\r\n && feature.inCatProperties[fromQtCategory].hasOwnProperty(propertyName)) {\r\n if (propertyName === \"inCatPrice\") {\r\n const {settings} = store.getState().fabricatorState;\r\n if (settings.showSalePrices && (typeof feature.inCatProperties[fromQtCategory].inCatFabCost == \"number\")) {\r\n return feature.inCatProperties[fromQtCategory].inCatFabCost\r\n }\r\n return (typeof feature.inCatProperties[fromQtCategory].inCatCost === \"number\")\r\n ? feature.inCatProperties[fromQtCategory].inCatCost\r\n : (typeof feature.inCatProperties[fromQtCategory].inCatPrice === \"number\")\r\n ? feature.inCatProperties[fromQtCategory].inCatPrice\r\n : finalValue\r\n }\r\n return feature.inCatProperties[fromQtCategory][propertyName] // inCatValue\r\n }\r\n return finalValue;\r\n}\r\n\r\n/**\r\n * returns old dbFeature property name for displaying/hiding the feature\r\n * @param forPage {string} quotingTool || visualizer\r\n * @param visualizerType {string}\r\n * @return {string}\r\n */\r\nexport const getOldHidePropertyName = (forPage = \"quotingTool\", visualizerType = getCommonVisualizerType()) => {\r\n let hidePropertyName = \"\";\r\n switch (visualizerType) {\r\n case \"kitchen\":\r\n hidePropertyName = (forPage === \"quotingTool\") ? \"hideFromFrontEnd\" : \"hideFromKitchenVisualizer\";\r\n break;\r\n case \"bathroom\":\r\n hidePropertyName = (forPage === \"quotingTool\") ? \"hideFromBVQT\" : \"hideFromBathroomVisualizer\";\r\n break;\r\n default:\r\n break;\r\n }\r\n return hidePropertyName\r\n}\r\n\r\n/**\r\n * common function for displaying/hiding the feature\r\n * @param feature {featureInterface}\r\n * @param forPage {string} quotingTool || visualizer\r\n * @param fromQtCategory {string} for specific category\r\n * @param visualizerType {string} for specific visualizerType\r\n * @return {boolean}\r\n */\r\nexport const isFeatureEnabled = (feature, forPage = \"quotingTool\", fromQtCategory = \"\", visualizerType = getCommonVisualizerType()) => {\r\n\r\n // if (feature.dbFeature.sharedFeatureName === \"53010 1 American Standard Ceramic\") { // for testing\r\n // debugger;//eslint-disable-line\r\n // }\r\n\r\n const hidePropertyName = getOldHidePropertyName(forPage, visualizerType);\r\n\r\n if (feature.inCatProperties && fromQtCategory && feature.inCatProperties.hasOwnProperty(fromQtCategory)\r\n && feature.inCatProperties[fromQtCategory].hasOwnProperty(hidePropertyName)) {\r\n return !feature.inCatProperties[fromQtCategory][hidePropertyName]\r\n }\r\n\r\n const toolSettings = feature.dbFeature.toolSettings;\r\n if (Array.isArray(toolSettings) && toolSettings.length) {\r\n const checkProperty = forPage === \"quotingTool\" ? \"enableQuotingTool\" : \"enableVisualizer\";\r\n return toolSettings.some(toolSettingsObject => toolSettingsObject.tool === visualizerType && toolSettingsObject[checkProperty])\r\n }\r\n\r\n return !feature.dbFeature[hidePropertyName]\r\n}\r\n\r\nconst setFabricatorFeatureCategoriesProperties = (feature) => {\r\n if (Array.isArray(feature.dbFeature.fabricatorFeatureCategories) && feature.dbFeature.fabricatorFeatureCategories.length && !feature.fabricatorFeatureCategoriesPropertiesAreSet) {\r\n const parent = feature.getParent();\r\n const layout = parent.layout || parent.getParent().layout; // Floor & ceiling doesn't have getParent() function\r\n if (layout.qtCategoriesList && parent.qtCategoryName) { // do not change to qtCategory since there will be a Maximum call stack\r\n if (!feature.inCatProperties) {\r\n feature.inCatProperties = {};\r\n }\r\n Object.keys(parent.qtCatProperties).forEach(qtCatName => {\r\n const inCat = layout.qtCategoriesList.find(qtCat => qtCat.name === qtCatName);\r\n if (!inCat) {\r\n return\r\n }\r\n for (let i = 0; i < feature.dbFeature.fabricatorFeatureCategories.length; i++) {\r\n const currentFabricatorFeatureCategory = feature.dbFeature.fabricatorFeatureCategories[i];\r\n if (currentFabricatorFeatureCategory.fabricatorFeatureCategoryId === inCat.id) {\r\n if (!feature.inCatProperties[qtCatName]) {\r\n feature.inCatProperties[qtCatName] = {};\r\n }\r\n if (currentFabricatorFeatureCategory.price !== null) {\r\n feature.inCatProperties[qtCatName].inCatPrice = currentFabricatorFeatureCategory.price;\r\n }\r\n if (currentFabricatorFeatureCategory.cost !== null) {\r\n feature.inCatProperties[qtCatName].inCatCost = currentFabricatorFeatureCategory.cost;\r\n }\r\n if (currentFabricatorFeatureCategory.fabricatorCost !== null) {\r\n feature.inCatProperties[qtCatName].inCatFabCost = currentFabricatorFeatureCategory.fabricatorCost; // not used for now\r\n }\r\n if (currentFabricatorFeatureCategory.displayName !== null) {\r\n feature.inCatProperties[qtCatName].inCatName = currentFabricatorFeatureCategory.displayName;\r\n }\r\n if (currentFabricatorFeatureCategory.complexLogic) {\r\n feature.inCatProperties[qtCatName].complexLogic = currentFabricatorFeatureCategory.complexLogic;\r\n }\r\n if (Array.isArray(currentFabricatorFeatureCategory.toolSettings) && currentFabricatorFeatureCategory.toolSettings.length) {\r\n const bvSetting = currentFabricatorFeatureCategory.toolSettings.find(setting => setting.tool === \"bathroom\");\r\n const kvSetting = currentFabricatorFeatureCategory.toolSettings.find(setting => setting.tool === \"kitchen\");\r\n if (bvSetting) {\r\n feature.inCatProperties[qtCatName].hideFromBathroomVisualizer = !bvSetting.enableVisualizer;\r\n feature.inCatProperties[qtCatName].hideFromBVQT = !bvSetting.enableQuotingTool;\r\n }\r\n if (kvSetting) {\r\n feature.inCatProperties[qtCatName].hideFromKitchenVisualizer = !kvSetting.enableVisualizer;\r\n feature.inCatProperties[qtCatName].hideFromFrontEnd = !kvSetting.enableQuotingTool;\r\n }\r\n } else { // old logic\r\n // feature.inCatProperties[qtCatName].hideFromBathroomVisualizer = currentFabricatorFeatureCategory.hideFromBV;\r\n feature.inCatProperties[qtCatName].hideFromBathroomVisualizer\r\n = feature.dbFeature.fabricatorFeatureCategories.every(fCat => fCat.hideFromBV) && feature.dbFeature.hideFromBV; // hide feature from visualizer only if it is disabeld everywhere\r\n feature.inCatProperties[qtCatName].hideFromBVQT = currentFabricatorFeatureCategory.hideFromBVQT;\r\n // feature.inCatProperties[qtCatName].hideFromKitchenVisualizer = currentFabricatorFeatureCategory.hideFromKV;\r\n feature.inCatProperties[qtCatName].hideFromKitchenVisualizer =\r\n feature.dbFeature.fabricatorFeatureCategories.every(fCat => fCat.hideFromKV) && feature.dbFeature.hideFromKV; // hide feature from visualizer only if it is disabeld everywhere\r\n feature.inCatProperties[qtCatName].hideFromFrontEnd = currentFabricatorFeatureCategory.hideFromKVQT;\r\n }\r\n break;\r\n }\r\n }\r\n });\r\n feature.fabricatorFeatureCategoriesPropertiesAreSet = true;\r\n }\r\n }\r\n return feature\r\n}\r\n\r\nexport const isVisibleForNavigation = (feature, withQuotingToolFeatures, forActiveQTCategory = \"\") => {\r\n\r\n if (!feature || !feature.dbFeature) { // 1) check for something unexpected (just in case)\r\n return false\r\n }\r\n\r\n feature = setFabricatorFeatureCategoriesProperties(feature); // 2) set properties from fabricatorFeatureCategories\r\n\r\n if (feature.dbFeature.autoAddToCart) {\r\n return document.kvConfig.userId === 157678 //hardcode https://tshopinc.quotekitchenandbath.com/kitchen?mode=dashboard they should have labor feature displayed\r\n } else if (withQuotingToolFeatures && (withQuotingToolFeatures !== \"all\") // for look and product journey - we show all features\r\n && !isFeatureEnabled(feature, \"quotingTool\", forActiveQTCategory)) {\r\n return false\r\n } else if (withQuotingToolFeatures && (withQuotingToolFeatures === \"all\") // for look and product journey - we show all features (enabled)\r\n && !isFeatureEnabled(feature, \"quotingTool\", forActiveQTCategory)\r\n && !isFeatureEnabled(feature, \"visualizer\", forActiveQTCategory)) {\r\n return false\r\n } else if (feature.dbFeature.displayLogic) {\r\n const storeState = store.getState();\r\n return featureIsMatchingDisplayLogic(\r\n feature,\r\n storeState.cartState.cartItems,\r\n storeState.quotesState.activeQuoteIndex,\r\n storeState.wizardState.allWizardsValues,\r\n )\r\n }\r\n return true\r\n};\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport store from \"../../store\";\r\nimport {showSuccessNotification} from \"../../actions/actionFunctions\";\r\n\r\nclass SuccessNotification extends React.Component {\r\n\r\n state = {\r\n opened: false,\r\n isHiding: false\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.successNotification.show && !this.props.successNotification.show) {\r\n setTimeout(() => { // let it render first\r\n this.setState({\r\n opened: true\r\n })\r\n }, 0)\r\n } else if (!nextProps.successNotification.show && this.props.successNotification.show) {\r\n this.setState({\r\n isHiding: true,\r\n opened: false\r\n }, () => {\r\n setTimeout(() => {\r\n this.setState({\r\n isHiding: false\r\n })\r\n }, 500)\r\n })\r\n }\r\n }\r\n\r\n render() {\r\n const {show, icon, title, message} = this.props.successNotification;\r\n\r\n return show || this.state.isHiding ? (\r\n
\r\n
\r\n
\r\n
\r\n

\r\n

\r\n \r\n

\r\n
\r\n
\r\n
\r\n ) : null;\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n successNotification: store.serverState.successNotification,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {})(SuccessNotification);\r\n\r\nexport const showQuoteSavedNotification = (title = \"successNotification.titleQuoteSaved\") => {\r\n if (document.kvConfig.visualizerOnly && (title === \"successNotification.titleQuoteSaved\")) {\r\n title = \"successNotification.titleDesignSaved\";\r\n }\r\n if (store.getState().serverState.successNotification) {\r\n window.clearTimeout(window.saveQuoteTimeoutId);\r\n store.dispatch(showSuccessNotification({\r\n show: false\r\n }));\r\n }\r\n store.dispatch(showSuccessNotification({\r\n show: true,\r\n icon: \"calculate\",\r\n title,\r\n message: \"successNotification.messageQuoteSaved\"\r\n }));\r\n window.saveQuoteTimeoutId = setTimeout(() => {\r\n store.dispatch(showSuccessNotification({\r\n show: false\r\n }));\r\n }, 3000)\r\n}\r\n","import store from \"../store\";\r\nimport enhanceCanvas from \"../bvcomponents/visComponents/canvasEnhancements\";\r\nimport Misc from \"./misc\";\r\nimport {IS_LIXIL_UI} from \"../config\";\r\n\r\nconst createCanvas = (width, height) => {\r\n const canvas = document.createElement('canvas');\r\n canvas.width = width;\r\n canvas.height = height;\r\n let backCtx = canvas.getContext('2d');\r\n // backCtx.fillStyle = \"#FFFFFF\";\r\n // backCtx.fillRect(0, 0, canvas.width, canvas.height);\r\n return {canvas, backCtx}\r\n}\r\n\r\nconst finishDraw = async (images, errorImages, layers, size = null, backgroundLayers = [], quality, useNewEnhance = false) => {\r\n\r\n //0) delete images that couldn't be loaded\r\n if (errorImages && errorImages.length) {\r\n images = images.filter(image => image && image.src && !errorImages.includes(image.src));\r\n }\r\n\r\n const width = size ? size.width : 720; // 1920\r\n const height = size ? size.height : 405; // 1080\r\n const maxWidth = 1920;\r\n const maxHeight = 1080;\r\n\r\n // 1) create canvas\r\n const canvasObject1 = createCanvas(width, height);\r\n canvasObject1.backCtx.fillStyle = \"#FFFFFF\";\r\n canvasObject1.backCtx.fillRect(0, 0, canvasObject1.canvas.width, canvasObject1.canvas.height);\r\n const canvasObject3 = createCanvas(maxWidth, maxHeight); // for crops\r\n\r\n // 2) put all background layout layers\r\n if (backgroundLayers.length) {\r\n const canvasObject2 = createCanvas(width, height);\r\n canvasObject2.backCtx.globalCompositeOperation = \"lighten\";\r\n images.forEach((imageObject) => {\r\n const layer = backgroundLayers.find(layer => layer.image === imageObject.src);\r\n if (layer) {\r\n if (layer.cropCoords && (document.kvConfig.visualizerType !== \"kvScene\")) {\r\n canvasObject3.backCtx.clearRect(0, 0, maxWidth, maxHeight);\r\n let layerWidth = layer.cropCoords[2] - layer.cropCoords[0];\r\n let layerHeight = layer.cropCoords[3] - layer.cropCoords[1];\r\n canvasObject3.backCtx.drawImage(imageObject, 0, 0, layerWidth, layerHeight, layer.cropCoords[0], layer.cropCoords[1], layerWidth, layerHeight);\r\n canvasObject3.backCtx.drawImage(canvasObject3.canvas, 0, 0, maxWidth, maxHeight,0, 0, width, height);\r\n } else if (layer.layerDimensions) {\r\n const dim = layer.layerDimensions;\r\n // console.log('yep', dim.width, dim.height, dim.polygonArray[0][0], dim.polygonArray[0][1], dim.width, dim.height);\r\n canvasObject2.backCtx.drawImage(imageObject, 0, 0, dim.width, dim.height, dim.polygonArray[0][0], dim.polygonArray[0][1], dim.width, dim.height);\r\n } else {\r\n imageObject.width = width;\r\n imageObject.height = height;\r\n canvasObject2.backCtx.drawImage(imageObject, 0, 0, width, height);\r\n }\r\n }\r\n });\r\n enhanceCanvas(canvasObject2.canvas, useNewEnhance);\r\n canvasObject1.backCtx.drawImage(canvasObject2.canvas, 0, 0, width, height, 0, 0, width, height);\r\n }\r\n\r\n // 3) put all layout layers\r\n for (const loadedImage of images) {\r\n const layer = layers.find(layers => layers.image === loadedImage.src);\r\n if (layer && backgroundLayers.every(layer => layer.image !== loadedImage.src)) {\r\n if (layer.cropCoords) {\r\n canvasObject3.backCtx.clearRect(0, 0, maxWidth, maxHeight);\r\n let layerWidth = layer.cropCoords[2] - layer.cropCoords[0];\r\n let layerHeight = layer.cropCoords[3] - layer.cropCoords[1];\r\n canvasObject3.backCtx.drawImage(loadedImage, 0, 0, layerWidth, layerHeight, layer.cropCoords[0], layer.cropCoords[1], layerWidth, layerHeight);\r\n await canvasObject1.backCtx.drawImage(canvasObject3.canvas, 0, 0, maxWidth, maxHeight,0, 0, width, height);\r\n // } else if (loadedImage.layerDimensions) {\r\n // console.log(\"loadedImage layerDimensions\", loadedImage.layerDimensions, loadedImage.src);\r\n // const dim = loadedImage.layerDimensions;\r\n // // console.log('yep', dim.width, dim.height, dim.polygonArray[0][0], dim.polygonArray[0][1], dim.width, dim.height);\r\n // canvasObject1.backCtx.drawImage(loadedImage, 0, 0, dim.width, dim.height, dim.polygonArray[0][0], dim.polygonArray[0][1], dim.width, dim.height);\r\n // } else if (loadedImage.coords) {\r\n // const min_x = width*loadedImage.coords.min_x;\r\n // const min_y = height*loadedImage.coords.min_y;\r\n // canvasObject1.backCtx.drawImage(loadedImage, 0, 0, loadedImage.width, loadedImage.height, min_x, min_y, loadedImage.width, loadedImage.height);\r\n } else {\r\n loadedImage.width = width;\r\n loadedImage.height = height;\r\n await canvasObject1.backCtx.drawImage(loadedImage, 0, 0, width, height);\r\n }\r\n if (Misc.isMobile() && IS_LIXIL_UI) { // we have to add some time for mobile safari, because of the process stuck\r\n await new Promise(resolve => setTimeout(resolve, 100));\r\n }\r\n }\r\n }\r\n // return canvas.toDataURL('image/png') // the size is 5.8Mb -- too much, let's use jpeg - it's only 600Kb\r\n return canvasObject1.canvas.toDataURL(\"image/jpeg\", quality)\r\n};\r\n\r\nconst getSubscriptionThumbnail = () => {\r\n const fabricatorState = store.getState().fabricatorState;\r\n if (fabricatorState.fabricatorSubscriptions) {\r\n let thumbnail = \"\";\r\n fabricatorState.fabricatorSubscriptions.forEach((subscription) => {\r\n if (subscription.thumbnail) {\r\n thumbnail = subscription.thumbnail\r\n }\r\n });\r\n return thumbnail\r\n }\r\n return \"\"\r\n}\r\n\r\n/**\r\n * A PROMISE! Returns the whole canvas image\r\n * @param layout\r\n * @param size\r\n * @param quality {number}\r\n * @param useNewEnhance {boolean}\r\n */\r\nexport const getImagePromiseFromLayout = (layout, size = null, quality = 0.7, useNewEnhance = false) => {\r\n if (!layout) {\r\n return Promise.resolve(getSubscriptionThumbnail())\r\n }\r\n const showPlaceHolders = document.bvConfig ? document.bvConfig.showPlaceholders : false;\r\n\r\n const layers = layout.getLayers(showPlaceHolders, true);\r\n if (!layers.length) {\r\n return Promise.resolve(getSubscriptionThumbnail())\r\n }\r\n\r\n const backGroundLayers = getBackgroundLayers(layers, layout);\r\n let imagesPromise = new Promise((resolve) => {\r\n let cnt = 0;\r\n const images = [];\r\n const errorImages = [];\r\n layers.forEach((layer) => {\r\n const image = new Image();\r\n image.crossOrigin = 'Anonymous';\r\n image.layerDimensions = layer.layerDimensions || null;\r\n image.coords = layer.coords || null;\r\n images.push(image);\r\n image.onload = () => {\r\n cnt++;\r\n if (cnt === layers.length) {\r\n resolve(finishDraw(images, errorImages, layers, size, backGroundLayers, quality, useNewEnhance))\r\n }\r\n };\r\n image.onerror = () => {\r\n //display error\r\n console.error('Coudn\\'t load image:', image.src);\r\n cnt++;\r\n errorImages.push(image.src);\r\n if (cnt === layers.length) {\r\n resolve(finishDraw(images, errorImages, layers, size, backGroundLayers, quality, useNewEnhance))\r\n }\r\n };\r\n try {\r\n image.src = layer.image;\r\n } catch (e) {\r\n console.log(e, 'Can\\'t apply image src', layer.image);\r\n }\r\n });\r\n });\r\n return imagesPromise.then(response => response)\r\n};\r\n\r\n/**\r\n * @param layers {array}\r\n * @param layout {object}\r\n * @param newLayoutType {boolean}\r\n * @returns layersArray {array}\r\n */\r\nexport const getBackgroundLayers = (layers, layout, newLayoutType = false) => {\r\n if ((layout && layout.isNewLayout) || newLayoutType) {\r\n return layers.filter((layer) => layer.zIndex >= 50000)\r\n }\r\n if (!layout) { // just in case\r\n return []\r\n }\r\n const name = layout.getCurrentLayoutName();\r\n return layers.filter((layer) => {\r\n return layout.zIndexes[name] && layout.zIndexes[name].Background &&\r\n Object.values(layout.zIndexes[name].Background).some(zIndex => zIndex === layer.zIndex);\r\n })\r\n};\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from 'react-redux';\r\nimport $ from \"jquery\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport {setCountertopsApplyTo, setCountertopsApplyToBathroom} from \"../../../actions/navigationFunctions\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {loaderDisable, loaderEnable} from \"../../ui/loaderView\";\r\nimport Navigation from \"../../visComponents/navigation/navigation\";\r\nimport ActionTypes from \"../../../misc/actionTypes\";\r\nimport store from \"../../../store\";\r\nimport {COUNTERTOP_GROUP} from \"../core/constants\";\r\nimport UiSelect from \"../../ui/select\";\r\nimport Analytics from '../../../analytics';\r\nimport {COUNTERTOP_GROUP_BATHROOM} from \"../../bvSceneComponent/core/constants\";\r\nimport {getFeatureGroupName} from \"../../../misc/helpers\";\r\nimport {updateCanvasCount} from \"../../../actions/actionFunctions\";\r\nimport {getCommonVisualizerType} from \"../../../config\";\r\nimport {featureHasSelectedFilters, getAllFeatureFilters, getFilterGroupValues} from \"../../../misc/utils\";\r\n\r\nconst getIsBathroom = () => {\r\n return getCommonVisualizerType() === \"bathroom\"\r\n};\r\n\r\nclass CountertopSwitchers extends Component {\r\n\r\n static propTypes = {\r\n activeSubPart: PropTypes.object.isRequired,\r\n isMobile: PropTypes.bool,\r\n isMaterials: PropTypes.bool,\r\n showAsDropdown: PropTypes.bool,\r\n };\r\n\r\n componentDidMount() {\r\n this.setToggledByUserProperty(this.props);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.activeSubPart.partId !== this.props.activeSubPart.partId) {\r\n this.setToggledByUserProperty(nextProps);\r\n }\r\n }\r\n\r\n setToggledByUserProperty = (props) => {\r\n const currentCategoryPartId = props.activeSubPart.partId;\r\n\r\n const isBathroom = getIsBathroom();\r\n\r\n const COUNTERTOPGROUPS = isBathroom ? COUNTERTOP_GROUP_BATHROOM : COUNTERTOP_GROUP;\r\n const applyTo = isBathroom ? this.props.countertopsApplyToBathroom : this.props.countertopsApplyTo;\r\n\r\n COUNTERTOPGROUPS.forEach(partId => {\r\n if (partId === currentCategoryPartId) {\r\n if (COUNTERTOPGROUPS.some(newPartId => {\r\n return (newPartId !== currentCategoryPartId) && !applyTo[newPartId].includes(currentCategoryPartId)\r\n })) {\r\n props.activeSubPart.toggleSwitchedOffByUser = true;\r\n }\r\n } else {\r\n if (!applyTo[partId].includes(currentCategoryPartId)) {\r\n const neededSubPart = getCurrentLayout().getSubPartByPartId(partId);\r\n if (neededSubPart) {\r\n neededSubPart.part.toggleSwitchedOffByUser = true;\r\n }\r\n }\r\n }\r\n });\r\n };\r\n\r\n getUpdatedCountertopSwitcherButtons = (partId) => {\r\n const applyTo = getIsBathroom() ? this.props.countertopsApplyToBathroom : this.props.countertopsApplyTo;\r\n let countertopsApplyTo = applyTo[this.props.activeSubPart.partId];\r\n const existingIndex = countertopsApplyTo.findIndex(countertopsApplyToPartId => countertopsApplyToPartId === partId);\r\n if (existingIndex > -1) {\r\n countertopsApplyTo.splice(existingIndex, 1)\r\n } else {\r\n countertopsApplyTo.push(partId)\r\n }\r\n let countertopsApplyTo2 = applyTo[partId];\r\n const existingIndex2 = countertopsApplyTo2.findIndex(countertopsApplyToPartId => countertopsApplyToPartId === this.props.activeSubPart.partId);\r\n if (existingIndex > -1) {\r\n countertopsApplyTo2.splice(existingIndex2, 1)\r\n } else {\r\n countertopsApplyTo2.push(this.props.activeSubPart.partId)\r\n }\r\n this.setToggleOffProperies(partId, countertopsApplyTo, countertopsApplyTo2);\r\n return {\r\n [this.props.activeSubPart.partId]: countertopsApplyTo,\r\n [partId]: countertopsApplyTo2\r\n }\r\n };\r\n\r\n static updateCountertopSwitcherButtons = (partId, currentGroupPartId, propsCountertopsApplyTo = {}) => {\r\n let countertopsApplyTo = propsCountertopsApplyTo[currentGroupPartId];\r\n const existingIndex = countertopsApplyTo.findIndex(countertopsApplyToPartId => countertopsApplyToPartId === partId);\r\n if (existingIndex > -1) {\r\n countertopsApplyTo.splice(existingIndex, 1)\r\n } else {\r\n countertopsApplyTo.push(partId)\r\n }\r\n let countertopsApplyTo2 = propsCountertopsApplyTo[partId];\r\n const existingIndex2 = countertopsApplyTo2.findIndex(countertopsApplyToPartId => countertopsApplyToPartId === currentGroupPartId);\r\n if (existingIndex > -1) {\r\n countertopsApplyTo2.splice(existingIndex2, 1)\r\n } else {\r\n countertopsApplyTo2.push(currentGroupPartId)\r\n }\r\n const setApplyTo = getIsBathroom() ? setCountertopsApplyToBathroom : setCountertopsApplyTo;\r\n store.dispatch(setApplyTo({\r\n [currentGroupPartId]: countertopsApplyTo,\r\n [partId]: countertopsApplyTo2\r\n }));\r\n };\r\n\r\n setToggleOffProperies = (partId, countertopsApplyTo, countertopsApplyTo2) => {\r\n this.props.activeSubPart.toggleSwitchedOffByUser = !countertopsApplyTo.includes(partId);\r\n const neededSubPart = getCurrentLayout().getSubPartByPartId(partId);\r\n if (neededSubPart) {\r\n neededSubPart.part.toggleSwitchedOffByUser = !countertopsApplyTo2.includes(this.props.activeSubPart.partId);\r\n }\r\n };\r\n\r\n toggleCountertopsApplyTo = (partId) => {\r\n Analytics.sendClickEvent('countertop-apply-to-' + partId);\r\n const setApplyTo = getIsBathroom() ? this.props.setCountertopsApplyToBathroom : this.props.setCountertopsApplyTo;\r\n setApplyTo(this.getUpdatedCountertopSwitcherButtons(partId));\r\n };\r\n\r\n getButtonName = (partId, layout) => {\r\n const {intl, fabricatorData} = this.props;\r\n if (intl.locale !== \"en-EN\") {\r\n const featureGroup = layout.getFeatureGroupByPartId(partId);\r\n if (featureGroup) {\r\n return getFeatureGroupName(featureGroup, intl, fabricatorData)\r\n }\r\n }\r\n switch (partId) {\r\n case \"countertop\":\r\n case \"vanity_countertop\":\r\n return \"countertop\";\r\n case \"backsplash\":\r\n case \"vanity_backsplash\":\r\n return \"backsplash\";\r\n case \"center_island_countertop\":\r\n return \"center island\";\r\n default:\r\n return \"\"\r\n }\r\n };\r\n\r\n static checkForTileBacksplash = (clickedFeature) => {\r\n if (getIsBathroom() || (clickedFeature.partId !== \"backsplash\")) {\r\n return false\r\n }\r\n const {filterState} = store.getState();\r\n if (!filterState || !Array.isArray(filterState.filterGroups)) {\r\n return false\r\n }\r\n const typeGroup = filterState.filterGroups.find(group => group.name === \"Type\");\r\n if (!typeGroup || !typeGroup.id || !typeGroup.values) {\r\n return false\r\n }\r\n const featureFilters = getAllFeatureFilters(clickedFeature);\r\n if (!featureFilters || !Array.isArray(featureFilters[typeGroup.id])) {\r\n return false\r\n }\r\n return [\"Tile\", \"Mosaic\", \"Linear Mosaic\", \"Mosaic Tiles\"].some(filterName => {\r\n const tileFilterValue = typeGroup.values.find(val => val.value === filterName);\r\n return tileFilterValue && featureFilters[typeGroup.id].includes(tileFilterValue.id)\r\n })\r\n }\r\n\r\n static applyAllCountertops = (navigationItemPart, ignoreLocked, passedArrayApplyTo = null, setCurrentFeature = false) => {\r\n const isBathroom = getIsBathroom();\r\n const COUNTERTOPGROUPS = isBathroom ? COUNTERTOP_GROUP_BATHROOM : COUNTERTOP_GROUP;\r\n const propsCountertopsApplyTo = store.getState().navigationState[\r\n isBathroom ? \"countertopsApplyToBathroom\" : \"countertopsApplyTo\"\r\n ];\r\n const clickedPartId = navigationItemPart.partId;\r\n const layout = getCurrentLayout();\r\n const countertopsApplyTo = passedArrayApplyTo\r\n || propsCountertopsApplyTo[clickedPartId] ? [...propsCountertopsApplyTo[clickedPartId]] : [];\r\n const existingIndex = countertopsApplyTo.findIndex(countertopsApplyToPartId => countertopsApplyToPartId === clickedPartId);\r\n if (existingIndex > -1) {\r\n countertopsApplyTo.splice(existingIndex, 1); // remove already clicked partId\r\n }\r\n const missingFeatures = [];\r\n layout.getFeatures().forEach(parentGroup => {\r\n let relatedItems = parentGroup.relatedItems;\r\n relatedItems.forEach((relatedItem) => {\r\n const currentPartId = relatedItem.partId;\r\n if (COUNTERTOPGROUPS.includes(currentPartId) && (currentPartId !== clickedPartId)\r\n && (countertopsApplyTo.includes(relatedItem.partId) || !relatedItem.toggleSwitchedOffByUser)) {\r\n const navigationItemName = navigationItemPart.getCountertopGroupsSplittedFeatureName();\r\n if (document.kvConfig.toolVersion !== 4) {\r\n const {navigationState} = store.getState();\r\n if (!navigationState.useFeaturesLightRequest.countertops\r\n && (!Array.isArray(relatedItem.alreadyRequestedFeatureNames) || !relatedItem.alreadyRequestedFeatureNames.includes(navigationItemName))) {\r\n // we should request every time! yes, because they have different manufacturers, and the same name\r\n missingFeatures.push({relatedItem, navigationItemName, ignoreLocked, fromFeature: navigationItemPart});\r\n return false\r\n }\r\n }\r\n let neededFeature = CountertopSwitchers.getNeededFeatureFromNavItems(navigationItemPart, relatedItem);\r\n if (!neededFeature && (document.kvConfig.visualizerType === \"Kitchen\")\r\n && !layout.getCurrentLayoutAbbreviation().includes(\"I\") && (currentPartId === \"center_island_countertop\")) {\r\n neededFeature = relatedItem.featuresList[\"LShapeWithPeninsulaWithIsland\"]\r\n && relatedItem.featuresList[\"LShapeWithPeninsulaWithIsland\"].find((feature) => {\r\n const featureName = feature.getCountertopGroupsSplittedFeatureName();\r\n return featureName === navigationItemName\r\n });\r\n if (neededFeature) {\r\n neededFeature = {part: neededFeature}\r\n }\r\n }\r\n if (neededFeature && !neededFeature.part.notAvailableInVisualizer) {\r\n if (setCurrentFeature) {\r\n relatedItem.activeFeatureBeforeAllWalls = relatedItem.activeFeature;\r\n }\r\n neededFeature.part.clickFromAllWalls(ignoreLocked);\r\n if (!relatedItem.toggleSwitchedOffByUser && !countertopsApplyTo.includes(currentPartId)) {\r\n CountertopSwitchers.updateCountertopSwitcherButtons(currentPartId, clickedPartId, propsCountertopsApplyTo);\r\n }\r\n } else {\r\n if (CountertopSwitchers.checkForTileBacksplash(navigationItemPart)) {\r\n return false\r\n }\r\n missingFeatures.push({relatedItem, navigationItemName, ignoreLocked, fromFeature: navigationItemPart})\r\n }\r\n }\r\n })\r\n });\r\n return CountertopSwitchers.getMissingFeaturesAndClickThem(missingFeatures, navigationItemPart, setCurrentFeature);\r\n };\r\n\r\n static getNeededFeatureFromNavItems = (fromFeature, featureGroup) => {\r\n let navItems;\r\n const isNewKitchen = (document.kvConfig.toolVersion !== 4);\r\n const isNewKitchenBacksplash = featureGroup.partId === \"backsplash\" && isNewKitchen;\r\n navItems = featureGroup.navigationSubItems();\r\n const navigationItemName = fromFeature.getCountertopGroupsSplittedFeatureName();\r\n let matchingFeatures = navItems.filter(navFeature => {\r\n if (navFeature.part.notAvailableInVisualizer) {\r\n return false\r\n }\r\n const featureName = navFeature.part.getSplittedFeatureName();\r\n const featureName2 = navFeature.part.getCountertopGroupsSplittedFeatureName();\r\n return featureName && (featureName === navigationItemName || featureName2 === navigationItemName)\r\n });\r\n if (matchingFeatures.length > 1 && isNewKitchen) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const manufacturerFilterGroup = filterGroups.find(group => (group.name || \"\").trim() === \"Manufacturer\");\r\n if (manufacturerFilterGroup) {\r\n const featureManValues = getFilterGroupValues(fromFeature, manufacturerFilterGroup);\r\n if (featureManValues && featureManValues.length) {\r\n const withSameManufacturerFeatures = matchingFeatures.filter(navItem => featureHasSelectedFilters(navItem.part, [{\r\n filterGroupId: manufacturerFilterGroup.id,\r\n filterId: featureManValues[0],\r\n }]));\r\n if (withSameManufacturerFeatures.length) {\r\n console.log(\"withSameManufacturerFeatures FOUBD!!\", withSameManufacturerFeatures);\r\n matchingFeatures = withSameManufacturerFeatures;\r\n }\r\n }\r\n }\r\n }\r\n if (isNewKitchenBacksplash) {\r\n const currentHeight = featureGroup.getCurrentActiveFeatureType();\r\n if (currentHeight) {\r\n const sameHeight = matchingFeatures.filter(navItem => featureGroup.getFeatureBacksplashType(navItem.part) === currentHeight);\r\n if (sameHeight.length) {\r\n console.log(\"Same Height Found\", sameHeight);\r\n return sameHeight[0]\r\n }\r\n }\r\n }\r\n return matchingFeatures[0] || null\r\n }\r\n\r\n static getMissingFeaturesAndClickThem = (missingFeatures, navigationItemPart, setCurrentFeature = false) => {\r\n if (missingFeatures.length) {\r\n const isBathroom = getIsBathroom();\r\n window.requestInProcess = true;\r\n loaderEnable();\r\n const promises = missingFeatures.map((missingFeatureObject) => {\r\n const relatedItem = missingFeatureObject.relatedItem;\r\n return Navigation.searchFeaturesByName(relatedItem, missingFeatureObject.navigationItemName)\r\n .then(response => {\r\n function turnOffToggles() { // turn off the toggles if feature isn't found\r\n const navItemParent = navigationItemPart.getParent();\r\n if (!navItemParent.toggleSwitchedOffByUser) { // current category\r\n let countertopsApplyTo = store.getState().navigationState[\r\n isBathroom ? \"countertopsApplyToBathroom\" : \"countertopsApplyTo\"\r\n ];\r\n const existingIndex = countertopsApplyTo[navigationItemPart.partId].findIndex(countertopsApplyToPartId => countertopsApplyToPartId === relatedItem.partId);\r\n if (existingIndex > -1) {\r\n countertopsApplyTo[navigationItemPart.partId].splice(existingIndex, 1);\r\n }\r\n if (!relatedItem.toggleSwitchedOffByUser) { // turn off the toggles if feature isn't found (mirrored category)\r\n const existingIndex = countertopsApplyTo[relatedItem.partId].findIndex(countertopsApplyToPartId => countertopsApplyToPartId === navigationItemPart.partId);\r\n if (existingIndex > -1) {\r\n countertopsApplyTo[relatedItem.partId].splice(existingIndex, 1);\r\n }\r\n }\r\n const setApplyTo = isBathroom ? setCountertopsApplyToBathroom : setCountertopsApplyTo;\r\n store.dispatch(setApplyTo(countertopsApplyTo));\r\n }\r\n }\r\n if (response && response.length) {\r\n let neededFeature = CountertopSwitchers.getNeededFeatureFromNavItems(missingFeatureObject.fromFeature, relatedItem);\r\n if (neededFeature) {\r\n let countertopsApplyTo = store.getState().navigationState[\r\n isBathroom ? \"countertopsApplyToBathroom\" : \"countertopsApplyTo\"\r\n ];\r\n if (setCurrentFeature) {\r\n relatedItem.activeFeatureBeforeAllWalls = relatedItem.activeFeature;\r\n }\r\n neededFeature.part.clickFromAllWalls(missingFeatureObject.ignoreLocked);\r\n if (!relatedItem.toggleSwitchedOffByUser && !countertopsApplyTo[navigationItemPart.partId].includes(relatedItem.partId)) {\r\n CountertopSwitchers.updateCountertopSwitcherButtons(relatedItem.partId, navigationItemPart.partId, countertopsApplyTo, false);\r\n }\r\n } else {\r\n turnOffToggles()\r\n }\r\n } else {\r\n turnOffToggles()\r\n }\r\n if (!relatedItem.alreadyRequestedFeatureNames) {\r\n relatedItem.alreadyRequestedFeatureNames = [];\r\n }\r\n relatedItem.alreadyRequestedFeatureNames.push(missingFeatureObject.navigationItemName);\r\n return response\r\n });\r\n });\r\n return Promise.all(promises)\r\n .then(() => {\r\n window.requestInProcess = false;\r\n if (document.kvConfig.toolVersion !== 4) {\r\n loaderDisable();\r\n return\r\n }\r\n $(window).trigger(ActionTypes.CHANGE_LAYOUT); // update canvas\r\n store.dispatch(updateCanvasCount());\r\n setTimeout(() => {\r\n $(window).trigger(ActionTypes.CHANGE_LAYOUT); // update canvas\r\n loaderDisable();\r\n }, 0)\r\n // forceUpdate if needed\r\n });\r\n }\r\n };\r\n\r\n getValueText = () => {\r\n if (this.props.activeSubPart.partId === \"backsplash\") {\r\n if (this.props.windowWidth < 900) {\r\n return \r\n } else {\r\n return \r\n }\r\n } else {\r\n if (this.props.windowWidth < 620) {\r\n return \r\n } else if (this.props.windowWidth < 680) {\r\n return \r\n } else {\r\n return \r\n }\r\n }\r\n };\r\n\r\n buttonIsDisabled = (partId) => {\r\n const layout = getCurrentLayout();\r\n return this.props.activeSubPart.partId === partId\r\n || (document.kvConfig.visualizerType === \"Kitchen\" && partId === \"center_island_countertop\"\r\n && !layout.getCurrentLayoutAbbreviation().includes(\"I\"));\r\n }\r\n\r\n renderDropDown = () => {\r\n const isBathroom = getIsBathroom();\r\n const COUNTERTOPGROUPS = isBathroom ? COUNTERTOP_GROUP_BATHROOM : COUNTERTOP_GROUP;\r\n const applyTo = isBathroom ? this.props.countertopsApplyToBathroom : this.props.countertopsApplyTo;\r\n const countertopsApplyTo = applyTo[this.props.activeSubPart.partId];\r\n\r\n if (!countertopsApplyTo) {\r\n return null\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n\r\n return (\r\n \r\n {COUNTERTOPGROUPS.map(partId => {\r\n const disabledButton = this.buttonIsDisabled(partId);\r\n return (\r\n
  • \r\n disabledButton ? false : this.toggleCountertopsApplyTo(partId)}/>\r\n disabledButton ? false : this.toggleCountertopsApplyTo(partId)}>\r\n {this.getButtonName(partId, layout)}\r\n \r\n
  • \r\n )\r\n })}\r\n
    \r\n )\r\n };\r\n\r\n render() {\r\n\r\n if (this.props.showAsDropdown) {\r\n return this.renderDropDown()\r\n }\r\n\r\n const isBathroom = getIsBathroom();\r\n const COUNTERTOPGROUPS = isBathroom ? COUNTERTOP_GROUP_BATHROOM : COUNTERTOP_GROUP;\r\n const applyTo = isBathroom ? this.props.countertopsApplyToBathroom : this.props.countertopsApplyTo;\r\n const countertopsApplyTo = applyTo[this.props.activeSubPart.partId];\r\n const layout = getCurrentLayout();\r\n\r\n return (\r\n
    \r\n
    Apply to
    \r\n
      \r\n {COUNTERTOPGROUPS.map(partId => {\r\n const hideButton = this.buttonIsDisabled(partId);\r\n return hideButton ? null : (\r\n
    • this.toggleCountertopsApplyTo(partId)}>\r\n \r\n {this.getButtonName(partId, layout)}\r\n
      \r\n \r\n
      \r\n
    • \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n countertopsApplyTo: store.navigationState.countertopsApplyTo,\r\n countertopsApplyToBathroom: store.navigationState.countertopsApplyToBathroom,\r\n windowWidth: store.serverState.windowWidth,\r\n fabricatorData: store.fabricatorState,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setCountertopsApplyTo,\r\n setCountertopsApplyToBathroom\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(CountertopSwitchers)\r\n)\r\n","import React, {PureComponent} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { setExpandedFilters, setSelectedFilters, showFilters } from \"../../../../actions/actionFunctions\";\r\nimport FiltersBody from \"./filtersBody\";\r\n\r\nclass FiltersClass extends PureComponent {\r\n\r\n static propTypes = {\r\n id: PropTypes.string.isRequired,\r\n searchText: PropTypes.string.isRequired,\r\n handleSearchInputChange: PropTypes.func.isRequired,\r\n childItem: PropTypes.object\r\n };\r\n\r\n blurClickSet = false;\r\n\r\n componentDidMount() {\r\n this.props.setSelectedFilters([]); // reset filters on stones & color step\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.childItem && (!this.props.childItem\r\n || (this.props.childItem && nextProps.childItem.text !== this.props.childItem.text))) {\r\n this.props.setSelectedFilters([]);\r\n this.props.setExpandedFilters([]);\r\n }\r\n if (nextProps.visible && !this.blurClickSet) {\r\n this.blurClickSet = true;\r\n document.addEventListener('click', this.handleWrapperBlur);\r\n }\r\n }\r\n\r\n handleWrapperBlur = (e) => {\r\n if (!e.target.closest('[class*=\"filters\"]') && !e.target.closest(\".materials-button--search\") && this.props.id === this.props.activeFilterId) {\r\n this.props.showFilters(false);\r\n document.removeEventListener('click', this.handleWrapperBlur);\r\n this.blurClickSet = false;\r\n }\r\n };\r\n\r\n render() {\r\n return (\r\n
    \r\n {this.props.visible && this.props.childItem ? (\r\n \r\n ) : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n activeFilterId: store.filterState.filterId,\r\n visible: store.filterState.showFilters,\r\n filterVisible: store.filterState.filterVisible,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setSelectedFilters,\r\n setExpandedFilters,\r\n showFilters,\r\n};\r\nexport default connect(mapStateToProps, mapDispatchToProps)(FiltersClass);\r\n","export const LayoutType = {\r\n Layout1: 1,\r\n Layout2: 2,\r\n Layout41: 41,\r\n};\r\n\r\nexport const LayoutAbbreviation = {\r\n All: \"ALL\",\r\n Layout1: \"Layout1\",\r\n Layout2: \"Layout2\",\r\n Layout41: \"Layout41\",\r\n};\r\n\r\nexport const LayoutAbbreviations = [\r\n \"Layout1\",\r\n \"Layout2\",\r\n \"Layout41\",\r\n];\r\nexport const LayoutAbbreviationsToRemove = [\r\n \"Layout41\",\r\n \"Layout2\",\r\n \"Layout1\",\r\n];\r\n\r\nexport const METADATA = {\r\n ALL: \"ALL\"\r\n};\r\n\r\nexport const DECORS_MAX = 10;\r\n\r\nexport const SLAT_WALL_POSITIONS = [\"S1\",\"S2\",\"S3\",\"S4\"];\r\n","//INITIAL FLOW\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const setEmployeesList = (employeesList) => ({\r\n type: types.SET_EMPLOYEES_LIST,\r\n payload: {employeesList}\r\n});\r\n\r\nexport const setAlreadyRegisteredUserInfo = (alreadyRegisteredUserInfo) => ({\r\n type: types.SET_ALREADY_REGISTERED_USER,\r\n payload: {alreadyRegisteredUserInfo}\r\n});\r\n\r\nexport const setLeadCaptureClickCount = (leadCaptureClickCount) => ({\r\n type: types.SET_LEAD_CAPTURE_CLICK_COUNT,\r\n payload: {leadCaptureClickCount}\r\n});\r\n\r\nexport const setUserPopupContent = (userPopupContent) => ({\r\n type: types.SET_USER_POPUP_CONTENT,\r\n payload: {userPopupContent}\r\n});\r\n\r\nexport const setUserTwoFa = (userTwoFa) => ({\r\n type: types.SET_USER_TWO_FA,\r\n payload: {userTwoFa}\r\n});\r\n\r\nexport const setUserOptIn = (optIn) => ({\r\n type: types.SET_USER_OPT_IN,\r\n payload: {optIn}\r\n});\r\n","import {getIntersectCordsBetweenLines, getMidPoint, getPointDistance} from \"./sqftHelper\";\r\nimport polygonClipping from \"polygon-clipping\";\r\n\r\n/**\r\n * Get point position left or right from the line\r\n * if D = 0 - then searchedPoint is on the line\r\n * if D < 0 - then searchedPoint is on the left from the line\r\n * if D > 0 - then searchedPoint is on the right from the line\r\n * @param linePoint1 {{x: int, y: int}}\r\n * @param linePoint2 {{x: int, y: int}}\r\n * @param searchedPoint {{x: int, y: int}}\r\n */\r\nexport const getThePositionOfAPointToTheLeftOrRightOfALine = (linePoint1, linePoint2, searchedPoint) => {\r\n return (searchedPoint.x - linePoint1.x) * (linePoint2.y - linePoint1.y) - (searchedPoint.y - linePoint1.y) * (linePoint2.x - linePoint1.x)\r\n}\r\n\r\nfunction crossProduct(ax, ay, bx, by) {\r\n return ax * by - ay * bx;\r\n}\r\n\r\nfunction direction(ax, ay, bx, by, cx, cy) {\r\n return crossProduct(cx - ax, cy - ay, bx - ax, by - ay);\r\n}\r\n\r\nfunction onSegment(ax, ay, bx, by, cx, cy) {\r\n const withinX = (ax <= cx && cx <= bx) || (ax >= cx && cx >= bx);\r\n const withinY = (ay <= cy && cy <= by) || (ay >= cy && cy >= by);\r\n return withinX && withinY;\r\n}\r\n\r\n/**\r\n * Tests if line a-b intersects with line c-d, allow overlap will return false if lines are over each other\r\n * @param ax\r\n * @param ay\r\n * @param bx\r\n * @param by\r\n * @param cx\r\n * @param cy\r\n * @param dx\r\n * @param dy\r\n * @param allowOverlap\r\n */\r\nexport const getIntersectionCordsV2 = (ax, ay, bx, by, cx, cy, dx, dy, allowOverlap = true) => {\r\n const d1 = direction(ax, ay, bx, by, cx, cy);\r\n const d2 = direction(ax, ay, bx, by, dx, dy);\r\n const d3 = direction(cx, cy, dx, dy, ax, ay);\r\n const d4 = direction(cx, cy, dx, dy, bx, by);\r\n\r\n if (d1 * d2 < 0 && d3 * d4 < 0) {\r\n const A1 = by - ay;\r\n const B1 = ax - bx;\r\n const C1 = A1 * ax + B1 * ay;\r\n const A2 = dy - cy;\r\n const B2 = cx - dx;\r\n const C2 = A2 * cx + B2 * cy;\r\n\r\n const det = A1 * B2 - A2 * B1;\r\n if (det === 0) { // Collinear lines\r\n return null;\r\n } else {\r\n const x = (B2 * C1 - B1 * C2) / det;\r\n const y = (A1 * C2 - A2 * C1) / det;\r\n return [x, y];\r\n }\r\n }\r\n\r\n if (!allowOverlap && d1 === 0 && d2 === 0 && (onSegment(ax, ay, bx, by, cx, cy) || onSegment(ax, ay, bx, by, dx, dy))) {\r\n return null; //overlap each other\r\n }\r\n\r\n if ((d1 === 0 && onSegment(ax, ay, bx, by, cx, cy)) ||\r\n (d2 === 0 && onSegment(ax, ay, bx, by, dx, dy)) ||\r\n (d3 === 0 && onSegment(cx, cy, dx, dy, ax, ay)) ||\r\n (d4 === 0 && onSegment(cx, cy, dx, dy, bx, by))) {\r\n return null; //overlap only in one point\r\n }\r\n\r\n return null;\r\n}\r\n\r\n// Define a function to calculate the cross product of two vectors in 2D.\r\nexport function crossProduct2D(vectorA, vectorB) {\r\n // Calculate the cross product. Since the vectors are in 2D, the cross product will be a scalar.\r\n // vectorA.x * vectorB.y - vectorA.y * vectorB.x gives the Z component of the 3D cross product.\r\n return vectorA.x * vectorB.y - vectorA.y * vectorB.x;\r\n}\r\n\r\n/**\r\n * Finds the line in the `lines` array that is closest to referenceLine\r\n * and intersects the perpendicular line drawn from midpoint of referenceLine.\r\n *\r\n * @param {Line} referenceLine The line from which the perpendicular is drawn.\r\n * @param {Line[]} lines The array of lines to search in.\r\n * @return {{Line, point} | null} The found line or null if no line is found.\r\n */\r\nexport function findClosestIntersectingPointAndLine(referenceLine, lines) {\r\n // Find the perpendicular line to referenceLine\r\n const perpendicularVector = getPerpendicularMidpointVector(referenceLine);\r\n\r\n // Find all intersection points of the perpendicular line with the lines in the array\r\n const intersectionPointsAndLines = [];\r\n for (const line of lines) {\r\n // skip referenceLine\r\n if (line.id === referenceLine.id) {\r\n continue\r\n }\r\n //const intersectionPoint = getVectorIntersectionPoint(perpendicularVector, line);\r\n const intersectionPoint = getIntersectCordsBetweenLines(perpendicularVector.from, perpendicularVector.to, line.from, line.to, true ,true);\r\n\r\n if (intersectionPoint) {\r\n intersectionPointsAndLines.push({\r\n line,\r\n point: intersectionPoint,\r\n });\r\n }\r\n }\r\n\r\n return getClosestLineAndIntersectionPoint(referenceLine, intersectionPointsAndLines)\r\n}\r\n\r\n/**\r\n * Finds the line in the `lines` array that is closest to referenceLine\r\n * and intersects the perpendicular line drawn from midpoint of referenceLine.\r\n *\r\n * @return {{Line, point} | null} The found line or null if no line is found.\r\n * @param line\r\n * @param intersectionPointsAndLines\r\n */\r\nexport const getClosestLineAndIntersectionPoint = (line, intersectionPointsAndLines) => {\r\n let closestIntersectionPointAndLine = null;\r\n let minDistance = Infinity;\r\n for (const intersection of intersectionPointsAndLines) {\r\n const midPoint = getMidPoint(line.from, line.to);\r\n const distance = getPointDistance(midPoint, intersection.point);\r\n if (distance < minDistance) {\r\n minDistance = distance;\r\n closestIntersectionPointAndLine = intersection;\r\n }\r\n }\r\n\r\n return closestIntersectionPointAndLine;\r\n}\r\n\r\nexport const getPerpendicularMidpointVector = (line) => {\r\n const midPoint = getMidPoint(line.from, line.to);\r\n const vector = {\r\n x: line.from.y - line.to.y, // Изменение координат Y для получения перпендикуляра\r\n y: line.to.x - line.from.x, // Изменение координат X для получения перпендикуляра\r\n };\r\n\r\n // Вектор, начинающийся в серединной точке и проходящий через нее\r\n return {\r\n from: midPoint,\r\n to: {\r\n x: midPoint.x + vector.x,\r\n y: midPoint.y + vector.y,\r\n },\r\n };\r\n}\r\n\r\n// Function to find the convex hull using Graham's algorithm\r\nexport const convexHull = (points) => {\r\n // Sort points by Y (ascending) and then by X\r\n points.sort((a, b) => a.y === b.y ? a.x - b.x : a.y - b.y);\r\n // Function for calculating rotation: >0 if CCW, <0 if CW, 0 if collinear\r\n const cross = (o, a, b) => (a.x - o.x) * (b.y - o.y) - (a.y - o.y) * (b.x - o.x);\r\n\r\n const lower = [];\r\n for (let i = 0; i < points.length; i++) {\r\n while (lower.length >= 2 && cross(lower[lower.length - 2], lower[lower.length - 1], points[i]) <= 0) {\r\n lower.pop();\r\n }\r\n lower.push(points[i]);\r\n }\r\n\r\n const upper = [];\r\n for (let i = points.length - 1; i >= 0; i--) {\r\n while (upper.length >= 2 && cross(upper[upper.length - 2], upper[upper.length - 1], points[i]) <= 0) {\r\n upper.pop();\r\n }\r\n upper.push(points[i]);\r\n }\r\n\r\n // Deleting the last point of each half-shell (it is duplicated)\r\n lower.pop();\r\n upper.pop();\r\n\r\n // Concatenation of lower and upper shell\r\n return lower.concat(upper);\r\n}\r\n\r\n/////////////////////////////////////////////////////////////\r\n// function buildGraph(shapes) {\r\n// const graph = new Map();\r\n//\r\n// // Создаем узлы графа для каждой уникальной точки\r\n// for (const shape of shapes) {\r\n// for (let point of shape) {\r\n// point = roundPoint(point); // округляем точку\r\n// const key = `${point.x},${point.y}`;\r\n// if (!graph.has(key)) {\r\n// graph.set(key, {\r\n// ...point,\r\n// edges: new Set()\r\n// });\r\n// }\r\n// }\r\n// }\r\n//\r\n// // Добавляем рёбра между точками каждого шейпа\r\n// for (const shape of shapes) {\r\n// for (let i = 0; i < shape.length; i++) {\r\n// const current = roundPoint(shape[i]);\r\n// const next = roundPoint(shape[(i + 1) % shape.length]); // замкнутый контур\r\n// const currentKey = `${current.x},${current.y}`;\r\n// const nextKey = `${next.x},${next.y}`;\r\n//\r\n// graph.get(currentKey).edges.add(nextKey);\r\n// graph.get(nextKey).edges.add(currentKey);\r\n// }\r\n// }\r\n//\r\n// return graph;\r\n// }\r\n//\r\n// function findLeftBottomVertex(graph) {\r\n// let minVertex = null;\r\n// let minKey = null;\r\n// graph.forEach((value, key) => {\r\n// if (minVertex === null || value.y < minVertex.y || (value.y === minVertex.y && value.x < minVertex.x)) {\r\n// minVertex = value;\r\n// minKey = key;\r\n// }\r\n// });\r\n// return minKey;\r\n// }\r\n//\r\n// function findContours(shapes) {\r\n// const graph = buildGraph(shapes);\r\n// const startKey = findLeftBottomVertex(graph);\r\n// let currentKey = startKey;\r\n// let previousKey = null;\r\n// const result = [];\r\n//\r\n// do {\r\n// result.push(currentKey.split(',').map(Number)); // Добавляем текущую точку в контур\r\n// const currentVertex = graph.get(currentKey);\r\n// let nextKey = null;\r\n// let maxAngle = -Infinity;\r\n//\r\n// // Перебираем возможные следующие вершины\r\n// currentVertex.edges.forEach(key => {\r\n// if (key !== previousKey) { // Исключаем вернуться назад\r\n// const angle = calculateAngle(currentVertex, graph.get(previousKey), graph.get(key));\r\n// if (angle > maxAngle) {\r\n// maxAngle = angle;\r\n// nextKey = key;\r\n// }\r\n// }\r\n// });\r\n//\r\n// previousKey = currentKey;\r\n// currentKey = nextKey;\r\n// } while (currentKey !== startKey);\r\n//\r\n// return result.map(([x, y]) => ({ x, y }));\r\n// }\r\n//\r\n// function calculateAngle(current, previous, next) {\r\n// if (!previous) return 0; // Если предыдущая точка не задана, угол не вычисляется\r\n//\r\n// const vectorA = { x: current.x - previous.x, y: current.y - previous.y };\r\n// const vectorB = { x: next.x - current.x, y: next.y - current.y };\r\n// const dotProduct = vectorA.x * vectorB.x + vectorA.y * vectorB.y;\r\n// const magnitudeA = Math.sqrt(vectorA.x ** 2 + vectorA.y ** 2);\r\n// const magnitudeB = Math.sqrt(vectorB.x ** 2 + vectorB.y ** 2);\r\n//\r\n// // Косинус угла между векторами\r\n// const cosTheta = dotProduct / (magnitudeA * magnitudeB);\r\n//\r\n// // Возвращаем угол в радианах\r\n// return Math.acos(cosTheta);\r\n// }\r\n\r\n/**\r\n * Returns rounded shape points\r\n * @param {Array} shapesPoints shapes array\r\n * @returns {Array} shapes array with rounded points\r\n */\r\nexport const roundShapesPoints = (shapesPoints) => {\r\n return shapesPoints.map(shape =>\r\n roundShapePoints(shape)\r\n );\r\n};\r\n\r\nexport const roundShapePoints = (shapePoints) => {\r\n return shapePoints.map(point => roundPoint(point));\r\n};\r\n\r\nconst roundPoint = (point) => {\r\n const precision = 1000000; // Round to 6 digits after comma\r\n return {\r\n x: Math.round(point.x * precision) / precision,\r\n y: Math.round(point.y * precision) / precision,\r\n id: point.id\r\n };\r\n};\r\n\r\n// Convert shapes to polygon-clipping format\r\nexport function convertShapesToPolygons(shapesPoints) {\r\n return shapesPoints.map(shapePoints => [convertShapeToPolygon(shapePoints)]);\r\n}\r\n\r\nexport function convertShapeToPolygon(shapePoints) {\r\n return shapePoints.map(point => [point.x, point.y]);\r\n}\r\n\r\n// Convert points from polygon-clipping format to shapes format\r\nexport function convertFromPolygon(polygons) {\r\n if (Array.isArray(polygons) && polygons.length) {\r\n return polygons[0][0].map(coord => ({ x: coord[0], y: coord[1] }));\r\n }\r\n return []\r\n}\r\n\r\n/**\r\n * Function to calculate the outline of multiple shapes.\r\n * Each shape is defined by an array of points, which are connected together.\r\n * The function rounds the coordinates to a certain precision to handle slight mismatches.\r\n *\r\n * @param {Array} shapes - Array of shapes, each shape is an array of points.\r\n * @returns {Array} - Array of points forming the unified outline of the shapes.\r\n */\r\nexport const unifyShapePoints = (shapes) => {\r\n const roundedPoints = roundShapesPoints(shapes);\r\n const polygons = convertShapesToPolygons(roundedPoints);\r\n const result = polygonClipping.union(polygons);\r\n\r\n // console.log(\"roundedPoints\",roundedPoints);\r\n // console.log(\"polygons\",polygons);\r\n // console.log(\"result\",result);\r\n // console.log(\"convertFromPolygon(result);\",convertFromPolygon(result));\r\n return convertFromPolygon(result);\r\n}\r\n\r\n// Function to remove consecutive duplicate points\r\nexport function removeConsecutiveDuplicates(points) {\r\n // Filter the points array to remove consecutive duplicates\r\n return points.filter((point, index, array) => {\r\n // Check if the current point is different from the previous one\r\n if (index === 0) {\r\n return true; // Always include the first point\r\n }\r\n const prevPoint = array[index - 1];\r\n return point.x !== prevPoint.x || point.y !== prevPoint.y;\r\n });\r\n}\r\n\r\nexport function areCollinear(p1, p2, p3, p4) {\r\n // Check that the vector products (p2-p1) and (p4-p3) are equal to zero\r\n return (p2.x - p1.x) * (p4.y - p3.y) === (p4.x - p3.x) * (p2.y - p1.y) &&\r\n ((Math.min(p1.x, p2.x) <= Math.max(p3.x, p4.x) && Math.max(p1.x, p2.x) >= Math.min(p3.x, p4.x)) &&\r\n (Math.min(p1.y, p2.y) <= Math.max(p3.y, p4.y) && Math.max(p1.y, p2.y) >= Math.min(p3.y, p4.y)));\r\n}\r\n\r\nexport function getSegmentIntersectionPoint(seg1, seg2) {\r\n const a1 = seg1.end.y - seg1.start.y;\r\n const b1 = seg1.start.x - seg1.end.x;\r\n const c1 = a1 * seg1.start.x + b1 * seg1.start.y;\r\n\r\n const a2 = seg2.end.y - seg2.start.y;\r\n const b2 = seg2.start.x - seg2.end.x;\r\n const c2 = a2 * seg2.start.x + b2 * seg2.start.y;\r\n\r\n const determinant = a1 * b2 - a2 * b1;\r\n\r\n if (determinant === 0) {\r\n return null;\r\n } else {\r\n const x = (c1 * b2 - c2 * b1) / determinant;\r\n const y = (a1 * c2 - a2 * c1) / determinant;\r\n return { x, y };\r\n }\r\n}\r\n\r\nexport function isPointOnSegment(pt, seg) {\r\n return Math.min(seg.start.x, seg.end.x) <= pt.x && pt.x <= Math.max(seg.start.x, seg.end.x) &&\r\n Math.min(seg.start.y, seg.end.y) <= pt.y && pt.y <= Math.max(seg.start.y, seg.end.y);\r\n}\r\n\r\n/**\r\n * Return the length of the overlap of the segments\r\n */\r\nfunction getOverlapLength(seg1, seg2) {\r\n if (seg1.start.x === seg1.end.x && seg1.start.x === seg2.start.x) {\r\n const sortedY1 = [seg1.start.y, seg1.end.y].sort((a, b) => a - b);\r\n const sortedY2 = [seg2.start.y, seg2.end.y].sort((a, b) => a - b);\r\n\r\n if (sortedY1[1] < sortedY2[0] || sortedY2[1] < sortedY1[0]) {\r\n return 0;\r\n }\r\n\r\n const overlapY = Math.min(sortedY1[1], sortedY2[1]) - Math.max(sortedY1[0], sortedY2[0]);\r\n return overlapY;\r\n }\r\n\r\n if (seg1.start.y === seg1.end.y && seg1.start.y === seg2.start.y) {\r\n const sortedX1 = [seg1.start.x, seg1.end.x].sort((a, b) => a - b);\r\n const sortedX2 = [seg2.start.x, seg2.end.x].sort((a, b) => a - b);\r\n\r\n if (sortedX1[1] < sortedX2[0] || sortedX2[1] < sortedX1[0]) {\r\n return 0;\r\n }\r\n\r\n const overlapX = Math.min(sortedX1[1], sortedX2[1]) - Math.max(sortedX1[0], sortedX2[0]);\r\n return overlapX;\r\n }\r\n\r\n const intersection = getSegmentIntersectionPoint(seg1, seg2);\r\n if (intersection && isPointOnSegment(intersection, seg1) && isPointOnSegment(intersection, seg2)) {\r\n return Math.sqrt(Math.pow(intersection.x - seg1.start.x, 2) + Math.pow(intersection.y - seg1.start.y, 2));\r\n }\r\n\r\n return 0;\r\n}\r\n\r\nexport function areCollinearAndOverlap(p1, p2, p3, p4, minOverlap) {\r\n // Check the collinearity of the segments\r\n if (areCollinear(p1, p2, p3, p4)) {\r\n // If they are collinear, check for minimum overlap\r\n const seg1 = { start: p1, end: p2 };\r\n const seg2 = { start: p3, end: p4 };\r\n const overlapLength = getOverlapLength(seg1, seg2);\r\n\r\n return overlapLength >= minOverlap;\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * Function for finding a point that is below and to the right of all other points\r\n * @param {Array} points {x, y}\r\n * @returns {Object} Point that is below and to the right of all others\r\n */\r\nexport function findLowestRightmostPoint(points) {\r\n if (!points.length) {\r\n return null;\r\n }\r\n\r\n let resultPoint = points[0];\r\n\r\n for (let i = 1; i < points.length; i++) {\r\n if (points[i].x > resultPoint.x) {\r\n resultPoint = points[i]; // Finding a new point to the right\r\n } else if (points[i].x === resultPoint.x && points[i].y < resultPoint.y) {\r\n resultPoint = points[i]; // If x are equal, choose a lower point\r\n }\r\n }\r\n\r\n return resultPoint;\r\n}\r\n\r\n/**\r\n * Calculate the length of the legs in an isosceles right triangle given the hypotenuse.\r\n * @param {number} hypotenuse - The length of the hypotenuse.\r\n * @returns {number} The length of each leg.\r\n */\r\nexport function calculateLeg(hypotenuse) {\r\n // Calculate the leg length using the relationship derived from Pythagoras' theorem\r\n return hypotenuse / Math.sqrt(2);\r\n}\r\n\r\n\r\n/**\r\n * Get closest point on the line\r\n * @returns {number} The length of each leg.\r\n * @param lineStart\r\n * @param lineEnd\r\n * @param mousePos\r\n */\r\nexport function getClosestPointOnLine(lineStart, lineEnd, mousePos) {\r\n const lineVec = {\r\n x: lineEnd.x - lineStart.x,\r\n y: lineEnd.y - lineStart.y\r\n };\r\n\r\n const lineLen = getPointDistance(lineStart, lineEnd);\r\n const lineUnitVec = {\r\n x: lineVec.x / lineLen,\r\n y: lineVec.y / lineLen\r\n };\r\n\r\n const mouseVec = {\r\n x: mousePos.x - lineStart.x,\r\n y: mousePos.y - lineStart.y\r\n };\r\n\r\n const dotProduct = mouseVec.x * lineUnitVec.x + mouseVec.y * lineUnitVec.y;\r\n const clampedDotProduct = Math.max(0, Math.min(dotProduct, lineLen));\r\n const x = lineStart.x + lineUnitVec.x * clampedDotProduct;\r\n const y = lineStart.y + lineUnitVec.y * clampedDotProduct;\r\n\r\n return {\r\n x: x,\r\n y: y,\r\n };\r\n}\r\n\r\nexport const findTopLeftPoint = (points) => {\r\n return points.reduce((topLeft, point) => {\r\n if (point.y < topLeft.y || (point.y === topLeft.y && point.x < topLeft.x)) {\r\n return point;\r\n }\r\n return topLeft;\r\n }, points[0]);\r\n};\r\n\r\nexport const adjustPointsRelativeToTopLeft = (points, topLeft) => {\r\n return points.map(point => ({\r\n x: point.x - topLeft.x,\r\n y: point.y - topLeft.y\r\n }));\r\n};\r\n\r\nexport const sortPointsClockwise = (points) => {\r\n let topLeft, topRight, bottomLeft, bottomRight;\r\n\r\n // Функция для округления координат\r\n const roundCoordinate = (value, precision = 10) => {\r\n const factor = Math.pow(10, precision); // precision — количество знаков после запятой\r\n return Math.round(value * factor) / factor;\r\n };\r\n\r\n // Округляем координаты точек\r\n const roundedPoints = points.map(point => ({\r\n x: roundCoordinate(point.x),\r\n y: roundCoordinate(point.y)\r\n }));\r\n\r\n // Находим крайние значения для округленных координат\r\n const minX = Math.min(...roundedPoints.map(p => p.x));\r\n const maxX = Math.max(...roundedPoints.map(p => p.x));\r\n const minY = Math.min(...roundedPoints.map(p => p.y));\r\n const maxY = Math.max(...roundedPoints.map(p => p.y));\r\n\r\n // Разделяем точки по их координатам\r\n roundedPoints.forEach(point => {\r\n if (point.x === minX && point.y === minY) {\r\n topLeft = point;\r\n } else if (point.x === maxX && point.y === minY) {\r\n topRight = point;\r\n } else if (point.x === minX && point.y === maxY) {\r\n bottomLeft = point;\r\n } else if (point.x === maxX && point.y === maxY) {\r\n bottomRight = point;\r\n }\r\n });\r\n\r\n // Проверяем, что все точки определены, чтобы не было undefined\r\n if (!topLeft || !topRight || !bottomLeft || !bottomRight) {\r\n console.error(\"Points\", points);\r\n console.error(\"One or more points are undefined\", {topLeft, topRight, bottomLeft, bottomRight});\r\n return null;\r\n }\r\n\r\n // Возвращаем точки в порядке: верхняя левая, верхняя правая, нижняя правая, нижняя левая\r\n return [topLeft, topRight, bottomRight, bottomLeft];\r\n};\r\n\r\nexport function calculatePolygonClippingPolygonArea(polygon) {\r\n if (!polygon || polygon.length === 0) return 0;\r\n\r\n let area = 0;\r\n const coordinates = polygon[0];\r\n\r\n for (let i = 0; i < coordinates.length - 1; i++) {\r\n const [x1, y1] = coordinates[i];\r\n const [x2, y2] = coordinates[i + 1];\r\n area += x1 * y2 - x2 * y1;\r\n }\r\n\r\n return Math.abs(area / 2);\r\n}\r\n\r\nexport function findNearestPoint (targetPoint, points) {\r\n let nearestPoint = null;\r\n let minDistance = Infinity;\r\n\r\n for (const point of points) {\r\n const distance = Math.sqrt(\r\n Math.pow(point.x - targetPoint.x, 2) + Math.pow(point.y - targetPoint.y, 2)\r\n );\r\n if (distance < minDistance) {\r\n minDistance = distance;\r\n nearestPoint = point;\r\n }\r\n }\r\n\r\n return nearestPoint;\r\n}\r\n\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport $ from \"jquery\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport Analytics from \"../../../../analytics\";\r\nimport ActionTypes from \"../../../../misc/actionTypes\";\r\nimport LookFeatureRemoveButton from \"../../../look/lookNavigation/lookMain/lookFeatureRemoveButton\";\r\nimport {getCurrentLayout} from \"../../../appLayout\";\r\nimport {disableFeature} from \"../../../look/lookNavigation/lookFunctions2\";\r\nimport {updateCanvasCount} from \"../../../../actions/actionFunctions\";\r\n\r\nclass BodyPanelRadio extends Component {\r\n\r\n static propTypes = {\r\n activeSubPart: PropTypes.object.isRequired,\r\n isMobile: PropTypes.bool,\r\n quotingTool: PropTypes.bool,\r\n refreshItems: PropTypes.func,\r\n };\r\n\r\n // componentWillReceiveProps(nextProps) {\r\n // if (nextProps.updateDisableFeatureGroupRadio && !this.props.updateDisableFeatureGroupRadio) {\r\n // this.forceUpdate();\r\n // }\r\n // }\r\n\r\n radioClick = async () => {\r\n const activeSubPart = this.props.activeSubPart;\r\n Analytics.sendClickEvent('disable-toggle-' + activeSubPart.partId);\r\n const layout = getCurrentLayout();\r\n if (!activeSubPart.disabled && activeSubPart.activeFeature && layout.isNewLayout) {\r\n await disableFeature(activeSubPart.activeFeature)\r\n } else {\r\n activeSubPart.disabled = !activeSubPart.disabled;\r\n activeSubPart.disabledClick();\r\n activeSubPart.updateLocalStorage();\r\n }\r\n $(window).trigger(ActionTypes.CHANGE_LAYOUT); // update canvas\r\n if (this.props.refreshItems) {\r\n this.props.refreshItems();// update navigation (non compatible)\r\n }\r\n this.forceUpdate();\r\n this.props.updateCanvasCount();\r\n setTimeout(() => {\r\n this.forceUpdate(); // for slow udpates\r\n }, 0)\r\n };\r\n\r\n render() {\r\n const activeSubPart = this.props.activeSubPart;\r\n const cabinetsPartIds = [\"top_cabinet\", \"bottom_cabinet\", \"center_island_cabinet\"];\r\n const isCabinet = activeSubPart && cabinetsPartIds.includes(activeSubPart.partId);\r\n const countertopPartIds = [\"countertop\", \"backsplash\", \"center_island_countertop\"];\r\n const isCountertop = activeSubPart && countertopPartIds.includes(activeSubPart.partId);\r\n\r\n if (this.props.quotingTool) {\r\n return (\r\n
    \r\n \r\n \r\n
    \r\n )\r\n }\r\n\r\n\r\n const layout = getCurrentLayout();\r\n if (layout.isNewLayout) {\r\n if (!activeSubPart || !activeSubPart.activeFeature) {\r\n return null\r\n }\r\n const text = this.props.isMobile && activeSubPart.partId === \"center_island_cabinet\" && this.props.windowWidth < 800\r\n ? \"radioButton.on\"\r\n : \"radioButtonDisableFeatueGroup1\";\r\n return \r\n }\r\n\r\n return (\r\n \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {updateDisableFeatureGroupRadio} = store.navigationState;\r\n const {windowWidth} = store.serverState;\r\n const {canvasCount} = store.bathroomVisualizerState; // to update component when feature is changed\r\n\r\n return {\r\n updateDisableFeatureGroupRadio,\r\n windowWidth,\r\n canvasCount,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n updateCanvasCount,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BodyPanelRadio);\r\n\r\n","import {hashHistory} from \"react-router\";\r\nimport {changeQTRoutePath} from \"../../misc/changeRoutePath\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport store from \"./../../store\";\r\nimport {\r\n changeActivePartRelatedItemIndex, setCameFromPage,\r\n setQtActiveCategory,\r\n toggleBathroomVisualizerOpen,\r\n toggleSelectionWindow\r\n} from \"../../actions/actionFunctions\";\r\nimport Config from \"../../config\";\r\nimport {switchToWizardItem} from \"../qkbPages/materialsWizard/useChangeWizardStepRoute\";\r\n\r\nexport default (cameFromPage, firstCat = false, subPart = null, qtCategoryName = \"\", wizardAllObject = null, stepIndex = 0) => {\r\n const layout = getCurrentLayout();\r\n const state = store.getState();\r\n const {selectionGroup, activePartRelatedItemIndex} = state.selectionState;\r\n const layoutParts = state.stepsState.layoutParts;\r\n const qtActiveCategory = qtCategoryName || (subPart && subPart.part ? subPart.part.qtCategoryName : state.qtState.qtActiveCategory);\r\n\r\n store.dispatch(toggleSelectionWindow(true, selectionGroup || layoutParts[0]));\r\n store.dispatch(toggleBathroomVisualizerOpen(false));\r\n store.dispatch(setCameFromPage(cameFromPage));\r\n\r\n const {wizardList, wizardIsActive} = state.wizardState;\r\n if (wizardAllObject) {\r\n const {wizardItemId, quoteIndex} = wizardAllObject;\r\n const wizardItem = wizardList.find(wizItem => wizItem.id === wizardItemId); // if not found - set default\r\n switchToWizardItem(wizardItem, stepIndex, quoteIndex);\r\n return\r\n } else if (wizardIsActive) {\r\n switchToWizardItem();\r\n return\r\n }\r\n\r\n if (layout.qtCategories) { // set default if index is not matching\r\n let currentActiveCategory = layout.qtCategories.find(qtCat => qtCat.name === qtActiveCategory);\r\n if (subPart) {\r\n if (!currentActiveCategory) { // edge profile cases\r\n currentActiveCategory = layout.qtCategories.find(qtCat => qtCat.subParts.some(sPart => sPart.part.partId === subPart.part.partId));\r\n }\r\n if (!currentActiveCategory) { // edge profile cases\r\n if (Config.isDevMode()) {\r\n console.log(\"NO CATEGORY for feature\", );\r\n }\r\n if (layout.qtCategories.length) {\r\n store.dispatch(setQtActiveCategory(layout.qtCategories[0].name));\r\n store.dispatch(changeActivePartRelatedItemIndex(0));\r\n changeQTRoutePath(layout.qtCategories[0].name, 0);\r\n } else {\r\n if (!window.location.href.includes('materials')) {\r\n hashHistory.push('materials');\r\n }\r\n }\r\n return;\r\n }\r\n const relatedItemIndex = currentActiveCategory.subParts.findIndex(subPartItem => {\r\n return subPartItem.part.partId === subPart.part.partId\r\n });\r\n store.dispatch(setQtActiveCategory(currentActiveCategory.name));\r\n store.dispatch(changeActivePartRelatedItemIndex(relatedItemIndex > -1 ? relatedItemIndex : 0));\r\n changeQTRoutePath(currentActiveCategory.name, relatedItemIndex);\r\n } else if (!currentActiveCategory || !currentActiveCategory.subParts[activePartRelatedItemIndex] || firstCat) {\r\n const qtCategory = layout.qtCategories[0];\r\n store.dispatch(setQtActiveCategory(qtCategory.name));\r\n store.dispatch(changeActivePartRelatedItemIndex(0));\r\n changeQTRoutePath(qtCategory.name, 0);\r\n }\r\n }\r\n\r\n if (!window.location.href.includes('materials')) {\r\n hashHistory.push('materials');\r\n }\r\n\r\n};\r\n","import {PartMenuType} from \"../../visComponents/constants\";\r\nimport {iCmp} from \"../../../misc/utils\";\r\nimport Layer from \"../../visComponents/layer\";\r\nimport {LayoutType, METADATA} from \"./constants\";\r\nimport PartCommon from \"../../visComponents/partCommon\";\r\n\r\nexport class Part extends PartCommon {\r\n\r\n constructor(isParent, isChild, menuType) {\r\n super();\r\n if (isChild || (isParent && menuType === PartMenuType.Simple)) {\r\n this.featuresList = {};\r\n this.featuresPartsList = {};\r\n this.modulePartsList = {};\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this.featuresList[layoutName] = [];\r\n this.featuresPartsList[layoutName] = [];\r\n this.modulePartsList[layoutName] = [];\r\n });\r\n this.allFeaturesReceived = false;\r\n this.realFeaturesReceived = false; // this prop is need on Scroll (if features count more that 1000)\r\n this.nextFeaturesPageToLoad = 0;\r\n this.activeFeature = null;\r\n this.placeholderFeature = null;\r\n this.shadowFeature = null;\r\n this.placeholderChanged = false;\r\n this.firstClick = {\r\n \"0\": false\r\n };\r\n this.activeLockedFeature = null;\r\n this.activeNotInVisualizerFeature = null; // is needed to display in the QT selected activeNotInVisualizerFeature, but render proper activeFeature layer(for example, countertop)\r\n // name = \"\";\r\n this.visible = true;\r\n this.categoryEnabled = false;\r\n this.layout = null;\r\n this.featureGroupVisible = true; // dashboard's feature group eye ball logic\r\n this.featureGroupEnabled = true; // dashboard's feature group checkbox logic\r\n this.selectedFeaturesHistory = []; // array of strings(names). updated every time item is selected\r\n this.filtersReceived = null; // array of filters values, comes from BE, for ex [1221, 347, 1124]\r\n }\r\n if (isParent) {\r\n this.partThumbnail = '';\r\n this.relatedItems = [];\r\n }\r\n if (!isChild && !isParent) {\r\n this.dbFeature = null;\r\n this.layer = new Layer();\r\n this._customDisplayName = null;\r\n this.notesList = {};\r\n }\r\n this.partName = \"\";\r\n }\r\n\r\n set features(featuresList) {\r\n // features can't be set directly, we need to change featuresList array\r\n }\r\n get features() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresList[layout.getCurrentLayoutName()]\r\n }\r\n set featuresParts(featuresList) {\r\n // featuresParts can't be set directly, we need to change featuresPartsList array\r\n }\r\n get featuresParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresPartsList[layout.getCurrentLayoutName()]\r\n }\r\n get moduleParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.modulePartsList[layout.getCurrentLayoutName()]\r\n }\r\n\r\n /**\r\n * Checks whether a given for condition matches the needed value (or array of values)\r\n * @param name {string}\r\n * @param value {string || array}\r\n * @returns {int} -1 - no such for condition, 0 - no match, 1 - matches\r\n */\r\n matchesMetaForCondition(name, value) {\r\n return this.metaData[name] && this.metaData[name].some(condValue => {\r\n return condValue === METADATA.ALL || (Array.isArray(value) ? value.some(val => iCmp(condValue, val)) : iCmp(condValue, value))\r\n });\r\n }\r\n\r\n matchesMetaForArrayOfConditions(arrayOfConditions) {\r\n return arrayOfConditions.every((condition) => {\r\n return this.matchesMetaForCondition(condition.propName, condition.propValue);\r\n })\r\n }\r\n}\r\n\r\n\r\n","import * as types from \"./actionTypes\";\r\n\r\n//********** CONTRACT SIGNING *************/\r\nexport const showContractSigning = (show, callback = null) => ({\r\n type: types.SHOW_CONTRACT_SIGNING,\r\n payload: {show, callback}\r\n});\r\n\r\nexport const setAfterContractSignCallback = (afterContractSignCallback) => ({\r\n type: types.SET_AFTER_CONTRACT_SIGN_CALLBACK,\r\n payload: {afterContractSignCallback}\r\n});\r\n\r\nexport const contractSignPostSignature = (contractSignData) => ({\r\n type: types.CONTRACT_SIGNING_POST_SIGNATURE,\r\n payload: contractSignData\r\n});\r\n\r\nexport const showSignaturePad = (show, tag) => ({\r\n type: types.CONTRACT_SIGNING_SHOW_SIGNATURE_PAD,\r\n payload: {show, tag}\r\n});\r\n\r\nexport const setContractsValues = ({contractId, pageIndex, fieldIndex, name, value}) => {\r\n return (dispatch, getState) => {\r\n let {contractsValues} = getState().contractSigningState;\r\n if (!contractId) {\r\n return\r\n }\r\n if (!contractsValues[contractId]) {\r\n contractsValues[contractId] = {}\r\n }\r\n if (!contractsValues[contractId][pageIndex]) {\r\n contractsValues[contractId][pageIndex] = {}\r\n }\r\n contractsValues[contractId][pageIndex][fieldIndex] = {name, value};\r\n dispatch({\r\n type: types.CONTRACT_SIGNING_SET_CONTRACTS_VALUES,\r\n payload: {\r\n contractsValues: {...contractsValues}\r\n }\r\n })\r\n }\r\n};\r\n\r\nexport const setContractSigningStep = step => ({\r\n type: types.CONTRACT_SIGNING_SET_STEP,\r\n payload: {step}\r\n});\r\n\r\nexport const setContractDocumentForJob = (documentData) => ({\r\n type: types.CONTRACT_SIGNING_JOB_DOCUMENT,\r\n payload: {...documentData}\r\n});\r\n\r\nexport const setContractBlob = (contractBlob) => ({\r\n type: types.SET_CONTRACT_BLOB,\r\n payload: {contractBlob}\r\n});\r\n\r\nexport const restoreContractValues = (pagesCustomFieldsValue, savedInvoiceNumberOfPages, needToUpdateContract, contractsValues = {}) => ({\r\n type: types.CONTRACT_SIGNING_RESTORE_VALUES,\r\n payload: {pagesCustomFieldsValue, savedInvoiceNumberOfPages, needToUpdateContract, contractsValues}\r\n});\r\n\r\nexport const setContractsList = (contractsList) => ({\r\n type: types.CONTRACT_SIGNING_SET_CONTRACTS_LIST,\r\n payload: {contractsList}\r\n});\r\n","import JsonApi from \"../../../api/jsonApi\";\r\nimport {getLocalStorageItem} from \"../../../misc/storageFunctions\";\r\nimport store from \"../../../store\";\r\nimport {setContractsList} from \"../../../actions/contractsActions\";\r\n\r\nexport const getContracts = async () => {\r\n const {contractSigningState, fabricatorState} = store.getState();\r\n if (contractSigningState.contractsReceived || !fabricatorState.settings.useContractSigning) {\r\n if (!contractSigningState.contractsReceived) {\r\n store.dispatch(setContractsList([])); // set received property true\r\n }\r\n return\r\n }\r\n try {\r\n const response = await JsonApi.getContractDocuments();\r\n console.log(\"response\", response);\r\n if (response && Array.isArray(response.data)) {\r\n const savedContracts = getLocalStorageItem(\"activeContracts\");\r\n let newOrderedList = response.data\r\n .sort((a, b) => (a.order > b.order) ? 1 : -1)\r\n .map((contract, contractIndex) => {\r\n contract.selected = false; // this is used in the checkbox\r\n contract.order = contractIndex;\r\n if (document.kvConfig.isBackend) {\r\n const fabId = document.kvConfig.userId || \"noFabUser\";\r\n if (savedContracts && savedContracts[fabId] && Array.isArray(savedContracts[fabId])\r\n && savedContracts[fabId].length > 0 && savedContracts[fabId].includes(contract.id)) {\r\n contract.selected = true;\r\n }\r\n } else if (contract.isDefault) { // default is for customer, if it is unchecked - then do not use contract at all\r\n contract.selected = true;\r\n }\r\n if (response.data.length === 1 || (fabricatorState.isAmericanStandard && contractIndex === 0)) {\r\n // We need to always have the spec sheet loading for American standard as the first doc without selecting it\r\n // If there is only one contract - it should be selected by the default\r\n contract.selected = true;\r\n }\r\n return contract;\r\n });\r\n store.dispatch(setContractsList(newOrderedList))\r\n return newOrderedList\r\n } else {\r\n store.dispatch(setContractsList([])); // set received property true\r\n return []\r\n }\r\n } catch (error) {\r\n console.log(\"error\", error);\r\n store.dispatch(setContractsList([])); // set received property true\r\n return []\r\n }\r\n};\r\n\r\nexport const getSelectedContracts = (contractsList) => {\r\n if (!Array.isArray(contractsList) || !contractsList.length) {\r\n return []\r\n }\r\n return contractsList.filter(contract => contract.selected)\r\n}\r\n\r\nexport const shouldUseContractSigning = (fabricatorSettings, allContractsList, withoutContractsCheck = false) => {\r\n if (!fabricatorSettings.useContractSigning) {\r\n return false;\r\n }\r\n if (withoutContractsCheck) {\r\n return true\r\n }\r\n if (!allContractsList) {\r\n const {contractsList} = store.getState().contractSigningState;\r\n allContractsList = contractsList;\r\n }\r\n return getSelectedContracts(allContractsList).length\r\n}\r\n\r\nexport const setContractBlobs = async (contractsList, receiptPagesLength = 0, isOfflineFirstLoad = false) => {\r\n let pagesCount = receiptPagesLength || 1; // start from 1 if receipt is broken\r\n let updatedContractsList = contractsList;\r\n for (const contract of updatedContractsList) {\r\n contract.pagesFrom = 0;\r\n contract.pagesTo = 0;\r\n if (contract.selected || isOfflineFirstLoad) {\r\n const useDocument = contract.documentWithoutTagsUrl || contract.documentUrl; // use without tags! but if not at least something\r\n if (useDocument && !contract.blobUrl) {\r\n const responseFetch = await fetch(useDocument);\r\n const blob = await responseFetch.blob();\r\n contract.blobUrl = URL.createObjectURL(blob);\r\n }\r\n contract.pagesFrom = pagesCount + (receiptPagesLength ? 1 : 0);\r\n pagesCount = pagesCount + contract.pagesCount;\r\n contract.pagesTo = pagesCount + (receiptPagesLength ? 1 : 0);\r\n }\r\n }\r\n if (isOfflineFirstLoad) {\r\n store.dispatch(setContractsList(updatedContractsList))\r\n }\r\n // console.log(\"contractsList\", contractsList);\r\n return {updatedContractsList, totalPages: pagesCount}\r\n}\r\n\r\nexport const getActiveContract = (contractsList, globalContractPage) => {\r\n return contractsList.find(contract => {\r\n return globalContractPage >=contract.pagesFrom && globalContractPage < contract.pagesTo\r\n })\r\n}\r\n\r\nexport const getAllContractsValues = (contractsList, context) => {\r\n const selectedContracts = getSelectedContracts(contractsList);\r\n const activeContract = getActiveContract(selectedContracts, context.globalContractPage);\r\n const activeContractPage = activeContract\r\n ? context.globalContractPage + 1 - activeContract.pagesFrom\r\n : 1;\r\n return {\r\n ...context,\r\n selectedContracts,\r\n activeContract,\r\n activeContractPage\r\n }\r\n}\r\n\r\nexport const changeContractsPage = (newPage, contractsList, context, changeContext) => {\r\n const {receiptPages, activeContract, globalContractPage} = context;\r\n const allValues = getAllContractsValues(contractsList, {...context, globalContractPage: newPage});\r\n // here we set false to show loader while the blob is reloading\r\n const showPage = (allValues.activeContract && activeContract && (allValues.activeContract.blobUrl === activeContract.blobUrl))\r\n || (receiptPages && (newPage <= receiptPages) && (globalContractPage <= receiptPages));\r\n\r\n changeContext({...context, globalContractPage: newPage, showPage});\r\n}\r\n","/**\r\n * @param key {string} key\r\n * @param value {any}\r\n */\r\nexport const setLocalStorageItem = (key, value) => {\r\n try {\r\n window.localStorage.setItem(key, value);\r\n } catch (ex) { console.log(\"localStorage exception\", ex); }\r\n}\r\n\r\n/**\r\n * @param key {string} key\r\n */\r\nexport const getLocalStorageItem = (key) => {\r\n let item = null;\r\n try {\r\n const value = window.localStorage.getItem(key);\r\n if (value) {\r\n item = JSON.parse(value);\r\n }\r\n } catch (ex) { console.log(\"localStorage exception\", ex); }\r\n return item\r\n}\r\n\r\n/**\r\n * @param key {string} key\r\n * @param value {any}\r\n */\r\nexport const setSessionStorageItem = (key, value) => {\r\n try {\r\n window.sessionStorage.setItem(key, value);\r\n } catch (ex) { console.log(\"sessionStorage exception\", ex); }\r\n}\r\n/**\r\n * @param key {string} key\r\n */\r\nexport const removeSessionStorageItem = (key) => {\r\n try {\r\n window.sessionStorage.removeItem(key);\r\n } catch (ex) { console.log(\"sessionStorage removeItem exception\", ex); }\r\n}\r\n\r\n/**\r\n * @param key {string} key\r\n * @param withParse {boolean}\r\n */\r\nexport const getSessionStorageItem = (key, withParse = true) => {\r\n let item = null;\r\n try {\r\n const value = window.sessionStorage.getItem(key);\r\n item = (value && withParse) ? JSON.parse(value) : value;\r\n } catch (ex) { console.log(\"sessionStorage exception\", ex); }\r\n return item\r\n}\r\n","import $ from \"jquery\";\r\n\r\nimport store from \"../store\";\r\nimport {getCurrentLayout} from \"../bvcomponents/appLayout\";\r\nimport {\r\n addToCart, removeFromCart,\r\n setCanvasDimensions,\r\n setDefaultSelectionGroup,\r\n setLayoutDataParts,\r\n updateFabricatorSettings\r\n} from \"../actions/actionFunctions\";\r\nimport ActionTypes from \"./actionTypes\";\r\nimport {AVAILABLE_VISUALIZER_TYPES, getCommonVisualizerType, IS_BATHROOM_OLD_BV_SCENE} from \"../config\";\r\nimport {setVisualizerIsChanging} from \"../actions/serverFunctions\";\r\nimport {\r\n getCurrentQuoteRoomCartItem,\r\n getRoomCartItemForCategoryName,\r\n getRoomNameToCompare\r\n} from \"./categorySwitchingFunctions\";\r\nimport {updateCurrentQuote} from \"./quotesFunctions\";\r\nimport loadVisualizer from \"./loadVisualizer\";\r\nimport {loaderDisable, loaderEnable} from \"../bvcomponents/ui/loaderView\";\r\nimport {\r\n getCorrectedWizardGroupForFeature,\r\n getCurrentGroups,\r\n getDefaultMaterialsWizardItem, getFeatureGroupFromWizardGroup,\r\n showWizardInsteadOfQT\r\n} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {setWizardActiveItem, setWizardIsActive, setWizardSelectedValues} from \"../actions/wizardFunctions\";\r\nimport {setActiveQuoteIndex, setQuotes} from \"../actions/roomsFunctions\";\r\nimport {getCartItemObject} from \"./helpers\";\r\n\r\nexport const fixVisualizerType = () => {\r\n if (document.kvConfig.toolVersion > 4 || IS_BATHROOM_OLD_BV_SCENE || (document.kvConfig.visualizerType === \"Fireplace\")) {\r\n document.kvConfig.layersSize = \"full_hd\";\r\n switch (document.kvConfig.visualizerType) {\r\n case \"Bathroom\":\r\n document.kvConfig.visualizerType = document.kvConfig.toolVersion === 6 ? \"bvLook\" : \"bvScene\";\r\n break;\r\n case \"Kitchen\":\r\n document.kvConfig.visualizerType = \"kvScene\";\r\n break;\r\n default:\r\n break;\r\n }\r\n } else {\r\n document.kvConfig.layersSize = \"normal\";\r\n }\r\n}\r\n\r\nexport const hasSubscriptionForRoom = (room) => {\r\n const {fabricatorState} = store.getState();\r\n const neededSubscriptionName = getCommonVisualizerType(room);\r\n return fabricatorState.fabricatorSubscriptions\r\n && fabricatorState.fabricatorSubscriptions.find(subscription => subscription && subscription.service.toLowerCase() === neededSubscriptionName);\r\n}\r\n\r\n/**\r\n * @param newVisualizerType {string}\r\n * @param subscription {object} // subscriptionInterface\r\n * @returns number {number}\r\n */\r\nexport const getToolVersionByVisualizerType = (newVisualizerType, subscription = null) => {\r\n if (newVisualizerType === AVAILABLE_VISUALIZER_TYPES.Fireplace) {\r\n return 5\r\n }\r\n if (subscription && Number.isInteger(subscription.toolVersion)) {\r\n return subscription.toolVersion\r\n }\r\n switch (newVisualizerType) {\r\n case AVAILABLE_VISUALIZER_TYPES.Bathroom:\r\n case AVAILABLE_VISUALIZER_TYPES.Kitchen: {\r\n return 4\r\n }\r\n case AVAILABLE_VISUALIZER_TYPES.bvScene:\r\n case AVAILABLE_VISUALIZER_TYPES.kvScene: {\r\n return 5\r\n }\r\n case AVAILABLE_VISUALIZER_TYPES.bvLook: {\r\n return 6\r\n }\r\n default:\r\n return 4\r\n }\r\n}\r\n\r\n\r\n/**\r\n * @param room {string} roomName\r\n * @param disableLoader {boolean} whether to remove loader or wait on anything else\r\n */\r\nexport const switchToNewVisualizerType = async (room, disableLoader = true) => {\r\n const {fabricatorState, serverState, quotesState, wizardState} = store.getState();\r\n if (!fabricatorState.settings.allowVisualizerSwitching) {\r\n return false\r\n }\r\n const {visualizersLoaded} = serverState;\r\n\r\n const existingSubscription = hasSubscriptionForRoom(room);\r\n if (!existingSubscription) {\r\n return false\r\n }\r\n let oldLayout = getCurrentLayout();\r\n oldLayout.initialized = false; // stop updating old canvas!\r\n loaderEnable();\r\n\r\n const newVisualizerType = getVisualizerTypeFromSubscription(existingSubscription);\r\n\r\n store.dispatch(setVisualizerIsChanging(true));\r\n\r\n await updateCurrentQuote(quotesState.activeQuoteIndex, newVisualizerType, false); // create quote with correct room before switching\r\n\r\n console.log(\"newVisualizerType\", newVisualizerType);\r\n\r\n if (!visualizersLoaded.includes(newVisualizerType)) {\r\n const loaded = await loadVisualizer(newVisualizerType, true);\r\n if (!loaded) {\r\n return false\r\n }\r\n }\r\n if (wizardState.wizardIsActiveObject.hasOwnProperty(newVisualizerType)\r\n && (wizardState.wizardIsActiveObject[newVisualizerType] !== wizardState.wizardIsActive)) {\r\n store.dispatch(setWizardIsActive(wizardState.wizardIsActiveObject[newVisualizerType]));\r\n }\r\n\r\n document.kvConfig.visualizerType = newVisualizerType;\r\n document.kvConfig.toolVersion = getToolVersionByVisualizerType(newVisualizerType, existingSubscription);\r\n fixVisualizerType(); // set new bathroom or kitchen\r\n store.dispatch(setCanvasDimensions()); // update canvas height and width (version 4 <> 5 switch)\r\n\r\n const layout = getCurrentLayout();\r\n if (!layout.initialized) {\r\n layout.initialized = true; // start updating the canvas in if was stopped earlier\r\n }\r\n const layoutParts = layout.getFeatures()\r\n .filter(parentGroup => parentGroup.categoryEnabled)\r\n .map((parentGroup) => parentGroup.partName);\r\n\r\n const roomFeatureGroup = layout.getFeatureGroupByPartId(\"room\");\r\n if (roomFeatureGroup) {\r\n const newActiveFeature = roomFeatureGroup.features.find(feature => getRoomNameToCompare(feature).toLowerCase() === existingSubscription.service);\r\n if (newActiveFeature) {\r\n roomFeatureGroup.activeFeature = newActiveFeature; // set it because it will be set in the materials page after switch\r\n\r\n const {quotesState, wizardState, advancedQuotingState, cartState} = store.getState();\r\n const {wizardList, wizardIsActive, allWizardsValues, wizardActiveItem} = wizardState;\r\n const {showAdvancedQuoting} = advancedQuotingState;\r\n const {cartItems} = cartState;\r\n\r\n if (showWizardInsteadOfQT(wizardList, wizardIsActive)) {\r\n const nextWizard = getDefaultMaterialsWizardItem();\r\n if (nextWizard) {\r\n if (!wizardActiveItem || (wizardActiveItem.id !== nextWizard.id)) {\r\n store.dispatch(setWizardActiveItem(nextWizard, quotesState.activeQuoteIndex));\r\n }\r\n const lastSelectedWizardInThisQuote = allWizardsValues.find(wizObject => {\r\n return wizObject.quoteIndex === quotesState.activeQuoteIndex && wizObject.isLastActiveWizard\r\n && nextWizard.id === wizObject.wizardItemId\r\n });\r\n if (!lastSelectedWizardInThisQuote || (Object.keys(lastSelectedWizardInThisQuote.wizardSelectedValues).length <= 1)) {\r\n const wizardActiveStep = 0;\r\n const currentGroups = getCurrentGroups(nextWizard, wizardActiveStep, {});\r\n if (currentGroups[0]) {\r\n const featureGroup = getFeatureGroupFromWizardGroup(currentGroups[0]);\r\n if (featureGroup && (featureGroup.partId === \"room\")) {\r\n store.dispatch(setWizardSelectedValues({\r\n [wizardActiveStep]: {\r\n wizardGroup: getCorrectedWizardGroupForFeature(currentGroups[0], newActiveFeature),\r\n selectedFeature: newActiveFeature,\r\n partId: \"room\",\r\n }\r\n }, quotesState.activeQuoteIndex, nextWizard.id));\r\n if (showAdvancedQuoting) {\r\n const selectedQuoteRoomCartItem = getCurrentQuoteRoomCartItem(cartItems, quotesState.activeQuoteIndex);\r\n if (selectedQuoteRoomCartItem) {\r\n store.dispatch(removeFromCart(selectedQuoteRoomCartItem));\r\n }\r\n const roomCartItem = getCartItemObject(newActiveFeature, 1, \"\");\r\n roomCartItem.currentQuote = quotesState.activeQuoteIndex;\r\n roomCartItem.fromWizardId = nextWizard.id;\r\n roomCartItem.fromWizardStep = wizardActiveStep;\r\n roomCartItem.fromWizardGroupId = currentGroups[0].id;\r\n store.dispatch(addToCart([roomCartItem]));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n store.dispatch(setLayoutDataParts(layoutParts));\r\n store.dispatch(setDefaultSelectionGroup(layoutParts[0]));\r\n store.dispatch(updateFabricatorSettings());\r\n\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS);\r\n\r\n console.log(\"finish visualizer change\", document.kvConfig.visualizerType);\r\n\r\n setTimeout(() => {\r\n store.dispatch(setVisualizerIsChanging(false));\r\n }, 300) // prevent materials page canvas jumping\r\n\r\n if (disableLoader) {\r\n loaderDisable();\r\n } // else we wait in server reducer, when it is added to loaded\r\n return true\r\n}\r\n\r\nexport const getVisualizerTypeFromSubscription = (subscription) => {\r\n const toolVersionToCheck = subscription.toolVersion || 4;\r\n switch (subscription.service) {\r\n case \"Bathroom\":\r\n case \"bathroom\":\r\n return toolVersionToCheck === 6\r\n ? \"bvLook\"\r\n : toolVersionToCheck === 5 ? \"bvScene\" : \"Bathroom\"\r\n case \"Kitchen\":\r\n case \"kitchen\":\r\n return toolVersionToCheck === 5 ? \"kvScene\" : \"Kitchen\"\r\n case \"Fireplace\":\r\n case \"fireplace\":\r\n return \"Fireplace\"\r\n default:\r\n return subscription.service\r\n }\r\n}\r\n\r\n/**\r\n * @param quoteIndex {number}\r\n * @param nextVisualizerType {string}\r\n * @returns {string}\r\n */\r\nexport const getQuoteVisualizerType = (quoteIndex, nextVisualizerType) => {\r\n const {quotesState, cartState, fabricatorState, serverState} = store.getState();\r\n const {cartItems} = cartState;\r\n const {quotes, activeQuoteIndex} = quotesState;\r\n\r\n if (fabricatorState.settings.allowVisualizerSwitching) {\r\n const roomCartItem = getCurrentQuoteRoomCartItem(cartItems, quoteIndex);\r\n if (roomCartItem) {\r\n const existingSubscription = hasSubscriptionForRoom(getRoomNameToCompare(roomCartItem.cartFeature));\r\n if (existingSubscription) {\r\n return getVisualizerTypeFromSubscription(existingSubscription);\r\n }\r\n }\r\n const quoteCartItems = cartItems.filter(cartItem => {\r\n return (cartItem.currentQuote === quoteIndex) && !(cartItem.cartFeature && cartItem.cartFeature.dbFeature.autoAddToCart)\r\n && !(cartItem.cartFeature\r\n && cartItem.cartFeature.dbFeature.displayLogic\r\n && Array.isArray(cartItem.cartFeature.dbFeature.displayRules)\r\n && cartItem.cartFeature.dbFeature.displayRules.some(rule => rule))\r\n });\r\n if (quoteCartItems.length && quoteCartItems[0].fromVisualizerType\r\n && quoteCartItems.every(cartItem => cartItem.fromVisualizerType === quoteCartItems[0].fromVisualizerType)) {\r\n return quoteCartItems[0].fromVisualizerType\r\n }\r\n if (nextVisualizerType) { // if we don't have any cart items or room cart item and we are switching visualizer -> set it's type\r\n return nextVisualizerType\r\n }\r\n if (quoteIndex === activeQuoteIndex && !serverState.visualizerIsChanging) {\r\n return document.kvConfig.visualizerType\r\n }\r\n }\r\n if (quotes && quotes[quoteIndex] && quotes[quoteIndex].room) {\r\n return quotes[quoteIndex].room\r\n }\r\n return document.kvConfig.visualizerType\r\n}\r\n\r\n\r\n/**\r\n * @param featureClicked {featureInterface}\r\n * @param roomName {string}\r\n * @param fabricatorSettings {object}\r\n * @param visualizerIsChanging {boolean}\r\n * @returns {string|boolean}\r\n */\r\nexport const shouldSwitchVisualizer = (featureClicked, roomName, fabricatorSettings, visualizerIsChanging) => {\r\n if (!fabricatorSettings.allowVisualizerSwitching || visualizerIsChanging) {\r\n return false\r\n }\r\n\r\n let room = roomName || getRoomNameToCompare(featureClicked);\r\n\r\n // 2) if user clicked on unavailable visualizer -> go and set initial visualizer!\r\n const hasSubscription = hasSubscriptionForRoom(room);\r\n\r\n // 3) set main config visualizer type\r\n const newVisualizerType = hasSubscription ? getVisualizerTypeFromSubscription(hasSubscription) : null;\r\n if (newVisualizerType && (document.kvConfig.visualizerType !== newVisualizerType)) {\r\n return newVisualizerType\r\n }\r\n return false\r\n}\r\n\r\n\r\n/**\r\n * not used for now! but let it be\r\n * @param newRoomName {string}\r\n * @param needToAddRoomToCart {boolean}\r\n * @returns {Promise}\r\n */\r\nexport const createNewQuoteAfterVisualizerChange = async (newRoomName = \"\", needToAddRoomToCart = true) => {\r\n const {fabricatorState, quotesState} = store.getState();\r\n const {quotes, activeQuoteIndex} = quotesState;\r\n\r\n const currentQuote = await updateCurrentQuote(activeQuoteIndex);\r\n const newQuotes = [...currentQuote, {}];\r\n const newActiveQuoteIndex = quotes.length; // for example, if length is 2 (we are adding 2 index(0 and 1 already exist))\r\n store.dispatch(setQuotes(newQuotes));\r\n store.dispatch(setActiveQuoteIndex(newActiveQuoteIndex));\r\n if (needToAddRoomToCart) {\r\n const roomCartItem = getRoomCartItemForCategoryName(newRoomName, fabricatorState.settings);\r\n if (roomCartItem) {\r\n const newRoomCartItem = Object.assign({}, roomCartItem, {\r\n currentQuote: newActiveQuoteIndex\r\n })\r\n store.dispatch(addToCart([newRoomCartItem]));\r\n }\r\n }\r\n return Promise.resolve(true)\r\n}\r\n","export const replaceIncorrectSymbols = (string) => {\r\n return string.replace(/â€\\x9D/, \"\").replace(/\\//, \"\").replace(\"”\", \"\")\r\n}\r\n\r\n/**\r\n * @param value {number}\r\n * @param percent {number}\r\n * @returns {number}\r\n */\r\nexport const getPercentage = (value, percent) => {\r\n return (value / 100) * percent;\r\n}\r\n\r\n/**\r\n * @param value {number}\r\n * @param fromTotal {number}\r\n * @returns {number} %\r\n */\r\nexport const getPercentAmount = (value, fromTotal) => {\r\n if (!value) {\r\n return 0\r\n }\r\n return (fromTotal / value) * 100;\r\n}\r\n\r\n/**\r\n * common func for checking if need to show\r\n * @param fabricatorSettings {object}\r\n * @param forCartItems {array}\r\n * @return {array} // {currency: \"USD\", cartItems: []}\r\n */\r\nexport const getDifferentCurrencyCartItems = (fabricatorSettings, forCartItems = []) => {\r\n let totalArray = [];\r\n if (!fabricatorSettings.useDifferentCurrencies || !forCartItems.length) {\r\n return totalArray\r\n }\r\n forCartItems.forEach(cartItem => {\r\n if (cartItem.cartFeature && cartItem.cartFeature.getFeatureCurrency) {\r\n const featureCurrency = cartItem.cartFeature.getFeatureCurrency();\r\n if (featureCurrency && (featureCurrency !== fabricatorSettings.currency)) {\r\n const existingGroup = totalArray.find(filterGroupObject => {\r\n return filterGroupObject.currency === featureCurrency\r\n });\r\n if (existingGroup) {\r\n existingGroup.cartItems.push(cartItem);\r\n } else {\r\n totalArray.push({\r\n currency: featureCurrency,\r\n cartItems: [cartItem]\r\n })\r\n }\r\n }\r\n }\r\n });\r\n // console.log(\"totalArray\", totalArray);\r\n return totalArray\r\n}\r\n","import EventManager from \"../../store/sqftEventManager\";\r\nimport workspace from \"../workspace\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport store from \"./../../../../../../store\";\r\nimport {\r\n setSQFTActiveButton, setSQFTActiveLevel3Button, setSQFTActiveSubMenuButton, setSQFTContextMenu,\r\n setSQFTMenuOpened,\r\n setSQFTMenuOpenedLock, setSQFTSystemDeleteMessage\r\n} from \"../../../../../../actions/sqftMenuFunctions\";\r\nimport {\r\n SIDEBAR_SHAPE_BUTTONS,\r\n SIDEBAR_NAVIGATION_BUTTONS,\r\n SIDEBAR_NAVIGATION_CABINET_BUTTONS,\r\n SIDEBAR_SLAB_BUTTONS, SHAPE_PART_ID,\r\n} from \"../../../../constants\";\r\nimport {getMousePositionOnField} from \"../../../../helpers/sqftHelper\";\r\nimport TextBox from \"./textBox\";\r\nimport sqftEventManager from \"../../store/sqftEventManager\";\r\nimport sqftConfig from \"../../store/sqftConfig\";\r\nimport {clearRotateAngles} from \"../../store/canvasHelper\";\r\nimport {updateSQFTCalculations} from \"../../../../../../actions/sqftFunctions\";\r\nimport FreeDraw from \"../controls/freeDraw\";\r\nimport Duplicate from \"../controls/duplicate\";\r\nimport sqftShape from \"../shapes/sqftShape\";\r\nimport MovableImage from \"../shapes/movableImage\";\r\nimport sqftShapeManager from \"../../store/sqftShapeManager\";\r\nimport workspaceControllers from \"../../store/workspaceControllers\";\r\nimport MiteredController from \"../controls/mitered\";\r\nimport {showFilters} from \"../../../../../../actions/actionFunctions\";\r\nimport {setGroheFiltersSearchText} from \"../../../../../../actions/groheFunctions\";\r\n\r\nconst WorkspaceEvents = function() {\r\n let self = this;\r\n this.workspace_onClick = (mousePos) => {\r\n let tookAction = false;\r\n const state = store.getState();\r\n const activeButton = state.sqftMenuState.activeButton;\r\n const isShowSlabTool = state.sqftSlabState.isShowSlabTool;\r\n const isWallsLockMode = state.sqftMenuState.isWallsLockMode;\r\n const isITextEditing = state.sqftMenuState.isITextEditing;\r\n //const shapes = workspace.getShapes();\r\n const shape = workspace.getHoverShape();\r\n const bumpoutLine = workspace.getHoverBumpout();\r\n const textBoxes = workspace.textBoxManager.getTextBoxes();\r\n let cursor = EventManager.getCursor();\r\n\r\n if (activeButton === SIDEBAR_SHAPE_BUTTONS.freeDraw\r\n && !workspace.getHoverPoint()\r\n ) {\r\n FreeDraw.initDraw(isWallsLockMode);\r\n FreeDraw.drawShape(mousePos);\r\n return false;\r\n }\r\n\r\n if (workspaceControllers.spacer.isJustCreated) {\r\n workspaceControllers.spacer.setIsJustCreated(false);\r\n return false;\r\n }\r\n\r\n if (shape || workspace.getLineWithMovingBumpout()) {\r\n const sideOpened = state.sqftMenuState.menuOpened;\r\n\r\n if (!sideOpened\r\n && !isShowSlabTool\r\n && activeButton !== \"move\"\r\n && activeButton !== \"label\"\r\n && activeButton !== \"rotate\"\r\n && activeButton !== \"angle\"\r\n && activeButton !== \"freeDraw\"\r\n && activeButton !== \"resize\"\r\n && activeButton !== \"waterfall\"\r\n && cursor && (cursor[0] === \"move\" || cursor[0] === \"grab\")\r\n ) {\r\n store.dispatch(setSQFTMenuOpened(\"move\"));\r\n store.dispatch(setSQFTActiveButton(\"move\"));\r\n resetEvents();\r\n config.workspace.menuItemActive = \"move\";\r\n //this.sideBarButtonClick(nodes.sidebar.mainNavButton, !config.highlight.rotateAngle);\r\n }\r\n store.dispatch(setSQFTMenuOpenedLock(true));\r\n } else {\r\n //1) close opened menus\r\n // todo sqft-react\r\n // this.hideSidebarSide();\r\n // this.hideSideBarContent();\r\n this.hideAngleTooltip();\r\n //2) remove active class from main button\r\n\r\n // todo sqft-react\r\n //this.removeActiveClassFromMainButton()\r\n //nodes.sidebar.mainNavButton.classList.remove(classes.buttonActiveClass);\r\n }\r\n\r\n if (activeButton) { //if (config.workspace.menuItemActive) {\r\n //tookAction = true;\r\n let resetCursor = false;\r\n if (shape) {\r\n let line;\r\n switch(activeButton) { // switch(config.workspace.menuItemActive) {\r\n case \"delete\":\r\n //todo priority\r\n if (textBoxes.length > 0) {\r\n for (let textBox of textBoxes) {\r\n if (textBox.box.mixin.movable.state.hovering) {\r\n //box.delete();\r\n return;\r\n }\r\n }\r\n }\r\n if (shape.type === \"appliances\") {\r\n workspace.removeShape(shape);\r\n } else if (shape.type === \"slabImage\" || shape.partId === SHAPE_PART_ID.slabPlaceHolder) {\r\n workspace.updateRemovedFeatures(shape);\r\n workspace.removeSlabImage(shape);\r\n } else {\r\n const line = shape.getHoverSegment() || shape.getHoverSegmentOutlineCorner();\r\n const point = shape.getHoverPointOnClick(mousePos);\r\n const cornerLine = shape.getHoverSegmentCorner();\r\n const miteredPoint = shape.getHoverMiteredPoint();\r\n const label = shape.getHoverLabel();\r\n\r\n if (cornerLine) {\r\n if (cornerLine.getAttachedItems()) {\r\n cornerLine.deleteAttachedItem();\r\n } else {\r\n cornerLine.line.to.removeAttachedItem();\r\n }\r\n } else if (point && (point.getArcLength() || point.getAngle() || point.getMiteredFeatureId())) {\r\n point.removeAttachedItem();\r\n tookAction = false;\r\n } else if (miteredPoint && line) {\r\n line.miteredOverlay.deletePoint(miteredPoint);\r\n line.miteredOverlay.resetHoveredPoint();\r\n } else if (line && line.getAttachedItems()) {\r\n //workspace.removeShape(line.getAttachedShape());\r\n line.deleteAttachedItem();\r\n } else if (label) {\r\n const lineWithTheLabel = label.getParent();\r\n lineWithTheLabel.labelOverlay.destroy();\r\n lineWithTheLabel.labelOverlay = null;\r\n } else if (!isShowSlabTool) {\r\n // shapeToDelete = shape;\r\n // self.callConfirmPopup(mousePos);\r\n store.dispatch(setSQFTSystemDeleteMessage({isOpened: true, shape: shape}));\r\n tookAction = false;\r\n } else {\r\n tookAction = false;\r\n }\r\n }\r\n //config.controls.delete.removeClass(config.activeClass);\r\n //nodes.designPatterns.delete.removeClass(config.activeClass);\r\n break;\r\n case \"flip-h\":\r\n shape.flip(shape.FlipDirection.HORIZONTAL);\r\n config.controls.flipH.removeClass(config.activeClass);\r\n resetCursor = true;\r\n break;\r\n case \"flip-v\":\r\n shape.flip(shape.FlipDirection.VERTICAL);\r\n config.controls.flipV.removeClass(config.activeClass);\r\n resetCursor = true;\r\n break;\r\n case \"rotate-right\":\r\n // rotate v1 disabled\r\n // shape.rotate(90, shape.Direction.RIGHT);\r\n //config.controls.rotateRight.removeClass(config.activeClass);\r\n //nodes.designPatterns.rotateRight.removeClass(config.activeClass);\r\n break;\r\n case \"rotate-left\":\r\n // activated from activeButton\r\n //shape.rotate(90, shape.Direction.LEFT);\r\n\r\n //config.controls.rotateLeft.removeClass(config.activeClass);\r\n //nodes.designPatterns.rotateLeft.removeClass(config.activeClass);\r\n break;\r\n case SIDEBAR_NAVIGATION_BUTTONS.label:\r\n EventManager.stealCursor(true);\r\n EventManager.resetCursor(self);\r\n\r\n if (store.getState().sqftMenuState.contextMenu.isOpened) {\r\n store.dispatch(setSQFTContextMenu({isOpened: false}));\r\n }\r\n store.dispatch(setSQFTContextMenu({isOpened: true, activeMenu: \"labels\", pos: mousePos, parent: shape}));\r\n tookAction = false;\r\n\r\n break;\r\n default:\r\n tookAction = false;\r\n break;\r\n }\r\n switch(activeButton) {\r\n case SIDEBAR_SLAB_BUTTONS.rotate:\r\n //rotate in slab and regular mode\r\n //rotate v2\r\n //shape.rotate(90, shape.Direction.LEFT, isShowSlabTool);\r\n //todo shape rotation with bumpout disabled\r\n if (sqftShapeManager.canShapeBeRotated(shape)) {\r\n if (!shape.getIsRotatable()) {\r\n sqftShapeManager.closeRotatablePopups(shape);\r\n sqftShapeManager.setShapeAsRotatable(shape);\r\n sqftShapeManager.rotateShapeTo90Deg(shape);\r\n } else {\r\n sqftShapeManager.disableRotatableState(shape);\r\n }\r\n }\r\n tookAction = false;\r\n break;\r\n case SIDEBAR_NAVIGATION_BUTTONS.duplicate:\r\n if (shape instanceof sqftShape && !isShowSlabTool\r\n || shape instanceof sqftShape && shape.partId === SHAPE_PART_ID.slabPlaceHolder\r\n ) {\r\n Duplicate.cloneShape(shape);\r\n } else if (shape instanceof MovableImage) {\r\n Duplicate.cloneMovableImage(shape);\r\n }\r\n\r\n tookAction = false;\r\n\r\n break;\r\n case SIDEBAR_NAVIGATION_CABINET_BUTTONS.crown:\r\n //crown molding displayed as edges and backsplashes\r\n //shape.addCrownMolding();\r\n break\r\n case SIDEBAR_NAVIGATION_CABINET_BUTTONS.end_panel:\r\n case SIDEBAR_NAVIGATION_BUTTONS.end_cap:\r\n //crown molding displayed as edges and backsplashes\r\n //shape.addCrownMolding();\r\n break;\r\n case SIDEBAR_NAVIGATION_CABINET_BUTTONS.spacer:\r\n //line = shape.getHoverSegment(true);\r\n line = workspace.getHoveredLine();\r\n if (line) {\r\n workspaceControllers.spacer.createSpacer(line.from, line.to, shape.getPosition());\r\n line.resetState();\r\n shape.resetState();\r\n tookAction = false // see QCDES-4731 we need to call mouseUp on each shape\r\n }\r\n //store.dispatch(setSQFTActiveButton(SIDEBAR_NAVIGATION_CABINET_BUTTONS.spacer));\r\n //store.dispatch(setSQFTMenuOpened(false));\r\n\r\n break;\r\n default:\r\n break;\r\n }\r\n } else if (bumpoutLine) {\r\n switch(activeButton) {\r\n case \"delete\":\r\n //workspace.removeShape(bumpoutLine.getAttachedShape());\r\n bumpoutLine.deleteAttachedItem();\r\n tookAction = false;\r\n break;\r\n default:\r\n break;\r\n }\r\n } else {\r\n if (activeButton === \"rotate-left\") {\r\n //EventManager.stealCursor(true);\r\n //EventManager.setCursor(\"rotate-left\", self, true);\r\n } else if (activeButton === \"delete\") {\r\n EventManager.stealCursor(true);\r\n EventManager.setCursor(\"delete\", self, true);\r\n } else if (activeButton === SIDEBAR_NAVIGATION_BUTTONS.text) {\r\n if (!workspace.textBoxManager.isBoxActive()\r\n && !isITextEditing\r\n ) {\r\n let pos = getMousePositionOnField(mousePos.x, mousePos.y);\r\n let textBox = new TextBox(pos);\r\n textBox.init();\r\n\r\n console.log(config.workspace.menuItemActive);\r\n\r\n //this.navButtonClick(nodes.sidebar.navButtons[0]); // change icon\r\n config.workspace.menuItemActive = null; // reset action\r\n }\r\n }\r\n tookAction = false;\r\n resetCursor = false;\r\n //$('#design-default').click();\r\n }\r\n const state = store.getState();\r\n const updateCalculations = state.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n if (resetCursor) {\r\n EventManager.resetCursor(self);\r\n config.workspace.menuItemActive = null;\r\n }\r\n }\r\n\r\n return tookAction;\r\n };\r\n\r\n this.init = () => {\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n self.workspace_onClick,\r\n self,\r\n EventManager.priorities.OVERALL\r\n );\r\n };\r\n\r\n this.hideAngleTooltip = () => {\r\n // const input = document.getElementById(\"angle_input\");\r\n const angleTooltip = document.getElementById(\"angle-tooltip\");\r\n const inputArrows = [].slice.call(document.querySelectorAll(\"#angle-tooltip [data-action]\"));\r\n const inputSubmit = [].slice.call(document.querySelectorAll('[data-action=\"angle-input-submit\"]'));\r\n\r\n if (angleTooltip) {\r\n angleTooltip.style.display = \"none\";\r\n inputArrows.forEach(function (elem) {\r\n elem.parentNode.replaceChild(elem.cloneNode(true), elem);\r\n });\r\n inputSubmit[0].removeEventListener('click', self.deActivateRotateAngle);\r\n }\r\n }\r\n};\r\n\r\n//todo\r\nconst resetEvents = function () {\r\n EventManager.stealCursor(true);\r\n EventManager.resetCursor(self);\r\n workspace.setAllowEdges(false);\r\n workspace.setAllowBumpoutEdges(false);\r\n config.workspace.menuItemActive = null\r\n};\r\n\r\nexport const clearAllMenusEvents = () => {\r\n sqftEventManager.stealCursor(true); // making cursor default\r\n sqftEventManager.resetCursor(sqftEventManager.currentCursorOwner); // ??\r\n sqftConfig.workspace.menuItemActive = null; // out of resize, rotate, delete\r\n // let zz= sqftEventManager;\r\n // console.log(zz)\r\n // debugger // eslint-disable-line no-debugger\r\n\r\n workspace.setAllowEdges(false); // removing sizing lines\r\n workspace.setAllowBumpoutEdges(false); // removing sizing lines\r\n workspace.setAllowMiteredEdges(false); // removing mitered lines\r\n\r\n if (workspace.miteredController instanceof MiteredController) {\r\n workspace.miteredController.deregisterEvents();\r\n }\r\n clearRotateAngles();\t// remove rotateAngle\r\n sqftConfig.highlight.points = false;\t// remove radiuses\r\n sqftConfig.highlight.lines = false; // disable lines highlighting\r\n sqftConfig.highlight.type = ''; // disable lines highlighting\r\n sqftConfig.highlight.id = null; // disable lines highlighting\r\n sqftEventManager.removeStuckCursorEvents();\r\n\r\n store.dispatch(setSQFTContextMenu({isOpened: false}));\r\n store.dispatch(setSQFTActiveButton(\"\"));\r\n store.dispatch(setSQFTActiveSubMenuButton(\"\"));\r\n store.dispatch(setSQFTActiveLevel3Button(null));\r\n store.dispatch(setGroheFiltersSearchText(\"\"));\r\n store.dispatch(showFilters(false));\r\n FreeDraw.drawFinish();\r\n FreeDraw.destroy();\r\n sqftShapeManager.disableRotatableStateForAllShapes();\r\n};\r\n\r\n\r\n\r\nexport default new WorkspaceEvents();\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nclass FeatureWizardSteps extends Component {\r\n\r\n static propTypes = {\r\n availableSteps: PropTypes.array,\r\n featureWizardStep: PropTypes.number,\r\n setFeatureWizardStep: PropTypes.func,\r\n exitFeatureWizard: PropTypes.func,\r\n getFilterDisplayName: PropTypes.func.isRequired,\r\n toggleWizardFilterSelection: PropTypes.func,\r\n allProducts: PropTypes.bool,\r\n allStepsCompleted: PropTypes.bool,\r\n finishClicked: PropTypes.bool,\r\n showFeatureWizard: PropTypes.bool,\r\n };\r\n\r\n setFeatureWizardStep = (nextStep, disabled) => {\r\n\r\n if (disabled) {\r\n return false;\r\n }\r\n\r\n switch (nextStep) {\r\n case \"back\":\r\n nextStep = this.props.featureWizardStep === 0 ? 0 : this.props.featureWizardStep - 1;\r\n break;\r\n case \"next\":\r\n if (this.props.featureWizardStep === (this.props.availableSteps.length - 1)) {\r\n this.props.exitFeatureWizard(this.props.availableSteps);\r\n return;\r\n } else {\r\n nextStep = this.props.featureWizardStep + 1;\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n const currentStep = this.props.availableSteps[nextStep - 1];\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n if ((nextStep > this.props.featureWizardStep) && currentStep && !this.props.allStepsCompleted\r\n && (!currentStep.selectedValueId || (fabricatorSettings.leadCapture && currentStep.selectedItemIsLocked && !this.props.isPhoneNumberValidated))) {\r\n return\r\n }\r\n if (this.props.showFeatureWizard) {\r\n this.props.setFeatureWizardStep(nextStep);\r\n if (nextStep === 0) {\r\n this.props.toggleWizardFilterSelection(false);\r\n }\r\n } else {\r\n this.props.enableFeatureWizard(nextStep);\r\n }\r\n };\r\n\r\n render() {\r\n // console.log('features top', this.props.features);\r\n const currentStep = this.props.availableSteps[this.props.featureWizardStep];\r\n // const nextStep = this.props.availableSteps[this.props.featureWizardStep + 1];\r\n const isLastStep = this.props.featureWizardStep === this.props.availableSteps.length - 1;\r\n\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const nextStepIsLocked = currentStep && !this.props.allStepsCompleted && fabricatorSettings.leadCapture && currentStep.selectedItemIsLocked && !this.props.isPhoneNumberValidated;\r\n\r\n const lastStepIsDisabled = currentStep && (!currentStep.selectedValueId || nextStepIsLocked);\r\n\r\n return (\r\n
    \r\n {this.props.showFeatureWizard && (this.props.allProducts || !this.props.allStepsCompleted || (this.props.allStepsCompleted && !this.props.finishClicked)) ? (\r\n
    this.setFeatureWizardStep(\"back\")}>\r\n \r\n
    \r\n ) : null}\r\n
      \r\n {this.props.allProducts || (this.props.showFeatureWizard && this.props.finishClicked) ? (\r\n
    • this.props.exitFeatureWizard(this.props.availableSteps)}>\r\n \r\n
    • \r\n ) : null}\r\n {this.props.availableSteps.map((wizardButton, index) => {\r\n const prevStep = this.props.availableSteps[index - 1];\r\n const disabled = index && (!prevStep.selectedValueId\r\n || (fabricatorSettings.leadCapture && prevStep.selectedItemIsLocked && !this.props.isPhoneNumberValidated));\r\n const buttonName = this.props.getFilterDisplayName(wizardButton.filterName);\r\n const displayName = this.props.getFilterDisplayName(wizardButton.filterName, this.props.intl);\r\n return (\r\n
    • this.setFeatureWizardStep(index, disabled)}>\r\n {displayName}\r\n {this.props.availableSteps[index].selectedValueId && index !== this.props.featureWizardStep\r\n ? \r\n : null\r\n }\r\n
    • \r\n )\r\n })}\r\n
    \r\n {this.props.showFeatureWizard && (this.props.allProducts || !this.props.allStepsCompleted || (this.props.allStepsCompleted && !this.props.finishClicked)) ? (\r\n
    this.setFeatureWizardStep(\"next\", lastStepIsDisabled)}>\r\n \r\n \r\n \r\n
    \r\n ) : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\n\r\nconst mapStateToProps = (store) => ({\r\n fabricatorSettings: store.fabricatorState.settings,\r\n});\r\n\r\nconst mapDispatchToProps = () => ({});\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(FeatureWizardSteps)\r\n);\r\n","//********* TUTORIALS *********//\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const toggleShowAssignQuotePopup = (showAssignQuotePopup, assignQuotePopupSaveButtons = \"all\") => ({\r\n type: types.TOGGLE_SHOW_ASSIGN_QUOTE_POPUP,\r\n payload: {showAssignQuotePopup, assignQuotePopupSaveButtons}\r\n});\r\n\r\nexport const setAssignQuotePopupSearchText = (assignQuotePopupSearchText) => ({\r\n type: types.SET_ASSIGN_QUOTE_POPUP_SEARCH_TEXT,\r\n payload: {assignQuotePopupSearchText}\r\n});\r\n\r\nexport const setAssignQuotePopupEmployee = (assignQuotePopupEmployee) => ({\r\n type: types.SET_ASSIGN_QUOTE_POPUP_EMPLOYEE,\r\n payload: {assignQuotePopupEmployee}\r\n});\r\n\r\nexport const setAssignQuotePopupCustomer = (assignQuotePopupCustomer) => ({\r\n type: types.SET_ASSIGN_QUOTE_POPUP_CUSTOMER,\r\n payload: {assignQuotePopupCustomer}\r\n});\r\n\r\nexport const setAssignQuotePopupSuccessText = (assignQuotePopupSuccessText) => ({\r\n type: types.SET_ASSIGN_QUOTE_POPUP_SUCCESS_TEXT,\r\n payload: {assignQuotePopupSuccessText}\r\n});\r\n\r\nexport const setAssignQuoteCloneMode = (assignQuoteCloneMode) => ({\r\n type: types.SET_ASSIGN_QUOTE_CLONE_MODE,\r\n payload: {assignQuoteCloneMode}\r\n});\r\n\r\nexport const setAssignQuoteOfflineData = (offlineData) => ({\r\n type: types.SET_ASSIGN_QUOTE_OFFLINE_DATA,\r\n payload: offlineData\r\n});\r\n","import {connect} from \"react-redux\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport $ from \"jquery\";\r\n\r\nimport {ROUTES} from \"../../../routes\";\r\nimport {getCommonCoords, getFeatureCoords, getLayerCenter, navFeatureCLick} from \"../lookNavigation/lookFunctions\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {\r\n setLookActiveCategory,\r\n setLookActiveFeature,\r\n setLookDemoPointsClicked,\r\n setLookOpened, setLookPageOpened\r\n} from \"../../../actions/lookFunctions\";\r\nimport store from \"../../../store\";\r\nimport {LOOK_OPENED_TYPES, LOOK_WALLS} from \"../core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../config\";\r\nimport {addToCart, setCanvasScale, updateCanvasCount} from \"../../../actions/actionFunctions\";\r\nimport {getCartItemObject} from \"../../../misc/helpers\";\r\nimport {\r\n enableRelatedFeature,\r\n getCategoryOnlyUrl,\r\n getFeatureUrl,\r\n hideFeatureSection\r\n} from \"../lookNavigation/lookFunctions2\";\r\nimport {CABINET_GROUP, COUNTERTOP_GROUP, EDGE_GROUP} from \"../../kvComponent/core/constants\";\r\n\r\nexport const doNotZoomPartIds = [\"kitchen_floor\", \"left_wall\", \"right_wall\", \"front_wall\", \"back_wall\",\r\n \"split_wall\", \"left_wall_splitter\", \"bathroom_floor\", \"shower_floor\", \"shower_curb\"];\r\n\r\nexport const shouldZoomPartId = (partId, isMobile) => {\r\n if (!partId) {\r\n return false\r\n }\r\n if (!isMobile && (CABINET_GROUP.includes(partId) || COUNTERTOP_GROUP.includes(partId) || EDGE_GROUP.includes(partId))) {\r\n return false\r\n }\r\n return (!doNotZoomPartIds.includes(partId) || (\r\n partId === \"front_wall\" && document.kvConfig.visualizerType === \"Fireplace\"\r\n ))\r\n}\r\n\r\nexport const shouldZoomToTheBottom = (partId) => {\r\n if (!partId) {\r\n return false\r\n }\r\n return partId === \"kitchen_floor\" || partId === \"bathroom_floor\"\r\n}\r\n\r\nexport const getCorrectedCenter = (center, scale = 1.75, clickedFeature, imageCanvas, isMobile) => {\r\n const {activePreset} = store.getState().bathroomVisualizerState;\r\n if ((clickedFeature.partId === \"shower_fixture\" || clickedFeature.partId === \"crown_molding\")\r\n && imageCanvas.current.pinchZoom.zoomFactor === 1) {\r\n if (activePreset !== 4) {\r\n scale = 1.5;\r\n }\r\n switch (activePreset) {\r\n case 3:\r\n center.y = center.y - 40;\r\n break;\r\n case 6:\r\n center.y = center.y + 40;\r\n break;\r\n default:\r\n break;\r\n }\r\n if (!isMobile) {\r\n $(\"html, body\").animate({scrollTop: 0}, 500);\r\n }\r\n }\r\n return {scale, center}\r\n}\r\n\r\nconst WithZoomToFeature = (props) => {\r\n\r\n const {history, children, imageCanvas, isMobile, setLookActiveCategory, setLookActiveFeature, lookOpened,\r\n setLookOpened, addToCart, qtActiveCategory, setCanvasScale, updateCanvasCount, lookActiveFeature,\r\n setLookDemoPointsClicked, lookPageOpened, setLookPageOpened, lookActiveCategory, lookCompatabilityAlert} = props;\r\n\r\n /**\r\n * Checks if list feature is currently active\r\n * @param partId {string}\r\n * @param zoomToFeature {featureInterface}\r\n * @param zoomToPostion {string}\r\n * @param changeUrl {boolean}\r\n * @param setActiveFeature {boolean}\r\n * @param closeOpenedCategory {boolean}\r\n * @param clickOnFeature {boolean}\r\n * @returns {featureInterface} clickedFeature\r\n */\r\n const zoomToFeatureGroup = (partId,\r\n zoomToFeature,\r\n zoomToPostion,\r\n changeUrl = true,\r\n setActiveFeature = true,\r\n closeOpenedCategory = true,\r\n clickOnFeature = true) => {\r\n let lookUrl = ROUTES.home;\r\n let clickedFeature;\r\n if (partId) {\r\n const layout = getCurrentLayout();\r\n const featureGroup = zoomToFeature ? zoomToFeature.getParent() : layout.getFeatureGroupByPartId(partId);\r\n clickedFeature = zoomToFeature || (featureGroup ? featureGroup.activeFeature : null);\r\n if (featureGroup && featureGroup.layerPositions && !zoomToFeature) {\r\n if (zoomToPostion) {\r\n clickedFeature = featureGroup.getMatchingPositionFeature(zoomToPostion);\r\n if (clickedFeature && !featureGroup.layerPositions[zoomToPostion]) {\r\n featureGroup.layerPositions[zoomToPostion] = clickedFeature;\r\n addToCart([getCartItemObject(clickedFeature, 1, qtActiveCategory)]);\r\n } else if (!clickedFeature) {\r\n clickedFeature = featureGroup.activeFeature || featureGroup.activeNotInVisualizerFeature; // show at least something\r\n }\r\n } else {\r\n Object.keys(featureGroup.layerPositions).forEach((position) => {\r\n if (featureGroup.layerPositions[position] && document.hoveredLayer\r\n && featureGroup.layerPositions[position].layer.zIndex === document.hoveredLayer.zIndex) {\r\n clickedFeature = featureGroup.layerPositions[position];\r\n }\r\n })\r\n }\r\n } else if (featureGroup && !featureGroup.layerPositions && !clickedFeature) {\r\n clickedFeature = featureGroup.activeFeature || featureGroup.activeNotInVisualizerFeature; // show at least something\r\n }\r\n if (clickedFeature) {\r\n console.log('clickedFeature', clickedFeature);\r\n if (clickOnFeature) {\r\n enableRelatedFeature(clickedFeature, addToCart, qtActiveCategory);\r\n navFeatureCLick(clickedFeature); // is needed for context menu vanity type switch\r\n }\r\n // console.log('Coords', clickedFeature.metaData.Coords);\r\n if (setActiveFeature) {\r\n setLookActiveFeature(clickedFeature);\r\n }\r\n featureGroup.featureBeforeChange = clickedFeature;\r\n const featureExistInQuotingTool = layout.partIdExistInQtCategory(partId);\r\n const allowFeatureScreen = featureExistInQuotingTool && !hideFeatureSection(true, partId, clickedFeature, lookCompatabilityAlert);\r\n\r\n if (!IS_PRODUCT_JOURNEY && isMobile && !setActiveFeature) {\r\n lookUrl = getCategoryOnlyUrl(clickedFeature.partId);\r\n setLookActiveCategory(clickedFeature.partId);\r\n } else if (featureExistInQuotingTool && (!IS_PRODUCT_JOURNEY || !lookActiveCategory || closeOpenedCategory)\r\n && (!IS_PRODUCT_JOURNEY || allowFeatureScreen)) {\r\n lookUrl = getFeatureUrl(clickedFeature);\r\n } else {\r\n lookUrl = getFeatureUrl(clickedFeature, true);\r\n setLookActiveCategory(clickedFeature.partId);\r\n }\r\n // if (!isMobile && imageCanvas.current && imageCanvas.current.setHoveredLayer && event) {\r\n // imageCanvas.current.setHoveredLayer(event);\r\n // }\r\n const commonCoords = getFeatureCoords(clickedFeature) || getCommonCoords(featureGroup, clickedFeature, imageCanvas.current.canvas);\r\n const shouldZoomCanvas = imageCanvas.current && imageCanvas.current.pinchZoom && commonCoords && Object.keys(commonCoords).length\r\n && !clickedFeature.notAvailableInVisualizer && shouldZoomPartId(clickedFeature.partId, isMobile);\r\n if (shouldZoomCanvas) {\r\n // const moreZoomFeatureGroups = [\"bathtub_fixture\"];\r\n const {center, scale} = getCorrectedCenter(\r\n getLayerCenter(commonCoords, imageCanvas.current.canvas, isMobile),\r\n null, clickedFeature, imageCanvas, isMobile\r\n );\r\n // const zoomFactor = (moreZoomFeatureGroups.includes(clickedFeature.partId)\r\n // && imageCanvas.current.pinchZoom.zoomFactor === 1 ) ? 3 : null // if null - it will be set in zoom to center func\r\n imageCanvas.current.pinchZoom.zoomToCenter(center, scale, false, allowFeatureScreen);\r\n setCanvasScale(imageCanvas.current.pinchZoom.options.tapZoomFactor);\r\n } else if (shouldZoomToTheBottom(clickedFeature.partId)) {\r\n $(\"html, body\").animate({scrollTop: document.body.scrollHeight}, 500);\r\n }\r\n if (!lookOpened) {\r\n setLookOpened(LOOK_OPENED_TYPES.featureZoom);\r\n setLookDemoPointsClicked(true);\r\n }\r\n if (IS_PRODUCT_JOURNEY && lookPageOpened) {\r\n setLookPageOpened(\"\");\r\n }\r\n }\r\n }\r\n if (changeUrl) {\r\n history.push(lookUrl);\r\n }\r\n return clickedFeature\r\n }\r\n\r\n const zoomToFeatureGroupByFeature = (zoomFeature) => {\r\n const featureGroup = zoomFeature.getParent();\r\n const isEmpty = (!zoomFeature && position) || (featureGroup && featureGroup.disabled);\r\n if (isEmpty) {\r\n if (!lookActiveFeature && position) {\r\n zoomFeature = featureGroup.getMatchingPositionFeature(position);\r\n if (zoomFeature) {\r\n featureGroup.layerPositions[position] = zoomFeature;\r\n }\r\n }\r\n if (zoomFeature) {\r\n featureGroup.activeFeature = zoomFeature;\r\n }\r\n console.log(\"zoomFeature featureGroup\", zoomFeature, featureGroup);\r\n }\r\n const layout = getCurrentLayout();\r\n if (zoomFeature) {\r\n if (!lookActiveFeature) {\r\n const parent = zoomFeature.getParent();\r\n parent.featureBeforeChange = zoomFeature;\r\n }\r\n setLookActiveFeature(zoomFeature);\r\n navFeatureCLick(zoomFeature);\r\n enableRelatedFeature(zoomFeature, addToCart, qtActiveCategory);\r\n\r\n if (isMobile) {\r\n // const closeOnly = zoomFeature && !layout.partIdExistInQtCategory(zoomFeature.partId) && !LOOK_WALLS.includes(zoomFeature.partId);\r\n const closeOnly = zoomFeature && !layout.partIdExistInQtCategory(zoomFeature.partId);\r\n if (closeOnly) {\r\n //history.push(getFeatureUrl(zoomFeature, true));\r\n } else {\r\n setLookActiveCategory(\"\");\r\n //history.push(getFeatureUrl(zoomFeature)); // always go to feature screen on mobile\r\n }\r\n } else {\r\n // history.push(getFeatureUrl(zoomFeature, !!lookActiveCategory))\r\n }\r\n\r\n updateCanvasCount();\r\n if (imageCanvas && imageCanvas.current && imageCanvas.current.pinchZoom && !LOOK_WALLS.includes(zoomFeature.partId)) {\r\n const commonCoords = getFeatureCoords(zoomFeature) || getCommonCoords(featureGroup || zoomFeature.getParent(), zoomFeature, imageCanvas.current.canvas);\r\n const center = getLayerCenter(commonCoords, imageCanvas.current.canvas, isMobile);\r\n const scale = imageCanvas.current.pinchZoom.options.tapZoomFactor;\r\n imageCanvas.current.pinchZoom.zoomToCenter(center, scale, true, layout.partIdExistInQtCategory(zoomFeature.partId));\r\n setCanvasScale(scale)\r\n }\r\n }\r\n }\r\n\r\n return children(zoomToFeatureGroup, zoomToFeatureGroupByFeature)\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookOpened, lookActiveFeature, lookActiveCategory, lookCompatabilityAlert} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n const {qtActiveCategory} = store.qtState;\r\n return {\r\n lookOpened,\r\n lookActiveFeature,\r\n isMobile,\r\n qtActiveCategory,\r\n lookActiveCategory,\r\n lookCompatabilityAlert,\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookActiveCategory,\r\n setLookActiveFeature,\r\n setLookOpened,\r\n addToCart,\r\n setCanvasScale,\r\n updateCanvasCount,\r\n setLookDemoPointsClicked,\r\n setLookPageOpened,\r\n};\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(WithZoomToFeature)\r\n)\r\n","import * as types from \"./actionTypes\";\r\n\r\nexport const togglePriceWorksheetOpened = (priceWorksheetOpened) => ({\r\n type: types.TOGGLE_PRICE_WORKSHEET_OPENED,\r\n payload: {\r\n priceWorksheetOpened\r\n }\r\n});\r\n\r\n// export const setDiscountSections = (discountSections) => {\r\n// return (dispatch, getState) => {\r\n// const {financeCellsVisible} = getState().priceWorksheetState;\r\n// // if (currentSection) {\r\n// // const discounts = sortByOrder(currentSection.discounts).filter((disc) => !disc.nestedParent);\r\n// // }\r\n// const payload = {\r\n// discountSections,\r\n// }\r\n// if (financeCellsVisible.length !== Object.keys(DISCOUNT_FINANCE_CELLS).length) {\r\n// const sectionWithFinance = discountSections.find(sec => {\r\n// return sec.type !== DISCOUNT_SECTION_TYPES.finance && sec.discounts.some(discount => {\r\n// return discount.discountType === DISCOUNT_SECTION_TYPES.finance\r\n// })\r\n// });\r\n// if (sectionWithFinance) {\r\n// sectionWithFinance.discounts\r\n// }\r\n// }\r\n// dispatch({\r\n// type: types.SET_DISCOUNT_SECTIONS,\r\n// payload\r\n// })\r\n// }\r\n// };\r\nexport const setDiscountSections = (discountSections) => ({\r\n type: types.SET_DISCOUNT_SECTIONS,\r\n payload: {\r\n discountSections,\r\n }\r\n});\r\n\r\nexport const setCustomAddedDiscounts = (customAddedDiscounts) => ({\r\n type: types.SET_CUSTOM_ADDED_DISCOUNTS,\r\n payload: {customAddedDiscounts}\r\n})\r\n\r\nexport const setFinancePercentage = (financePercentage) => ({\r\n type: types.SET_FINANCE_PERCENTAGE,\r\n payload: {financePercentage}\r\n});\r\n\r\nexport const setAllFinanceOptionsPopupVisible = (allFinanceOptionsPopupVisible) => ({\r\n type: types.SET_ALL_FINANCE_OPTIONS_POPUP_VISIBLE,\r\n payload: {allFinanceOptionsPopupVisible}\r\n});\r\n\r\nexport const setFinanceCellsVisible = (financeCellsVisible) => ({\r\n type: types.SET_DISCOUNT_FINANCE_CELLS_VISIBLE,\r\n payload: {financeCellsVisible}\r\n});\r\n","import * as uuid from \"uuid\";\r\nimport Movable from \"../workspace/mixin/movable\";\r\nimport EventManager from \"../../store/sqftEventManager\";\r\nimport ModelCorePoint from \"../workspace/textBox/model/modelCorePoint\";\r\nimport workspace from \"../workspace\";\r\nimport {getPointField, getPointOnWorkspace} from \"../../../../helpers/sqftHelper\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport DrawImage from \"../workspace/textBox/draw/drawImage\";\r\nimport COLOR_THEMES, {COLOR} from \"../../store/colorThemes\";\r\nimport RenderFigures from \"../../helpers/renderFigures\";\r\n\r\nexport const CORE_POINT_LAYOUTS = {\r\n black: 'black',\r\n white: 'white',\r\n green: 'green',\r\n ear: 'ear',\r\n resize: 'resize',\r\n}\r\n\r\nexport default class PointV2 {\r\n _modelCorePoint;\r\n id;\r\n parent;\r\n design = {\r\n radius: 12,\r\n lineWidth: 1,\r\n layout: CORE_POINT_LAYOUTS.white\r\n };\r\n params = {\r\n priority: EventManager.priorities.POINT,\r\n movable: false,\r\n isCentered: false,\r\n\r\n isCenteredByY: false,\r\n isResizedByPoint: false,\r\n isScaledByPoint: false,\r\n isVisibleOnHover: false,\r\n shouldRotateShape: false,\r\n };\r\n\r\n constructor(x, y, parent, pointPrams = {}, design = {}) {\r\n this.params = Object.assign(this.params, pointPrams);\r\n this.design = Object.assign(this.design, design);\r\n let mixins = {\r\n movable : this.params.movable\r\n ? new Movable(x,\r\n y,\r\n this.design.radius,\r\n this.design.radius,\r\n this.params.priority,\r\n this,\r\n parent,\r\n this.params.moveCallback,\r\n this.params.mouseUpCallback,\r\n this.params.mouseDownCallback\r\n )\r\n : null,\r\n };\r\n this._modelCorePoint = new ModelCorePoint(x, y, parent, mixins);\r\n this.parent = parent;\r\n this.id = uuid.v4();\r\n this.initEvents();\r\n }\r\n\r\n get x() {\r\n return this._modelCorePoint.getPosX();\r\n }\r\n\r\n get y() {\r\n return this._modelCorePoint.getPosY();\r\n }\r\n\r\n set x(value) {\r\n return this._modelCorePoint.setPosX(value);\r\n }\r\n\r\n set y(value) {\r\n return this._modelCorePoint.setPosY(value);\r\n }\r\n\r\n get modelCorePoint() {\r\n return this._modelCorePoint;\r\n }\r\n\r\n set modelCorePoint(value) {\r\n this._modelCorePoint = value;\r\n }\r\n\r\n exportData = () => {\r\n return {\r\n id: this.id,\r\n x: this.x,\r\n y: this.y,\r\n design: this.design,\r\n params: this.params,\r\n }\r\n }\r\n\r\n importData = (pointData) => {\r\n this.id = pointData.id;\r\n this.x = pointData.x;\r\n this.y = pointData.y;\r\n this.design = pointData.design;\r\n this.params = pointData.params;\r\n }\r\n\r\n getPointField = () => {\r\n return getPointField(this.modelCorePoint.getPosX(), this.modelCorePoint.getPosY(), this.modelCorePoint.parent);\r\n }\r\n\r\n getPointPosOnWorkspace = () => {\r\n return getPointOnWorkspace(this.modelCorePoint.getPosX(), this.modelCorePoint.getPosY(), this.modelCorePoint.parent);\r\n };\r\n\r\n getParent = () => {\r\n return this.parent;\r\n }\r\n\r\n getPosition = () => {\r\n return {\r\n x: this.modelCorePoint.getPosX(),\r\n y: this.modelCorePoint.getPosY()\r\n }\r\n }\r\n\r\n setPosition(value) {\r\n this.modelCorePoint.setPosX(value.x);\r\n this.modelCorePoint.setPosY(value.y);\r\n }\r\n\r\n rotate(origin, angle, isSlabMode) {\r\n this._modelCorePoint.rotate(origin, angle, isSlabMode);\r\n }\r\n\r\n initEvents() {\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n this.onMouseMove.bind(this),\r\n this,\r\n this.params.priority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n this.onMouseDown.bind(this),\r\n this,\r\n this.params.priority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n this.onMouseUp.bind(this),\r\n this,\r\n this.params.priority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render.bind(this),\r\n this,\r\n this.params.priority\r\n );\r\n }\r\n\r\n onMouseMove() {\r\n }\r\n\r\n onMouseUp() {\r\n }\r\n\r\n onMouseDown() {\r\n }\r\n\r\n delete() {\r\n this.deregisterEvents();\r\n }\r\n\r\n destroy() {\r\n this.delete();\r\n }\r\n\r\n deregisterEvents = () => {\r\n EventManager.removeEvent(this.modelCorePoint.mixins.movable);\r\n EventManager.removeEvent(this);\r\n }\r\n\r\n reInitEvents = () => {\r\n this.initEvents();\r\n if (this.modelCorePoint.mixins.movable) {\r\n this.modelCorePoint.mixins.movable.reInitEvents();\r\n }\r\n }\r\n\r\n render = (ctx) => {\r\n if (workspace && workspace.getState().loading) return;\r\n\r\n // display only hovered or when mouse is down\r\n if (this.params.isVisibleOnHover && !this.isHoveredWithParent() && !this.isMouseDownWithParent()) {\r\n return\r\n }\r\n\r\n let pointField = this.getPointField();\r\n\r\n ctx.save();\r\n ctx.beginPath();\r\n\r\n switch (this.design.layout) {\r\n case CORE_POINT_LAYOUTS.black: {\r\n let arcRadius = 0;\r\n if (this.isHoveredWithParent()) {\r\n arcRadius = this.design.radius\r\n ctx.fillStyle = COLOR.blackLight;\r\n } else {\r\n arcRadius = this.design.radius / 2\r\n ctx.fillStyle = COLOR.white;\r\n }\r\n\r\n ctx.arc(\r\n pointField.x,\r\n pointField.y,\r\n arcRadius,\r\n 0,\r\n 2 * Math.PI,\r\n false\r\n );\r\n\r\n ctx.strokeStyle = COLOR_THEMES[config.activeTheme].primary;\r\n\r\n ctx.stroke();\r\n ctx.fill();\r\n break;\r\n }\r\n case CORE_POINT_LAYOUTS.white: {\r\n ctx.arc(\r\n pointField.x,\r\n pointField.y,\r\n this.design.radius,\r\n 0,\r\n Math.PI,\r\n false\r\n );\r\n\r\n ctx.strokeStyle = COLOR_THEMES[config.activeTheme].primary;\r\n ctx.fillStyle = '#ffffff';\r\n ctx.stroke();\r\n ctx.fill();\r\n break;\r\n }\r\n case CORE_POINT_LAYOUTS.green: {\r\n let arcRadius = 0;\r\n if (this.modelCorePoint.mixins.movable\r\n && this.modelCorePoint.mixins.movable.state.hovering\r\n ) {\r\n arcRadius = this.design.radius + 5;\r\n ctx.strokeStyle = COLOR.blackLight;\r\n ctx.fillStyle = COLOR.blackLight;\r\n } else {\r\n arcRadius = this.design.radius;\r\n ctx.strokeStyle = 'rgba(159,197,34,0.47)';\r\n ctx.fillStyle = 'rgba(159,197,34, 1)';\r\n }\r\n ctx.arc(\r\n pointField.x,\r\n pointField.y,\r\n arcRadius,\r\n 0,\r\n Math.PI * 2,\r\n false\r\n );\r\n\r\n ctx.lineWidth = 2;\r\n ctx.fill();\r\n\r\n // RenderFigures.drawRotatedArrow(ctx,\r\n // pointField.x - 20, pointField.y,\r\n // pointField.x, pointField.y - 20,\r\n // pointField.x - 20, pointField.y - 20,\r\n // 10\r\n // )\r\n\r\n ctx.stroke();\r\n break;\r\n }\r\n case CORE_POINT_LAYOUTS.ear: {\r\n let subLineWidth = 10;\r\n let subLineHeight = this.design.radius;\r\n ctx.moveTo(pointField.x, pointField.y - subLineHeight);\r\n ctx.lineTo(pointField.x + subLineWidth, pointField.y - subLineHeight);\r\n RenderFigures.renderOval(ctx, this.design.radius * 2 , this.design.radius * 2, pointField.x+ subLineWidth, pointField.y);\r\n ctx.moveTo(pointField.x + subLineWidth, pointField.y + subLineHeight);\r\n ctx.lineTo(pointField.x, pointField.y + subLineHeight);\r\n\r\n ctx.strokeStyle = COLOR_THEMES[config.activeTheme].primary;\r\n ctx.fillStyle = '#ffffff';\r\n ctx.lineWidth = this.design.lineWidth;\r\n ctx.stroke();\r\n //ctx.fill();\r\n break;\r\n }\r\n case CORE_POINT_LAYOUTS.resize: {\r\n //outside circle\r\n ctx.arc(\r\n pointField.x,\r\n pointField.y,\r\n this.design.radius,\r\n 0,\r\n Math.PI * 2,\r\n false\r\n );\r\n ctx.strokeStyle = COLOR_THEMES[config.activeTheme].primary;\r\n ctx.fillStyle = '#ffffff';\r\n ctx.lineWidth = this.design.lineWidth + 1;\r\n ctx.stroke();\r\n ctx.fill();\r\n\r\n //inside circle\r\n ctx.beginPath();\r\n ctx.arc(\r\n pointField.x,\r\n pointField.y,\r\n this.design.radius - 3,\r\n 0,\r\n Math.PI * 2,\r\n false\r\n );\r\n\r\n ctx.fillStyle = COLOR_THEMES[config.activeTheme].primary;\r\n ctx.lineWidth = this.design.lineWidth + 1;\r\n ctx.fill();\r\n\r\n // arrows\r\n DrawImage.renderImage('resizeArrows', ctx,\r\n pointField.x - this.design.radius / 2 + 1.5,\r\n pointField.y - this.design.radius / 2 + 1.5,\r\n 2.5,\r\n 2.5,\r\n true,\r\n true\r\n );\r\n break;\r\n }\r\n }\r\n\r\n ctx.closePath();\r\n ctx.restore();\r\n };\r\n\r\n isHoveredWithParent() {\r\n const isParentMovableHovered = this.modelCorePoint.parent.mixin\r\n ? this.modelCorePoint.parent.mixin.movable.state.hovering\r\n : false;\r\n const isParentHovered = this.modelCorePoint.parent && this.modelCorePoint.parent.state\r\n ? this.modelCorePoint.parent.state.hovering\r\n : false;\r\n const isParentChildrenHovered = this.modelCorePoint.parent.mixin\r\n ? this.modelCorePoint.parent.mixin.movable.state.hoveringWithChildren\r\n : false;\r\n const isHovered = this.modelCorePoint.mixins.movable\r\n ? this.modelCorePoint.mixins.movable.state.hovering\r\n : false;\r\n\r\n return isParentHovered || isParentMovableHovered || isParentChildrenHovered || isHovered\r\n }\r\n\r\n isMouseDownWithParent() {\r\n const isParentMouseDown = this.modelCorePoint.parent.mixin\r\n ? this.modelCorePoint.parent.mixin.movable.state.mouseDown\r\n : false;\r\n const isParentChildrenMouseDown = this.modelCorePoint.parent.mixin\r\n ? this.modelCorePoint.parent.mixin.movable.state.mouseDownWithChildren\r\n : false;\r\n const isMouseDown = this.modelCorePoint.mixins.movable\r\n ? this.modelCorePoint.mixins.movable.state.mouseDown\r\n : false;\r\n\r\n return isParentMouseDown || isParentChildrenMouseDown || isMouseDown\r\n }\r\n}\r\n","import QRCode from 'qrcode';\r\nimport store from \"../../../store\";\r\nimport {CabinetsSet} from \"./sqftCabinetsDataMapper\";\r\nimport SqftJsonApi from \"../api/sqftJsonApi\";\r\nimport {setAPIErrorMessage, setSqftCabinetsGlb} from \"../../../actions/sqftFunctions\";\r\nimport {setAbortController} from \"../../../actions/sqftMenuFunctions\";\r\nimport {groupUrlsByVersion, similarityByWords} from \"./dataHelper\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport sqftConfig from \"../components/canvas/store/sqftConfig\";\r\nimport {SQFT_AR3D_GLB_VIEWER} from \"../constants\";\r\n\r\nexport const generateQRCode = async (url) => {\r\n // Generate the QR code data as a string\r\n const qrData = await QRCode.toDataURL(url);\r\n\r\n // Create a canvas element to draw the QR code image on\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = 300;\r\n canvas.height = 300;\r\n const ctx = canvas.getContext(\"2d\");\r\n\r\n // Load the QR code image data into an Image object\r\n const img = new Image();\r\n\r\n return new Promise((resolve, reject) => {\r\n img.onload = () => {\r\n // Draw the QR code image onto the canvas after it loads\r\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\r\n\r\n // Resolve the promise with the canvas image data URL\r\n resolve(canvas.toDataURL());\r\n };\r\n\r\n img.onerror = reject; // Reject if there is an error loading the image\r\n img.src = qrData; // Start loading the QR code image\r\n });\r\n}\r\n\r\nexport const getThirdPartyAR3DMetaData = (dbFeature, thirdPartyAR3DUrl) => {\r\n if (dbFeature && dbFeature.thirdPartyAR3DMetaData && thirdPartyAR3DUrl) {\r\n const metadataString = dbFeature.thirdPartyAR3DMetaData[thirdPartyAR3DUrl];\r\n\r\n // Check if the metadata string is present\r\n if (metadataString) {\r\n try {\r\n // Parse the metadata string as JSON\r\n return JSON.parse(metadataString);\r\n } catch (error) {\r\n // Handle JSON parsing error\r\n console.log(\"JSON parsing error:\", error.message);\r\n console.log(\"JSON metadataString\", metadataString);\r\n console.log(\"dbFeature\", dbFeature.sharedFeatureName);\r\n return null;\r\n }\r\n } else {\r\n console.log(\"dbFeature missing metadata\", dbFeature.id);\r\n }\r\n }\r\n\r\n return null\r\n}\r\n\r\nexport const getDepthFromAR3DMetaData = (thirdPartyAR3DMetaData) => {\r\n if (thirdPartyAR3DMetaData && Array.isArray(thirdPartyAR3DMetaData.Depth) && thirdPartyAR3DMetaData.Depth.length) {\r\n return parseFloat(thirdPartyAR3DMetaData.Depth[0]);\r\n }\r\n return null;\r\n};\r\n\r\nexport const getWidthFromAR3DMetaData = (thirdPartyAR3DMetaData) => {\r\n if (thirdPartyAR3DMetaData && Array.isArray(thirdPartyAR3DMetaData.Width) && thirdPartyAR3DMetaData.Width.length) {\r\n return parseFloat(thirdPartyAR3DMetaData.Width[0]);\r\n }\r\n return null;\r\n};\r\n\r\nexport const getHeightFromAR3DMetaData = (thirdPartyAR3DMetaData) => {\r\n if (thirdPartyAR3DMetaData && Array.isArray(thirdPartyAR3DMetaData.Height) && thirdPartyAR3DMetaData.Height.length) {\r\n return parseFloat(thirdPartyAR3DMetaData.Height[0]);\r\n }\r\n return null;\r\n};\r\n\r\nexport const getSpecialShape = (thirdPartyAR3DMetaData) => {\r\n if (thirdPartyAR3DMetaData && Array.isArray(thirdPartyAR3DMetaData.SpecialShape) && thirdPartyAR3DMetaData.SpecialShape.length) {\r\n return thirdPartyAR3DMetaData.SpecialShape[0];\r\n }\r\n return null;\r\n};\r\n\r\nexport const getCategoryFromMetadata = (thirdPartyAR3DMetaData) => {\r\n if (thirdPartyAR3DMetaData && Array.isArray(thirdPartyAR3DMetaData.Category) && thirdPartyAR3DMetaData.Category.length) {\r\n return thirdPartyAR3DMetaData.Category[0];\r\n }\r\n return null;\r\n};\r\n\r\nexport const getDepthFromDescription = (dbFeature) => {\r\n if (dbFeature.description) {\r\n const extractDimension = (dim) => parseInt(dbFeature.description.substr(dbFeature.description.indexOf(dim) + dim.length + 1, 3), 10);\r\n return extractDimension('Depth');\r\n }\r\n return null;\r\n};\r\n\r\nexport const getWidthFromDescription = (dbFeature) => {\r\n if (dbFeature.description) {\r\n const extractDimension = (dim) => parseInt(dbFeature.description.substr(dbFeature.description.indexOf(dim) + dim.length + 1, 3), 10);\r\n return extractDimension('Width');\r\n }\r\n return null;\r\n};\r\n\r\nexport const getHeightFromDescription = (dbFeature) => {\r\n if (dbFeature.description) {\r\n const extractDimension = (dim) => parseInt(dbFeature.description.substr(dbFeature.description.indexOf(dim) + dim.length + 1, 3), 10);\r\n return extractDimension('Height');\r\n }\r\n return null;\r\n};\r\n\r\nexport const getWidthFromDbFeature = (dbFeature, thirdPartyAR3DMetaData) => {\r\n let width = getWidthFromAR3DMetaData(thirdPartyAR3DMetaData);\r\n if (!width) {\r\n width = getWidthFromDescription(dbFeature);\r\n }\r\n return width\r\n};\r\n\r\nexport const getDepthFromDbFeature = (dbFeature, thirdPartyAR3DMetaData) => {\r\n let depth = getDepthFromAR3DMetaData(thirdPartyAR3DMetaData);\r\n if (!depth) {\r\n depth = getDepthFromDescription(dbFeature);\r\n }\r\n return depth\r\n};\r\n\r\nexport const getHeightFromDbFeature = (dbFeature, thirdPartyAR3DMetaData) => {\r\n let height = getHeightFromAR3DMetaData(thirdPartyAR3DMetaData);\r\n if (!height) {\r\n height = getHeightFromDescription(dbFeature);\r\n }\r\n return height\r\n};\r\n\r\nexport const findGLBLink = (links) => {\r\n const glbLink = links.find(link => link.endsWith('.glb'));\r\n return glbLink || null;\r\n};\r\n\r\n// Function to normalize strings for comparison\r\nexport const normalizeString = (str) => {\r\n return str.toLowerCase().replace(/[\\W_]+/g, ''); // Remove non-alphanumeric characters and convert to lowercase\r\n}\r\n\r\n// Function to split and normalize feature name or URL part for comparison\r\nexport const splitAndNormalize = (str) => {\r\n // Split by spaces and dashes, then normalize each part\r\n return str.split(/[\\s\\-]+/).map(normalizeString);\r\n}\r\n\r\n// Function to split and normalize feature name or URL part for comparison\r\nexport const getUrlByName = (nameSearch, thirdPartyAR3DUrls) => {\r\n const featureNameParts = splitAndNormalize(nameSearch);\r\n\r\n // 1.urlBySharedFeatureName - Enhanced Matching\r\n return thirdPartyAR3DUrls.find(url => {\r\n const urlParts = splitAndNormalize(url.toLowerCase().split('/').pop().split('.')[0]);\r\n return featureNameParts.every(part => urlParts.includes(part));\r\n });\r\n}\r\n\r\n// Function to get 3D URLs for a feature\r\nexport const get3dURLsForFeature = (feature) => {\r\n // Check if feature, feature.getFeatureName, and feature.dbFeature are defined\r\n if (!feature || !feature.getFeatureName || typeof feature.getFeatureName !== 'function' || !feature.dbFeature) {\r\n console.log('Invalid feature or feature properties');\r\n return null;\r\n }\r\n\r\n const featureNameParts = splitAndNormalize(feature.getFeatureName());\r\n\r\n // Check if thirdPartyAR3DUrls is defined and is an array\r\n if (!Array.isArray(feature.dbFeature.thirdPartyAR3DUrls)) {\r\n console.log('thirdPartyAR3DUrls is not defined or not an array. Id:', feature.dbFeature.id);\r\n return null;\r\n }\r\n\r\n const thirdPartyAR3DUrls = feature.dbFeature.thirdPartyAR3DUrls.filter(url => url.endsWith('.glb'));\r\n\r\n // Enhanced Matching\r\n const urlByFeatureName = thirdPartyAR3DUrls.find(url => {\r\n const urlParts = splitAndNormalize(url.toLowerCase().split('/').pop().split('.')[0]);\r\n // Check if all parts of the feature name are present in the URL segment\r\n return featureNameParts.every(part => urlParts.includes(part));\r\n });\r\n\r\n console.log(\"urlByFeatureName\", urlByFeatureName);\r\n if (urlByFeatureName) {\r\n return urlByFeatureName;\r\n }\r\n\r\n return null;\r\n};\r\n\r\n// Function to check if a URL contains \"-HE\" right before the file extension\r\nexport const containsHEBeforeExtension = (url) => {\r\n // Regular expression to match \"-HE\" right before the file extension\r\n const pattern = /-HE\\.[^/.]+$/;\r\n return pattern.test(url);\r\n}\r\n\r\n// Function to check if a URL contains \"-HE\" right before the file extension\r\nexport const startsFromH = (str) => {\r\n return str.charAt(0) === 'H';\r\n}\r\n\r\n// Function to check if a URL contains \"-HE\" right before the file extension\r\nexport const isHoodShape = (shape) => {\r\n const layout = getCurrentLayout();\r\n const relatedParentFeature = layout.getFeatureById(shape.relatedParentFeatureId, true);\r\n if (relatedParentFeature) {\r\n let shapeDbFeature = relatedParentFeature.dbFeature.relatedFeatures.find(relatedFeature => relatedFeature.id === shape.featureId);\r\n if (!shapeDbFeature) {\r\n const shapeFeature = layout.getFeatureById(shape.featureId, true);\r\n if (shapeFeature) {\r\n shapeDbFeature = shapeFeature.dbFeature\r\n }\r\n }\r\n const url = getUrlMatchingByColor(shapeDbFeature, relatedParentFeature).replace(/\\s+\\.glb$/, '.glb');\r\n\r\n const metaData = getThirdPartyAR3DMetaData(shapeDbFeature, url);\r\n const category = getCategoryFromMetadata(metaData);\r\n const shapeHeight = shape.shapeCabinet ? shape.shapeCabinet.getShapeHeight() : shape.getHeight();\r\n\r\n return category === \"Hood\" || containsHEBeforeExtension(url) || shapeHeight <= 18;\r\n }\r\n}\r\n\r\nexport const setCabinetGLBFromCabinetsSet = async(displayDoorsOnly = false, shouldDisplayFramedDoors = false) => {\r\n const cabinetsData = CabinetsSet.prepareCabinetsSet(displayDoorsOnly, shouldDisplayFramedDoors);\r\n console.log(\"prepared cabinetsData\", cabinetsData);\r\n\r\n if (sqftConfig.threeD.glbViewer === SQFT_AR3D_GLB_VIEWER.singleModel) {\r\n const cabinetsUrl = await getUrlToCabinetGLB(cabinetsData);\r\n setUrlToCabinetGLB(cabinetsUrl);\r\n } else {\r\n await setCabinetsSetToCabinetGLB(cabinetsData);\r\n }\r\n}\r\n\r\nexport const setCabinetsSetToCabinetGLB = async(cabinetsData) => {\r\n store.dispatch(setSqftCabinetsGlb(cabinetsData));\r\n}\r\n\r\nexport const getUrlToCabinetGLB = async(cabinetsData) => {\r\n const state = store.getState();\r\n if (state.sqftState.abortRequestController) {\r\n state.sqftState.abortRequestController.abort();\r\n }\r\n\r\n let cabinetSet;\r\n try {\r\n store.dispatch(setAPIErrorMessage(null));\r\n const abortController = new AbortController();\r\n store.dispatch(setAbortController(abortController));\r\n cabinetSet = await SqftJsonApi.postCabinetSet(cabinetsData, { signal: abortController.signal });\r\n } catch (e) {\r\n if (e.name !== 'AbortError') {\r\n store.dispatch(setAPIErrorMessage(e));\r\n }\r\n }\r\n console.log(\"response cabinetSet from api\", cabinetSet );\r\n\r\n return cabinetSet\r\n}\r\n\r\nexport const setUrlToCabinetGLB = (cabinetSet) => {\r\n //URL needs to be here to display it in AR https://s3.amazonaws.com/qc-3dfiles/composed/ to override it check SquareFootageToolAR\r\n //glbUrl = \"https://qc-3dfiles.s3.amazonaws.com/ar-composer/W3030.glb\"\r\n //glbUrl = \"/images/sqft-icons/3d/Chair.glb\"\r\n //store.dispatch(setSqftCabinetsGlb(\"/video/3d/cabinet.glb\"));\r\n //store.dispatch(setSqftCabinetsGlb(\"https://quoteremodel.com/video/sqft/cabinets/cabinet.glb\"));\r\n //glbUrl = \"/images/sqft-icons/3d/DCW2430 Summer Flame.glb\"\r\n //glbUrl = \"/images/sqft-icons/3d/hood/Hood Oven GLB/Appliances/Hood_0_0_0_30_0_0_Collection/All-Hood ZLINE 8654SNZ CB-30-25.6.glb\"\r\n //glbUrl = \"https://discoverthreejs.com/examples/assets/models/Parrot.glb\"\r\n //glbUrl = \"https://threejs.org/examples/models/gltf/AnisotropyBarnLamp.glb\"\r\n //setSqftCabinetsGlb(\"https://threejs.org/examples/models/gltf/AnisotropyBarnLamp.glb\");\r\n //store.dispatch(setSqftCabinetsGlb(\"https://master_new_1512.quoteremodel.com/content/Views/visualizers/images/sqft-icons/3d/cabinet.glb\"));\r\n //store.dispatch(setSqftCabinetsGlb(\"https://d1mb1i73swc8dz.cloudfront.net/ar-composer/All-Bottom Cabinet-Light Italian Walnut-Bryant-30-34.5-SB.glb\"));\r\n //store.dispatch(setSqftCabinetsGlb(\"https://s3.amazonaws.com/qc-3dfiles/composed/5dd7954e-ed43-4489-8260-93eeaade08c5.glb\"));\r\n store.dispatch(setSqftCabinetsGlb(cabinetSet ? cabinetSet.s3Url : null));\r\n}\r\n\r\nexport function getUrlMatchingByColor(dbFeature, relatedParentFeature) {\r\n //console.log(\"relatedParentFeature.getFeatureName()\", relatedParentFeature.getFeatureName());\r\n //console.log(\"relatedParentFeature.sharedFeatureName\", relatedParentFeature.dbFeature.sharedFeatureName);\r\n\r\n if (!dbFeature || !relatedParentFeature) {\r\n console.log('Invalid feature or feature properties');\r\n return null;\r\n }\r\n\r\n if (!Array.isArray(dbFeature.thirdPartyAR3DUrls)) {\r\n console.log('thirdPartyAR3DUrls is not defined or not an array. Id:', dbFeature.id);\r\n return null;\r\n }\r\n\r\n const relatedParentFeatureName = relatedParentFeature.getFeatureName();\r\n\r\n // Sort URLs by version in descending order\r\n const sortedUrls = groupUrlsByVersion(dbFeature.thirdPartyAR3DUrls);\r\n\r\n // Try to find a URL by the shared feature name\r\n const urlBySharedFeatureName = getUrlByName(relatedParentFeature.dbFeature.sharedFeatureName, sortedUrls);\r\n if (urlBySharedFeatureName) {\r\n return urlBySharedFeatureName;\r\n }\r\n\r\n // Try to find a URL by the parent feature name\r\n const urlByFeatureName = getUrlByName(relatedParentFeatureName, sortedUrls);\r\n if (urlByFeatureName) {\r\n return urlByFeatureName;\r\n }\r\n\r\n // Try to find a URL by similarity based on the shared feature name\r\n const urlBySimilarity = similarityByWords(sortedUrls, relatedParentFeature.dbFeature.sharedFeatureName);\r\n if (urlBySimilarity) {\r\n return urlBySimilarity;\r\n }\r\n\r\n // Try to find a URL by similarity based on the parent feature name\r\n const urlBySimilarityFromFeatureName = similarityByWords(sortedUrls, relatedParentFeatureName);\r\n if (urlBySimilarityFromFeatureName) {\r\n return urlBySimilarityFromFeatureName;\r\n }\r\n\r\n // Check if URL contains the feature name\r\n let matchingUrl = sortedUrls.find(url => url.includes(relatedParentFeatureName));\r\n if (matchingUrl) {\r\n return matchingUrl;\r\n }\r\n\r\n // Check if URL contains the color name\r\n const color = relatedParentFeature.getColorName();\r\n if (color && color.length > 3) {\r\n matchingUrl = sortedUrls.find(url => url.includes(color));\r\n if (matchingUrl) {\r\n return matchingUrl;\r\n }\r\n }\r\n\r\n // If no specific color, fallback to checking for 'black' in URL\r\n matchingUrl = sortedUrls.find(url => url.toLowerCase().includes('black'));\r\n if (matchingUrl) {\r\n return matchingUrl;\r\n }\r\n\r\n // If no match was found, return the first URL as a fallback\r\n return sortedUrls[0] || null;\r\n}\r\n\r\nexport function getRelatedFeatureMetadata (relatedFeature, parentFeature) {\r\n const url = getUrlMatchingByColor(relatedFeature.dbFeature, parentFeature);\r\n return getThirdPartyAR3DMetaData(relatedFeature.dbFeature, url);\r\n}\r\n\r\nexport function getCabinetDimensions (relatedFeature, parentFeature) {\r\n const thirdPartyAR3DMetaData = getRelatedFeatureMetadata(relatedFeature, parentFeature);\r\n const width = getWidthFromDbFeature(relatedFeature.dbFeature, thirdPartyAR3DMetaData);\r\n const depth = getDepthFromDbFeature(relatedFeature.dbFeature, thirdPartyAR3DMetaData);\r\n const height = getHeightFromDbFeature(relatedFeature.dbFeature, thirdPartyAR3DMetaData);\r\n\r\n return { width: width, height: height, depth: depth };\r\n}\r\n\r\nexport function getCabinetSimilarFeatureFromAnotherColor (featuresListToSearchForNewFeature, currentShapeDbFeature) {\r\n const getCabinetBoxName = (str) => {\r\n if (str.includes('/')) {\r\n const parts = str.split('/');\r\n return parts[0].trim();\r\n } else {\r\n return str.trim();\r\n }\r\n }\r\n const cabinetBoxName = getCabinetBoxName(currentShapeDbFeature.sharedFeatureName);\r\n let newShapeDbFeature = featuresListToSearchForNewFeature.find(relatedFeature =>\r\n relatedFeature.sharedFeatureName === cabinetBoxName\r\n );\r\n\r\n // If no exact match found, search for an 'includes' match\r\n if (!newShapeDbFeature) {\r\n newShapeDbFeature = featuresListToSearchForNewFeature.find(relatedFeature =>\r\n relatedFeature.sharedFeatureName.includes(cabinetBoxName)\r\n );\r\n }\r\n\r\n return newShapeDbFeature\r\n}\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from 'react-redux';\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport {setCabinetsApplyTo, setCabinetsApplyToBathroom} from \"../../../actions/navigationFunctions\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport UiSelect from \"../../ui/select\";\r\nimport {CABINET_GROUP} from \"../core/constants\";\r\nimport Analytics from '../../../analytics';\r\nimport {CABINET_GROUP_BATHROOM} from \"../../bvSceneComponent/core/constants\";\r\nimport store from \"../../../store\";\r\nimport {getFeatureGroupName} from \"../../../misc/helpers\";\r\nimport {getMissingFeaturesAndClickThem} from \"../../look/lookNavigation/lookNavigationFunctions\";\r\n\r\nclass CabinetSwitchers extends Component {\r\n\r\n static propTypes = {\r\n activeSubPart: PropTypes.object.isRequired,\r\n isMobile: PropTypes.bool,\r\n };\r\n\r\n componentDidMount() {\r\n const cabinetsApplyTo = this.getCabinetsApplyTo();\r\n const setCabinetsApplyTo = this.getSetCabinetsApplyTo();\r\n if (!cabinetsApplyTo.includes(this.props.activeSubPart.partId)) {\r\n cabinetsApplyTo.push(this.props.activeSubPart.partId);\r\n setCabinetsApplyTo(cabinetsApplyTo);\r\n }\r\n }\r\n\r\n toggleCabinetsApplyTo = (partId) => {\r\n Analytics.sendClickEvent('cabinets-apply-to-' + partId);\r\n let cabinetsApplyTo = [...this.getCabinetsApplyTo()];\r\n const setCabinetsApplyTo = this.getSetCabinetsApplyTo();\r\n const existingIndex = cabinetsApplyTo.findIndex(cabinetsApplyToPartId => cabinetsApplyToPartId === partId);\r\n if (existingIndex > -1) {\r\n cabinetsApplyTo.splice(existingIndex, 1)\r\n } else {\r\n cabinetsApplyTo.push(partId)\r\n }\r\n setCabinetsApplyTo(cabinetsApplyTo);\r\n };\r\n\r\n getButtonName = (partId, layout) => {\r\n const {intl, fabricatorData} = this.props;\r\n if (intl.locale !== \"en-EN\") {\r\n const featureGroup = layout.getFeatureGroupByPartId(partId);\r\n if (featureGroup) {\r\n return getFeatureGroupName(featureGroup, intl, fabricatorData)\r\n }\r\n }\r\n switch (partId) {\r\n case \"top_cabinet\":\r\n return this.props.showAsDropdown ? \"upper cabinet\" : \"upper\";\r\n case \"bottom_cabinet\":\r\n return this.props.showAsDropdown ? \"lower cabinet\" : \"lower\";\r\n case \"center_island_cabinet\":\r\n return \"center island\";\r\n case \"vanity_cabinet\":\r\n return \"Cabinet\";\r\n case \"vanity_mirror\":\r\n return \"Mirror\";\r\n default:\r\n return \"\"\r\n }\r\n };\r\n\r\n static getFeatureDoorStyleFilter = (feature, filterName = \"DoorStyle\") => {\r\n if (!feature) {\r\n return null\r\n }\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const doorStyleFilterGroup = filterGroups.find(group => group.name === filterName);\r\n return doorStyleFilterGroup && (feature.dbFeature.fabFilterValueIDs[doorStyleFilterGroup.id] || feature.dbFeature.filterValueIDs[doorStyleFilterGroup.id])\r\n };\r\n\r\n static getNeededFeatureFromNavItems = (navigationItemName, featureGroup) => {\r\n return featureGroup.features.find((feature) => {\r\n const featureName = feature.getSplittedFeatureName().replace(`${feature.dbFeature.groupName} - `, \"\");\r\n return featureName && navigationItemName && (featureName === navigationItemName)\r\n });\r\n }\r\n\r\n static applyClickTo = async (navigationItemPart, ignoreLocked, cabinetsApplyTo, setCurrentFeature = false) => {\r\n const layout = getCurrentLayout();\r\n let missingFeatures = [];\r\n for (const neededPartId of cabinetsApplyTo) {\r\n const featureGroup = layout.getFeatureGroupByPartId(neededPartId);\r\n if (!featureGroup) {\r\n continue;\r\n }\r\n let neededFeature;\r\n if (document.kvConfig.visualizerType === \"bvScene\") {\r\n const doorStyles = CabinetSwitchers.getFeatureDoorStyleFilter(navigationItemPart, \"DoorStyle\");\r\n const materials = CabinetSwitchers.getFeatureDoorStyleFilter(navigationItemPart, \"Material\");\r\n neededFeature = doorStyles && featureGroup.features.find((feature) => {\r\n const featureDoorStyles = CabinetSwitchers.getFeatureDoorStyleFilter(feature, \"DoorStyle\");\r\n const featureMaterials = CabinetSwitchers.getFeatureDoorStyleFilter(feature, \"Material\");\r\n return doorStyles && featureDoorStyles && materials && featureMaterials\r\n && (featureDoorStyles.some(ds => doorStyles.includes(ds)))\r\n && (featureMaterials.some(mat => materials.includes(mat)))\r\n });\r\n } else {\r\n const navigationItemName = navigationItemPart.getSplittedFeatureName().replace(`${navigationItemPart.dbFeature.groupName} - `, \"\");\r\n neededFeature = CabinetSwitchers.getNeededFeatureFromNavItems(navigationItemName, featureGroup);\r\n if (!neededFeature\r\n && (!featureGroup.alreadyRequestedFeatureNames || !featureGroup.alreadyRequestedFeatureNames.includes(navigationItemName))) {\r\n missingFeatures.push({relatedItem: featureGroup, navigationItemName, setCurrentFeature: true})\r\n }\r\n }\r\n if (neededFeature) {\r\n if (setCurrentFeature) {\r\n featureGroup.activeFeatureBeforeAllWalls = featureGroup.activeFeature;\r\n }\r\n neededFeature.clickFromAllWalls(ignoreLocked);\r\n }\r\n }\r\n if (missingFeatures.length) {\r\n await getMissingFeaturesAndClickThem(missingFeatures, true)\r\n }\r\n return Promise.resolve()\r\n }\r\n\r\n static applyAllCabinets = (navigationItemPart, ignoreLocked) => {\r\n const propsCabinetsApplyTo = store.getState().navigationState[\r\n document.kvConfig.visualizerType === \"bvScene\" ? \"cabinetsApplyToBathroom\" : \"cabinetsApplyTo\"\r\n ];\r\n const cabinetsApplyTo = [...propsCabinetsApplyTo];\r\n const existingIndex = cabinetsApplyTo.findIndex(cabinetsApplyToPartId => cabinetsApplyToPartId === navigationItemPart.partId);\r\n if (existingIndex > -1) {\r\n cabinetsApplyTo.splice(existingIndex, 1); // remove already clicked partId\r\n }\r\n return CabinetSwitchers.applyClickTo(navigationItemPart, ignoreLocked, cabinetsApplyTo)\r\n };\r\n\r\n getValueText = () => {\r\n if (this.props.windowWidth < 720) {\r\n return \r\n } else if (this.props.windowWidth < 800) {\r\n return \r\n } else {\r\n return \r\n }\r\n };\r\n\r\n buttonIsDisabled = (partId) => {\r\n const layout = getCurrentLayout();\r\n return this.props.activeSubPart.partId === partId\r\n || (document.kvConfig.visualizerType === \"Kitchen\" && partId === \"center_island_cabinet\"\r\n && !layout.getCurrentLayoutAbbreviation().includes(\"I\"));\r\n }\r\n\r\n renderDropDown = () => {\r\n const CABINETGROUPS = this.getCabinetGroups();\r\n const cabinetsApplyTo = this.getCabinetsApplyTo();\r\n const layout = getCurrentLayout();\r\n\r\n return (\r\n \r\n {CABINETGROUPS.map(partId => {\r\n const disabledButton = this.buttonIsDisabled(partId);\r\n return (\r\n
  • \r\n disabledButton ? false : this.toggleCabinetsApplyTo(partId)}/>\r\n disabledButton ? false : this.toggleCabinetsApplyTo(partId)}>\r\n {this.getButtonName(partId, layout)}\r\n \r\n
  • \r\n )\r\n })}\r\n
    \r\n )\r\n };\r\n\r\n getCabinetGroups = () => {\r\n if (document.kvConfig.visualizerType === \"bvScene\") {\r\n return CABINET_GROUP_BATHROOM\r\n }\r\n return [...CABINET_GROUP].filter(partId => partId !== \"fridge_enclosure\");\r\n };\r\n\r\n getCabinetsApplyTo = () => {\r\n return document.kvConfig.visualizerType === \"bvScene\" ? this.props.cabinetsApplyToBathroom : this.props.cabinetsApplyTo;\r\n };\r\n\r\n getSetCabinetsApplyTo = () => {\r\n return document.kvConfig.visualizerType === \"bvScene\" ? this.props.setCabinetsApplyToBathroom : this.props.setCabinetsApplyTo;\r\n };\r\n\r\n render() {\r\n const CABINETGROUPS = this.getCabinetGroups();\r\n if (this.props.showAsDropdown) {\r\n return this.renderDropDown()\r\n }\r\n const cabinetsApplyTo = this.getCabinetsApplyTo();\r\n const layout = getCurrentLayout();\r\n return (\r\n
    \r\n
    Apply to
    \r\n
      \r\n {CABINETGROUPS.map(partId => {\r\n const hideButton = this.buttonIsDisabled(partId);\r\n return hideButton ? null : (\r\n
    • this.toggleCabinetsApplyTo(partId)}>\r\n \r\n {this.getButtonName(partId, layout)}\r\n
      \r\n \r\n
      \r\n
    • \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n cabinetsApplyTo: store.navigationState.cabinetsApplyTo,\r\n cabinetsApplyToBathroom: store.navigationState.cabinetsApplyToBathroom,\r\n windowWidth: store.serverState.windowWidth,\r\n fabricatorData: store.fabricatorState,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setCabinetsApplyTo,\r\n setCabinetsApplyToBathroom\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(CabinetSwitchers)\r\n);\r\n","import isEmpty from \"lodash/isEmpty\";\r\nimport trim from \"lodash/trim\";\r\nimport isEqual from \"lodash/isEqual\";\r\nimport uniqBy from \"lodash/uniqBy\";\r\n\r\nimport DesignNavigationItem from \"./designNavigationItem\";\r\nimport {Exception} from \"../common/exception\";\r\nimport {\r\n filterFeaturesByValues,\r\n getAllFeatureFilters,\r\n getFilterGroupValue,\r\n getFilterGroupValues\r\n} from \"../../misc/utils\";\r\nimport store from \"../../store\";\r\nimport featureIsMatchingDisplayLogic, {checkIfInCatProperty} from \"../../misc/displayLogic\";\r\nimport {addDisplayLogicCartItem, addToCart} from \"../../actions/actionFunctions\";\r\nimport {capitalizeFirstLetters} from \"../../misc/helpers\";\r\nimport {IS_LIXIL_UI} from \"../../config\";\r\nimport {LOOK_ROOM_TYPES} from \"../look/core/constants\";\r\nimport {getCurrentRoomType} from \"../appLayout\";\r\nimport {getOptionsFromNavItemsForFeature} from \"../look/lookNavigation/lookFunctions\";\r\nimport {getColorFilterValue} from \"../../misc/filtersFunctions\";\r\nimport {loadRelatedFeatures, setRoomNotInVisualizerProperty} from \"./featuresFunctions\";\r\nimport {getFeatureCropCoors} from \"../../misc/metaDataFunctions\";\r\n\r\nexport default class PartCommon { // Common Class for KV & BV common methods (Feature -> IntermediatePart -> Part -> PartCommon)\r\n\r\n loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature = true, shouldLoadInDifferentGroups = false) {\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n if (loadFeature) {\r\n this[relatedItemName].load(dbFeature);\r\n }\r\n return !shouldLoadInDifferentGroups\r\n }\r\n return false\r\n }\r\n\r\n createRelatedItems() {\r\n if (this.relatedGroupNames) {\r\n this.relatedGroupNames.forEach(groupName => {\r\n this.load({groupName}, false)\r\n })\r\n }\r\n }\r\n\r\n navigationNoMetaSubItems(filters, searchText) {\r\n return this.returnUniqueNavFeatures(this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters, this.features), searchText))\r\n }\r\n\r\n /**\r\n * Returns an array of navigation items related to the given parent item\r\n * i.e. Floor - will return all Floor features\r\n * @returns {Array.}\r\n */\r\n navigationSubItems(filters, searchText) {\r\n return this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters), searchText)\r\n .map(_ => new DesignNavigationItem(_.featureName, _)); // 1) filter them by filters 2) filter them by search\r\n }\r\n\r\n navigationSubItemsWithFilterWithInactive(propName, propValue, featuresToCheck = this.features) {\r\n const refactoredArray = featuresToCheck.map((feature) => {\r\n feature.matchesMetaFailed = !(feature.matchesMetaForCondition(propName, propValue));\r\n return feature\r\n });\r\n return refactoredArray.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n /**\r\n * Called before setLayers, so that each Feature can set the zIndex for its layers\r\n * @param zIndexes {object}\r\n */\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n this.getRelatedItems().forEach(_ => _.setZIndex(zIndexes));\r\n }\r\n }\r\n\r\n /**\r\n * Each feature will load its data from teh data object which comes from REST\r\n * @param dbFeature {object}\r\n * @return boolean // needed for break logic\r\n */\r\n load(dbFeature) {\r\n console.log('exception load', this, dbFeature);\r\n Exception.NotImplementedBaseClass();\r\n }\r\n\r\n /**\r\n * Will return the list of sub-parts if any, i.e. for Vanity it will be Mirror, Toilet, Sink, ...\r\n * !@param withHidden {boolean}\r\n * @returns {Array.}\r\n */\r\n subParts(withHidden = true) {\r\n return this.getRelatedItems()\r\n .filter(item => this.filterRelatedItem(item, withHidden))\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n filterRelatedItem(relatedItem, withHidden) {\r\n return withHidden\r\n ? relatedItem.visible && relatedItem.featureGroupEnabled\r\n : relatedItem.visible\r\n && relatedItem.featureGroupEnabled\r\n && (relatedItem.featureGroupVisible || (!relatedItem.featureGroupVisible && document.kvConfig.isBackend))\r\n }\r\n\r\n /**\r\n * Returns the navigation item to be displayed in navigation bar\r\n */\r\n navigationItem() {\r\n Exception.NotImplementedBaseClass(this);\r\n }\r\n\r\n /**\r\n * In case of Vanity is Custom & Complete.\r\n * Usually called for Complex parts, such as Vanities\r\n */\r\n subTypes() {\r\n // Exception.NotImplementedBaseClass(this);\r\n return []\r\n }\r\n\r\n /**\r\n * Converts a given sub-type to string\r\n // * @param subType\r\n * @returns {null}\r\n */\r\n subTypeToString() {\r\n return null;\r\n }\r\n\r\n /**\r\n * Checked whether the given sub-type has items, i.e. Vanity.Complete has\r\n */\r\n isSubTypeWithItems() {\r\n Exception.NotImplementedBaseClass(this);\r\n }\r\n\r\n activeSubType() {\r\n Exception.NotImplementedBaseClass(this);\r\n }\r\n\r\n getFilteredFeaturesByFilters(filters, featuresArray = this.features) {\r\n return !isEmpty(filters) ? filterFeaturesByValues(featuresArray, filters) : (featuresArray || []);\r\n }\r\n\r\n getFeaturesBySearchText(arrayToFilter, searchText) {\r\n if (!searchText) {\r\n return arrayToFilter\r\n }\r\n if (IS_LIXIL_UI) {\r\n return this.getFeaturesBySearchTextLixil(arrayToFilter, searchText)\r\n }\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n return arrayToFilter.filter(feature => {\r\n const _searchText = trim(searchText.toLowerCase());\r\n let res = (!!feature);\r\n if (res) {\r\n const featureFilterValueIds = Object.assign(feature.dbFeature.filterValueIDs, feature.dbFeature.fabFilterValueIDs);\r\n let isPartName = feature.getFeatureName && feature.getFeatureName().toLowerCase().includes(_searchText);\r\n let isFilterName = false;\r\n\r\n if(!isPartName) {\r\n for(let filterGroupId in featureFilterValueIds) {\r\n let filterGroupIds = featureFilterValueIds[filterGroupId];\r\n for(let filterIndex in filterGroupIds) {\r\n let filterId = filterGroupIds[filterIndex];\r\n if(filterGroups[filterGroupId] && filterGroups[filterGroupId].values) {\r\n let filterGroup = filterGroups.find(fg => fg.id === filterGroupId);\r\n if (filterGroup && filterGroup.values) {\r\n let filter = filterGroup.values.find( fgv => fgv.id === filterId);\r\n if (filter) {\r\n isFilterName = (isFilterName || filter.displayText.toLowerCase().includes(_searchText) || filter.value.toLowerCase().includes(_searchText));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n res = isPartName || isFilterName;\r\n }\r\n return res;\r\n })\r\n }\r\n\r\n getFeaturesBySearchTextLixil(arrayToFilter, searchText) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const collectionFilterGroup = filterGroups.find(group => group.name === \"Collection\");\r\n const _searchText = searchText.trim().toLowerCase();\r\n\r\n return arrayToFilter.filter(feature => {\r\n const featureFilterValueIds = getAllFeatureFilters(feature);\r\n const sku = (feature.getSplittedFeatureName() || \"\").toLowerCase();\r\n const customDisplayName = (feature.dbFeature.customDisplayName || \"\").toLowerCase();\r\n\r\n let res = (!!feature);\r\n if (res) {\r\n let matchByName = (sku && sku.includes(_searchText)) || (customDisplayName && customDisplayName.includes(_searchText));\r\n let isFilterName = false;\r\n\r\n if (!matchByName && collectionFilterGroup && Array.isArray(featureFilterValueIds[collectionFilterGroup.id])) {\r\n matchByName = featureFilterValueIds[collectionFilterGroup.id].some(filterId => {\r\n return collectionFilterGroup.values.some(fValue => {\r\n return (fValue.id === filterId) && fValue.displayText && fValue.displayText.toLowerCase().includes(_searchText)\r\n })\r\n })\r\n }\r\n\r\n if (!matchByName) {\r\n for(let filterGroupId in featureFilterValueIds) {\r\n let filterGroupIds = featureFilterValueIds[filterGroupId];\r\n for(let filterIndex in filterGroupIds) {\r\n let filterId = filterGroupIds[filterIndex];\r\n if(filterGroups[filterGroupId] && filterGroups[filterGroupId].values) {\r\n let filterGroup = filterGroups.find(fg => fg.id === filterGroupId);\r\n if (filterGroup && filterGroup.values) {\r\n let filter = filterGroup.values.find(fgv => fgv.id === filterId);\r\n if (filter) {\r\n isFilterName = (isFilterName || filter.displayText.toLowerCase().includes(_searchText) || filter.value.toLowerCase().includes(_searchText));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n res = matchByName || isFilterName;\r\n }\r\n return res;\r\n })\r\n }\r\n\r\n /**\r\n * Returns the fabricator feature id\r\n * @returns {int}\r\n */\r\n id() {\r\n return this.dbFeature.id;\r\n }\r\n\r\n /**\r\n * Returns the fabricator feature id\r\n * @param featureId {number}\r\n * @param partsToo {boolean}\r\n * @returns {feature}\r\n */\r\n getFeatureById(featureId, partsToo = false) {\r\n const neededId = +featureId;\r\n if (!this.features && (!partsToo || !this.featuresParts)) {\r\n console.error(\"This featureGroup has no features array:\", this)\r\n return null\r\n }\r\n // if (partsToo) {\r\n // return this.features.find(f => f.dbFeature.id === neededId) || this.featuresParts.find(f => f.dbFeature.id === neededId)\r\n // }\r\n // return this.features.find(f => f.dbFeature.id === neededId)\r\n const allFeatures = partsToo ? [...this.features, ...this.featuresParts] : this.features;\r\n for (let i = 0; i < allFeatures.length; i++) {\r\n if (allFeatures[i].dbFeature.id === neededId) {\r\n return allFeatures[i];\r\n }\r\n }\r\n return null\r\n }\r\n\r\n getFeatureByPartName(partName, inParts = false) {\r\n if (!partName) {\r\n return null\r\n }\r\n partName = partName.split(\" \").join(\"\").toLowerCase(); // for example, \"Natural Stone Sofitel Gold\" & \"Natural Stone Sofitel Gold\" - different names\r\n const arrayToFind = inParts && this.featureParts ? this.featureParts.map(feature => { return {part: feature} }) : this.navigationSubItems();\r\n const matchingItem = arrayToFind.find(navFeature => {\r\n const feature = navFeature.part;\r\n if (!feature.partName || feature.notAvailableInVisualizer) {\r\n return false\r\n }\r\n if (!feature._partNameWithoutSpaces) {\r\n feature._partNameWithoutSpaces = feature.getMatchingFeatureName().split(\" \").join(\"\").toLowerCase();\r\n }\r\n return partName === feature._partNameWithoutSpaces\r\n });\r\n return matchingItem ? matchingItem.part : null\r\n }\r\n\r\n getDefaultFeature() {\r\n\r\n }\r\n\r\n /**\r\n * Returns the active feature id\r\n * @param placeholdersNeeded\r\n * @returns {int}\r\n */\r\n activeFeatureId(placeholdersNeeded = false) {\r\n return placeholdersNeeded && this.placeholderFeature && !this.placeholderChanged\r\n ? this.placeholderFeature.dbFeature.id\r\n : this.activeFeature.dbFeature.id\r\n }\r\n\r\n /**\r\n * @param feature {Part}\r\n * @returns {*}\r\n */\r\n featureDefinitionId(feature = null) {\r\n const dbFeature = feature ? feature.dbFeature : this.dbFeature;\r\n return dbFeature.featureDefinitionID;\r\n }\r\n\r\n handleClick() {}\r\n\r\n disabledClick() {}\r\n\r\n /**\r\n * Used for metaData conditions\r\n * @returns Array\r\n */\r\n getArrayOfConditions() {\r\n return []\r\n }\r\n\r\n updateLocalStorage() {\r\n const layout = this.layout || this.getParent().layout || this.getParent().getParent().layout;\r\n layout.updateLocalStorage();\r\n }\r\n\r\n /**\r\n * Used for complex parts, i.e. Vanity - Complex, Custom\r\n // * @param subType\r\n */\r\n handleSubTypeClick() {\r\n Exception.NotImplementedBaseClass();\r\n }\r\n\r\n /**\r\n * Handles the click on sub-part buttons, i.e. for Vanity on its buttons such as Toilet, Sink...\r\n // * @param subPart\r\n */\r\n handleSubPartClick() {\r\n // Exception.NotImplementedBaseClass();\r\n }\r\n\r\n /**\r\n * Returns first value Id from a specific group\r\n * @param groupId\r\n */\r\n filterValue(groupId) {\r\n return this.dbFeature.filterValueIDs[groupId][0];\r\n }\r\n\r\n /**\r\n * Do something specific after layer changes\r\n // * @param layoutType\r\n */\r\n changeLayout() {\r\n\r\n }\r\n\r\n /**\r\n * Do something specific after Type Changed (returns null by default for all Parts)\r\n */\r\n setDefaultPartAfterSubTypeClick() {\r\n return null\r\n }\r\n\r\n getRelatedItems() {\r\n return this.relatedItems\r\n }\r\n\r\n /**\r\n * Set default layer for each relatedItem of the group.\r\n * @param layout {Layout}\r\n */\r\n setDefault(layout) {\r\n this.relatedItems.forEach(relatedItem => relatedItem.setDefault(layout));\r\n }\r\n\r\n setFeatureGroupDefault(layout, setNotInVisFeature = this.hasNoVisualizerLayers) {\r\n const conditions = this.getArrayOfConditions ? this.getArrayOfConditions() : null;\r\n let filteredFeatures = conditions ? this.features.filter(feature => {\r\n return setNotInVisFeature\r\n ? feature.matchesMetaForArrayOfConditions(conditions)\r\n : feature.dbFeature.s3Bindings && feature.matchesMetaForArrayOfConditions(conditions)\r\n }) : this.features;\r\n\r\n if (document.kvConfig.visualizerType === \"bvLook\" && !filteredFeatures.length\r\n && (getCurrentRoomType(layout) === LOOK_ROOM_TYPES.as) && !(this.partId.includes(\"_wall\") && this.hasAdditionalParts)) {\r\n filteredFeatures = this.getArrayOfConditions\r\n ? this.featuresParts.filter(f => f.dbFeature.s3Bindings && f.matchesMetaForArrayOfConditions(conditions))\r\n : this.featuresParts;\r\n }\r\n\r\n const matchingFeatureExist = this.tryToSetTheSameFeature(filteredFeatures, null);\r\n if (!matchingFeatureExist) {\r\n this.activeFeature = filteredFeatures[0];\r\n }\r\n const features = this.features;\r\n if (IS_LIXIL_UI && !this.activeFeature && !this.activeNotInVisualizerFeature && Array.isArray(features)\r\n && features.length && features.every(feature => feature.notAvailableInVisualizer)) {\r\n this.activeNotInVisualizerFeature = features[0];\r\n }\r\n // this.placeholderFeature = this.features.find((feature) => {\r\n // return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n // });\r\n if (this.hasAdditionalParts) {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n if (this.layerPositions) {\r\n if (this.activeFeature) {\r\n this.setLayerPositions()\r\n } else {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n this.layerPositions[key] = null;\r\n })\r\n }\r\n }\r\n }\r\n\r\n tryToSetTheSameFeature(filteredFeatures = [], partName = \"\") {\r\n const currentActiveFeature = this.activeFeature;\r\n if (currentActiveFeature && currentActiveFeature.partName) {\r\n let splittedFromTheLayoutName = partName && this.removeLayoutFromPartName\r\n ? this.removeLayoutFromPartName(partName)\r\n : this.activeFeature.getMatchingFeatureName();\r\n this.activeFeature = filteredFeatures.find(feature => {\r\n return feature.getMatchingFeatureName() === splittedFromTheLayoutName\r\n });\r\n if (!this.activeFeature) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const colorFilterValue = getColorFilterValue(currentActiveFeature, filterGroups);\r\n if (colorFilterValue) {\r\n this.activeFeature = filteredFeatures.find(feature => {\r\n const currentColorFilterValue = getColorFilterValue(feature, filterGroups);\r\n return currentColorFilterValue && currentColorFilterValue.id === colorFilterValue.id\r\n });\r\n }\r\n }\r\n }\r\n if (!this.activeFeature && this.selectedFeaturesHistory) {\r\n for (let featureName of this.selectedFeaturesHistory.slice(0, 5)) { // check first five, no need to go further\r\n const foundFeature = this.getFeatureByPartName(featureName);\r\n if (foundFeature) {\r\n const prevFeatureMatchingName = foundFeature.getMatchingFeatureName();\r\n const foundFinally = filteredFeatures.find(feature => {\r\n return feature.getMatchingFeatureName() === prevFeatureMatchingName\r\n });\r\n if (foundFinally) {\r\n this.activeFeature = foundFinally;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return !!this.activeFeature\r\n }\r\n\r\n getFeatureName = (forQtCategory = \"\") => {\r\n if (!this._featureName) {\r\n const originalName = this.metaData.ActualDisplayedName\r\n ? this.dbFeature.customDisplayName && (this.dbFeature.customDisplayName !== this.dbFeature.sharedFeatureName)\r\n ? this.dbFeature.customDisplayName\r\n : this.metaData.ActualDisplayedName[0]\r\n : this.dbFeature.customDisplayName || this.partName || \"\";\r\n const parent = this.getParent();\r\n this._featureName = (originalName || \"\").replace((this.dbFeature.customGroupName || parent.dbName || parent.partName) + \" - \", \"\");\r\n }\r\n if (forQtCategory) {\r\n return checkIfInCatProperty(this, \"inCatName\", this._featureName, forQtCategory) || this._featureName || \"\";\r\n }\r\n return this._featureName\r\n };\r\n\r\n getLowerCasedCustomDisplayName = () => {\r\n if (!this._lowercaseCustomDisplayName) {\r\n this._lowercaseCustomDisplayName = (this.dbFeature.customDisplayName || this.partName || '')\r\n .trim()\r\n .toLowerCase()\r\n .replace('room - ', '')\r\n }\r\n return this._lowercaseCustomDisplayName;\r\n };\r\n\r\n getLowerCasedSharedFeatureName = () => {\r\n if (!this._lowercaseSharedFeatureName) {\r\n this._lowercaseSharedFeatureName = (this.dbFeature.sharedFeatureName || this.partName || '')\r\n .trim()\r\n .toLowerCase()\r\n .replace('room - ', '')\r\n }\r\n return this._lowercaseSharedFeatureName;\r\n };\r\n\r\n /**\r\n * @param dbFeaturesArray {[dbFeatureInterface]}\r\n * @param pageSize {number}\r\n * @param setNextPage {boolean}\r\n * @param layoutAbbr {string}\r\n * @param loadedPage {number|null}\r\n * @param fromSearch {boolean}\r\n * @param setCustomConfigurationsAfter {boolean}\r\n */\r\n setGroupFeatures(dbFeaturesArray,\r\n pageSize = 1000,\r\n setNextPage = true,\r\n layoutAbbr = \"\",\r\n loadedPage = null,\r\n fromSearch = false,\r\n setCustomConfigurationsAfter = true) {\r\n\r\n const layout = this.layout || this.getParent().layout;\r\n const layoutToSet = layoutAbbr || layout.getCurrentLayoutAbbreviation();\r\n\r\n if (setNextPage) {\r\n // this.nextFeaturesPageToLoad += 1;\r\n let nextFeaturesPageToLoad = 1;\r\n const addFromPageSize = pageSize === 6000 ? 3 : 1;\r\n if (this.nextFeaturesPageToLoadArray) {\r\n nextFeaturesPageToLoad = Number.isInteger(loadedPage)\r\n ? this.nextFeaturesPageToLoadArray[layoutToSet].page + addFromPageSize\r\n : this.nextFeaturesPageToLoadArray[layoutToSet].page + 1\r\n } else {\r\n nextFeaturesPageToLoad = Number.isInteger(loadedPage)\r\n ? this.nextFeaturesPageToLoad + addFromPageSize\r\n : this.nextFeaturesPageToLoad + 1;\r\n }\r\n // let nextFeaturesPageToLoad = Number.isInteger(loadedPage)\r\n // ? this.nextFeaturesPageToLoad + (pageSize === 6000 ? 3 : 1)\r\n // : this.nextFeaturesPageToLoadArray ? this.nextFeaturesPageToLoadArray[layoutToSet].page + 1 : this.nextFeaturesPageToLoad + 1;\r\n // if ((pageSize / 1000 - 1) === 1) {\r\n // nextFeaturesPageToLoad += 1\r\n // }\r\n this.nextFeaturesPageToLoad = nextFeaturesPageToLoad;\r\n if (this.nextFeaturesPageToLoadArray) {\r\n this.nextFeaturesPageToLoadArray[layoutToSet].page = nextFeaturesPageToLoad;\r\n }\r\n this.allFeaturesReceived = true;\r\n }\r\n if (!fromSearch) {\r\n if (this.nextFeaturesPageToLoadArray) {\r\n this.nextFeaturesPageToLoadArray[layoutToSet].allReceived = dbFeaturesArray.length < pageSize;\r\n const {bvPresets} = store.getState().bathroomVisualizerState;\r\n if (bvPresets && bvPresets.length) {\r\n const uniqueLayoutsTypes = bvPresets.reduce((total, preset) => {\r\n if (!total.some(layoutType => layoutType === preset.layout_type)) {\r\n total.push(preset.layout_type)\r\n }\r\n return total\r\n }, []);\r\n this.realFeaturesReceived = uniqueLayoutsTypes.every(layoutNumber => {\r\n const layoutName = layout.getCurrentLayoutName(layoutNumber);\r\n return this.nextFeaturesPageToLoadArray[layoutName] && this.nextFeaturesPageToLoadArray[layoutName].allReceived\r\n });\r\n } else {\r\n this.realFeaturesReceived = dbFeaturesArray.length < pageSize;\r\n }\r\n } else {\r\n this.realFeaturesReceived = dbFeaturesArray.length < pageSize;\r\n }\r\n }\r\n\r\n layout.loadNewFeatures(dbFeaturesArray, this, setCustomConfigurationsAfter);\r\n\r\n }\r\n\r\n getRealFeaturesReceivedProperty = () => {\r\n const layout = this.layout || this.getParent().layout;\r\n const currentLayoutAbbr = layout.getCurrentLayoutAbbreviation();\r\n return this.nextFeaturesPageToLoadArray\r\n ? this.nextFeaturesPageToLoadArray[currentLayoutAbbr].allReceived\r\n : this.realFeaturesReceived\r\n }\r\n\r\n getNextPageToLoad = (currentLayoutAbbr) => {\r\n // intermediatePart\r\n if (this.nextFeaturesPageToLoadArray) {\r\n if (!currentLayoutAbbr) {\r\n const layout = this.layout || this.getParent().layout;\r\n currentLayoutAbbr = layout.getCurrentLayoutAbbreviation();\r\n }\r\n return this.nextFeaturesPageToLoadArray[currentLayoutAbbr].page\r\n }\r\n return this.nextFeaturesPageToLoad\r\n }\r\n\r\n getCollectionName = (filterGroups) => {\r\n if (this._collectionName) {\r\n return this._collectionName\r\n }\r\n const collectionFg = filterGroups ? filterGroups.find(fGroup => fGroup.name === \"Collection\") : null;\r\n if (collectionFg) {\r\n const featureCollectionValue = getFilterGroupValues(this, collectionFg);\r\n if (Array.isArray(featureCollectionValue)) {\r\n const featureCollectionValueObject = getFilterGroupValue(featureCollectionValue[0], collectionFg);\r\n if (featureCollectionValueObject) {\r\n this._collectionName = capitalizeFirstLetters(featureCollectionValueObject.displayText);\r\n return this._collectionName\r\n }\r\n }\r\n }\r\n return \"\"\r\n }\r\n\r\n getFeatureSavedFilterName = (filterGroups, filterName, property) => {\r\n if (!this._filterNames) {\r\n this._filterNames = {};\r\n }\r\n if (this._filterNames[property]) {\r\n return this._filterNames[property]\r\n }\r\n const collectionFg = filterGroups ? filterGroups.find(fGroup => fGroup.name === filterName) : null;\r\n if (collectionFg) {\r\n const featureCollectionValue = getFilterGroupValues(this, collectionFg);\r\n if (Array.isArray(featureCollectionValue)) {\r\n const featureCollectionValueObject = getFilterGroupValue(featureCollectionValue[0], collectionFg);\r\n if (featureCollectionValueObject) {\r\n this._filterNames[property] = capitalizeFirstLetters(featureCollectionValueObject.displayText || featureCollectionValueObject.value);\r\n return this._filterNames[property]\r\n }\r\n }\r\n }\r\n return \"\"\r\n }\r\n\r\n getColorName = (filterGroups) => {\r\n if (this._colorName) {\r\n return this._colorName\r\n }\r\n const colorFilterGroup = filterGroups ? filterGroups.find(fGroup => fGroup.name === \"Color\") : null;\r\n\r\n if (colorFilterGroup) {\r\n const featureCollectionValue = getFilterGroupValues(this, colorFilterGroup);\r\n if (Array.isArray(featureCollectionValue)) {\r\n const featureCollectionValueObject = getFilterGroupValue(featureCollectionValue[0], colorFilterGroup);\r\n if (featureCollectionValueObject) {\r\n this._colorName = capitalizeFirstLetters(featureCollectionValueObject.displayText);\r\n return this._colorName\r\n }\r\n }\r\n }\r\n return \"\"\r\n }\r\n\r\n getCustomFullDisplayName = () => {\r\n return this.getSplittedFeatureName() // is different in bvLook visualizer\r\n }\r\n\r\n getMatchingOptionsName = () => {\r\n return this.getSplittedFeatureName() // is different in bvLook visualizer\r\n }\r\n\r\n /**\r\n * Update visibility for all layers.\r\n * Each feature decides on its own what layers are needed.\r\n * In case when feature must be invisible it must return null, not an empty array\r\n * @param layout {Layout}\r\n * @param placeholdersNeeded {boolean}\r\n */\r\n setLayers(layout, placeholdersNeeded) {\r\n let layers = [];\r\n this.getRelatedItems()\r\n .filter(relItem => relItem.featureGroupEnabled)\r\n .forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n let activeFeatures = [];\r\n if (relatedItem.layerPositions) {\r\n Object.keys(relatedItem.layerPositions).forEach(key => {\r\n if (relatedItem.layerPositions[key]) {\r\n activeFeatures.push(relatedItem.layerPositions[key])\r\n }\r\n })\r\n } else {\r\n if (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature) {\r\n activeFeatures.push(relatedItem.placeholderFeature)\r\n } else if (relatedItem.activeFeature && relatedItem.partId !== \"attachment\") {\r\n activeFeatures.push(relatedItem.activeFeature)\r\n }\r\n }\r\n if (relatedItem.activeFeatureParts && relatedItem.activeFeatureParts.length) {\r\n activeFeatures = [...activeFeatures, ...relatedItem.activeFeatureParts]\r\n }\r\n activeFeatures.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer.src) {\r\n // cabinetActiveFeature.layer.partId = cabinetActiveFeature.partId;\r\n activeFeaturePart.layer.coords = activeFeaturePart.metaData[\"Coords\"];\r\n activeFeaturePart.layer.partId = activeFeaturePart.partId;\r\n activeFeaturePart.layer.layerPosition = activeFeaturePart.metaData.layerPosition;\r\n activeFeaturePart.layer.cropCoords = getFeatureCropCoors(activeFeaturePart);\r\n layers.push(activeFeaturePart.layer);\r\n }\r\n });\r\n });\r\n return layers.length ? layers : null;\r\n }\r\n\r\n // setPrevioslySelected(featureGroup) { // featureGroup is current active featureGroup from the click\r\n setPrevioslySelected() { // parent scope\r\n this.relatedItems.forEach(relatedItem => {\r\n relatedItem.activeFeatureBeforeAllWalls = !relatedItem.placeholderChanged\r\n ? \"placeholder\"\r\n : relatedItem.activeFeature;\r\n });\r\n }\r\n\r\n getFeaturesFromLayout = (layoutName, forSpecificScene, allFeatures) => {\r\n let currentLayoutFeatures = this.layerPositions\r\n ? [...(this.featuresList[layoutName] || []), ...(this.featuresPartsList[layoutName] || [])]\r\n : (this.featuresList[layoutName] || []);\r\n for (let i = 0; i < currentLayoutFeatures.length; i++) {\r\n const feature = currentLayoutFeatures[i];\r\n if (forSpecificScene && feature.metaData[\"RoomScene\"] && !feature.metaData[\"RoomScene\"].includes(forSpecificScene)) {\r\n continue\r\n }\r\n const featureName = feature.getSplittedFeatureName();\r\n if (!allFeatures.some(addedFeature => addedFeature.getSplittedFeatureName() === featureName)) {\r\n allFeatures.push(feature);\r\n }\r\n }\r\n return allFeatures\r\n }\r\n\r\n getFeaturesForNavigationFrom = (restOptions = {}) => {\r\n const {returnAllFeatures, forSpecificLayout, forSpecificScene} = restOptions;\r\n if (returnAllFeatures) {\r\n const layout = this.getParent().layout;\r\n let allFeatures = [];\r\n // 1) first add current layout features or specific layout features\r\n allFeatures = this.getFeaturesFromLayout(forSpecificLayout || (\"Layout\" + layout.type), forSpecificScene, allFeatures)\r\n if (forSpecificLayout) {\r\n return allFeatures\r\n }\r\n // 2) if we need all features - check another layouts\r\n const {bvPresets} = store.getState().bathroomVisualizerState;\r\n // const checkLayouts = layoutNames.filter(layoutName => {\r\n // if (forSpecificLayout) {\r\n // return forSpecificLayout === layoutName\r\n // }\r\n // return bvPresets.some(bvPreset => bvPreset.layout_type === +(layoutName.replace(\"Layout\", \"\")))\r\n // })\r\n\r\n // 2) next popular rooms are 11 for AS and 3 for grohe, check them\r\n if (layout.type !== 11 && (document.kvConfig.visualizerType === \"bvLook\")) {\r\n allFeatures = this.getFeaturesFromLayout(\"Layout11\", \"1\", allFeatures);\r\n }\r\n // if (layout.type !== 3) {\r\n // allFeatures = this.getFeaturesFromLayout(\"Layout3\", \"1\", allFeatures);\r\n // }\r\n // 3) select all features from scene 1\r\n bvPresets.forEach(bvPreset => {\r\n if (bvPreset.layout_type === layout.type) {\r\n return;\r\n }\r\n const stringifiedLayout = \"Layout\" + bvPreset.layout_type;\r\n allFeatures = this.getFeaturesFromLayout(stringifiedLayout, \"1\", allFeatures);\r\n });\r\n // 4) check skipped layouts to get all other features another room scenes features\r\n const layoutNames = Object.keys(layout.layoutNames).filter(key => key !== \"All\");\r\n layoutNames.forEach((layoutType) => {\r\n allFeatures = this.getFeaturesFromLayout(layoutType, null, allFeatures);\r\n });\r\n // console.log(\"allFeatures\", allFeatures);\r\n return allFeatures\r\n }\r\n return this.layerPositions ? [...this.features, ...this.featuresParts] : this.features\r\n }\r\n\r\n checkAutoAddToCart = (feature) => {\r\n //intermediatePart\r\n if (!feature.dbFeature.autoAddToCart) {\r\n return;\r\n }\r\n const parentGroup = this.getParent ? this.getParent() : null;// parent, for ex. \"Appliance\"\r\n if (parentGroup && parentGroup.layout && parentGroup.layout.isFakeLayout) {\r\n return;\r\n }\r\n const cartItem = {\r\n selectionGroup: (parentGroup && parentGroup.menuType) ? parentGroup.partName : this.partName,\r\n quantity: 1,\r\n partId: this.partId,\r\n cartFeature: feature\r\n };\r\n if (feature.dbFeature.displayLogic) {\r\n const storeState = store.getState();\r\n const {quantity, isMatching} = featureIsMatchingDisplayLogic(\r\n feature,\r\n storeState.cartState.cartItems,\r\n storeState.quotesState.activeQuoteIndex,\r\n storeState.wizardState.allWizardsValues\r\n );\r\n if (isMatching && (!storeState.cartState.cartItems.some(cItem => {\r\n return cItem.cartFeature && cItem.cartFeature.dbFeature && (cItem.cartFeature.dbFeature.id === feature.dbFeature.id)\r\n }))) {\r\n cartItem.quantity = quantity;\r\n store.dispatch(addToCart([cartItem]));\r\n }\r\n store.dispatch(addDisplayLogicCartItem(cartItem, this.getParent().layout.visualizerType));\r\n } else {\r\n store.dispatch(addToCart([cartItem]));\r\n }\r\n }\r\n\r\n loadFeatureCommon = (feature) => { // other logic\r\n this.checkAutoAddToCart(feature);\r\n if (feature.dbFeature.groupName === \"Room\") {\r\n feature = setRoomNotInVisualizerProperty(feature);\r\n }\r\n if (IS_LIXIL_UI && !feature.dbFeature.clickable) {\r\n const layout = this.getParent().layout;\r\n if (layout && layout.disabledClickablePartIds && !layout.disabledClickablePartIds.includes(this.partId)) {\r\n layout.disabledClickablePartIds.push(this.partId);\r\n }\r\n }\r\n // const layout = this.getParent().layout;\r\n // if (feature.dbFeature.isRelatedDbFeature) {\r\n // if (!Array.isArray(layout.allRelatedDbFeatures)) {\r\n // layout.allRelatedDbFeatures = [];\r\n // }\r\n // if (!layout.allRelatedDbFeatures.some(addedDbFeature => addedDbFeature.id === feature.dbFeature.id)) {\r\n // layout.allRelatedDbFeatures.push(feature.dbFeature);\r\n // }\r\n // }\r\n // loadRelatedFeatures(feature.dbFeature, layout);\r\n };\r\n\r\n _setLayers(layout) {\r\n //intermediatePart\r\n if (!this.disabled) {\r\n if (!this.activeFeature) {\r\n this.setDefault(layout);\r\n }\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.layerPositions[key]) {\r\n if (this.layerPositions[key].matchesMetaForArrayOfConditions(this.getArrayOfConditions())) {\r\n this.setFeatureLayer(this.layerPositions[key], layout);\r\n } else {\r\n this.layerPositions[key].layer.src = '';\r\n }\r\n }\r\n })\r\n } else if (this.activeFeature && !this.activeFeature.notAvailableInVisualizer) {\r\n if (this.partId !== \"attachment\") { // remove activeFeature layer to prevent duplicate, it has parts\r\n this.setFeatureLayer(this.activeFeature, layout);\r\n }\r\n if (this.hasAdditionalParts && (document.kvConfig.visualizerType === \"kvScene\")) {\r\n this.activeFeatureParts = this.setActiveFeatureParts(); // we have to set them each time because we need to react on disabled clicks (bottom cabinet - appliances)\r\n }\r\n if (Array.isArray(this.activeFeatureParts) && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n this.setFeatureLayer(activeFeaturePart, layout);\r\n })\r\n }\r\n }\r\n if (this.placeholderFeature) {\r\n this.setFeatureLayer(this.placeholderFeature, layout);\r\n }\r\n } else {\r\n this.hideLayers();\r\n }\r\n }\r\n\r\n setFeatureLayer(currentFeature, layout) {\r\n //intermediatePart\r\n // console.log('currentFeature', currentFeature);\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n if (!currentFeature || !currentFeature.dbFeature || !currentFeature.dbFeature.s3Bindings\r\n || (!(currentFeature.dbFeature.metaData[\"RoomLayout\"]) || !currentFeature.dbFeature.metaData[\"RoomLayout\"].includes(layoutAbr))) {\r\n if (currentFeature) {\r\n currentFeature.layer.src = \"\";\r\n }\r\n return;\r\n }\r\n const s3Binding = currentFeature.dbFeature.s3Bindings.find(binding => binding.visualizer === layout.layersBinding);\r\n currentFeature.layer.src = s3Binding ? s3Binding.path : null;\r\n currentFeature.layer.bucketName = s3Binding ? s3Binding.bucketName : null;\r\n }\r\n\r\n featureClicked() {\r\n const featuresHistory = this.activeFeature ? this.selectedFeaturesHistory : this.getParent().selectedFeaturesHistory;\r\n const partName = this.activeFeature ? this.activeFeature.partName : this.partName;\r\n if (Array.isArray(featuresHistory) && (featuresHistory[0] !== partName)) {\r\n featuresHistory.unshift(partName); // add in the beggining\r\n if (featuresHistory.length > 10) {\r\n featuresHistory.pop() // remove last element, no need to keep huge arrays\r\n }\r\n }\r\n this.updateLocalStorage();\r\n // other specific events, for ex. Google Analytics, etc.\r\n }\r\n\r\n\r\n // navigationSubItems(filters, searchText, forFeature, filterGroups, restOptions) { // to do\r\n navigationItemsWithOptions(filters, forFeature, filterGroups, featuresToDisplay) {\r\n // intermediate part\r\n let newFeatures = [];\r\n let navItems = [];\r\n const matchingFeatureProperty = this.useMatchingFeatureReplacement || \"MatchingFeature\";\r\n\r\n if (filterGroups && filterGroups.length && (!filters || !Object.keys(filters).length)) {\r\n // console.log(\"filteredAvailableFeatures\", filteredAvailableFeatures);\r\n // console.log(\"featuresToDisplay\", featuresToDisplay);\r\n for (let i = 0; i < featuresToDisplay.length; i++) { // 1) take all others\r\n const currentFeature = featuresToDisplay[i];\r\n const colorName = currentFeature.getColorName(filterGroups);\r\n const matchingOptionsName = currentFeature.getMatchingOptionsName();\r\n let conditionPassed = !colorName\r\n || !newFeatures.some(feature => feature.getMatchingOptionsName() === matchingOptionsName)\r\n || (currentFeature.metaData[matchingFeatureProperty] && !newFeatures.some(feature => feature.metaData[matchingFeatureProperty]\r\n && isEqual(feature.metaData[matchingFeatureProperty], currentFeature.metaData[matchingFeatureProperty])))\r\n if (conditionPassed) {\r\n newFeatures.push(currentFeature);\r\n }\r\n }\r\n navItems = this.returnUniqueNavFeatures(this.getNavItemsWithOptions(forFeature, newFeatures, featuresToDisplay, filterGroups).map(featureObject => {\r\n return new DesignNavigationItem(featureObject.mainFeature.featureName, featureObject.mainFeature, featureObject.otherOptions)\r\n }), false);\r\n }\r\n if (!navItems.length) {\r\n navItems = this.returnUniqueNavFeatures(featuresToDisplay)\r\n }\r\n // if (this.filterNavigationItems && forFeature) {\r\n // navItems = this.filterNavigationItems(navItems, forFeature)\r\n // }\r\n return navItems\r\n }\r\n\r\n /**\r\n * this is almost the same as feature options, it is replacing next nav items with the needed color feature\r\n * @param forFeature {featureInterface} featureInterface\r\n * @param newFeatures {[featureInterface]}\r\n * @param allFeatures {[featureInterface]}\r\n * @param filterGroups {[filterGroupInterface]}\r\n * @returns {array}\r\n */\r\n getNavItemsWithOptions = (forFeature= null,\r\n newFeatures = [],\r\n allFeatures = [],\r\n filterGroups) => {\r\n\r\n const matchingFeatureProperty = this.useMatchingFeatureReplacement || \"MatchingFeature\";\r\n const neededColorName = forFeature ? forFeature.getColorName(filterGroups) : \"\";\r\n\r\n return newFeatures.map(currentFeature => {\r\n const filterValue = getColorFilterValue(currentFeature, filterGroups);\r\n let otherOptions = getOptionsFromNavItemsForFeature(currentFeature, allFeatures, filterGroups);\r\n\r\n const currentFeatureColor = currentFeature.getColorName(filterGroups);\r\n const customFullDisplayName = currentFeature.getMatchingOptionsName();\r\n\r\n if (forFeature && (currentFeature.dbFeature.id === forFeature.dbFeature.id || (\r\n (customFullDisplayName === forFeature.getMatchingOptionsName())\r\n && (!forFeature.metaData[matchingFeatureProperty] || isEqual(forFeature.metaData[matchingFeatureProperty], currentFeature.metaData[matchingFeatureProperty]))\r\n && (currentFeatureColor && forFeature.getColorName(filterGroups) && (currentFeatureColor !== forFeature.getColorName(filterGroups)))\r\n ))) {\r\n if (filterValue && !otherOptions.some(option => option.colorValue.id === filterValue.id)) {\r\n otherOptions.push({feature: currentFeature, colorValue: filterValue})\r\n }\r\n return {\r\n mainFeature: forFeature,\r\n otherOptions: otherOptions.filter(option => option.feature.dbFeature.id !== forFeature.dbFeature.id)\r\n };\r\n } else {\r\n if (!filterValue) {\r\n return {mainFeature: currentFeature, otherOptions: []}\r\n }\r\n const allOptions = [{feature: currentFeature, colorValue: filterValue}, ...otherOptions];\r\n const mainOption = (forFeature && neededColorName && allOptions.find(option => option.feature.getColorName(filterGroups) === neededColorName))\r\n // console.log(\"mainOption\", mainOption);\r\n if (mainOption) {\r\n return {\r\n mainFeature: mainOption.feature,\r\n otherOptions: allOptions.filter(option => option.feature.dbFeature.id !== mainOption.feature.dbFeature.id)\r\n }\r\n }\r\n return {mainFeature: currentFeature, otherOptions}\r\n }\r\n });\r\n }\r\n\r\n returnUniqueNavFeatures(featuresToDisplay, createNavItems = true) {\r\n const navItems = createNavItems ? this.returnNavItemsFromFeatures(featuresToDisplay) : featuresToDisplay;\r\n if (document.kvConfig.visualizerType === \"bvScene\" && (this.partId ===\"sink\" || this.partId ===\"center_island_sink\"\r\n || this.partId ===\"vanity_sink\" || this.partId ===\"vanity_faucet\")) {\r\n return uniqBy(navItems, (navItem) => navItem.part.dbFeature.id && navItem.part.getSplittedFeatureName());\r\n }\r\n if (document.kvConfig.toolVersion >= 5) { // not sure if we can do that for old visualizers\r\n return uniqBy(navItems, (navItem) => navItem.part.dbFeature.id && navItem.part.dbFeature.sharedFeatureName);\r\n }\r\n return uniqBy(navItems, (navItem) => navItem.part.dbFeature.id);\r\n }\r\n\r\n returnNavItemsFromFeatures(featuresToDisplay) {\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n}\r\n\r\nPartCommon.prototype.getFeatureCurrency = function (propsFilterGroups) {\r\n if (Object.hasOwnProperty(this._useCurrency)) {\r\n return this._useCurrency\r\n }\r\n this._useCurrency = null;\r\n const filterGroups = propsFilterGroups || store.getState().filterState.filterGroups;\r\n const filterGroup = filterGroups.find(group => group.name === \"Currency\");\r\n if (!filterGroup) {\r\n return this._useCurrency\r\n }\r\n const featureCollectionValue = getFilterGroupValues(this, filterGroup);\r\n if (Array.isArray(featureCollectionValue)) {\r\n const featureCollectionValueObject = getFilterGroupValue(featureCollectionValue[0], filterGroup);\r\n if (featureCollectionValueObject) {\r\n this._useCurrency = featureCollectionValueObject.value\r\n }\r\n }\r\n return this._useCurrency\r\n}\r\n\r\nPartCommon.prototype.getFeatureRelatedFeatures = function () {\r\n if (!this._relatedFeaturesSet) {\r\n // console.log(\"loadRelatedFeatures\", this.dbFeature);\r\n loadRelatedFeatures(this.dbFeature, this.getParent().getParent().layout);\r\n this._relatedFeaturesSet = true;\r\n }\r\n return this.dbFeature.relatedFeatures\r\n}\r\n","import {Component} from 'react';\r\nimport invert from \"lodash/invert\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {getBvGroupFeatures, getBvGroupFilterValues} from \"../../../api/server-api\";\r\nimport {loaderDisable, loaderEnable} from \"../../ui/loaderView\";\r\nimport {IS_OFFLINE_MODE, USE_SERVER_CACHING} from \"../../../config\";\r\nimport {\r\n COUNTERTOP_GROUP,\r\n LayoutAbbreviations,\r\n LayoutType as LayoutTypes\r\n} from \"../../kvComponent/core/constants\";\r\nimport {setActivePartFilterValues} from \"../../../misc/filtersFunctions\";\r\nimport {checkIfLookFeaturesReceived, getAdditionalFeaturesOnScroll, getFeaturesPageSize} from \"../../../api/look-api\";\r\nimport store from \"../../../store\";\r\nimport {updateCanvasCount} from \"../../../actions/actionFunctions\";\r\n\r\nexport default class NavigationRequests extends Component {\r\n\r\n getBvPartFeatures = async (item, navigationItem, callBack = null) => {\r\n if (!item.part.createdManually && !item.part.requestInProgress) {\r\n const itemPart = item.part;\r\n const layout = itemPart && itemPart.getParent\r\n ? itemPart.getParent().layout || getCurrentLayout()\r\n : getCurrentLayout();\r\n let responseArray;\r\n if (layout.isNewLayout) {\r\n responseArray = await getAdditionalFeaturesOnScroll(itemPart, false);\r\n } else {\r\n const pageSize = getFeaturesPageSize(itemPart);\r\n const layoutAbbr = layout.getCurrentLayoutAbbreviation();\r\n const nextFeaturesPage = itemPart.getNextPageToLoad(layoutAbbr);\r\n itemPart.requestInProgress = true;\r\n const response = await getBvGroupFeatures(itemPart.dbName || itemPart.partName, nextFeaturesPage, pageSize);\r\n\r\n responseArray = Array.isArray(response) ? response : [];\r\n\r\n itemPart.requestInProgress = false;\r\n // if (location.port === '9007' || document.kvConfig.kioskMode) {\r\n // console.log('response', response.data);\r\n // }\r\n itemPart.setGroupFeatures(responseArray, pageSize, true, layoutAbbr, nextFeaturesPage);\r\n }\r\n if (navigationItem) {\r\n this.setState({\r\n [navigationItem]: item,\r\n render: false,\r\n showFilterSelection: true\r\n }, () => {\r\n this.setState({\r\n render: true,\r\n });\r\n this.forceUpdate()\r\n });\r\n }\r\n if (callBack) {\r\n callBack()\r\n }\r\n if (this._isMounted) {\r\n this.forceUpdate()\r\n }\r\n\r\n return responseArray\r\n }\r\n };\r\n\r\n getRelatedItemFeatures = (relatedItem) => {\r\n return this.getBvPartFeatures({\r\n part: relatedItem,\r\n text: relatedItem.partName\r\n }, \"\");\r\n };\r\n\r\n checkIfAllFeaturesReceived = (item, navigationItem, callBack, materialsPage) => {\r\n if (IS_OFFLINE_MODE) {\r\n return false\r\n }\r\n const itemPart = item.part;\r\n const layout = itemPart && itemPart.getParent\r\n ? itemPart.getParent().layout || getCurrentLayout()\r\n : getCurrentLayout();\r\n const layoutAbbr = layout.getCurrentLayoutAbbreviation();\r\n if (!(layout.isNewLayout && (itemPart && (itemPart.partId === \"range\" || itemPart.partId === \"stove\")))\r\n && (!itemPart.allFeaturesReceived || (itemPart.nextFeaturesPageToLoadArray && !itemPart.nextFeaturesPageToLoadArray[layoutAbbr].page))) {\r\n this.getBvPartFeatures(item, navigationItem, callBack);\r\n }\r\n if (layout.isNewLayout) {\r\n checkIfLookFeaturesReceived(itemPart, true).then(() => {\r\n if (materialsPage) {\r\n if (this._isMounted) {\r\n this.forceUpdate()\r\n }\r\n } else {\r\n callBack ? callBack() : this.forceUpdate();\r\n }\r\n }); // it has all needed feature groups already there\r\n }\r\n const showerParent = layout.parts[\"Shower\"];\r\n const wallParent = layout.parts[\"Walls\"];\r\n const showerComboParent = layout.parts[\"Shower Tub Combo\"];\r\n const cabinetParent = layout.parts[\"Cabinet\"];\r\n const centerIslandParent = layout.parts[\"CenterIsland\"];\r\n const countertopParent = layout.parts[\"Countertop\"];\r\n const applianceParent = layout.parts[\"Appliances\"];\r\n\r\n if (this.isWallItem(itemPart)) {\r\n wallParent.relatedItems.forEach(relatedItem => {\r\n if (relatedItem.partId !== itemPart.partId && !relatedItem.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(relatedItem);\r\n }\r\n });\r\n } else if (itemPart.partId === \"vanity_cabinet\") {\r\n const vanityParent = itemPart.getParent();\r\n vanityParent.relatedItems.forEach(relatedItem => {\r\n if (relatedItem.partId !== itemPart.partId && !relatedItem.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(relatedItem);\r\n }\r\n });\r\n if (!layout.isNewLayout) {\r\n const navItem = {\r\n part: showerParent.showerBody,\r\n text: showerParent.showerBody.partName\r\n };\r\n this.checkIfAllFeaturesReceived(navItem, \"\");\r\n if (wallParent.vanityAccent && !wallParent.vanityAccent.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(wallParent.vanityAccent);\r\n }\r\n }\r\n } else if (itemPart.partId === \"shower_door\") {\r\n if (showerParent && showerParent.showerDoorHandle && !showerParent.showerDoorHandle.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(showerParent.showerDoorHandle);\r\n }\r\n } else if (itemPart.partId === \"top_cabinet\") { /*** KITCHEN TOP CABINETS REQUIRE CROWN_MOLDING AND HOOD AND HANDLES AND CABINETS***/\r\n if (cabinetParent && cabinetParent.crownMolding && !cabinetParent.crownMolding.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(cabinetParent.crownMolding);\r\n }\r\n if (cabinetParent && cabinetParent.topHandle && !cabinetParent.topHandle.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(cabinetParent.topHandle);\r\n }\r\n if (cabinetParent && cabinetParent.bottomCabinet && !cabinetParent.bottomCabinet.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(cabinetParent.bottomCabinet);\r\n }\r\n if (centerIslandParent && centerIslandParent.cabinet && !centerIslandParent.cabinet.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(centerIslandParent.cabinet);\r\n }\r\n if (applianceParent && applianceParent.hood && !applianceParent.hood.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(applianceParent.hood);\r\n }\r\n } else if (itemPart.partId === \"bottom_cabinet\") { /*** KITCHEN BOTTOM CABINETS REQUIRE TOP CABINETS & CENTER ISLAND ***/\r\n if (cabinetParent && cabinetParent.topCabinet && !cabinetParent.topCabinet.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(cabinetParent.topCabinet);\r\n }\r\n if (centerIslandParent && centerIslandParent.cabinet && !centerIslandParent.cabinet.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(centerIslandParent.cabinet);\r\n }\r\n if (cabinetParent && cabinetParent.bottomHandle && !cabinetParent.bottomHandle.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(cabinetParent.bottomHandle);\r\n }\r\n } else if (itemPart.partId === \"center_island_cabinet\") { /*** KITCHEN CENTER ISLAND CABINETS REQUIRE TOP CABINETS & BOTTOM CABINETS***/\r\n if (cabinetParent && cabinetParent.topCabinet && !cabinetParent.topCabinet.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(cabinetParent.topCabinet);\r\n }\r\n if (cabinetParent && cabinetParent.bottomCabinet && !cabinetParent.bottomCabinet.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(cabinetParent.bottomCabinet);\r\n }\r\n } else if (itemPart.partId === \"countertop\") {\r\n if (centerIslandParent && centerIslandParent.countertop && !centerIslandParent.countertop.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(centerIslandParent.countertop);\r\n }\r\n if (wallParent && wallParent.backsplash && !wallParent.backsplash.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(wallParent.backsplash);\r\n }\r\n } else if (itemPart.partId === \"center_island_countertop\") {\r\n if (countertopParent && countertopParent.countertop && (!countertopParent.countertop.allFeaturesReceived\r\n || !(centerIslandParent.countertop && !centerIslandParent.countertop.allFeaturesReceived))) {\r\n this.getRelatedItemFeatures(countertopParent.countertop);\r\n }\r\n if (wallParent && wallParent.backsplash && !wallParent.backsplash.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(wallParent.backsplash);\r\n }\r\n } else if (itemPart.partId === \"backsplash\") {\r\n if (countertopParent && countertopParent.countertop && !countertopParent.countertop.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(countertopParent.countertop);\r\n }\r\n if (centerIslandParent && centerIslandParent.countertop && !centerIslandParent.countertop.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(centerIslandParent.countertop);\r\n }\r\n } else if (itemPart.partId === \"edge_profile\") {\r\n if (countertopParent && countertopParent.countertop && !countertopParent.countertop.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(countertopParent.countertop);\r\n }\r\n } else if (itemPart.partId === \"center_island_edge\") {\r\n if (centerIslandParent && centerIslandParent.countertop && !centerIslandParent.countertop.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(centerIslandParent.countertop);\r\n }\r\n } else if (itemPart.partId === \"microwave\" || itemPart.partId === \"hood\") { /*** KITCHEN APPLIANCE REQUIRE TOP CABINETS ***/\r\n if (cabinetParent && cabinetParent.topCabinet && !cabinetParent.topCabinet.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(cabinetParent.topCabinet);\r\n }\r\n } else if (itemPart.createdManually) { // shower_body || wall_configuration\r\n const neededParts = [\"pony_wall\", \"left_shower_wall\", \"right_shower_wall\"];\r\n if (callBack) {\r\n neededParts.push(\"wall_c\");\r\n }\r\n const getData = async () => {\r\n return await Promise.all([...showerParent.relatedItems.map(async relatedItem => {\r\n if (relatedItem.partId !== itemPart.partId && !relatedItem.allFeaturesReceived) {\r\n return await this.getRelatedItemFeatures(relatedItem)\r\n }\r\n }), ...wallParent.relatedItems.map(async relatedItem => {\r\n if (neededParts.includes(relatedItem.partId) && !relatedItem.allFeaturesReceived) {\r\n return await this.getRelatedItemFeatures(relatedItem);\r\n }\r\n })])\r\n };\r\n getData() // after we receive all shower related items we can switch shower body\r\n .then(() => {\r\n showerParent.showerBody.allFeaturesReceived = true;\r\n showerComboParent.wallConfiguration.allFeaturesReceived = true;\r\n if (materialsPage) {\r\n if (this._isMounted) {\r\n this.forceUpdate()\r\n }\r\n } else {\r\n callBack ? callBack() : this.forceUpdate();\r\n }\r\n });\r\n }\r\n };\r\n\r\n checkIfAllFiltersReceived = (activeSubPart, allFilterGroups) => {\r\n return getBvGroupFilterValues(activeSubPart.dbName || activeSubPart.partName)\r\n .then((response) => {\r\n setActivePartFilterValues(response.data, activeSubPart, allFilterGroups);\r\n return true\r\n });\r\n };\r\n\r\n isWallItem = (itemPart) => {\r\n let wallsPartIds = [];\r\n switch(document.kvConfig.visualizerType) {\r\n case \"Bathroom\":\r\n case \"BV\":\r\n wallsPartIds = [\"wall_a\", \"wall_b\", \"wall_c\", \"right_shower_wall\", \"left_shower_wall\",\"pony_wall\"];\r\n break;\r\n case \"Kitchen\":\r\n wallsPartIds = [\"left_wall\", \"right_wall\", \"popout_wall\"];\r\n break;\r\n case \"kvScene\":\r\n wallsPartIds = [\"left_wall\", \"right_wall\", \"center_wall\", \"front_wall\", \"popout_wall\"];\r\n break;\r\n case \"bvScene\":\r\n case \"bvLook\":\r\n wallsPartIds = [\"left_wall\", \"right_wall\", \"center_wall\", \"shower_interior_wall\"];\r\n break;\r\n default:\r\n wallsPartIds = [\"left_wall\", \"right_wall\", \"center_wall\"];\r\n }\r\n return wallsPartIds.includes(itemPart.partId);\r\n };\r\n\r\n static searchFeaturesByName = (relatedItem, searchName, pageSize = 9999) => {\r\n if (Array.isArray(relatedItem.alreadyRequestedFeatureNames)\r\n && relatedItem.alreadyRequestedFeatureNames.includes(searchName)) {\r\n return Promise.resolve()\r\n }\r\n const dbName = relatedItem.dbName || relatedItem.partName;\r\n return getBvGroupFeatures(dbName, 0, pageSize, [], searchName)\r\n .then(response => {\r\n if (response && response.length) {\r\n relatedItem.setGroupFeatures(response, 0, false);\r\n if (!relatedItem.alreadyRequestedFeatureNames) {\r\n relatedItem.alreadyRequestedFeatureNames = [];\r\n }\r\n if (searchName) {\r\n relatedItem.alreadyRequestedFeatureNames.push(searchName);\r\n }\r\n }\r\n return response\r\n })\r\n };\r\n\r\n changeLayout = (layoutType, firstChange = false) => {\r\n if (!firstChange) {\r\n loaderEnable();\r\n }\r\n window.requestInProcess = true;\r\n const layout = getCurrentLayout();\r\n switch (document.kvConfig.visualizerType) {\r\n case \"Kitchen\":\r\n case \"KV\": {\r\n const cabinetParent = layout.parts[\"Cabinet\"];\r\n const applianceParent = layout.parts[\"Appliances\"];\r\n const wallsParent = layout.parts[\"Walls\"];\r\n const countertopParent = layout.parts[\"Countertop\"];\r\n const neededParts = [\"left_wall\", \"fridge\", \"top_cabinet\", \"top_handle\", \"bottom_cabinet\", \"bottom_handle\",\r\n \"popout_wall\", \"backsplash\", \"countertop\"];\r\n let relatedArray = [];\r\n [cabinetParent, applianceParent, wallsParent, countertopParent].forEach(parent => {\r\n if (parent) {\r\n relatedArray = [...relatedArray, ...parent.relatedItems]\r\n }\r\n });\r\n relatedArray = relatedArray.filter((relatedItem) => {\r\n return neededParts.includes(relatedItem.partId) && !relatedItem.allFeaturesReceived\r\n });\r\n const countertopPageChanges = this.getSubPartLayoutPageChanges(countertopParent, \"countertop\", layoutType);\r\n const backsplashPageChanges = this.getSubPartLayoutPageChanges(wallsParent, \"backsplash\", layoutType);\r\n if (relatedArray.length\r\n || countertopPageChanges.requestNeeded\r\n || countertopPageChanges.requestNameNeeded\r\n || backsplashPageChanges.requestNeeded\r\n || backsplashPageChanges.requestNameNeeded\r\n ) {\r\n return this.getNeeededKvPartsOnLayoutChange(layoutType, relatedArray, [countertopPageChanges, backsplashPageChanges], firstChange);\r\n } else {\r\n this.finishChangeLayout(layoutType);\r\n }\r\n break;\r\n }\r\n // case \"kvScene\": {\r\n case \"bvScene\": {\r\n this.getBvSceneParts(layoutType);\r\n break;\r\n }\r\n case \"Bathroom\":\r\n case \"BV\": {\r\n const showerParent = layout.parts[\"Shower\"];\r\n if (showerParent && showerParent.showerBody && !showerParent.showerBody.allFeaturesReceived) {\r\n const navItem = {\r\n part: showerParent.showerBody,\r\n text: showerParent.showerBody.partName\r\n };\r\n const oldType = layout.type;\r\n layout.type = layoutType;\r\n this.forceUpdate();\r\n this.checkIfAllFeaturesReceived(navItem, \"\", () => {\r\n this.finishChangeLayout(layoutType, oldType);\r\n });\r\n } else {\r\n this.finishChangeLayout(layoutType);\r\n }\r\n break;\r\n }\r\n default:\r\n this.finishChangeLayout(layoutType, null, null, firstChange);\r\n break;\r\n }\r\n };\r\n\r\n finishChangeLayout = (layoutType, oldType, currentState, firstChange = false) => {\r\n const layout = getCurrentLayout();\r\n if (Number.isInteger(oldType)) {\r\n loaderEnable();\r\n layout.type = oldType;\r\n layout.selectLayout(layoutType, oldType, currentState);\r\n } else {\r\n layout.selectLayout(layoutType);\r\n }\r\n window.requestInProcess = false;\r\n if (!layout.initialized && !firstChange) {\r\n layout.initialized = true;\r\n }\r\n if (this.props.refreshCB && !firstChange) {\r\n this.props.refreshCB();\r\n }\r\n if (!firstChange) {\r\n this.forceUpdate();\r\n store.dispatch(updateCanvasCount()); // update canvas\r\n loaderDisable();\r\n }\r\n return true\r\n };\r\n\r\n getBvSceneParts = (layoutType) => {\r\n const layout = getCurrentLayout();\r\n const wallsParent = layout.parts[\"Walls\"];\r\n const showerParent = layout.parts[\"Shower\"];\r\n const neededParts = [\"left_wall\", \"right_wall\", \"shower_interior_wall\", \"shower_fixture\"];\r\n let promises = [];\r\n [wallsParent, showerParent].forEach(parent => {\r\n if (parent && parent.relatedItems) {\r\n parent.relatedItems.forEach(relatedItem => {\r\n if (neededParts.includes(relatedItem.partId) && !relatedItem.allFeaturesReceived) {\r\n promises.push(this.getRelatedItemFeatures(relatedItem))\r\n }\r\n })\r\n }\r\n })\r\n const oldType = layout.type;\r\n layout.type = layoutType;\r\n Promise.all(promises).then(() => this.finishChangeLayout(layoutType, oldType))\r\n };\r\n\r\n getSubPartLayoutPageChanges = (parent, childName, layoutType) => {\r\n let\r\n requestNeeded = false,\r\n requestNameNeeded = false,\r\n nextLayoutFeaturesPage = 0,\r\n maxCurrentFeaturesPage = 0;\r\n if (parent && parent[childName]) {\r\n if (USE_SERVER_CACHING && parent[childName].nextFeaturesPageToLoadArray) {\r\n maxCurrentFeaturesPage = Math.max(...Object.values(parent[childName].nextFeaturesPageToLoadArray).map(obj => obj.page))\r\n nextLayoutFeaturesPage = (parent[childName].nextFeaturesPageToLoadArray[LayoutAbbreviations[layoutType]]).page;\r\n if (nextLayoutFeaturesPage < maxCurrentFeaturesPage) {\r\n requestNeeded = true;\r\n }\r\n }\r\n if (parent[childName].activeFeature) {\r\n const currentActiveName = parent[childName].activeFeature.getSplittedFeatureName();\r\n const neededLayoutName = invert(LayoutTypes)[layoutType];\r\n const neededFeature = parent[childName].featuresList[neededLayoutName].find((feature) => {\r\n const featureName = feature.getSplittedFeatureName();\r\n return featureName && currentActiveName && (featureName === currentActiveName)\r\n });\r\n if (!neededFeature) {\r\n requestNameNeeded = currentActiveName.split(\" \")[0]\r\n }\r\n }\r\n }\r\n return {\r\n requestNeeded,\r\n requestNameNeeded,\r\n nextLayoutFeaturesPage,\r\n maxCurrentFeaturesPage,\r\n relatedItem: parent ? parent[childName] : null\r\n }\r\n };\r\n\r\n getNeeededKvPartsOnLayoutChange = (layoutType, relatedPartsToReceive, relatedPartsToReceiveForLayouts, firstChange = false) => {\r\n const layout = getCurrentLayout();\r\n const currentState = layout.getActiveFeaturesAsObject(true, false, true);\r\n const oldType = layout.type;\r\n layout.type = layoutType;\r\n if (!firstChange) {\r\n this.forceUpdate();\r\n }\r\n const promises = relatedPartsToReceive.map((relatedItem) => {\r\n const size = COUNTERTOP_GROUP.includes(relatedItem.partId) ? 2000 : 1000;\r\n return getBvGroupFeatures(relatedItem.dbName || relatedItem.partName, 0, size).then(response => {\r\n relatedItem.setGroupFeatures(Array.isArray(response) ? response : [], size);\r\n return response\r\n })\r\n });\r\n relatedPartsToReceiveForLayouts.forEach((pageChanges) => {\r\n if (pageChanges.requestNeeded) { // here we receive all the same features for new layout type (cause client already received them in another layout)\r\n const nextLayoutName = LayoutAbbreviations[layoutType];\r\n const featuresSize = 1000 * (pageChanges.maxCurrentFeaturesPage - pageChanges.nextLayoutFeaturesPage);\r\n promises.push(getBvGroupFeatures(pageChanges.relatedItem.partName, pageChanges.nextLayoutFeaturesPage, featuresSize, [], \"\", nextLayoutName)\r\n .then(response => {\r\n pageChanges.relatedItem.nextFeaturesPageToLoadArray[nextLayoutName].page = pageChanges.maxCurrentFeaturesPage - 1; // 1 will be added in setGroupFeatures method\r\n pageChanges.relatedItem.setGroupFeatures(Array.isArray(response) ? response : []);\r\n return response\r\n }))\r\n }\r\n if (pageChanges.requestNameNeeded) { // here we receive current active itm to set it\r\n promises.push(NavigationRequests.searchFeaturesByName(pageChanges.relatedItem, pageChanges.requestNameNeeded))\r\n }\r\n });\r\n return Promise.all(promises).then(() => this.finishChangeLayout(layoutType, oldType, currentState, firstChange));\r\n };\r\n\r\n}\r\n","import {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {setLeadCaptureClickCount} from \"../../../actions/userFunctions\";\r\nimport {LOOK_OVERLAYS} from \"../core/constants\";\r\nimport {setLookOverlayOpened} from \"../../../actions/lookFunctions\";\r\n\r\n\r\nconst WithClickCount = (props) => {\r\n\r\n const {fabricatorSettings, isPhoneNumberValidated, leadCaptureClickCount, setLeadCaptureClickCount, children,\r\n setLookOverlayOpened} = props;\r\n\r\n const maxClickCountReached = () => {\r\n if (!isPhoneNumberValidated && fabricatorSettings.clickLeadCapture) {\r\n const newLeadCount = leadCaptureClickCount + 1;\r\n if (newLeadCount >= fabricatorSettings.clickLeadCount) {\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture);\r\n return true;\r\n } else {\r\n setLeadCaptureClickCount(newLeadCount);\r\n }\r\n }\r\n return false\r\n }\r\n\r\n\r\n return children(maxClickCountReached)\r\n};\r\n\r\nWithClickCount.propTypes = {\r\n children: PropTypes.any.isRequired\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {settings} = store.fabricatorState;\r\n const {isPhoneNumberValidated, leadCaptureClickCount} = store.userState;\r\n return {\r\n fabricatorSettings: settings,\r\n isPhoneNumberValidated,\r\n leadCaptureClickCount,\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLeadCaptureClickCount,\r\n setLookOverlayOpened,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(WithClickCount)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\nimport $ from \"jquery\";\r\n\r\nimport Switch from '@mui/material/Switch';\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\n\r\nimport {getCurrentLayout} from \"../../../appLayout\";\r\n// import COLOR_THEMES, {COLORS} from \"../../../../colorThemes\";\r\nimport {featureInterface} from \"../../../../interfaces/featureInterface\";\r\nimport {updateCanvasCount} from \"../../../../actions/actionFunctions\";\r\nimport {clickOnSimilarFeatures, getApplyToLogic} from \"../lookNavigationFunctions\";\r\nimport {IS_QKB_UI} from \"../../../../config\";\r\nimport ActionTypes from \"../../../../misc/actionTypes\";\r\nimport LookAllWallsRadioButtonSmall from \"./lookAllWallsRadioButtonSmall\";\r\n\r\n\r\nconst LookAllWallsRadioButton = (props) => {\r\n\r\n const {lookFeature, lookActiveFeature, intl, updateCanvasCount, dispatch, showColumnCheckbox, type, viewType,\r\n showTutorialToolTip, fabricatorData} = props;\r\n\r\n const wallFeature = lookFeature || lookActiveFeature;\r\n\r\n if (!wallFeature || fabricatorData.isEncore) {\r\n return null\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n\r\n const applyToLogic = getApplyToLogic(wallFeature);\r\n if (!applyToLogic) {\r\n return null\r\n }\r\n\r\n const {translateId, setApplyToFunction, applyToArrayAll, currentApplyToArray} = applyToLogic;\r\n const checked = currentApplyToArray.includes(wallFeature.partId);\r\n\r\n const updateCanvas = () => {\r\n if (IS_QKB_UI) {\r\n $(window).trigger(ActionTypes.CHANGE_LAYOUT); // update canvas\r\n } else {\r\n updateCanvasCount();\r\n }\r\n }\r\n\r\n const allWallsCheckboxClick = async () => {\r\n if (checked) { // already enabled\r\n if (currentApplyToArray.length) {\r\n dispatch(setApplyToFunction([], true, applyToLogic.type))\r\n }\r\n applyToArrayAll.forEach(wallPartId => {\r\n const subPart = layout.getSubPartByPartId(wallPartId);\r\n if (!subPart || (subPart.part.partId === wallFeature.partId) || !subPart.part.activeFeatureBeforeAllWalls) {\r\n return null\r\n }\r\n subPart.part.activeFeatureBeforeAllWalls.clickFromAllWalls(true);\r\n });\r\n updateCanvas();\r\n return\r\n } // already enabled end\r\n\r\n if (applyToArrayAll.length !== currentApplyToArray.length) {\r\n dispatch(setApplyToFunction([...applyToArrayAll], true, applyToLogic.type)) // update checkbox\r\n }\r\n await clickOnSimilarFeatures(wallFeature, applyToLogic);\r\n updateCanvas();\r\n };\r\n\r\n if (showColumnCheckbox) {\r\n return (\r\n
    \r\n :\r\n \r\n
    \r\n )\r\n }\r\n\r\n if (type === \"small\") {\r\n return \r\n }\r\n\r\n return (\r\n \r\n }\r\n />\r\n )\r\n};\r\n\r\nLookAllWallsRadioButton.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface),\r\n showColumnCheckbox: PropTypes.bool,\r\n showTutorialToolTip: PropTypes.bool,\r\n type: PropTypes.string,\r\n viewType: PropTypes.number,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeature, lookWallsApplyTo} = store.lookState;\r\n const {activeTheme} = store.serverState;\r\n const {countertopsApplyToArray, cabinetsApplyTo, cabinetsApplyToBathroom, edgesApplyTo, handlesApplyToBathroom,\r\n countertopsApplyToArrayBathroom, showerFloorApplyToBathroom} = store.navigationState;\r\n const fabricatorData = store.fabricatorState;\r\n\r\n return {\r\n lookActiveFeature,\r\n activeTheme,\r\n countertopsApplyToArray, cabinetsApplyTo, lookWallsApplyTo, cabinetsApplyToBathroom, edgesApplyTo,\r\n countertopsApplyToArrayBathroom, handlesApplyToBathroom, showerFloorApplyToBathroom, // update radio button on click\r\n fabricatorData,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n updateCanvasCount: () => dispatch(updateCanvasCount()),\r\n dispatch,\r\n }\r\n}\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookAllWallsRadioButton)\r\n)\r\n","import React from \"react\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport isObject from \"lodash/isObject\";\r\nimport WithOverlay from \"./withOverlayHoc\";\r\nimport ExclamationMarkIcon from \"../ui/icons/exclamationMarkIcon\";\r\nimport {COLORS} from \"../../colorThemes\";\r\n\r\nclass MessageBox extends React.Component {\r\n\r\n displayName = 'MessageBox';\r\n\r\n getMessage = () => {\r\n const {intl} = this.props;\r\n const props = this.props.state || this.props;\r\n const message = props.message;\r\n // console.log(\"message\", message);\r\n if (Array.isArray(message)) {\r\n return message.map((msg, msgIndex) =>

    \r\n {intl.messages[msg] ? : msg}\r\n

    )\r\n } else if (isObject(message)) {\r\n return message.id\r\n ? \r\n : message.message\r\n ? message.message\r\n : message.toString ? message.toString() : null\r\n } else if (message) { //string\r\n return intl.messages[message] ? : message.replace(\"Zip\", \"Postal\")\r\n } else {\r\n return \"Error\";\r\n }\r\n };\r\n\r\n render() {\r\n const props = this.props.state || this.props;\r\n\r\n if (!props.visible) {\r\n return null\r\n }\r\n\r\n const bClass = props.error ? 'message-red-lable' : 'message-blue-lable';\r\n const hClass = props.error ? 'message-error-message-title' : 'message-system-message-title';\r\n const messageClass = (props.error ? 'message-system-text-red' : 'message-system-text-blue') +\r\n (props.inline ? ' message-system-text-inline' : '');\r\n let buttonsElements = [];\r\n if (props.buttons && props.buttons.length) {\r\n buttonsElements = props.buttons.map((b) => {\r\n return ;\r\n });\r\n } else {\r\n buttonsElements.push(\r\n {\r\n //TODO[Artem] add default close logic\r\n }\r\n }}/>\r\n );\r\n }\r\n\r\n if (props.newStyles) {\r\n return (\r\n \r\n {(hideOverlay) => (\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n {this.getMessage()}\r\n
    \r\n
    \r\n {props.buttons && props.buttons.length ? props.buttons.map((button) => {\r\n return (\r\n \r\n )\r\n }) : null}\r\n
    \r\n
    \r\n )}\r\n
    \r\n )\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    {this.getMessage()}
    \r\n
    {buttonsElements}
    \r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst MessageBoxButton = ({button}) => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default injectIntl(MessageBox);\r\n","import {PartMenuType} from \"../../visComponents/constants\";\r\nimport {iCmp} from \"../../../misc/utils\";\r\nimport Layer from \"../../visComponents/layer\";\r\nimport {LayoutType, METADATA} from \"./constants\";\r\nimport PartCommon from \"../../visComponents/partCommon\";\r\n\r\nexport class Part extends PartCommon {\r\n\r\n constructor(isParent, isChild, menuType) {\r\n super();\r\n if (isChild || (isParent && menuType === PartMenuType.Simple)) {\r\n this.featuresList = {};\r\n this.featuresPartsList = {};\r\n this.modulePartsList = {};\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this.featuresList[layoutName] = [];\r\n this.featuresPartsList[layoutName] = [];\r\n this.modulePartsList[layoutName] = [];\r\n });\r\n this.allFeaturesReceived = false;\r\n this.realFeaturesReceived = false; // this prop is need on Scroll (if features count more that 1000)\r\n this.nextFeaturesPageToLoad = 0;\r\n this.activeFeature = null;\r\n this.placeholderFeature = null;\r\n this.shadowFeature = null;\r\n this.placeholderChanged = false;\r\n this.firstClick = {\r\n \"0\": false\r\n };\r\n this.activeLockedFeature = null;\r\n this.activeNotInVisualizerFeature = null; // is needed to display in the QT selected activeNotInVisualizerFeature, but render proper activeFeature layer(for example, countertop)\r\n // name = \"\";\r\n this.visible = true;\r\n this.categoryEnabled = false;\r\n this.layout = null;\r\n this.featureGroupVisible = true; // dashboard's feature group eye ball logic\r\n this.featureGroupEnabled = true; // dashboard's feature group checkbox logic\r\n this.selectedFeaturesHistory = []; // array of strings(names). updated every time item is selected\r\n this.filtersReceived = null; // array of filters values, comes from BE, for ex [1221, 347, 1124]\r\n }\r\n if (isParent) {\r\n this.partThumbnail = '';\r\n this.relatedItems = [];\r\n }\r\n if (!isChild && !isParent) {\r\n this.dbFeature = null;\r\n this.layer = new Layer(\"fireplace\");\r\n this._customDisplayName = null;\r\n this.notesList = {};\r\n }\r\n this.partName = \"\";\r\n }\r\n\r\n set features(featuresList) {\r\n // features can't be set directly, we need to change featuresList array\r\n }\r\n get features() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresList[layout.getCurrentLayoutName()]\r\n }\r\n set featuresParts(featuresList) {\r\n // featuresParts can't be set directly, we need to change featuresPartsList array\r\n }\r\n get featuresParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresPartsList[layout.getCurrentLayoutName()]\r\n }\r\n get moduleParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.modulePartsList[layout.getCurrentLayoutName()]\r\n }\r\n\r\n /**\r\n * Checks whether a given for condition matches the needed value (or array of values)\r\n * @param name {string}\r\n * @param value {string || array}\r\n * @returns {int} -1 - no such for condition, 0 - no match, 1 - matches\r\n */\r\n matchesMetaForCondition(name, value) {\r\n return this.metaData[name] && this.metaData[name].some(condValue => {\r\n return condValue === METADATA.ALL || (Array.isArray(value) ? value.some(val => iCmp(condValue, val)) : iCmp(condValue, value))\r\n });\r\n }\r\n\r\n matchesMetaForArrayOfConditions(arrayOfConditions) {\r\n return arrayOfConditions.every((condition) => {\r\n return this.matchesMetaForCondition(condition.propName, condition.propValue);\r\n })\r\n }\r\n}\r\n\r\n\r\n","import _ from 'lodash';\r\n\r\nimport workspace from \"../core/workspace\";\r\nimport {\r\n SHAPE_PART_ID,\r\n} from \"../../../constants\";\r\nimport sqftShape from \"../core/shapes/sqftShape\";\r\nimport ShapeHelper from \"../../../helpers/shapeHelper\";\r\nimport sqftShapeManager from \"./sqftShapeManager\";\r\nimport sqftSlabManager from \"./sqftSlabManager\";\r\nimport {renderErrorPopup} from \"../../../../../api/api-popups\";\r\n\r\nconst sqftShapeIntersectionsManager = {\r\n resetShapesIntersections() {\r\n const shapes = workspace.getShapes();\r\n for (const shape of shapes) {\r\n if (shape instanceof sqftShape) {\r\n shape.shapeIntersections.setOverlappedWithShapeIds([]);\r\n }\r\n }\r\n },\r\n updateShapesIntersections() {\r\n this.resetShapesIntersections();\r\n\r\n const shapes = workspace.getShapes();\r\n //console.log(\"----------------------\");\r\n for (const shape of shapes) {\r\n if (shape instanceof sqftShape) {\r\n for (const testShape of shapes) {\r\n if (testShape instanceof sqftShape\r\n && shape.id !== testShape.id\r\n ) {\r\n const shapeIntersections = ShapeHelper.getTwoShapesIntersections(shape, testShape);\r\n const shapeIds = Object.keys(shapeIntersections);\r\n if (shapeIds.length) {\r\n shape.shapeIntersections.addOverlappedWithShape(+shapeIds[0]);\r\n } else if (ShapeHelper.checkIfShapeContainsAnother(shape, testShape)) {\r\n //console.log(\"shapeId\", shape.id);\r\n //console.log(\"testShapeId\", testShape.id);\r\n testShape.shapeIntersections.addOverlappedWithShape(shape.id);\r\n shape.shapeIntersections.addOverlappedWithShape(testShape.id);\r\n }\r\n }\r\n }\r\n //console.log(\"shapeId\", shape.id);\r\n //console.log(\"shape.shapeIntersections.overlappedWithShapeIds\", shape.shapeIntersections.overlappedWithShapeIds);\r\n }\r\n }\r\n //this.logShapeFeatureIds()\r\n },\r\n logShapeFeatureIds() {\r\n const shapes = workspace.getShapes();\r\n for (const shape of shapes) {\r\n console.log(\"shape id\", shape.id);\r\n console.log(\"shape feature id\", shape.featureId);\r\n console.log(\"shape shapeIntersections overlappedWithShapeIds\", shape.shapeIntersections.overlappedWithShapeIds);\r\n }\r\n },\r\n logSnappedShapeGroups() {\r\n const shapes = workspace.getShapes();\r\n console.log(\"------\");\r\n for (const shape of shapes) {\r\n if (shape instanceof sqftShape) {\r\n console.log(\"shape id\", shape.id);\r\n console.log(\"shape area\", shape.getTotalArea());\r\n console.log(\"shape getSnappedShapeGroup\", shape.shapeAbsolute.getSnappedShapeGroup());\r\n console.log(\"shape shapeSlab getSnappedShapeGroup\", shape.shapeSlab.shapeAbsolute.getSnappedShapeGroup());\r\n }\r\n }\r\n console.log(\"------\");\r\n },\r\n updateSlabPlaceholderFeatureId() {\r\n const shapes = workspace.getShapes();\r\n for (const shape of shapes) {\r\n if (shape instanceof sqftShape\r\n && shape.partId === SHAPE_PART_ID.slabPlaceHolder\r\n ) {\r\n //console.log(\"update feature shape.shapeIntersections.overlappedWithShapeIds\", shape.shapeIntersections.overlappedWithShapeIds);\r\n if (shape.shapeIntersections.overlappedWithShapeIds.length >= 1) {\r\n const intersectedShape = sqftShapeManager.getShapeById(shape.shapeIntersections.overlappedWithShapeIds[0]);\r\n shape.setFeatureId(_.clone(intersectedShape.featureId));\r\n shape.setSlabParentPartId(_.clone(intersectedShape.slabParentPartId ? intersectedShape.slabParentPartId : intersectedShape.partId));\r\n }\r\n }\r\n }\r\n },\r\n\r\n showSlabPlaceHolderErrorMessage (\r\n slabPlaceHolderShapes = sqftSlabManager.getSlabPlaceHolderShapes(),\r\n callback = new Function()\r\n ) {\r\n for (const slabPlaceHolderShape of slabPlaceHolderShapes) {\r\n //console.log(\"slabPlaceHolderShape.overlappedWithShapeIds\", slabPlaceHolderShape.shapeIntersections.overlappedWithShapeIds);\r\n if (slabPlaceHolderShape.shapeIntersections.overlappedWithShapeIds.length >= 2) {\r\n const shapes = sqftShapeManager.getShapeByIds(slabPlaceHolderShape.shapeIntersections.overlappedWithShapeIds);\r\n if (\r\n !sqftShapeManager.hasSameSharedFeatureName(shapes)\r\n && !sqftShapeManager.hasSameFeatureId(shapes)\r\n ) {\r\n\r\n renderErrorPopup(workspace.intl.formatMessage({id: \"sqft.popup.system.slabPlaceholderMultipleOverlap\"}));\r\n callback();\r\n }\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport default sqftShapeIntersectionsManager\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport $ from 'jquery';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport Navigation from \"./navigation\";\r\nimport Config from \"../../../config\";\r\nimport {ignoreDefault} from \"../../../misc/utils\";\r\nimport Sidebar from './desktop/sidebar';\r\nimport Body from './desktop/body';\r\nimport {ContentType, ContentTypeName, ContentTypeNameTranslate, PartMenuType} from \"../constants\";\r\nimport FeatureWizard from \"./featureWizard/featureWizard\";\r\nimport Analytics from \"../../../analytics\";\r\nimport {CABINET_WIZARD_BUTTONS, BACKSPLASH_TYPES, COUNTERTOP_WIZARD_BUTTONS} from \"../../kvComponent/core/constants\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport RoomSceneNavigation from \"./roomSceneNavigation\";\r\nimport {getAvailableRoomScenes, getShowOtherLayouts, getSideBarSubParts} from \"./navUtils\";\r\nimport DesktopNavigationLayoutsContent from \"./desktopNavigationLayoutsContent\";\r\n\r\nexport default class DesktopNavigationCommon extends Navigation {\r\n\r\n static propTypes = {\r\n refreshCB: PropTypes.func.isRequired,\r\n renderGreenLayerByZindex: PropTypes.func,\r\n changeMessageBoxState: PropTypes.func,\r\n setHoveredLayer: PropTypes.func,\r\n userIsLoggedIn: PropTypes.bool,\r\n isPhoneNumberValidated: PropTypes.bool,\r\n toggleUserPopup: PropTypes.func,\r\n setActiveFeature: PropTypes.func,\r\n setDemoPointClicked: PropTypes.func,\r\n activeFeature: PropTypes.object,\r\n fabricatorSettings: PropTypes.object,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.navWrapper = null;\r\n this.navigationIsClosing = false;\r\n }\r\n\r\n componentDidMount() {\r\n this.setState({\r\n navWidth: $(this.navWrapper).width()\r\n });\r\n this.props.setNavigationViewType(3);\r\n this._componentDidMount();\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n this._componentWillReceiveProps(nextProps)\r\n }\r\n\r\n handleContextMenuClick = (menuItem) => {\r\n const layout = getCurrentLayout();\r\n if (!this.state.showNavigation) {\r\n let clickedParent = \"\", clickedButton = \"\";\r\n const isBacksplash = BACKSPLASH_TYPES.some(bType => bType === menuItem.text);\r\n if (menuItem.text === \"Edge Profile\") {\r\n if (this.props.setActiveNavigationFilter) {\r\n this.props.setActiveNavigationFilter(COUNTERTOP_WIZARD_BUTTONS[3].buttonId); // set active navigation filter\r\n this.props.setActiveNavigationFilterStepIndex(3);\r\n }\r\n } else if (isBacksplash) {\r\n const wallsParent = layout.parts[\"Walls\"];\r\n const backsplashSubPart = wallsParent.relatedItems.find(relItem => relItem.partId === \"backsplash\");\r\n clickedParent = \"Walls\";\r\n clickedButton = \"Backsplash\";\r\n if (this.props.setActiveNavigationFilter) {\r\n this.props.setActiveNavigationFilter(COUNTERTOP_WIZARD_BUTTONS[4].buttonId); // set active navigation filter\r\n this.props.setActiveNavigationFilterStepIndex(4);\r\n }\r\n const applyBacksplash = () => {\r\n const featureToClick = backsplashSubPart.getFeatureByBacksplashType(menuItem.text);\r\n if (featureToClick) {\r\n console.log(\"featureToClick\", featureToClick);\r\n featureToClick.handleClick();\r\n this.props.setActiveFeature(featureToClick);\r\n const parentItem = this.state.parentNavigationItem;\r\n this.setState({\r\n parentNavigationItem: null\r\n }, () => {\r\n this.setState({\r\n parentNavigationItem: parentItem\r\n })\r\n })\r\n }\r\n }\r\n if (!backsplashSubPart.allFeaturesReceived) {\r\n this.checkIfAllFeaturesReceived({part: backsplashSubPart}, null, applyBacksplash);\r\n } else {\r\n applyBacksplash()\r\n }\r\n }\r\n if (!isBacksplash) {\r\n clickedButton = menuItem.text;\r\n clickedParent = menuItem.subMenuParent || this.state.contextMenuOpen;\r\n }\r\n if (clickedParent && clickedParent.module) {\r\n clickedParent = \"Cabinet\"\r\n }\r\n //\r\n // console.log('clickedButton', clickedButton);\r\n // console.log('clickedParent', clickedParent);\r\n // console.log('menuItem', menuItem);\r\n if (clickedParent === \"Walls\" && (clickedButton === \"Left Shower Wall\" || clickedButton === \"Pony Wall\")) {\r\n this.ponyWallAndLeftWallClick(menuItem);\r\n }\r\n\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.menuOpened();\r\n this.triggerOpenNavigationMenu(clickedButton, clickedParent);\r\n $(document).on('click', this.handleWrapperBlur);\r\n this.setNewActiveFeature();\r\n if (menuItem.clickFeature && !isBacksplash) {\r\n const featureToClick = menuItem.part.features.find(feature => feature.partName === menuItem.subMenuText);\r\n if (featureToClick) {\r\n featureToClick.handleClick();\r\n }\r\n }\r\n });\r\n }\r\n };\r\n\r\n handleNavTabClick = (contentType) => (e) => {\r\n Analytics.sendClickEvent('nav-tab-click-' + contentType);\r\n // console.log('e', e);\r\n // console.log('contentType', contentType);\r\n ignoreDefault(e);\r\n if (this.state.contentType === contentType) {\r\n this.closeNavigation(e);\r\n } else if (!this.navigationIsClosing) {\r\n this.setContentType(contentType);\r\n }\r\n };\r\n\r\n openLayoutMenu = (callBack) => {\r\n const contentType = document.querySelector(\".tab.tab--room-layout\")\r\n ? ContentType.Layout\r\n : document.querySelector(\".tab.tab--room-ideas\")\r\n ? ContentType.DisplayRoom\r\n : ContentType.Layout;\r\n this.setState({\r\n showNavigation: true,\r\n contentType,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.setNewActiveFeature();\r\n this.menuOpened();\r\n $(document).on('click', this.handleWrapperBlur);\r\n callBack();\r\n });\r\n };\r\n\r\n menuOpened = () => {\r\n this._menuOpened();\r\n };\r\n\r\n setContentType = (contentType) => {\r\n this.setState({\r\n showNavigation: true,\r\n contentType,\r\n contextMenuOpen: false,\r\n hoveredLayer: {},\r\n activeDefaultPreset: null\r\n }, () => {\r\n this.menuOpened();\r\n $(document).on('click', this.handleWrapperBlur);\r\n if (contentType === ContentType.Design) {\r\n this.setNewActiveFeature();\r\n }\r\n });\r\n };\r\n\r\n closeNavigation = (e) => {\r\n Analytics.sendClickEvent('close-nav');\r\n if (e) {\r\n ignoreDefault(e);\r\n }\r\n this.props.setActiveFeature(null);\r\n this.navigationIsClosing = true;\r\n this.setState({\r\n showNavigation: false,\r\n showFilterSelection: false,\r\n showerWallWizardGroupsSelected: true,\r\n }, () => {\r\n setTimeout(() => {\r\n this.setState({\r\n contentType: ContentType.None,\r\n showFilterSelection: true,\r\n showerWallWizardGroupsSelected: false,\r\n searchText: \"\"\r\n }, () => {\r\n this.navigationIsClosing = false;\r\n })\r\n }, 500);\r\n $(document).off('click', this.handleWrapperBlur);\r\n });\r\n if (this.props.setActiveNavigationNames) {\r\n this.props.setActiveNavigationNames(\"\", \"\")\r\n }\r\n setTimeout(() => {\r\n if (this.props.toggleDesktopNavigation) {\r\n this.props.toggleDesktopNavigation(false)\r\n }\r\n if (this.props.setActiveNavigationFilter) {\r\n this.props.setActiveNavigationFilter(CABINET_WIZARD_BUTTONS[0].buttonId);\r\n this.props.setActiveNavigationFilterStepIndex(0);\r\n }\r\n }, 500);\r\n };\r\n\r\n handleWrapperBlur = (e) => {\r\n const overlayClick = e.target.closest('.nav-overlay');\r\n const navClick = e.target.closest('.nav');\r\n const lockClick = e.target.closest('[class*=\"lock\"]');\r\n const userPopupClick = e.target.closest('[class*=\"user-popup\"]');\r\n if (overlayClick && !navClick && !lockClick && !userPopupClick && !e.target.closest('.nav-pos')) {\r\n this.closeNavigation(e);\r\n }\r\n };\r\n\r\n handleHeaderBackClick = () => {\r\n this.resetNavigation();\r\n };\r\n\r\n updateSideBar = () => {\r\n this.setState({\r\n updateSidebarItems: true\r\n }, () => {\r\n this.setState({\r\n updateSidebarItems: false\r\n })\r\n })\r\n };\r\n\r\n handleSubPartClick = (childNavigationItem, activeNavigationFilter = null) => { // sidebar list item click\r\n const subItemPart = childNavigationItem.part;\r\n const childNavigationItemPartId = subItemPart.partId;\r\n if (Config.isDevMode() && this.state.childNavigationItem && (this.state.childNavigationItem.text === childNavigationItem.text || subItemPart.disabled)) {\r\n if (subItemPart.canBeDisabled) {\r\n subItemPart.disabled = !subItemPart.disabled;\r\n subItemPart.disabledClick();\r\n this.props.refreshCB();\r\n }\r\n }\r\n subItemPart.getParent().handleSubPartClick(subItemPart);\r\n this.setState({\r\n childNavigationItem,\r\n showFilterSelection: subItemPart.allFeaturesReceived, // show filters only if subItemPart has all features\r\n showerWallWizardGroupsSelected: false,\r\n searchText: \"\"\r\n }, () => {\r\n this.scrollAsideToMenuItem(childNavigationItem.text);\r\n this.rememberWallsSelection();\r\n this.checkIfAllFeaturesReceived(childNavigationItem, \"childNavigationItem\");\r\n });\r\n this.setNewActiveFeature(childNavigationItem);\r\n /*set new materials page subIndex*/\r\n this.setActivePartRelatedItemIndex(childNavigationItem);\r\n\r\n if (this.props.setActiveNavigationNames\r\n && this.state.parentNavigationItem && this.state.parentNavigationItem.text\r\n && childNavigationItem && childNavigationItem.part\r\n ) {\r\n this.props.setActiveNavigationNames(\r\n this.state.parentNavigationItem.text.toLowerCase().replace(/ /g,\"_\"),\r\n childNavigationItemPartId\r\n )\r\n }\r\n\r\n this.setNavigationFilterIfTheChildWasChanged(childNavigationItemPartId, activeNavigationFilter);\r\n\r\n if (childNavigationItem.text === \"Ceiling\") {\r\n $('html, body').animate({scrollTop: 0}, 800);\r\n }\r\n\r\n };\r\n\r\n scrollAsideToMenuItem = (menuItemText) => {\r\n const parent = $(document.querySelector('.customize-list'));\r\n const child = parent.find('.customize-list__item[data-text=\"'+ menuItemText +'\"]');\r\n if (parent && child) {\r\n const needToScroll = +child.data('index') >= 5;\r\n parent.animate({\r\n scrollTop: needToScroll ? parent.height() : 0 // -30 this is one nav item height\r\n }, 500);\r\n }\r\n };\r\n\r\n handleSubPartHover = childNavigationItem => {\r\n const activeFeature = childNavigationItem.part.activeFeature;\r\n if (activeFeature) {\r\n const zIndex = activeFeature.layer.zIndex;\r\n zIndex && this.props.renderGreenLayerByZindex(zIndex);\r\n }\r\n };\r\n\r\n scrollToDefault = () => {\r\n const featuresList = document.getElementsByClassName('categories-list');\r\n if (featuresList.length) {\r\n featuresList[0].scrollLeft = 0;\r\n }\r\n };\r\n\r\n handleMobileSelectClick = (e) => {\r\n if (!this.state.showNavigation || !this.state.parentNavigationItem) {\r\n e.stopPropagation();\r\n if (!this.state.parentNavigationItem) {\r\n this.setState({\r\n childNavigationItem: null\r\n })\r\n }\r\n }\r\n if (this.state.contentType !== ContentType.Design && !this.navigationIsClosing) {\r\n this.setContentType(ContentType.Design);\r\n }\r\n };\r\n\r\n navigationItemClickCommon = (item) => {\r\n if (!this.state.parentNavigationItem) {\r\n if (item.part.menuType === PartMenuType.Simple) {\r\n this.checkIfAllFeaturesReceived(item, \"parentNavigationItem\");\r\n }\r\n this.setState({\r\n parentNavigationItem: item,\r\n showFilterSelection: item.text === \"Floor\" && item.part.allFeaturesReceived, // show filters only if subItemPart has all features\r\n }, () => {\r\n const featuresList = document.getElementsByClassName('categories-list');\r\n if (featuresList.length) {\r\n featuresList[0].scrollLeft = 0;\r\n }\r\n // let activeFeature = item.part.activeFeature;\r\n const subParts = getSideBarSubParts(this.state.parentNavigationItem.part);\r\n if (subParts[0] && (subParts[0].part.menuType !== PartMenuType.Simple)) {\r\n this.handleSubPartClick(subParts[0])\r\n } else {\r\n setTimeout(() => {\r\n this.setNewActiveFeature({part: item.part});\r\n }, 0)\r\n }\r\n if (this.props.setActiveNavigationNames && this.state.parentNavigationItem && this.state.parentNavigationItem.text) {\r\n this.props.setActiveNavigationNames(\r\n this.state.parentNavigationItem.text.toLowerCase().replace(/ /g,\"_\"), \"\"\r\n )\r\n }\r\n });\r\n this.props.setDefaultSelectionGroup(item.part.partName);\r\n } else {\r\n this.props.setActiveFeature(item.part);\r\n }\r\n if (Config.isDevMode() || document.kvConfig.kioskMode) {\r\n console.log('item', item);\r\n if (item.part.dbFeature) {\r\n console.log('sharedFeatureName:', item.part.dbFeature.sharedFeatureName);\r\n }\r\n }\r\n };\r\n\r\n content = (useWizard, wizardGroups, useFilters) => {\r\n let content = null;\r\n switch (this.state.contentType) {\r\n case ContentType.Design:\r\n return this.contentDesign(useWizard, wizardGroups, useFilters);\r\n case ContentType.Layout:\r\n return ;\r\n case ContentType.DisplayRoom:\r\n return this.contentRoom();\r\n case ContentType.Loading:\r\n return this.contentLoading();\r\n case ContentType.RoomScene:\r\n return ;\r\n default:\r\n return content;\r\n }\r\n };\r\n\r\n contentDesignBody = (useWizard, wizardGroups, useFilters = false) => {\r\n return (\r\n \r\n )\r\n };\r\n\r\n contentDesignWizard = () => {\r\n const wizardGroups = this.state[this.getWizardGroupsByPartId(this.state.childNavigationItem.part.partId)];\r\n return (\r\n \r\n )\r\n };\r\n\r\n contentDesign = (useWizard, wizardGroups, useFilters) => {\r\n\r\n // activePart = activePart || {\r\n // text: ''\r\n // };\r\n /*const filters = this.state.filters[activePart.text] || {};\r\n const filterValuesIDs = [];\r\n each(filters, (value) => {\r\n filterValuesIDs.push(value);\r\n });*/\r\n\r\n return (\r\n
    \r\n {this.state.parentNavigationItem\r\n ? \r\n : null}\r\n {this.state.showFeatureWizard ? (\r\n useWizard && this.state.childNavigationItem && this.state.childNavigationItem.part && this.state.parentNavigationItem\r\n ? this.contentDesignWizard()\r\n : this.contentDesignBody(false, wizardGroups, useFilters)\r\n ) : this.contentDesignBody(useWizard, wizardGroups, useFilters)}\r\n {/*{this.state.parentNavigationItem*/}\r\n {/*? */}\r\n {/*: null}*/}\r\n
    \r\n )\r\n };\r\n\r\n contentRoom = () => {\r\n let presets = this.checkedForLockedPresets();\r\n return (\r\n
    \r\n {presets.length ? (\r\n
      \r\n {presets.map((preset, index) => {\r\n return (\r\n
    • this.handleDefaultPresetClick(index, preset.presetIsLocked)}\r\n style={{backgroundImage: `url(${preset.bv_screen})`}}/>\r\n )\r\n })}\r\n
    \r\n ) :

    }\r\n
    \r\n )\r\n };\r\n\r\n contentLoading = () => {\r\n return
    \r\n }\r\n\r\n navigationMenuButtons = (availableNavButtons) => {\r\n return (\r\n
    \r\n {availableNavButtons.map((contentType) => {\r\n if (ContentTypeName[contentType] === \"Room Layout\") {\r\n const showOtherLayouts = getShowOtherLayouts(this.props.fabricatorSettings);\r\n if (!showOtherLayouts) {\r\n return null\r\n }\r\n }\r\n if (ContentTypeName[contentType] === \"Room Scene\") {\r\n const showOtherLayouts = getAvailableRoomScenes();\r\n if (!showOtherLayouts || !showOtherLayouts.length || (showOtherLayouts.length === 1)) {\r\n return null\r\n }\r\n }\r\n if (ContentTypeName[contentType] === \"Room Scene\" && (document.kvConfig.visualizerType === \"kvScene\" && !Config.isDevMode())) {\r\n return null\r\n }\r\n const tabClassName = ContentTypeName[contentType].toLowerCase().replace(\" \",\"-\")\r\n return (\r\n
    \r\n \r\n \r\n \r\n
    \r\n )\r\n })}\r\n
    \r\n )\r\n }\r\n\r\n}\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setCabinetNavigationFilterCompleted,\r\n setCountertopNavigationFilterCompleted, setNavigationViewType\r\n} from \"../../../../actions/navigationFunctions\";\r\nimport {CABINET_WIZARD_BUTTONS, COUNTERTOP_WIZARD_BUTTONS} from \"../../../kvComponent/core/constants\";\r\nimport {setSelectedFilters} from \"../../../../actions/actionFunctions\";\r\n\r\nclass NavigationFiltersSteps extends Component {\r\n\r\n static propTypes = {\r\n availableSteps: PropTypes.array,\r\n setFeatureWizardStep: PropTypes.func,\r\n exitFeatureWizard: PropTypes.func,\r\n showFeatureWizard: PropTypes.bool,\r\n isMobile: PropTypes.bool,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n mounted: false\r\n };\r\n this._isMounted = false;\r\n }\r\n\r\n componentDidMount() {\r\n this._isMounted = true;\r\n setTimeout(() => {\r\n if (this._isMounted) {\r\n this.setState({\r\n mounted: true\r\n });\r\n }\r\n }, 0)\r\n }\r\n componentWillUnmount() {\r\n this._isMounted = false;\r\n }\r\n\r\n exitFeatureWizard = () => {\r\n this.props.setActiveNavigationFilter(CABINET_WIZARD_BUTTONS[0].buttonId);\r\n this.props.setActiveNavigationFilterStepIndex(0);\r\n const cabinetPartIds = [\"top_cabinet\", \"bottom_cabinet\"];\r\n const countertopPartIds = [\"countertop\", \"center_island_countertop\", \"edge_profile\", \"center_island_edge\", \"backsplash\"];\r\n if (cabinetPartIds.includes(this.props.activePart.partId)) {\r\n this.props.setCabinetNavigationFilterCompleted(true);\r\n } else if (countertopPartIds.includes(this.props.activePart.partId)) {\r\n this.props.setCountertopNavigationFilterCompleted(true);\r\n }\r\n };\r\n\r\n getAvailableSteps = () => {\r\n let wizardButtons = [];\r\n switch (this.props.activePart.partId) {\r\n case \"top_cabinet\":\r\n case \"bottom_cabinet\":\r\n wizardButtons = CABINET_WIZARD_BUTTONS.filter(wizardButton => {\r\n if (wizardButton.buttonId === \"all_products\") {\r\n return this.props.isMobile\r\n }\r\n return wizardButton.buttonId !== \"inlay_type\"\r\n });\r\n break;\r\n case \"countertop\":\r\n case \"edge_profile\":\r\n case \"backsplash\":\r\n wizardButtons = COUNTERTOP_WIZARD_BUTTONS;\r\n break;\r\n case \"center_island_countertop\":\r\n case \"center_island_edge\":\r\n wizardButtons = COUNTERTOP_WIZARD_BUTTONS.slice(0, 4);\r\n break;\r\n }\r\n return wizardButtons;\r\n };\r\n\r\n setFeatureWizardStep = (nextStepIndex, disabled = false, lastStep) => {\r\n\r\n if (disabled) {\r\n return false;\r\n }\r\n const availableSteps = this.getAvailableSteps();\r\n if (lastStep) {\r\n this.exitFeatureWizard();\r\n } else {\r\n this.props.setActiveNavigationFilter(availableSteps[nextStepIndex].buttonId);\r\n this.props.setActiveNavigationFilterStepIndex(nextStepIndex);\r\n }\r\n const commonView = (this.props.windowWidth < 991) ? 4 : 3;\r\n const buttonId = availableSteps[nextStepIndex].buttonId;\r\n if (buttonId === COUNTERTOP_WIZARD_BUTTONS[2].buttonId) {\r\n this.props.setNavigationViewType(2)\r\n } else if (this.props.navigationViewType !== commonView) {\r\n this.props.setNavigationViewType(commonView)\r\n }\r\n if (buttonId !== COUNTERTOP_WIZARD_BUTTONS[2].buttonId) {\r\n this.props.setSelectedFilters([]); // reset filters on finish filters\r\n }\r\n };\r\n\r\n render() {\r\n const availableSteps = this.getAvailableSteps();\r\n const currentActiveIndex = this.props.activeNavigationFilterStepIndex;\r\n\r\n const firstStepIsActive = currentActiveIndex === 0;\r\n const lastStepIsActive = currentActiveIndex === availableSteps.length - 1;\r\n\r\n const cabinetNavigationFilterCompleted = this.props.isMobile && this.props.cabinetNavigationFilterCompleted && (\r\n this.props.activePart.partId === \"top_cabinet\" || this.props.activePart.partId === \"bottom_cabinet\"\r\n );\r\n // const countertopNavigationFilterCompleted = this.props.isMobile && this.props.countertopNavigationFilterCompleted && (\r\n // this.props.activePart.partId === \"countertop\" || this.props.activePart.partId === \"center_island_countertop\"\r\n // );\r\n\r\n const countertopWizardPartIds = [\"countertop\", \"center_island_countertop\", \"edge_profile\", \"center_island_edge\", \"backsplash\"];\r\n const isCountertopWizard = countertopWizardPartIds.includes(this.props.activePart.partId);\r\n\r\n return (\r\n
    \r\n {this.props.isMobile ? null : (\r\n
    \r\n \r\n {availableSteps[currentActiveIndex]\r\n ? `Select a ${availableSteps[currentActiveIndex].text} for your ${this.props.activePart.partName}.`\r\n : null}\r\n \r\n {isCountertopWizard ? null : }\r\n
    \r\n )}\r\n
    \r\n {cabinetNavigationFilterCompleted ? null : (\r\n
    this.setFeatureWizardStep(currentActiveIndex - 1, firstStepIsActive)}>\r\n \r\n
    \r\n )}\r\n
      \r\n {availableSteps.map((wizardButton, index) => {\r\n const disabled = false;\r\n const buttonIcon = isCountertopWizard && wizardButton.buttonId === \"all_products\" ? \"stones\" : wizardButton.buttonId;\r\n return (\r\n
    • this.setFeatureWizardStep(index, disabled)}>\r\n {wizardButton.text}\r\n
    • \r\n )\r\n })}\r\n
    \r\n {cabinetNavigationFilterCompleted ? null : (\r\n
    this.setFeatureWizardStep(\r\n currentActiveIndex + 1,\r\n lastStepIsActive && isCountertopWizard,\r\n lastStepIsActive && !isCountertopWizard\r\n )}>\r\n \r\n \r\n \r\n
    \r\n )}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\n\r\nconst mapStateToProps = (store) => ({\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n activeNavigationFilterStepIndex: store.navigationState.activeNavigationFilterStepIndex,\r\n cabinetNavigationFilterCompleted: store.navigationState.cabinetNavigationFilterCompleted,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n navigationViewType: store.navigationState.navigationViewType,\r\n windowWidth: store.serverState.windowWidth,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setCabinetNavigationFilterCompleted,\r\n setCountertopNavigationFilterCompleted,\r\n setNavigationViewType,\r\n setSelectedFilters\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(NavigationFiltersSteps);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport $ from 'jquery';\r\n\r\nimport Navigation from \"./navigation\";\r\nimport {ContentType, PartMenuType} from \"../constants\";\r\nimport MobileNavigationBodyNew from './mobile/mobileNavigationBodyNew';\r\nimport ActionTypes from \"../../../misc/actionTypes\";\r\nimport SelectionMobileViewSwitchers from './mobile/selectionMobileViewSwitchers';\r\nimport FeatureWizard from \"./featureWizard/featureWizard\";\r\nimport Analytics from \"../../../analytics\";\r\nimport {BACKSPLASH_TYPES, COUNTERTOP_WIZARD_BUTTONS} from \"../../kvComponent/core/constants\";\r\nimport MobileParentNavigationItems from \"./mobileParentNavigationItems\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport BacksplashSelect from \"../../selectionWindow/backsplashSelect\";\r\nimport {getCommonVisualizerType} from \"../../../config\";\r\nimport LayoutNavigationItem from \"../layoutNavigationItem\";\r\nimport {getAvailableLayouts, getSideBarSubParts} from \"./navUtils\";\r\n\r\nexport default class MobileNavigationCommon extends Navigation {\r\n\r\n static propTypes = {\r\n changeMessageBoxState: PropTypes.func.isRequired,\r\n resetEverything: PropTypes.func.isRequired,\r\n goToMaterialsInfo: PropTypes.func,\r\n setCanvasClass: PropTypes.func,\r\n canvasId: PropTypes.string,\r\n userIsLoggedIn: PropTypes.bool,\r\n toggleUserPopup: PropTypes.func,\r\n setActiveFeature: PropTypes.func,\r\n activeFeature: PropTypes.object,\r\n fabricatorSettings: PropTypes.object,\r\n isPhoneNumberValidated: PropTypes.bool,\r\n setDemoPointClicked: PropTypes.func\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state.render = true;\r\n this.state.searchInputFocused = false;\r\n }\r\n\r\n componentDidMount() {\r\n $(document).on(ActionTypes.OPEN_MOBILE_NAVIGATION, this.openMobileMenu);\r\n $(document).on(ActionTypes.CHANGE_MOBILE_MENU_CONTENT_TYPE, (event, contentType) => {\r\n this.handleChangeContentType(contentType, true);\r\n });\r\n this.props.setNavigationViewType(4);\r\n this._componentDidMount();\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n const layout = getCurrentLayout();\r\n if (!this.state.designNavigationItems || !this.state.designNavigationItems.length) {\r\n this.setState({designNavigationItems: layout.designNavigationItems()});\r\n }\r\n if (nextProps.filterGroups.length) {\r\n let updateComponent = false;\r\n if (nextProps.filterGroups.length === this.props.filterGroups.length) {\r\n updateComponent = nextProps.filterGroups.some((filter, index) => {\r\n return filter.filterId !== this.props.filterGroups[index].filterId\r\n || filter.filterGroupId !== this.props.filterGroups[index].filterGroupId\r\n });\r\n }\r\n if (updateComponent) {\r\n this.reRenderComponent();\r\n }\r\n }\r\n if (nextProps.activeNavigationFilter !== this.props.activeNavigationFilter\r\n && COUNTERTOP_WIZARD_BUTTONS.some(btn => btn.buttonId === nextProps.activeNavigationFilter)) {\r\n if (this.state.parentNavigationItem && (\r\n this.state.parentNavigationItem.part.partName === \"Countertop\"\r\n || this.state.parentNavigationItem.part.partName === \"CenterIsland\"\r\n )) {\r\n const subParts = this.state.parentNavigationItem.part.subParts();\r\n let subPart = null;\r\n switch (nextProps.activeNavigationFilter) {\r\n case COUNTERTOP_WIZARD_BUTTONS[0].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[1].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[2].buttonId:\r\n subPart = (this.state.parentNavigationItem.part.partName === \"Countertop\")\r\n ? subParts.find(sPart => sPart.part.partId === \"countertop\")\r\n : subParts.find(sPart => sPart.part.partId === \"center_island_countertop\");\r\n break;\r\n case COUNTERTOP_WIZARD_BUTTONS[4].buttonId:\r\n subPart = (this.state.parentNavigationItem.part.partName === \"Countertop\")\r\n ? subParts.find(sPart => sPart.part.partId === \"countertop\")\r\n : subParts.find(sPart => sPart.part.partId === \"center_island_countertop\");\r\n break;\r\n case COUNTERTOP_WIZARD_BUTTONS[3].buttonId:\r\n subPart = (this.state.parentNavigationItem.part.partName === \"Countertop\")\r\n ? subParts.find(sPart => sPart.part.partId === \"edge_profile\")\r\n : subParts.find(sPart => sPart.part.partId === \"center_island_edge\");\r\n break;\r\n }\r\n if (subPart) {\r\n this.handleSubPartClick(subPart, nextProps.activeNavigationFilter)\r\n }\r\n }\r\n }\r\n this._componentWillReceiveProps(nextProps)\r\n }\r\n\r\n reRenderComponent = () => {\r\n this.setState({\r\n render: false\r\n }, () => {\r\n this.setState({\r\n render: true\r\n })\r\n })\r\n };\r\n\r\n parentCategoryClick = (parentItemText) => {\r\n const clickedParent = this.state.designNavigationItems.find(item => item.text === parentItemText);\r\n if (clickedParent.part.menuType === PartMenuType.Simple) {\r\n this.triggerOpenNavigationMenu(clickedParent.text);\r\n } else {\r\n const firstChild = getSideBarSubParts(clickedParent.part)[0];\r\n if (firstChild) {\r\n this.triggerOpenNavigationMenu(firstChild.text, clickedParent.text);\r\n }\r\n }\r\n if (parentItemText === \"Floor\") {\r\n $('html, body').animate({scrollTop: document.body.scrollHeight}, 800);\r\n } else if (parentItemText === \"Ceiling\") {\r\n $('html, body').animate({scrollTop: 0}, 800);\r\n }\r\n };\r\n\r\n openMobileMenu = () => {\r\n // $(window).trigger(ActionTypes.SET_CANVAS_SCALE);\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.menuOpened();\r\n setTimeout(() => {\r\n $(document).on('click', this.handleWrapperBlur);\r\n window.mobileMenuOpened = true;\r\n $(window).trigger(ActionTypes.DISABLE_PINCH_ZOOM);\r\n document.removeEventListener('click', this.handleContextMenuBlur);\r\n }, 0)\r\n });\r\n };\r\n\r\n scrollContentToTop = () => {\r\n const listContainer = document.querySelector('.menu-body__content');\r\n if (listContainer) {\r\n listContainer.scrollTop = 0;\r\n }\r\n };\r\n\r\n handleWrapperBlur = (e) => {\r\n const navClick = e.target.closest('[class*=\"menu\"]');\r\n const messageBoxClick = e.target.closest('[class*=\"message\"]');\r\n const lockClick = e.target.closest('[class*=\"lock\"]');\r\n const userPopupClick = e.target.closest('[class*=\"user-popup\"]');\r\n const twoFactorPopup = e.target.closest('[class*=\"TwoFactorAuth-popup\"]');\r\n const countryList = e.target.closest('[class*=\"country\"]');\r\n const searchClick = e.target.closest('[class*=\"search\"]');\r\n const wizardClick = e.target.closest('[class*=\"wiz\"]');\r\n const loadingClick = e.target.closest('[class*=\"full-screen-wrapper\"]');\r\n if (!navClick && !messageBoxClick && !searchClick && !lockClick && !userPopupClick && !twoFactorPopup\r\n && !countryList && !loadingClick && !window.touchMove\r\n && !wizardClick && !window.canvasIsDragging && document.body.classList.contains('body--bv')) {\r\n this.closeNavigation();\r\n }\r\n };\r\n\r\n closeNavigation = () => {\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass('none', true);\r\n }\r\n this.setState({\r\n showNavigation: false,\r\n showFilterSelection: false,\r\n showerWallWizardGroupsSelected: true,\r\n }, () => {\r\n setTimeout(() => {\r\n this.setState({\r\n contentType: ContentType.None,\r\n searchText: \"\",\r\n showFilterSelection: true,\r\n showerWallWizardGroupsSelected: false,\r\n });\r\n this.props.setActiveFeature(null);\r\n // this.resetWizardSteps(); // after wizard unmounts\r\n }, 500);\r\n $(document).off('click', this.handleWrapperBlur);\r\n window.mobileMenuOpened = false;\r\n $(window).trigger(ActionTypes.ENABLE_PINCH_ZOOM);\r\n });\r\n };\r\n\r\n handleContextMenuBlur = (e) => {\r\n const navClick = e.target.closest('[class*=\"contextmenu\"]');\r\n // console.log('blur');\r\n if (!navClick && !window.touchMove) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n document.removeEventListener('click', this.handleContextMenuBlur);\r\n });\r\n }\r\n };\r\n\r\n handleChangeContentType = (contentType, resetNav = false) => {\r\n this.setState({\r\n contentType,\r\n parentNavigationItem: resetNav ? null : this.state.parentNavigationItem,\r\n childNavigationItem: resetNav ? null : this.state.childNavigationItem,\r\n });\r\n if (contentType === ContentType.Design) {\r\n this.setNewActiveFeature();\r\n }\r\n };\r\n\r\n /* start oldNav methods */\r\n\r\n scrollToDefault = (item) => {\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass(item.text.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n this.scrollContentToTop();\r\n };\r\n\r\n /* end oldNav methods */\r\n\r\n resetEverything = () => {\r\n this.props.resetEverything();\r\n this.closeNavigation();\r\n setTimeout(() => {\r\n this.resetWizardSteps(); // after wizard unmounts\r\n }, 300)\r\n };\r\n\r\n menuOpened = () => {\r\n this.scrollContentToTop();\r\n this.setNewActiveFeature();\r\n this._menuOpened();\r\n };\r\n\r\n handleContextMenuClick = (menuItem) => {\r\n const layout = getCurrentLayout();\r\n if (!this.state.showNavigation) {\r\n\r\n let clickedParent = \"\", clickedButton = \"\";\r\n const isBacksplash = BACKSPLASH_TYPES.some(bType => bType === menuItem.text);\r\n\r\n if (menuItem.text === \"Edge Profile\") {\r\n if (this.props.setActiveNavigationFilter) {\r\n this.props.setActiveNavigationFilter(COUNTERTOP_WIZARD_BUTTONS[3].buttonId); // set active navigation filter\r\n this.props.setActiveNavigationFilterStepIndex(3);\r\n }\r\n } else if (isBacksplash) {\r\n const wallsParent = layout.parts[\"Walls\"];\r\n const backsplashSubPart = wallsParent.subParts().find(subPart => subPart.part.partId === \"backsplash\");\r\n this.checkIfAllFeaturesReceived(backsplashSubPart);\r\n const featureToClick = backsplashSubPart.part.getFeatureByBacksplashType(menuItem.text);\r\n // console.log(\"featureToClick\", featureToClick);\r\n if (featureToClick) {\r\n featureToClick.handleClick();\r\n }\r\n clickedParent = \"Walls\";\r\n clickedButton = \"Backsplash\";\r\n\r\n if (this.props.setActiveNavigationFilter) {\r\n this.props.setActiveNavigationFilter(COUNTERTOP_WIZARD_BUTTONS[4].buttonId); // set active navigation filter\r\n this.props.setActiveNavigationFilterStepIndex(4);\r\n }\r\n\r\n }\r\n if (!isBacksplash) {\r\n clickedButton = menuItem.text;\r\n clickedParent = menuItem.subMenuParent || this.state.contextMenuOpen;\r\n }\r\n\r\n if (clickedParent && clickedParent.module) {\r\n clickedParent = \"Cabinet\"\r\n }\r\n\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass(clickedParent.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n\r\n if (clickedParent === \"Walls\" && (clickedButton === \"Left Shower Wall\" || clickedButton === \"Pony Wall\")) {\r\n this.ponyWallAndLeftWallClick(menuItem);\r\n }\r\n\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.menuOpened();\r\n this.triggerOpenNavigationMenu(clickedButton, clickedParent);\r\n $(document).on('click', this.handleWrapperBlur);\r\n window.mobileMenuOpened = true;\r\n $(window).trigger(ActionTypes.DISABLE_PINCH_ZOOM);\r\n $(document).off('click', this.handleContextMenuBlur);\r\n if (menuItem.clickFeature && !isBacksplash) {\r\n const featureToClick = menuItem.part.features.find(feature => feature.partName === menuItem.subMenuText);\r\n if (featureToClick) {\r\n featureToClick.handleClick();\r\n }\r\n }\r\n });\r\n }\r\n\r\n };\r\n\r\n getDisplayRoomContent = () => {\r\n let presets = this.checkedForLockedPresets();\r\n return (\r\n
    \r\n {presets.length ? (\r\n
      \r\n {presets.map((preset, index) => ( //\r\n
    • Analytics.sendClickEvent(\"default-preset-clicked-\" + index) && this.handleDefaultPresetClick(index, preset.presetIsLocked)}\r\n key={index}>\r\n
      \r\n \"item.type\"/\r\n
      \r\n
    • \r\n ))}\r\n
    \r\n ) : (\r\n

    No display room found

    \r\n )}\r\n
    \r\n )\r\n };\r\n\r\n contentDesignWizard = () => {\r\n const wizardGroups = this.state[this.getWizardGroupsByPartId(this.state.childNavigationItem.part.partId)];\r\n return (\r\n \r\n )\r\n };\r\n\r\n toggleSearchInputFocus = () => {\r\n this.setState({\r\n searchInputFocused: !this.state.searchInputFocused\r\n })\r\n };\r\n\r\n getFeatures = (layout) => {\r\n const parentItem = this.state.parentNavigationItem;\r\n const childItem = this.state.childNavigationItem;\r\n const currentParent = (parentItem && (parentItem.part.menuType === PartMenuType.Simple)) ? parentItem : childItem;\r\n if (!currentParent) {\r\n return []\r\n }\r\n let features = layout.designNavigationItems(currentParent, this.props.selectedFilters, this.state.searchText);\r\n return features\r\n };\r\n\r\n contentBody = (features, useWizard, useFilters, activePart, activeSubPart, filterSelectionHasValues, allFeaturesReceived) => {\r\n const {intl} = this.props;\r\n const layout = getCurrentLayout();\r\n const layoutNames = getAvailableLayouts();\r\n return (\r\n
    \r\n {this.state.contentType === ContentType.Design && activePart ? (\r\n
    \r\n \r\n {activeSubPart && activeSubPart.partId === \"backsplash\" && getCommonVisualizerType() === \"kitchen\" ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n
    \r\n {activePart.menuType === PartMenuType.Complex && activePart.subTypes().length\r\n ? activePart.subTypes().map(subType => (\r\n \r\n )) : (\r\n 12 ? \" search-input--with-close\" : \"\")\r\n }\r\n value={this.state.searchText}\r\n onFocus={this.toggleSearchInputFocus}\r\n onBlur={this.toggleSearchInputFocus}\r\n onChange={this.handleSearchInputChange}\r\n placeholder={intl.formatMessage({id: \"mobileMenu.searchPlaceholder\"})}\r\n id=\"main-search\"\r\n />\r\n )}\r\n {this.state.searchText\r\n ?
    \r\n
    \r\n ) : null}\r\n \r\n {this.state.contentType === ContentType.Layout ? (\r\n
    \r\n
      \r\n {layoutNames.map(key => {\r\n return \r\n })}\r\n
    \r\n
    \r\n ) : null}\r\n {this.state.contentType === ContentType.Design ? (\r\n
    \r\n {this.state.parentNavigationItem ? (\r\n this.state.render ? (\r\n \r\n ) :
    \r\n ) : }\r\n
    \r\n ) : null}\r\n {this.state.contentType === ContentType.DisplayRoom ? this.getDisplayRoomContent() : null}\r\n {this.state.contentType === ContentType.Loading ? (\r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n )\r\n };\r\n\r\n}\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport store from \"../../../../store\";\r\nimport * as actions from \"../../../../actions/actionFunctions\";\r\nimport UserLoginButton from \"../../../ui/userLoginButton\";\r\n\r\nimport {ContentType} from \"../../constants\";\r\nimport Analytics from \"../../../../analytics\";\r\nimport HomeMenu from \"../../../common/homeMenu\";\r\nimport ScheduleButton from \"../../../common/scheduleButton\";\r\nimport Config from \"../../../../config\";\r\nimport {getShowOtherLayouts} from \"../navUtils\";\r\n\r\nclass MobileNavigationButtons extends Component {\r\n\r\n static propTypes = {\r\n handleChangeContentType: PropTypes.func.isRequired,\r\n handleSearchInputChange: PropTypes.func.isRequired,\r\n resetEverything: PropTypes.func.isRequired,\r\n contentType: PropTypes.number.isRequired,\r\n searchText: PropTypes.string,\r\n parentNavigationItem: PropTypes.object,\r\n canvasId: PropTypes.string,\r\n userIsLoggedIn: PropTypes.bool,\r\n toggleUserPopup: PropTypes.func,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n designNavigationOpened: ''\r\n }\r\n }\r\n\r\n handleDropDownButtonClick = (type) => {\r\n Analytics.sendClickEvent('mobile-' + type + '-button-clicked');\r\n this.setState({\r\n designNavigationOpened: this.state.designNavigationOpened === type ? '' : type\r\n }, () => {\r\n this.state.designNavigationOpened\r\n ? window.addEventListener('click', this.handleDropdownWrapperBlur)\r\n : window.removeEventListener('click', this.handleDropdownWrapperBlur)\r\n })\r\n };\r\n\r\n handleResetButtonClick = () => {\r\n Analytics.sendClickEvent(\"mobile-nav-reset-button-question\");\r\n this.props.changeMessageBoxState({\r\n visible: true,\r\n message: \"messageBox.resetVisualizerState\",\r\n buttons: [{\r\n text: \"messageBox.buttonNo\",\r\n color: \"blue\",\r\n click: () => {\r\n Analytics.sendClickEvent(\"mobile-nav-reset-button-no\");\r\n this.props.changeMessageBoxState({visible:false});\r\n }\r\n },{\r\n text: \"messageBox.buttonYes\",\r\n color: \"green\",\r\n click: () => {\r\n Analytics.sendClickEvent(\"mobile-nav-reset-button-yes\");\r\n this.props.changeMessageBoxState({visible:false});\r\n setTimeout(() => {\r\n this.setState({\r\n designNavigationOpened: ''\r\n });\r\n this.props.resetEverything();\r\n }, 500);\r\n }\r\n }]\r\n });\r\n };\r\n\r\n changeContentType = (contentType) => {\r\n this.props.handleChangeContentType(contentType);\r\n this.resetDropDown();\r\n };\r\n\r\n resetDropDown = () => {\r\n this.setState({\r\n designNavigationOpened: ''\r\n }, () => {\r\n window.removeEventListener('click', this.handleDropdownWrapperBlur)\r\n })\r\n };\r\n\r\n handleDisplayRoomClick = () => {\r\n Analytics.sendClickEvent('mobile-navigation-display-room-button');\r\n this.changeContentType(ContentType.DisplayRoom);\r\n this.resetDropDown();\r\n };\r\n\r\n handleDropdownWrapperBlur = (e) => {\r\n const newButtonClick = e.target.closest('.menu-header__right-button');\r\n const dropDownClick = e.target.closest('[class*=\"menu-dropdown\"]');\r\n const userPopupClick = e.target.closest('[class*=\"user-popup\"]');\r\n if (!newButtonClick && !dropDownClick && !userPopupClick) {\r\n this.resetDropDown();\r\n }\r\n };\r\n\r\n handleFiltersClick = () => {\r\n Analytics.sendClickEvent('mobile-show-filters');\r\n store.dispatch(actions.showFiltersIfHidden('mobileNavigation'));\r\n };\r\n\r\n render() {\r\n const {intl} = this.props;\r\n const dashboardFramed = Config.isVisualizerManagement();\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n let showOtherLayouts = getShowOtherLayouts(fabricatorSettings);\r\n\r\n return (\r\n
    \r\n {this.props.mobileNav.length && this.props.windowWidth < 991 ? (\r\n \r\n ) : null}\r\n {this.props.parentNavigationItem ? (\r\n \r\n ) : null}\r\n {/*this.props.parentNavigationItem ? (\r\n \r\n ) : null*/}\r\n {dashboardFramed ? null : }\r\n \r\n
    \r\n {this.state.designNavigationOpened === 'menu' ? (\r\n
      \r\n
    • Analytics.sendClickEvent('menu-option-clicked-design') && this.changeContentType(ContentType.Design)}>\r\n \r\n
    • \r\n
    • \r\n \r\n
    • \r\n {/*
    • Quoted Items
    • */}\r\n {showOtherLayouts ? (\r\n
    • Analytics.sendClickEvent('menu-option-clicked-roomLayout') && this.changeContentType(ContentType.Layout)}>\r\n \r\n
    • \r\n ) : null}\r\n
    • \r\n \r\n
    \r\n ) : null}\r\n {this.state.designNavigationOpened === 'search' ? (\r\n
    \r\n \r\n {this.props.searchText ? (\r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n mobileNav: store.navigationState.mobileNav,\r\n windowWidth: store.serverState.windowWidth,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n selectedFilters: store.filterState.selectedFilters,\r\n});\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(MobileNavigationButtons)\r\n)\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport Analytics from \"../../../../analytics\";\r\n\r\nexport default class MobileNavigationAllWallsCheckbox extends Component {\r\n\r\n static propTypes = {\r\n parentNavigationItem: PropTypes.instanceOf(DesignNavigationItem).isRequired,\r\n toggleApplyWallsCheckbox: PropTypes.func.isRequired,\r\n };\r\n\r\n allWallsClick = () => {\r\n Analytics.sendClickEvent('all-walls-toggled');\r\n this.props.toggleApplyWallsCheckbox();\r\n setTimeout(() => {\r\n this.forceUpdate();\r\n }, 0)\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n )\r\n }\r\n}\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport ShareButton from './shareButton';\r\n// import { downloadCanvasImageById } from \"../misc/utils\";\r\nimport HomeMenu from \"./homeMenu\";\r\nimport Analytics from \"./../../analytics\";\r\nimport {showSchedulerPopup, toggleUserPopup} from \"../../actions/actionFunctions\";\r\nimport SaveButton from \"./saveButton\";\r\nimport QuoteButton from \"./quoteButton\";\r\nimport DesignButton from \"./designButton\";\r\nimport {UserPopupTypes} from \"../visComponents/constants\";\r\nimport ScheduleButton from \"./scheduleButton\";\r\nimport MinimizeButton from \"./minimizeButton\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport {renderMessagePopup} from \"../../api/api-popups\";\r\nimport {saveQuote} from \"../../api/server-api\";\r\nimport Config from \"../../config\";\r\nimport NavigationRequests from \"../visComponents/navigation/navigationRequests\";\r\nimport {loaderDisable, loaderEnable} from \"../ui/loaderView\";\r\nimport {downloadCSV} from \"../../misc/downloadCSV\";\r\nimport PingPilotButton from \"../visComponents/pingPilotButton\";\r\n\r\nclass MainButtons extends NavigationRequests {\r\n\r\n static propTypes = {\r\n goBack: PropTypes.func,\r\n goToCart: PropTypes.func,\r\n changeMessageBoxState: PropTypes.func.isRequired,\r\n resetEverything: PropTypes.func.isRequired,\r\n canvasId: PropTypes.string,\r\n };\r\n\r\n handleResetButtonClick = () => {\r\n Analytics.sendClickEvent(\"reset-quote-question\");\r\n this.props.changeMessageBoxState({\r\n visible: true,\r\n message: \"messageBox.resetTitle\",\r\n buttons: [{\r\n text: \"messageBox.buttonNo\",\r\n color: \"blue\",\r\n click: () => {\r\n Analytics.sendClickEvent(\"reset-quote-cancel\");\r\n this.props.changeMessageBoxState({visible: false});\r\n }\r\n }, {\r\n text: \"messageBox.buttonYes\",\r\n color: \"green\",\r\n click: () => {\r\n Analytics.sendClickEvent(\"reset-quote-yes\");\r\n this.props.changeMessageBoxState({visible: false});\r\n this.props.resetEverything();\r\n }\r\n }]\r\n });\r\n };\r\n\r\n handleLoginButtonClick = (userPopupType) => {\r\n Analytics.sendClickEvent(\"main-login-button\");\r\n this.props.toggleUserPopup({\r\n userPopupOpened: true,\r\n userPopupType\r\n });\r\n };\r\n\r\n handleLogOutButtonClick = () => {\r\n Analytics.sendClickEvent(\"main-logout-button-question\");\r\n this.props.changeMessageBoxState({\r\n visible: true,\r\n message: \"messageBox.logoutTitle\",\r\n buttons: [{\r\n text: \"messageBox.buttonNo\",\r\n color: \"blue\",\r\n click: () => {\r\n Analytics.sendClickEvent(\"main-logout-button-no\");\r\n this.props.changeMessageBoxState({visible: false});\r\n }\r\n }, {\r\n text: \"messageBox.buttonYes\",\r\n color: \"green\",\r\n click: () => {\r\n Analytics.sendClickEvent(\"main-logout-button-yes\");\r\n this.props.changeMessageBoxState({visible: false});\r\n this.props.toggleUserPopup({\r\n userPopupOpened: false,\r\n userIsLoggedIn: false,\r\n isPhoneNumberValidated: false\r\n });\r\n }\r\n }]\r\n });\r\n };\r\n\r\n handleScheduleButtonClick = () => {\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n Analytics.sendClickEvent('schedule-appointment-main-button');\r\n if (!this.props.isPhoneNumberValidated) {\r\n this.handleLoginButtonClick(UserPopupTypes.Schedule);\r\n return;\r\n }\r\n if (fabricatorSettings.enableCalendarForScheduling) {\r\n this.props.showSchedulerPopup(true)\r\n } else {\r\n saveQuote({submit: true, quoteRequestType: QuoteRequestType.ScheduleAnAppointment})\r\n .then(() => {\r\n renderMessagePopup(\"userPopup.messageBox.appointmentRequested\");\r\n });\r\n }\r\n };\r\n\r\n getAllFeatures = () => {\r\n const layout = getCurrentLayout();\r\n const parents = layout.getFeatures(true); // we need other groups too\r\n parents.forEach((parent) => {\r\n parent.relatedItems.forEach(async relItem => {\r\n await this.checkIfAllFeaturesReceived({part: relItem});\r\n })\r\n });\r\n };\r\n\r\n consoleTableAllFeatures = async () => {\r\n loaderEnable();\r\n const layout = getCurrentLayout();\r\n // console.log(\"Active Features:\", layout.getActiveFeatures(true));\r\n // console.log(\"layout.getActiveFeaturesAsObject:\", JSON.stringify(layout.getActiveFeaturesAsObject(false, true, true)));\r\n const parents = layout.getFeatures(true); // we need other groups too\r\n // console.log(\"go\");\r\n await this.getAllFeatures();\r\n // console.log(\"stop\");\r\n let allFeatures = [\r\n [\"groupName\", \"sharedFeatureName\", \"customDisplayName\", \"metaData\", \"filters\"]\r\n ];\r\n parents.forEach((parent) => {\r\n parent.relatedItems.forEach(relItem => {\r\n for (let i = 0; i <= relItem.features.length; i++) {\r\n const feature = relItem.features[i];\r\n if (feature && allFeatures.every(f => (f.sharedFeatureName !== feature.dbFeature.sharedFeatureName)\r\n || (f.groupName !== feature.dbFeature.groupName))) {\r\n allFeatures.push([\r\n feature.dbFeature.groupName,\r\n feature.dbFeature.sharedFeatureName,\r\n feature.dbFeature.customDisplayName,\r\n JSON.stringify(feature.dbFeature.metaData),\r\n JSON.stringify(feature.dbFeature.filters)\r\n ])\r\n }\r\n }\r\n })\r\n });\r\n console.log(allFeatures);\r\n loaderDisable();\r\n downloadCSV(allFeatures);\r\n }\r\n\r\n consoleActiveFeatures = () => {\r\n const layout = getCurrentLayout();\r\n console.log(\"Active Features:\", layout.getActiveFeatures(true));\r\n console.log(\"Active Lead Features:\", layout.getActiveNames());\r\n console.log(\"layout.getActiveFeaturesAsObject:\", JSON.stringify(layout.getActiveFeaturesAsObject(false, true, true)));\r\n this.consoleTableAllFeatures();\r\n }\r\n\r\n render() {\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n const dashboardFramed = Config.isVisualizerManagement();\r\n const allPagesEnabled = !document.kvConfig.visualizerOnly;\r\n const quoteEnabled = fabricatorSettings.enableQuote;\r\n return (\r\n
    \r\n {this.props.windowWidth < 991 ? (\r\n \r\n ) : null}\r\n {this.props.windowWidth < 991 || dashboardFramed || (this.props.fabricatorData.checkout && this.props.goToCart && allPagesEnabled) ? null : (\r\n \r\n )}\r\n {quoteEnabled ? : null}\r\n \r\n \r\n {(fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId)) ? (\r\n \r\n ) : null}\r\n {Config.isDevMode() ? (\r\n \r\n ) : null}\r\n {(fabricatorSettings.showPricing) && this.props.goToCart && allPagesEnabled ? (\r\n \r\n ) : null}\r\n {fabricatorSettings.enableSharing && !dashboardFramed ? : null }\r\n \r\n {allPagesEnabled ? : null}\r\n {this.props.mobileNav.length && this.props.windowWidth >= 991 ? : null}\r\n {document.kvConfig.jobId ?
    : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n mobileNav: store.navigationState.mobileNav,\r\n cartItems: store.cartState.cartItems,\r\n windowWidth: store.serverState.windowWidth,\r\n fabricatorData: store.fabricatorState,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n showSchedulerPopup,\r\n toggleUserPopup\r\n})(MainButtons);\r\n","import PropTypes from 'prop-types';\r\nimport uuid from 'uuid';\r\nimport {hashHistory} from \"react-router\";\r\nimport $ from \"jquery\";\r\n\r\nimport {loaderDisable, loaderEnable} from \"../ui/loaderView\";\r\nimport {getJobIdPreset, getQtCategories, saveQuote} from \"../../api/server-api\";\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport JsonApi from \"../../api/jsonApi\";\r\nimport NavigationRequests from \"./navigation/navigationRequests\";\r\nimport Config, {\r\n // getCommonVisualizerType,\r\n IS_LIXIL_UI,\r\n IS_LOOK_JOURNEY, IS_OFFLINE_MODE,\r\n IS_QKB_UI\r\n} from \"../../config\";\r\nimport {isNewlyCreatedJob, parseJobIdResponse} from \"../../api/parseResponse\";\r\nimport {getImagePromiseFromLayout} from \"../../misc/getCanvasImageFromLayout\";\r\nimport {createCartList, getParsedLookUrl} from \"../look/lookNavigation/lookFunctions\";\r\nimport {getLocalStorageItem} from \"../../misc/storageFunctions\";\r\nimport {getDefaultPresetByLook, saveQuoteAndShare} from \"../look/lookNavigation/lookFunctions2\";\r\nimport store from \"../../store\";\r\nimport {GROHE_ON_OPEN_ACTION} from \"../look/iframeIntegration\";\r\nimport {addToCart} from \"../../actions/actionFunctions\";\r\n// import {setContractBlob} from \"../../actions/contractsActions\";\r\nimport {setAllowRouting} from \"../../actions/serverFunctions\";\r\nimport {renderErrorPopup} from \"../../api/api-popups\";\r\nimport {updatePresetRoomLayout} from \"../../misc/presetsFunctions\";\r\nimport {setShopPageLoaded} from \"../../actions/shopFunctions\";\r\nimport {showWizardInsteadOfQT} from \"../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {setAssignQuoteOfflineData} from \"../../actions/assignPopupFunctions\";\r\nimport {getAdditionalFeaturesOnScroll} from \"../../api/look-api\";\r\nimport {VISUALIZER_MANAGEMENT_ACTIONS} from \"../../misc/constants\";\r\nimport {parseWizardResponse} from \"../../misc/loadVisualizer\";\r\nimport {LOCAL_STORAGE_KEYS, LOOK_OVERLAYS} from \"../look/core/constants\";\r\nimport {setLookOverlayOpened} from \"../../actions/lookFunctions\";\r\nimport {updateCurrentQuote} from \"../../misc/quotesFunctions\";\r\nimport {getContracts, setContractBlobs, shouldUseContractSigning} from \"../popups/contractSign/contractsFunctions\";\r\nimport {getOfflineReceiptImages} from \"../../actions/printFunctions\";\r\n// import {setUseFeaturesLightRequest} from \"../../actions/navigationFunctions\";\r\n\r\nexport default class Visualizer extends NavigationRequests {\r\n\r\n static defaultProps = {\r\n useMouseHovering: true,\r\n useTouchZoom: true,\r\n };\r\n\r\n static propTypes = {\r\n toggleUserPopup: PropTypes.func,\r\n cartItems: PropTypes.array,\r\n useMouseHovering: PropTypes.bool,\r\n useTouchZoom: PropTypes.bool,\r\n userIsLoggedIn: PropTypes.bool,\r\n isPhoneNumberValidated: PropTypes.bool,\r\n handleToggleFeatureInfo: PropTypes.func,\r\n jobId: PropTypes.number,\r\n mobileNav: PropTypes.array,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.imageCanvas = null;\r\n this.navBar = null;\r\n this.loadByTheDefault = null;\r\n this.needToSaveQuote = false;\r\n this.state = {\r\n messageBoxState: {\r\n visible: false\r\n },\r\n canvasId: uuid.v4(),\r\n lockedView: false,\r\n activeFeature: null,\r\n demoPointClicked: false,\r\n allowRouting: false,\r\n };\r\n // if (this.props.visualizersLoaded.includes(this.layout.visualizerType)) {\r\n // loaderEnable()\r\n // }\r\n if (IS_LIXIL_UI) { // temporary removed because of additional rooms loading\r\n loaderEnable();\r\n }\r\n }\r\n\r\n setSubscribers() {\r\n $(window).on(ActionTypes.CHANGE_LAYOUT, this.handleRefresh);\r\n $(window).on(ActionTypes.UPDATE_ALL_ITEMS, this.handleRefresh);\r\n $(window).on(ActionTypes.CANVAS_SCALE_CHANGED, this.canvasScaleChanged);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.bvOpened && !this.props.bvOpened) {\r\n this.handleRefresh();\r\n if (IS_QKB_UI && !this.props.visualizerTutorialFinished && this.props.showVisualizerTutorial) {\r\n this.props.showVisualizerTutorial(true);\r\n }\r\n }\r\n if (!nextProps.showRestorePopup && this.props.showRestorePopup) {\r\n this.changeMessageBoxState({visible:false});\r\n try {\r\n window.localStorage.removeItem(this.layout.localStorageKey);\r\n } catch (ex) { console.log(\"localStorage exception\", ex); }\r\n }\r\n if (IS_QKB_UI && nextProps.initialFlowRoom && (nextProps.initialFlowRoom !== this.props.initialFlowRoom)) {\r\n this.tryToSetSelectedRoom()\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n $(window).off(ActionTypes.CHANGE_LAYOUT, this.handleRefresh);\r\n $(window).off(ActionTypes.UPDATE_ALL_ITEMS, this.handleRefresh);\r\n $(window).off(ActionTypes.CANVAS_SCALE_CHANGED, this.canvasScaleChanged);\r\n }\r\n\r\n shouldComponentUpdate() {\r\n return !window.requestInProcess\r\n }\r\n\r\n applyStoredItems = () => {\r\n loaderEnable();\r\n this.changeMessageBoxState({visible:false});\r\n try {\r\n const bvState = JSON.parse(window.localStorage.getItem(this.layout.localStorageKey));\r\n this.layout.setItemsFromBvState(bvState, true);\r\n } catch (ex) { console.log(\"applyStoredItems localStorage exception\", ex); }\r\n loaderDisable();\r\n };\r\n\r\n setIframeMessaging = () => {\r\n if (Config.isVisualizerManagement()) {\r\n window.addEventListener(\"message\", (event) => {\r\n if (event.data && (event.data.action === VISUALIZER_MANAGEMENT_ACTIONS.getState\r\n || event.data.action === VISUALIZER_MANAGEMENT_ACTIONS.checkState)) {\r\n setTimeout(() => {\r\n getImagePromiseFromLayout(this.layout)\r\n .then(response => {\r\n const bvState = this.layout.getActiveFeaturesAsObject(false, false, true);\r\n bvState.bv_screen = response;\r\n // console.log('bvState.bv_screen:', bvState.bv_screen);\r\n window.parent.postMessage({\r\n action: event.data.action,\r\n payload: bvState\r\n }, \"*\");\r\n })\r\n }, 0)\r\n }\r\n if (event.data && event.data.action === VISUALIZER_MANAGEMENT_ACTIONS.setState) {\r\n if ((document.kvConfig.visualizerType === \"bvLook\")) {\r\n event.data.bvState = updatePresetRoomLayout(event.data.bvState);\r\n console.log(\"applying new state...\", event.data.bvState);\r\n }\r\n this.layout.setItemsFromBvState(event.data.bvState);\r\n }\r\n });\r\n }\r\n\r\n if (window.parent) {\r\n window.parent.postMessage({\r\n action: VISUALIZER_MANAGEMENT_ACTIONS.visualizerIsLoaded,\r\n }, \"*\");\r\n }\r\n\r\n };\r\n\r\n canvasScaleChanged = (event, canvas_scale) => {\r\n if (canvas_scale !== 1) {\r\n this.setDemoPointClicked();\r\n $(window).off(ActionTypes.CANVAS_SCALE_CHANGED);\r\n }\r\n }\r\n\r\n async setVisualizerInfo(mainResponse, bvGroupsResponse, qtCategories, layoutTypes, userIsLoggedIn, savedTempData) {\r\n if (Config.isDevMode() || document.kvConfig.kioskMode) {\r\n console.log('mainResponse-->', mainResponse);\r\n if (mainResponse) {\r\n console.log('mainResponse features-->', mainResponse.features);\r\n }\r\n console.log('bvGroupsResponse-->', bvGroupsResponse);\r\n console.log('savedTempData-->', savedTempData);\r\n }\r\n parseWizardResponse(mainResponse, qtCategories, this.layout.visualizerType); // lixil ui enable routing\r\n if (qtCategories.length) {\r\n this.loadQtCategoriesFeatures(qtCategories); // load features from feature groups\r\n }\r\n this.layout.createCustomConfigurations(); // set shower body first\r\n this.layout.setGroupsItemsCount(bvGroupsResponse);\r\n // if (bvGroupsResponse && getCommonVisualizerType() === \"kitchen\") { // removed this logic, download countertops always as usual\r\n // toggles to request all features at once or each feature separately\r\n // store.dispatch(setUseFeaturesLightRequest({\r\n // countertops: !(bvGroupsResponse[\"countertop\"] && bvGroupsResponse[\"countertop\"].totalFeaturesCount > 8000), //increased for nhance\r\n // cabinets: !(bvGroupsResponse[\"top Cabinet\"] && bvGroupsResponse[\"top Cabinet\"].totalFeaturesCount > 6000),\r\n // }))\r\n // }\r\n this.layout.setDefaultFeatures();\r\n if (qtCategories.length) {\r\n this.layout.setQtCategoriesSubparts(qtCategories); // set QtCategories subParts(wait until defaults are set)\r\n this.loadQtCategoriesFeatures(qtCategories); // load features from feature groups second time!!\r\n // after qtCategories are set (because we need partIdExistInQtCategory logic)\r\n }\r\n\r\n // 2) check what to set next\r\n const {lookIdFromUrl} = getParsedLookUrl();\r\n\r\n const presets = mainResponse.defaults || [];\r\n console.log(\"presets\", presets);\r\n\r\n let loadByTheDefault = null;\r\n let isCartAndUserStatedUpdateNeeded = false;\r\n\r\n let recoverFromTempId = savedTempData && Array.isArray(savedTempData.records);\r\n if (recoverFromTempId) {\r\n console.log(\"recoverFromTempId savedTempData\", savedTempData);\r\n this.loadByTheDefault = savedTempData.records[0].data;\r\n this.loadByTheDefault.alreadyRestored = true;\r\n loadByTheDefault = savedTempData.records[0].data;\r\n await parseJobIdResponse(savedTempData);\r\n }\r\n console.log(\"userIsLoggedIn\", userIsLoggedIn);\r\n\r\n if (!loadByTheDefault) {\r\n loadByTheDefault = lookIdFromUrl ? getDefaultPresetByLook(presets, lookIdFromUrl) : null;\r\n console.log(\"loadByTheDefault by lookIdFromUrl\", loadByTheDefault);\r\n console.log(\"lookIdFromUrl\", lookIdFromUrl);\r\n }\r\n if (!loadByTheDefault) {\r\n loadByTheDefault = presets.find(preset => preset.loadByTheDefault);\r\n console.log(\"loadByTheDefault by mainResponse\", loadByTheDefault);\r\n }\r\n const editJobId = document.kvConfig.jobId && document.kvConfig.jobId > 0;\r\n console.log('editJobId', editJobId);\r\n\r\n const editToken = store.getState().userState.editToken;\r\n console.log('editToken', editToken);\r\n\r\n if (editJobId || editToken) {\r\n //console.log('resetting', document.kvConfig.jobId);\r\n const jobResponse = await getJobIdPreset(document.kvConfig.jobId, editToken);\r\n if (jobResponse && jobResponse.data && !jobResponse.data.error) {\r\n if (Array.isArray(jobResponse.data.records) && jobResponse.data.records.length) {\r\n this.loadByTheDefault = jobResponse.data.records[0].data;\r\n if (this.loadByTheDefault && this.loadByTheDefault.bvStateVersion) { // for old quotes we are keeping old create cart list logic\r\n this.loadByTheDefault.alreadyRestored = true;\r\n }\r\n }\r\n await parseJobIdResponse(jobResponse.data);\r\n if (loadByTheDefault && isNewlyCreatedJob(jobResponse.data)) {\r\n await this.setFirstPreset(loadByTheDefault, layoutTypes);\r\n await updateCurrentQuote(0);\r\n }\r\n } else if (loadByTheDefault) {\r\n await this.setFirstPreset(loadByTheDefault, layoutTypes)\r\n }\r\n if (IS_QKB_UI && !document.kvConfig.visualizerOnly\r\n && (!window.location.href.includes(\"#/\") || !window.location.href.split(\"#/\")[1].length)) {\r\n if (this.props.fabricatorSettings.checkout) {\r\n this.goToCart()\r\n } else {\r\n this.props.toggleBathroomVisualizerOpen(true);\r\n if (!window.location.href.includes(\"visualizer\")) {\r\n hashHistory.push(\"visualizer\");\r\n }\r\n }\r\n }\r\n return true\r\n } else if (loadByTheDefault) {\r\n if (!recoverFromTempId) { // temp id data is recovered in parse response\r\n await this.setFirstPreset(loadByTheDefault, layoutTypes, isCartAndUserStatedUpdateNeeded);\r\n }\r\n // 3) restore share button or save quote click\r\n if (loadByTheDefault.returnAction) {\r\n this.needToSaveQuote = false;\r\n if (!userIsLoggedIn) {\r\n console.info(`Sorry, can't share to ${loadByTheDefault.returnAction}, the user is not logged in, so the quote can not be saved.`);\r\n return\r\n }\r\n if (loadByTheDefault.returnAction === GROHE_ON_OPEN_ACTION.saveQuote) {\r\n setTimeout(() => {$(\"button[data-id='save-button']\").trigger('click')}, 0);\r\n } else if ([\r\n GROHE_ON_OPEN_ACTION.shareFacebook,\r\n GROHE_ON_OPEN_ACTION.sharePinterest,\r\n GROHE_ON_OPEN_ACTION.shareTwitter].some(action => loadByTheDefault.returnAction === action)) {\r\n setTimeout(() => {\r\n const {shareUrl} = store.getState().serverState;\r\n saveQuoteAndShare(loadByTheDefault.returnAction, shareUrl);\r\n }, 0);\r\n }\r\n }\r\n }\r\n\r\n }\r\n\r\n setFirstPreset = async (roomPreset, layoutTypes, isCartAndUserStatedUpdateNeeded= false) => {\r\n if (!layoutTypes || layoutTypes[roomPreset.layout_type]) {\r\n // this.setNewBvState(roomPreset, true);\r\n console.log(\"roomPreset\", roomPreset);\r\n const layout_type = +roomPreset.layout_type;\r\n const needToChangeLayout = (layout_type || layout_type === 0) && (layout_type !== +this.layout.type);\r\n if (needToChangeLayout) {\r\n await this.changeLayout(layout_type, true)\r\n }\r\n if (this.props.setFirstLoadedPreset) {\r\n this.props.setFirstLoadedPreset(roomPreset.id);\r\n }\r\n await this.layout.setItemsFromBvState(\r\n roomPreset, isCartAndUserStatedUpdateNeeded, (bvState) => bvState, true\r\n )\r\n }\r\n }\r\n\r\n getQtCategoriesCommon = () => {\r\n return (this.props.qtCategoriesRequested && this.props.qtCategoriesRequested.includes(this.layout.visualizerType))\r\n ? Promise.resolve([])\r\n : getQtCategories(this.layout.getCurrentLayoutAbbreviation())\r\n }\r\n\r\n setNewBvState = (bvState, firstLoad = false) => {\r\n this.layout.initialized = false;\r\n if (!firstLoad) {\r\n loaderEnable();\r\n }\r\n this.layout.setActiveFeaturesFromObject(bvState, false, false, true, true);\r\n if (!firstLoad) {\r\n this.handleRefresh();\r\n loaderDisable();\r\n }\r\n };\r\n\r\n resetEverything = () => {\r\n this.layout.resetEverything();\r\n if (this.navBar && this.navBar.resetWizardSteps) {\r\n this.navBar.resetWizardSteps()\r\n }\r\n this.handleRefresh();\r\n };\r\n\r\n goToCart = () => {\r\n this.props.toggleBathroomVisualizerOpen(false);\r\n this.props.setCameFromPage('visualizer');\r\n if (!window.location.href.includes('shoppingcart')) {\r\n hashHistory.push('shoppingcart');\r\n }\r\n };\r\n\r\n onBvLoad = () => {\r\n this.props.setCanvasId(this.state.canvasId);\r\n if (IS_QKB_UI && document.kvConfig.visualizerOnly) {\r\n this.props.toggleBathroomVisualizerOpen(true);\r\n if (!window.location.href.includes(\"visualizer\")) {\r\n hashHistory.push(\"visualizer\");\r\n }\r\n } else {\r\n const layoutParts = this.layout.getFeatures()\r\n .filter(parentGroup => parentGroup.categoryEnabled)\r\n .map((parentGroup) => parentGroup.partName);\r\n this.props.setLayoutDataParts(layoutParts);\r\n this.props.setDefaultSelectionGroup(layoutParts[0]);\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS);\r\n }\r\n if (IS_QKB_UI && !(document.kvConfig.jobId && document.kvConfig.jobId > 0) && !Config.isVisualizerManagement()) {\r\n this.askToRestore(this.layout.localStorageKey);\r\n }\r\n };\r\n\r\n checkShareUrl = async () => {\r\n let design = new URLSearchParams(window.location.search).get(\"design\");\r\n if (design && (design[design.length - 1] === \"/\")) {\r\n design = design.slice(0, -1);\r\n }\r\n if (design) {\r\n const jobResponse = await getJobIdPreset(design);\r\n console.log(\"jobResponse for share URL design #\" + design, jobResponse);\r\n if (jobResponse && jobResponse.data && Array.isArray(jobResponse.data.records) && jobResponse.data.records.length) {\r\n this.loadByTheDefault = jobResponse.data.records[0].data;\r\n await parseJobIdResponse(jobResponse.data, true);\r\n }\r\n }\r\n };\r\n\r\n handleRefresh = () => {\r\n this.forceUpdate();\r\n };\r\n\r\n renderGreenLayerByZindex = (zIndex) => {\r\n this.imageCanvas.renderGreenLayerByZindex(zIndex)\r\n };\r\n\r\n setHoveredLayer = (event) => {\r\n this.imageCanvas.setHoveredLayer(event)\r\n };\r\n\r\n setCanvasClass = (canvasClass, removeAllClasses) => {\r\n if (this.imageCanvas) {\r\n this.imageCanvas.imageCanvasScroll(canvasClass, removeAllClasses, this.layout.type, this.layout.scene);\r\n }\r\n };\r\n\r\n changeMessageBoxState = (newMessageBoxState) => {\r\n this.setState({\r\n messageBoxState: {...this.state.messageBoxState, ...newMessageBoxState}\r\n })\r\n };\r\n\r\n setActiveFeature = (activeFeature) => { // this is needed for lock screen. we can't get rid of that\r\n this.setState({\r\n activeFeature\r\n })\r\n };\r\n\r\n setDemoPointClicked = () => {\r\n this.setState({\r\n demoPointClicked: true\r\n })\r\n };\r\n\r\n loadQtCategoriesFeatures = (qtCategories) => {\r\n const featureGroupsWithoutFeatures = this.layout.loadFeatureGroupFeatures(qtCategories);\r\n // console.log(\"featureGroupsWithoutFeatures\", featureGroupsWithoutFeatures);\r\n const {wizardList, wizardIsActive} = store.getState().wizardState;\r\n if (featureGroupsWithoutFeatures.length && !IS_LIXIL_UI && !showWizardInsteadOfQT(wizardList, wizardIsActive)) {\r\n if (this.layout.isNewLayout) {\r\n const toRequestFeatureGroups = featureGroupsWithoutFeatures.filter(subPart => !subPart.part.nextFeaturesPageToLoadArray);\r\n // prevent requesting countertops and backsplashes since the preset is not applied yet!\r\n Promise.all(toRequestFeatureGroups.map(subPart => {\r\n return getAdditionalFeaturesOnScroll(subPart.part, true)\r\n })).then(() => {\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS)\r\n })\r\n } else featureGroupsWithoutFeatures.forEach(sPart => {\r\n this.checkIfAllFeaturesReceived(sPart, null, () => {\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS);\r\n }, false)\r\n })\r\n }\r\n };\r\n\r\n finishLoading = async () => {\r\n store.dispatch(setShopPageLoaded(true)); // lixil ui don't do any requests on the shop page\r\n store.dispatch(setAllowRouting(true)); // lixil ui enable routing\r\n await this.getContractSignDocument(); // no need for now, we are keeping existing structure (first save, then - contract)\r\n await this.getAssignQuoteCustomersAndEmployees(); // no need for now, we are keeping existing structure (first save, then - contract)\r\n\r\n if (IS_LOOK_JOURNEY) {\r\n let loadByTheDefault = this.loadByTheDefault && this.loadByTheDefault.id === this.props.activePreset ? this.loadByTheDefault : null\r\n if (!loadByTheDefault || !loadByTheDefault.alreadyRestored) {\r\n setTimeout(() => {\r\n const {qtActiveCategory} = store.getState().qtState;\r\n const cartItems = createCartList(qtActiveCategory, loadByTheDefault);\r\n if (cartItems.length) {\r\n store.dispatch(addToCart(cartItems))\r\n }\r\n }, 1000) // is needed to finish render routing first (to create cart list from already selected features)\r\n }\r\n }\r\n\r\n if (this.props.initialFlowStep === 3) {\r\n this.changeLayout(this.props.initialFlowRoomLayout);\r\n this.tryToSetSelectedRoom();\r\n } else {\r\n console.log('initialized', this.layout);\r\n this.layout.initialized = true;\r\n this.handleRefresh();\r\n if (!this.props.bvOpened || IS_LIXIL_UI || !this.layout.getLayers().length) {\r\n loaderDisable();\r\n }\r\n }\r\n\r\n // Get all elements with the specified class \"removeOnLoad\" which are elements to be removed once the tool is loaded to a point where it can display the tool, and remove them\r\n const elements = document.getElementsByClassName(\"removeOnLoad\");\r\n console.log('remove .removeOnLoad classed elements');\r\n for (let i = 0; i < elements.length; i++) {\r\n window.setTimeout(() => {\r\n console.log(\"removed\", elements[i]);\r\n elements[i].remove()\r\n }, 5000); //delay 5 seconds to allow time for the canvas to render first layer\r\n }\r\n\r\n if (this.props.visualizersLoaded.includes(this.layout.visualizerType)) {\r\n this.setSubscribers();\r\n return false\r\n }\r\n this.setIframeMessaging();\r\n this.props.addVisualizersLoaded(this.layout.visualizerType);\r\n if (this.needToSaveQuote || window.location.href.includes(\"saveOnLoad=true\")) {\r\n setTimeout(() => {\r\n saveQuote({submit: true, showReceipt: false})\r\n .then((saveJobResponse) => {\r\n if (this.props.updateCanvasCount) {\r\n this.props.updateCanvasCount(); // this is fixing the bug on mobile, after return from Grohe Register page the canvas is empty(white)\r\n }\r\n if (window.location.href.includes(\"saveOnLoad=true\") && window.parent) {\r\n window.parent.postMessage({\r\n action: VISUALIZER_MANAGEMENT_ACTIONS.visualizerIsSaved,\r\n saveJobResponse,\r\n }, \"*\");\r\n }\r\n });\r\n }, 0)\r\n }\r\n setTimeout(() => {\r\n if (!this.layout.allDbFeatures.length) {\r\n loaderDisable();\r\n renderErrorPopup(\"No Features Available\");\r\n }\r\n }, 1000)\r\n if (IS_LOOK_JOURNEY && (!document.kvConfig.isBackend || !getLocalStorageItem(LOCAL_STORAGE_KEYS.introVisited))\r\n && this.layout.isNewLayout && !document.kvConfig.jobId) { // always for client mode\r\n store.dispatch(setLookOverlayOpened(LOOK_OVERLAYS.intro));\r\n }\r\n };\r\n\r\n getContractSignDocument = async () => {\r\n\r\n const contractsList = await getContracts(); // set empty array to show sign route\r\n\r\n if (IS_OFFLINE_MODE && shouldUseContractSigning(this.props.fabricatorSettings, null, true)) {\r\n await getOfflineReceiptImages(); // cache images from the receipt\r\n await setContractBlobs(contractsList, 0, true);\r\n // const documentResult = await JsonApi.getDocumentForFabricator();\r\n // if (documentResult && documentResult.data && documentResult.data.base64PDF) {\r\n // const responseFetch = await fetch(\"data:application/pdf;base64,\" + documentResult.data.base64PDF);\r\n // const blob = await responseFetch.blob();\r\n // // console.log(\"responseFetch\", blob);\r\n // const jobDocumentUrl = URL.createObjectURL(blob);\r\n // // console.log(\"createdBlobDocument\", jobDocumentUrl);\r\n // store.dispatch(setContractBlob(jobDocumentUrl));\r\n // }\r\n }\r\n }\r\n\r\n getAssignQuoteCustomersAndEmployees = async () => {\r\n if (IS_OFFLINE_MODE && document.kvConfig.isBackend && !document.kvConfig.visualizerOnly) {\r\n const custAndEmpResponse = await JsonApi.getCustomersAndEmployees();\r\n if (custAndEmpResponse && custAndEmpResponse.data && (custAndEmpResponse.data.clients || custAndEmpResponse.data.employees)) {\r\n store.dispatch(setAssignQuoteOfflineData({\r\n assignQuoteOfflineCustomers: (custAndEmpResponse.data.clients || []).filter(client => client.fullName && client.email),\r\n assignQuoteOfflineEmployees: (custAndEmpResponse.data.employees || []).filter(employee => employee.fullName),\r\n }));\r\n }\r\n }\r\n }\r\n\r\n tryToSetSelectedRoom = () => {\r\n const roomChosen = store.getState().initialFlowState.initialFlowRoom;\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n if (this.layout.qtCategories && roomChosen) {\r\n this.layout.qtCategories.forEach((qtCategory => {\r\n if (qtCategory.subParts) {\r\n qtCategory.subParts.forEach((subPart) => {\r\n if (subPart.part.partName === \"Room\") {\r\n if (subPart.part.features) {\r\n const selectedRoomFeature = subPart.part.features.find(feature => feature.partName === roomChosen);\r\n if (selectedRoomFeature) {\r\n subPart.part.activeFeature = selectedRoomFeature;\r\n subPart.part.firstClick[activeQuoteIndex] = true;\r\n }\r\n }\r\n }\r\n })\r\n }\r\n }))\r\n }\r\n };\r\n\r\n askToRestore = (localStorageKey) => {\r\n try {\r\n const bvState = JSON.parse(window.localStorage.getItem(localStorageKey));\r\n if (bvState) {\r\n this.changeMessageBoxState({\r\n visible: true,\r\n message: \"messageBox.restoreSessionTitle\",\r\n buttons: [{\r\n text: \"messageBox.buttonNo\",\r\n color: \"blue\",\r\n click: () => {\r\n this.changeMessageBoxState({visible:false});\r\n window.localStorage.removeItem(localStorageKey);\r\n }\r\n },{\r\n text: \"messageBox.buttonYes\",\r\n color: \"green\",\r\n click: this.applyStoredItems\r\n }]\r\n });\r\n }\r\n } catch (ex) { console.log(\"localStorage exception\", ex); }\r\n };\r\n\r\n checkToShowTutorial = () => {\r\n return (this.props.bvOpened || this.props.bvVisited) && this.props.visualizerTutorialIsOpened\r\n && this.layout.initialized && !this.props.visualizerTutorialFinished && this.props.cookieAccepted\r\n && !this.state.messageBoxState.visible;\r\n }\r\n\r\n}\r\n","import React from 'react';\r\nimport $ from \"jquery\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {\r\n setMaterialsTutorialFinished,\r\n setVisualizerTutorialFinished, setVisualizerTutorialStep,\r\n showMaterialsTutorial,\r\n showVisualizerTutorial\r\n} from \"../../actions/tutorialFunctions\";\r\nimport Tutorial from \"./tutorial\";\r\n// import ActionTypes from \"../../misc/actionTypes\";\r\n// import {ContentType} from \"../visComponents/constants\";\r\n\r\nclass VisualizerTutorial extends Tutorial {\r\n\r\n static propTypes = {\r\n isMobile: PropTypes.bool.isRequired\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n ringStyles: {\r\n left: 0,\r\n top: 0,\r\n }\r\n };\r\n }\r\n\r\n componentDidMount = () => {\r\n let nextStep = this.props.visualizerTutorialStep;\r\n if (document.kvConfig.visualizerOnly && !this.props.visualizerTutorialStep) {\r\n this.props.setVisualizerTutorialStep(1);\r\n nextStep = 1;\r\n } else if (nextStep === 2 && !this.props.isMobile) {\r\n this.props.setVisualizerTutorialStep(3);\r\n nextStep = 3;\r\n }\r\n if (nextStep === 3) {\r\n if (this.props.fabricatorSettings.enableSharing) {\r\n $(\".tutorial-overlay--visualizer\").fadeIn(300);\r\n this.showTutorialStep(nextStep);\r\n } else {\r\n this.exitTutorial(true);\r\n }\r\n } else {\r\n $(\".tutorial-overlay--visualizer\").fadeIn(300);\r\n this.showTutorialStep(nextStep);\r\n }\r\n };\r\n\r\n showTutorialStep = (nextStep = this.props.visualizerTutorialStep) => {\r\n switch (nextStep) {\r\n case 0: {\r\n this.scrollAndHighLightRing(\".mainbuttons .mobilebutton--back-to-quote\");\r\n break;\r\n }\r\n case 1: {\r\n if (this.props.isMobile) {\r\n this.scrollAndHighLightRing(\".mainbuttons .mobilebutton--design\", 0);\r\n } else {\r\n $(\"html, body\").animate({scrollTop: 0}, 500, () => {\r\n const roomLayoutsOrIdeas = this.getRoomLayoutsOrIdeasStepLogic();\r\n if (roomLayoutsOrIdeas.selector) {\r\n this.changeHighlightRingPosition(roomLayoutsOrIdeas.selector);\r\n }\r\n $(\".tutorial-step\").fadeIn(300)\r\n });\r\n }\r\n break;\r\n }\r\n case 3: {\r\n // if (this.props.isMobile) {\r\n // $(document).trigger(ActionTypes.OPEN_MOBILE_NAVIGATION); // open navigation\r\n // $(document).trigger(ActionTypes.CHANGE_MOBILE_MENU_CONTENT_TYPE, [ContentType.Layout]); // set navigation type\r\n // } else {\r\n // this.scrollAndHighLightRing(\".mainbuttons .mobilebutton--share\");\r\n // }\r\n this.scrollAndHighLightRing(\".mainbuttons .mobilebutton--share\");\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n scrollAndHighLightRing = (selector, scrollTop = document.body.scrollHeight) => {\r\n $(\"html, body\").animate({scrollTop}, 500, () => {\r\n this.changeHighlightRingPosition(selector);\r\n $(\".tutorial-step__ring, .tutorial-step\").fadeIn(300, () => {\r\n if (this.props.isMobile) {\r\n setTimeout(() => {\r\n this.changeHighlightRingPosition(selector);\r\n }, 300)\r\n }\r\n })\r\n });\r\n };\r\n\r\n handleNextStepClick = () => {\r\n const nextStep = this.props.visualizerTutorialStep + 1;\r\n this.props.setVisualizerTutorialStep(nextStep);\r\n switch (nextStep) {\r\n case 1:\r\n this.exitTutorial();\r\n break;\r\n case 2: {\r\n if (this.props.isMobile) {\r\n setTimeout(() => {\r\n this.changeHighlightRingPosition(\".des .mobilebutton--layout\");\r\n }, 500)\r\n } else {\r\n this.exitTutorial();\r\n }\r\n break;\r\n }\r\n case 3: {\r\n if (this.props.isMobile) {\r\n this.changeHighlightRingPosition(\".mainbuttons .mobilebutton--share\");\r\n } else {\r\n this.exitTutorial(true);\r\n }\r\n break;\r\n }\r\n }\r\n };\r\n\r\n exitTutorial = (forever) => {\r\n $(\".tutorial-overlay--visualizer\").fadeOut(300, () => {\r\n this.props.showVisualizerTutorial(false);\r\n if (forever) {\r\n this.props.setMaterialsTutorialFinished(true);\r\n this.props.setVisualizerTutorialFinished(true);\r\n try {\r\n window.localStorage.setItem(\"materials_tutorial_finished\", true);\r\n window.localStorage.setItem(\"visualizer_tutorial_finished\", true);\r\n } catch (ex) { console.log(\"localStorage exception\", ex); }\r\n }\r\n });\r\n };\r\n\r\n getHighLightButton = () => {\r\n switch (this.props.visualizerTutorialStep) {\r\n case 0: {\r\n return (\r\n \r\n )\r\n }\r\n case 1: {\r\n if (this.props.isMobile) {\r\n return (\r\n \r\n )\r\n }\r\n return this.getRoomLayoutsOrIdeasStepLogic().buttonComponent\r\n }\r\n case 2: {\r\n return (this.props.isMobile) ? (\r\n \r\n ) : null\r\n }\r\n case 3: {\r\n return (\r\n \r\n )\r\n }\r\n default:\r\n return null\r\n }\r\n };\r\n\r\n getRoomLayoutsOrIdeasStepLogic = () => {\r\n const existingRoomLayout = document.querySelector(\".tab.tab--room-layout\");\r\n if (existingRoomLayout) {\r\n return {\r\n selector: \".nav-wrapper__tabs .tab.tab--room-layout\",\r\n buttonComponent: (\r\n
    \r\n \r\n \r\n \r\n
    \r\n ),\r\n mainTranslate: \"roomLayout\",\r\n }\r\n }\r\n const existingRoomIdeas = document.querySelector(\".tab.tab--room-ideas\");\r\n if (existingRoomIdeas) {\r\n return {\r\n selector: \".nav-wrapper__tabs .tab.tab--room-ideas\",\r\n buttonComponent: (\r\n
    \r\n \r\n \r\n \r\n
    \r\n ),\r\n mainTranslate: \"roomIdeas\",\r\n }\r\n }\r\n return {\r\n selector: \"\",\r\n mainTranslate: null,\r\n buttonComponent: null\r\n }\r\n }\r\n\r\n render() {\r\n const ringStyles = this.state.ringStyles;\r\n const texts = (this.props.isMobile) ? \"mobile\" : \"desktop\";\r\n const highlightButton = this.getHighLightButton();\r\n const mainTextId = ((this.props.visualizerTutorialStep === 1) && !this.props.isMobile\r\n && this.getRoomLayoutsOrIdeasStepLogic().mainTranslate === \"roomIdeas\")\r\n ? `tutorials.visualizerPage.${texts}.step${this.props.visualizerTutorialStep}b`\r\n : `tutorials.visualizerPage.${texts}.step${this.props.visualizerTutorialStep}`;\r\n const showText = !(this.props.visualizerTutorialStep === 2 && !this.props.isMobile);\r\n const showNextButton = this.props.visualizerTutorialStep < 3 && showText;\r\n return (\r\n
    \r\n
    \r\n
    \r\n

    \r\n {showText ? : null}\r\n

    \r\n
    \r\n {showText ? (\r\n \r\n ) : null}\r\n {showNextButton ? (\r\n \r\n ) : null}\r\n
    \r\n
    \r\n \r\n {highlightButton ? (\r\n
    \r\n {highlightButton}\r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n )\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {settings} = store.fabricatorState;\r\n return {\r\n windowWidth: store.serverState.windowWidth,\r\n visualizerTutorialStep: store.tutorialState.visualizerTutorialStep,\r\n fabricatorSettings: settings,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n showMaterialsTutorial,\r\n setMaterialsTutorialFinished,\r\n showVisualizerTutorial,\r\n setVisualizerTutorialFinished,\r\n setVisualizerTutorialStep\r\n})(VisualizerTutorial);\r\n","import React from \"react\";\r\nimport {FormattedHTMLMessage} from \"react-intl\";\r\nimport {connect} from \"react-redux\";\r\n\r\nconst Copyright = (props) => {\r\n\r\n const {fabricatorData} = props;\r\n const date = new Date();\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(Copyright)\r\n","import {pdf} from '@react-pdf/renderer';\r\nimport PrintDocument from \"../bvcomponents/popups/printPopup/printDocument\";\r\n\r\nimport store from './../store';\r\nimport * as types from \"./actionTypes\";\r\nimport {convertImgToBase64URL, THUMBNAIL_SIZES} from \"../misc/utils\";\r\nimport {getFabricatorLogo} from \"../misc/fabricatorHardcode\";\r\nimport {featureThumbnailUrl} from \"../misc/helpers\";\r\nimport {WIZARD_GROUP_TYPES} from \"../interfaces/wizardItemInterface\";\r\nimport {baseNewImagesPath} from \"../bvcomponents/assets\";\r\n\r\nlet printLogo = \"\";\r\nlet notFoundImage = \"\";\r\n\r\nexport const getCurrentReceipt = async (assignQuotePopupNewCustomer, newEmployeeSelected, onRender, isContractSign) => {\r\n\r\n const {userState, serverState, fabricatorState, cartState, quotesState, priceWorksheetState,\r\n filterState, assignQuoteState, wizardState, sqftSlabState, printState} = store.getState();\r\n\r\n const {assignQuotePopupCustomer, assignQuotePopupEmployee} = assignQuoteState;\r\n\r\n printLogo = printLogo || await convertImgToBase64URL(getFabricatorLogo(fabricatorState));\r\n let cartItemsThumbnails = {};\r\n if (fabricatorState.receiptSettings && fabricatorState.receiptSettings.showThumbnailsAndDescriptions) {\r\n cartItemsThumbnails = await getCartItemThumbnails(cartState.cartItems, wizardState);\r\n }\r\n\r\n return pdf(PrintDocument({\r\n fabricatorData: fabricatorState,\r\n userInfo: userState.userInfo,\r\n quotes: quotesState.quotes,\r\n cartItems: cartState.cartItems,\r\n priceWorksheetState,\r\n assignQuotePopupCustomer: assignQuotePopupNewCustomer || assignQuotePopupCustomer,\r\n employeeSelected: newEmployeeSelected || assignQuotePopupEmployee,\r\n locale: serverState.language,\r\n filterGroups: filterState.filterGroups,\r\n activeTheme: serverState.activeTheme,\r\n jobId: serverState.jobId,\r\n printLogo,\r\n wizardState,\r\n sqftSlabState,\r\n cartItemsThumbnails,\r\n printState,\r\n onRender,\r\n isContractSign,\r\n }))\r\n}\r\n\r\n// export const getCurrentReceiptPages = async (withReceiptUrl) => {\r\n// try {\r\n// const pdfReceipt = await getCurrentReceipt();\r\n// if (pdfReceipt && pdfReceipt.container && pdfReceipt.container.render) {\r\n// await pdfReceipt.container.render();\r\n// if (pdfReceipt.container.document && pdfReceipt.container.document.getLayoutData) {\r\n// const layoutData = pdfReceipt.container.document.getLayoutData();\r\n// if (layoutData && Array.isArray(layoutData.children) && layoutData.children.length) {\r\n// if (withReceiptUrl) {\r\n// const receipt = await pdfReceipt.toBlob();\r\n// const receiptUrl = URL.createObjectURL(receipt);\r\n// return {receiptUrl, receiptPages: layoutData.children.length};\r\n// }\r\n// return layoutData.children.length\r\n// }\r\n// }\r\n// }\r\n// if (withReceiptUrl) {\r\n// return {receiptUrl: \"\", receiptPages: 0};\r\n// }\r\n// return 0\r\n// } catch (e) {\r\n// console.log(\"error rendering pdf receipt\", e);\r\n// if (withReceiptUrl) {\r\n// return {receiptUrl: \"\", receiptPages: 0};\r\n// }\r\n// return 0\r\n// }\r\n// }\r\n\r\nexport const getCurrentReceiptPages = async (withReceiptUrl) => {\r\n try {\r\n let imagesPromise = new Promise(async (resolve) => {\r\n const onRender = (onRenObj) => {\r\n // console.log(\"onRender!!\", onRenObj);\r\n const receiptLayout = onRenObj ? onRenObj._INTERNAL__LAYOUT__DATA_ : null;\r\n const receiptPages = receiptLayout && receiptLayout.children ? receiptLayout.children.length : 1;\r\n const receiptUrl = URL.createObjectURL(onRenObj.blob);\r\n\r\n resolve({receiptUrl, receiptLayout, receiptPages})\r\n };\r\n const pdfReceipt2 = await getCurrentReceipt(null, null, onRender, true)\r\n await pdfReceipt2.toBlob();\r\n })\r\n if (withReceiptUrl) {\r\n return imagesPromise.then(response => response)\r\n }\r\n return 0\r\n } catch (e) {\r\n console.log(\"error rendering pdf receipt\", e);\r\n if (withReceiptUrl) {\r\n return {receiptUrl: \"\", receiptPages: 0};\r\n }\r\n return 0\r\n }\r\n}\r\n\r\nexport const getCartItemThumbnails = async (cartItems, wizardState) => {\r\n let cartItemsThumbnails = {};\r\n for (const cartItem of cartItems) {\r\n try {\r\n const thumbnailUrl = featureThumbnailUrl(cartItem.cartFeature, THUMBNAIL_SIZES.small);\r\n cartItemsThumbnails[cartItem.id] = await convertImgToBase64URL(thumbnailUrl);\r\n if (!cartItemsThumbnails[cartItem.id]) {\r\n if (!notFoundImage) {\r\n notFoundImage = await convertImgToBase64URL(`${baseNewImagesPath}images/image-not-found.png`);\r\n }\r\n cartItemsThumbnails[cartItem.id] = notFoundImage\r\n }\r\n } catch (e) {\r\n cartItemsThumbnails[cartItem.id] = `${baseNewImagesPath}images/image-not-found.png`;\r\n }\r\n }\r\n for (const wizard of wizardState.allWizardsValues) {\r\n for (const key of Object.keys(wizard.wizardSelectedValues)) {\r\n if (wizard.wizardSelectedValues[key].wizardGroup\r\n && (wizard.wizardSelectedValues[key].wizardGroup.nodeType === WIZARD_GROUP_TYPES.custom)\r\n && wizard.wizardSelectedValues[key].wizardGroup.customImageUrl) {\r\n try {\r\n cartItemsThumbnails[wizard.wizardSelectedValues[key].wizardGroup.id] = await convertImgToBase64URL(\r\n `https://corsproxy.io/?url=${encodeURIComponent(wizard.wizardSelectedValues[key].wizardGroup.customImageUrl)}`\r\n );\r\n if (!cartItemsThumbnails[wizard.wizardSelectedValues[key].wizardGroup.id]) {\r\n cartItemsThumbnails[wizard.wizardSelectedValues[key].wizardGroup.id] = await convertImgToBase64URL(\r\n `https://proxy.corsfix.com/?${wizard.wizardSelectedValues[key].wizardGroup.customImageUrl}`\r\n );\r\n }\r\n if (!cartItemsThumbnails[wizard.wizardSelectedValues[key].wizardGroup.id]) {\r\n cartItemsThumbnails[wizard.wizardSelectedValues[key].wizardGroup.id] = await convertImgToBase64URL(\r\n wizard.wizardSelectedValues[key].wizardGroup.customImageUrl\r\n );\r\n }\r\n if (!cartItemsThumbnails[wizard.wizardSelectedValues[key].wizardGroup.id]) {\r\n cartItemsThumbnails[wizard.wizardSelectedValues[key].wizardGroup.id] = await convertImgToBase64URL(\r\n wizard.wizardSelectedValues[key].wizardGroup.customImageUrl + \"?not-from-cache-please\"\r\n );\r\n }\r\n if (!cartItemsThumbnails[wizard.wizardSelectedValues[key].wizardGroup.id]) {\r\n if (!notFoundImage) {\r\n notFoundImage = await convertImgToBase64URL(`${baseNewImagesPath}images/image-not-found.png`);\r\n }\r\n cartItemsThumbnails[wizard.wizardSelectedValues[key].wizardGroup.id] = notFoundImage\r\n }\r\n } catch (e) {\r\n cartItemsThumbnails[wizard.wizardSelectedValues[key].wizardGroup.id] = `${baseNewImagesPath}images/image-not-found.png`;\r\n }\r\n }\r\n }\r\n }\r\n return cartItemsThumbnails\r\n}\r\n\r\nexport const getOfflineReceiptImages = async () => {\r\n const {fabricatorState} = store.getState();\r\n notFoundImage = await convertImgToBase64URL(`${baseNewImagesPath}images/image-not-found.png`)\r\n printLogo = await convertImgToBase64URL(getFabricatorLogo(fabricatorState));\r\n await getCurrentReceiptPages(true);\r\n return true\r\n}\r\n\r\nexport const printReceipt = async () => {\r\n const pdfReceipt = await getCurrentReceipt();\r\n const receipt = await pdfReceipt.toBlob();\r\n const fileURL = URL.createObjectURL(receipt);\r\n window.open(fileURL, \"_blank\");\r\n}\r\n\r\nexport const setReceiptUrl = (receiptUrl) => ({\r\n type: types.SET_RECEIPT_URL,\r\n payload: {receiptUrl}\r\n})\r\n\r\nexport const setReceiptSignature = (receiptSignature) => ({\r\n type: types.SET_RECEIPT_SIGNATURE,\r\n payload: {receiptSignature}\r\n})\r\n","//INITIAL FLOW\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const setPaymentInfo = (name, value) => ({\r\n type: types.SET_PAYMENT_INFO,\r\n payload: {name, value}\r\n});\r\n\r\nexport const setCardInfo = (name, value) => ({\r\n type: types.SET_CARD_INFO,\r\n payload: {name, value}\r\n});\r\n\r\nexport const setCardErrors = (cardErrors) => ({\r\n type: types.SET_CARD_ERRORS,\r\n payload: {cardErrors}\r\n});\r\n\r\nexport const setShippingErrors = (shippingErrors) => ({\r\n type: types.SET_SHIPPING_ERRORS,\r\n payload: {shippingErrors}\r\n});\r\n\r\nexport const setShippingInfo = (name, value) => ({\r\n type: types.SET_SHIPPING_INFO,\r\n payload: {name, value}\r\n});\r\n\r\nexport const setBillingInfo = (name, value) => ({\r\n type: types.SET_BILLING_INFO,\r\n payload: {name, value}\r\n});\r\n\r\nexport const restorePaymentInfo = (someValues) => ({\r\n type: types.RESTORE_PAYMENT_INFO,\r\n payload: someValues\r\n});\r\n","import {pnpolyArray} from \"../../../../../lib/pnpoly\";\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport _ from 'lodash';\r\n\r\nimport EventManager from \"../../../store/sqftEventManager\";\r\nimport workspace from \"../../workspace\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport {\r\n distanceToInches,\r\n distanceToMillimeters,\r\n getAngleBetweenTwoPoints, getMidPoint,\r\n isDisabledInPopupWithParents,\r\n measureDistanceToInches,\r\n} from \"../../../../../helpers/sqftHelper\";\r\nimport COLOR_THEMES, {COLOR} from \"../../../store/colorThemes\";\r\nimport {isDisabledInPopupShouldBeHidden} from \"../../../../../constants\";\r\nimport {DIRECTIONS, getLineDirection} from \"../../../../../helpers/shapeHelper\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\nimport {createAdjustableInput} from \"../../../../../helpers/uiHelper\";\r\n\r\nexport default class NumberText {\r\n id = null;\r\n design = {\r\n fontColor: COLOR_THEMES[sqftConfig.activeTheme].primary,\r\n fontFamily: 'playbold',\r\n fontHeight: 16,\r\n isLength: false,\r\n valuePrefix: '',\r\n valuePostfix: '',\r\n shouldRenderFrameBorder: false,\r\n eventsPriority: EventManager.priorities.SEGMENT\r\n };\r\n value = 0;\r\n callback = null;\r\n pos = {\r\n x: 0,\r\n y: 0,\r\n xOffset: 0,\r\n yOffset: 0,\r\n angle: 0,\r\n orientation: DIRECTIONS.EAST,\r\n betweenPoints: {\r\n pointFrom: null,\r\n pointTo: null,\r\n }\r\n };\r\n state = {\r\n isHovered: false,\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n isHidden: true\r\n };\r\n\r\n constructor(value, pos, design, parent = workspace, callback = Function(), isInit = true) {\r\n this.value = value;\r\n Object.assign(this.pos, pos);\r\n Object.assign(this.design, design);\r\n this.parent = parent;\r\n this.callback = callback;\r\n this.id = uuidv4();\r\n\r\n if (isInit) {\r\n this.initEventListeners(design.shouldOnlyRenderText);\r\n }\r\n }\r\n getParent() {\r\n return this.parent\r\n }\r\n\r\n get orientation () {\r\n return this.pos.orientation\r\n }\r\n\r\n initEventListeners(shouldOnlyRenderText) {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render.bind(this),\r\n this,\r\n this.design.eventsPriority\r\n );\r\n if (!shouldOnlyRenderText) {\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n this.onMouseMove,\r\n this,\r\n this.design.eventsPriority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n this.onMouseDown,\r\n this,\r\n this.design.eventsPriority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n this.onMouseUp,\r\n this,\r\n this.design.eventsPriority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_LEAVE,\r\n this.onMouseLeave,\r\n this,\r\n EventManager.priorities.OVERALL\r\n );\r\n }\r\n }\r\n\r\n destroy() {\r\n this.deregisterEvents();\r\n }\r\n\r\n hideEvents() {\r\n if (!this.state.isHidden) {\r\n this.deregisterEvents();\r\n this.state.isHidden = true;\r\n }\r\n }\r\n\r\n revealEvents() {\r\n if (this.state.isHidden) {\r\n this.initEventListeners();\r\n this.state.isHidden = false;\r\n }\r\n }\r\n\r\n deregisterEvents() {\r\n EventManager.removeEvent(this);\r\n }\r\n\r\n reInitEvents() {\r\n this.initEventListeners();\r\n }\r\n\r\n onMouseMove = (mousePos, e) => {\r\n void e;\r\n this.state.isHovered = this.isMouseOverText(mousePos);\r\n\r\n if (this.state.isHovered) {\r\n EventManager.stealCursor();\r\n //todo rotated cursor\r\n EventManager.setCursor(([DIRECTIONS.WEST, DIRECTIONS.EAST].includes(this.pos.orientation)) ? \"text\" : \"text-vertical\", this);\r\n } else {\r\n EventManager.resetCursor(this);\r\n return false;\r\n }\r\n };\r\n\r\n isMouseOverText = (mousePos) => {\r\n return pnpolyArray(this.getTextPointsArea(), mousePos);\r\n };\r\n\r\n getTextPointsArea = () => {\r\n const mText = EventManager.getCtx().measureText(this.design.valuePrefix + this.value + this.design.valuePostfix );\r\n const {x, y} = this.getPos();\r\n\r\n let pointsArray = [];\r\n\r\n if ([DIRECTIONS.WEST, DIRECTIONS.EAST].includes(this.pos.orientation)) {\r\n pointsArray = [\r\n [x - Math.ceil10(mText.width,-2) / 2, y - this.design.fontHeight / 2],\r\n [x + Math.ceil10(mText.width,-2) / 2, y - this.design.fontHeight / 2],\r\n [x + Math.ceil10(mText.width,-2) / 2, y + this.design.fontHeight / 2],\r\n [x - Math.ceil10(mText.width,-2) / 2, y + this.design.fontHeight / 2],\r\n ]\r\n } else if ([DIRECTIONS.NORTH, DIRECTIONS.SOUTH].includes(this.pos.orientation)) {\r\n pointsArray = [\r\n [x - this.design.fontHeight / 2, y - Math.ceil10(mText.width,-2) / 2],\r\n [x + this.design.fontHeight / 2, y - Math.ceil10(mText.width,-2) / 2],\r\n [x + this.design.fontHeight / 2, y + Math.ceil10(mText.width,-2) / 2],\r\n [x - this.design.fontHeight / 2, y + Math.ceil10(mText.width,-2) / 2],\r\n ]\r\n } else {\r\n // todo horizontal\r\n }\r\n\r\n return pointsArray;\r\n };\r\n\r\n onMouseUp = (mousePos, e) => {\r\n void mousePos;\r\n void e;\r\n if (this.state.mouseDown) {\r\n this.state.mouseDown = false;\r\n this.state.mouseDownPosition = null;\r\n }\r\n };\r\n\r\n onMouseDown = (mousePos, e) => {\r\n void mousePos;\r\n void e;\r\n if (this.state.isHovered && !document.querySelector(\".line-input\")) {\r\n window.lineInputFocused = true;\r\n EventManager.stealCursor();\r\n\r\n const maxLength = this.parent.getMaxLength ? this.parent.getMaxLength() : 1000 * sqftConfig.getMeasureMultiplier();\r\n const pos = this.getPos();\r\n const initialValue = this.design.isLength\r\n ? sqftConfig.measureUnit === \"Metric\"\r\n ? measureDistanceToInches(this.value).millimeters\r\n : this.value\r\n : this.value;\r\n\r\n const inputWrapper = createAdjustableInput({\r\n position: pos,\r\n initialValue: initialValue.toString(),\r\n min: 1,\r\n max: maxLength,\r\n orientation: [DIRECTIONS.WEST, DIRECTIONS.EAST].includes(this.pos.orientation) ? \"horizontal\" : \"vertical\",\r\n onChange: this.onInputChange, // Trigger onInputChange when value changes\r\n onClose: () => {\r\n window.lineInputFocused = false;\r\n this.state.isHovered = false;\r\n },\r\n step: 1,\r\n });\r\n\r\n document.querySelector(\".sqft-main-grid\").appendChild(inputWrapper);\r\n // Focus and select input on creation\r\n const input = inputWrapper.querySelector(\".line-input-field\");\r\n input.focus();\r\n }\r\n\r\n return false;\r\n };\r\n\r\n onInputChange = (value) => {\r\n const valueBeforeUpdate = this.value;\r\n this.value = value;\r\n this.callback(value, this, valueBeforeUpdate);\r\n };\r\n\r\n onMouseLeave = () => {\r\n this.state.isHoveringPoint = false;\r\n this.state.mouseDown = false;\r\n this.state.hoveredPoint = null;\r\n this.state.isHoveredOverText = false;\r\n };\r\n\r\n setValue = (value) => {\r\n this.value = value\r\n }\r\n\r\n setPos = (pos) => {\r\n this.pos.x = pos.x\r\n this.pos.y = pos.y\r\n }\r\n\r\n setAngle = (angle) => {\r\n this.pos.angle = angle\r\n }\r\n\r\n setBetweenPoints = (pointFrom, pointTo) => {\r\n this.pos.betweenPoints.pointFrom = pointFrom;\r\n this.pos.betweenPoints.pointTo = pointTo;\r\n }\r\n\r\n getPos = () => {\r\n const parentOffset = this.parent.getOffset() ? this.parent.getOffset() : { x: 0, y: 0 };\r\n const scale = _.clone(sqftConfig.scale);\r\n let angle = this.pos.angle;\r\n\r\n //if this in the NumberText between lines than we override angle\r\n if (this.pos.betweenPoints.pointFrom) {\r\n angle = getAngleBetweenTwoPoints(this.pos.betweenPoints.pointFrom, this.pos.betweenPoints.pointTo);\r\n }\r\n\r\n const angleRad = angle * (Math.PI / 180);\r\n\r\n // calculate offset position according to offset point\r\n const calculatedXOffset = this.pos.xOffset * Math.cos(angleRad) - this.pos.yOffset * Math.sin(angleRad);\r\n const calculatedYOffset = this.pos.xOffset * Math.sin(angleRad) + this.pos.yOffset * Math.cos(angleRad);\r\n\r\n return {\r\n x: this.pos.x * scale + calculatedXOffset + parentOffset.x,\r\n y: this.pos.y * scale + calculatedYOffset + parentOffset.y\r\n }\r\n };\r\n\r\n getValue = (isString, withSuffixes = false) => {\r\n let value = this.value;\r\n if (this.design.isLength) {\r\n value = sqftConfig.measureUnit === \"Metric\"\r\n ? distanceToMillimeters(value)\r\n : distanceToInches(value)\r\n } else if (isString) {\r\n value = value.toString();\r\n }\r\n if (withSuffixes) {\r\n value = this.design.valuePrefix + value.toString() + this.design.valuePostfix;\r\n }\r\n\r\n return value\r\n };\r\n\r\n updateOrientation = () => {\r\n if (this.pos.betweenPoints.pointFrom) {\r\n this.pos.orientation = getLineDirection(this.pos.betweenPoints.pointFrom, this.pos.betweenPoints.pointTo, true);\r\n }\r\n }\r\n\r\n updatePositionBetweenPoints = () => {\r\n if (this.pos.betweenPoints.pointFrom) {\r\n const pointBetweenPoints = getMidPoint(this.pos.betweenPoints.pointFrom, this.pos.betweenPoints.pointTo);\r\n\r\n this.pos.x = pointBetweenPoints.x\r\n this.pos.y = pointBetweenPoints.y\r\n }\r\n }\r\n\r\n render = (ctx) => {\r\n if ((isDisabledInPopupShouldBeHidden() && isDisabledInPopupWithParents(this))\r\n || (this.pos.x === 0 && this.pos.y === 0) // this is for Free Draw. see https://qcquotecountertops.atlassian.net/browse/QCDES-2064\r\n ) {\r\n return\r\n }\r\n\r\n this.updateOrientation();\r\n this.updatePositionBetweenPoints();\r\n if (this.design.shouldRenderFrameBorder) {\r\n this.renderFrameBorder(ctx);\r\n }\r\n this.renderText(ctx);\r\n }\r\n\r\n renderFrameBorder = (ctx) => {\r\n ctx.beginPath();\r\n const pos = this.getPos();\r\n const value = this.getValue(true, true);\r\n const mText = ctx.measureText(value);\r\n let angle = 0;\r\n if (this.pos.betweenPoints.pointFrom) {\r\n angle = getAngleBetweenTwoPoints(this.pos.betweenPoints.pointFrom, this.pos.betweenPoints.pointTo);\r\n //this will help to rotate upside down text\r\n if ([DIRECTIONS.NORTHWEST, DIRECTIONS.SOUTHWEST].includes(this.pos.orientation)) {\r\n angle += 180;\r\n }\r\n }\r\n\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n ctx.lineWidth = 2;\r\n ctx.fillStyle = COLOR.white\r\n\r\n ctx.save();\r\n ctx.translate(\r\n pos.x ,\r\n pos.y\r\n );\r\n ctx.rotate(angle * (Math.PI / 180));\r\n RenderFigures.roundedRect(ctx,\r\n - mText.width / 2, // / sqftConfig.scale * sqftConfig.defaultScale,\r\n - this.design.fontHeight / 1.5,\r\n mText.width * 1.5, /// sqftConfig.scale * sqftConfig.defaultScale,\r\n this.design.fontHeight + 6,\r\n 5,\r\n true,\r\n true\r\n );\r\n\r\n ctx.restore();\r\n ctx.closePath();\r\n }\r\n\r\n renderText = (ctx) => {\r\n const //scale = sqftConfig.scale,\r\n fontHeight = this.design.fontHeight, //getFontsizeSmall(),\r\n font = fontHeight + \"px \" + this.design.fontFamily,\r\n value = this.getValue(true, true),//this.value.toString(),\r\n\r\n mText = ctx.measureText(value),\r\n pos = this.getPos();\r\n let angle = this.pos.angle;\r\n ctx.beginPath();\r\n ctx.font = font;\r\n ctx.textAlign = \"center\";\r\n ctx.fillStyle = this.design.fontColor;\r\n if (this.pos.betweenPoints.pointFrom) {\r\n angle = getAngleBetweenTwoPoints(this.pos.betweenPoints.pointFrom, this.pos.betweenPoints.pointTo);\r\n }\r\n\r\n switch (this.orientation) {\r\n case DIRECTIONS.EAST:\r\n case DIRECTIONS.WEST:\r\n case DIRECTIONS.SOUTH:\r\n case DIRECTIONS.NORTH:\r\n case DIRECTIONS.SOUTHEAST:\r\n case DIRECTIONS.SOUTHWEST:\r\n case DIRECTIONS.NORTHEAST:\r\n case DIRECTIONS.NORTHWEST: {\r\n //this will help to rotate upside down text\r\n if (this.pos.betweenPoints.pointFrom) {\r\n if ([DIRECTIONS.NORTHWEST, DIRECTIONS.SOUTHWEST, DIRECTIONS.WEST].includes(this.pos.orientation)) {\r\n angle += 180;\r\n }\r\n }\r\n\r\n ctx.save();\r\n ctx.translate(pos.x, pos.y);\r\n ctx.rotate(angle * (Math.PI / 180));\r\n ctx.wrapText(value, fontHeight / 2, fontHeight / 3, mText, fontHeight);\r\n ctx.restore();\r\n\r\n //ctx.wrapText(value, pos.x, pos.y, mText, fontHeight);\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n}\r\n","import _ from 'lodash';\r\n\r\nimport EventManager from \"../../store/sqftEventManager\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport workspace from \"../workspace\";\r\nimport {\r\n getBacksplashArea,\r\n getEdgeLength,\r\n getPointField,\r\n isPointInsideShape,\r\n mmToM\r\n} from \"../../../../helpers/sqftHelper\";\r\nimport ShapeHelper, {getEdgeFeatures} from \"../../../../helpers/shapeHelper\";\r\n//import $ from \"jquery\";\r\nimport {\r\n APPLIANCES_THAT_SHOULD_RENDER_MEASUREMENTS_INSIDE_THE_SHAPE,\r\n MOVABLE_IMAGE_TYPES, SIDEBAR_BUTTONS_MENU,\r\n SIDEBAR_SLAB_BUTTONS\r\n} from \"../../../../constants\";\r\nimport store from \"../../../../../../store\";\r\nimport PointV2, {CORE_POINT_LAYOUTS} from \"./pointV2\";\r\nimport RenderMovableImage from \"./imageParts/renderMovableImage\";\r\nimport sqftShape from \"./sqftShape\";\r\nimport ShapeAbsolute from \"./shapeParts/shapeAbsolute\";\r\n//import point from \"./point\";\r\nimport {createImageLinesFromPoints, getImagePoint} from \"../../helpers/movableImageHelper\";\r\nimport workspaceControllers from \"../../store/workspaceControllers\";\r\nimport {hardCodeIsCaesarStone} from \"../../../../../../misc/fabricatorHardcode\";\r\nimport ShapeAutoShuffle from \"./shapeParts/shapeAutoShuffle\";\r\n//import LineImage from \"./imageParts/lineImage\";\r\n\r\nclass MovableImage {\r\n image = null;\r\n initialSize = {\r\n width: 12,\r\n height: 12, // depth in 3d mode\r\n thickness: 12 // height in 3d (this is not visible param for the cabinets)\r\n };\r\n size = {\r\n width: 12,\r\n height: 12,\r\n thickness: 12,\r\n };\r\n hoverColor = \"#6495ED\";\r\n // debugLineColor = \"rgba(0,255,0,0.3)\",\r\n // debugPointColor = \"rgba(0,0,255,0.3)\",\r\n //fillColor = \"rgba(255,255,255,0)\",\r\n attachedTo = null;\r\n type;\r\n part;\r\n shapeRotatable;\r\n shapeType = \"square\";\r\n renderMovableImage = null; //new RenderMovableImage(this);\r\n shapeAutoShuffle = new ShapeAutoShuffle(this);\r\n\r\n constructor(id, priority = null, subType, params) {\r\n this.id = id;\r\n this.priority = priority;\r\n this.subType = subType;\r\n this.pos = { x: 0, y: 0 };\r\n this._state = {\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n mouseDownSize: null,\r\n hovering: false,\r\n isRotatable: false,\r\n minimumHeight: 1,\r\n minimumWidth: 1,\r\n };\r\n this.rotatedDegrees = 0;\r\n this.rotatedDegreesSlab = 0;\r\n this.featureId = id;\r\n this.pricePerArea = 0;\r\n this.isHidden = false;\r\n this.isDisabledInPopup = false;\r\n this.Direction = {\r\n RIGHT: 0,\r\n LEFT: 1\r\n };\r\n this.FlipDirection = {\r\n HORIZONTAL: 0,\r\n VERTICAL: 1\r\n };\r\n this.resizablePoint = null;\r\n this.onClicked = null;\r\n this.shapeAbsolute = new ShapeAbsolute(this); // this is used to snap images\r\n this.params = params\r\n\r\n //this.initEvents();\r\n }\r\n\r\n //private methods\r\n _setFillColor = (red, green, blue, alpha) => {\r\n let fillColor =\r\n \"rgba(\" + red + \", \" + green + \", \" + blue + \", \" + alpha + \")\";\r\n void fillColor;\r\n }\r\n _setImage = (value) => { this.image = value; }\r\n _setAttachedTo = (value) => {\r\n if (value) {\r\n this.attachedTo = value;\r\n }\r\n }\r\n _setHovering = (value) => {\r\n this._state.hovering = value;\r\n return value;\r\n }\r\n _snappedPos = () => {\r\n let scaledGridSize = config.workspace.getScaledGridSize();\r\n\r\n let newX = Math.round(this.pos.x / scaledGridSize) * scaledGridSize;\r\n let newY = Math.round(this.pos.y / scaledGridSize) * scaledGridSize;\r\n return {\r\n x: newX,\r\n y: newY\r\n };\r\n }\r\n\r\n _moveImage = (mousePos) => {\r\n const scale = workspace.getScale();\r\n let xDiff = (this._state.mouseDownPosition.x - mousePos.x) / scale;\r\n let yDiff = (this._state.mouseDownPosition.y - mousePos.y) / scale;\r\n\r\n this.updateSnappedPos();\r\n\r\n this.pos.x -= xDiff;\r\n this._state.mouseDownPosition.x = mousePos.x;\r\n\r\n this.pos.y -= yDiff;\r\n this._state.mouseDownPosition.y = mousePos.y;\r\n };\r\n\r\n resetAbsolutePos = () => {\r\n if (this.params.canSnap) {\r\n this.shapeAbsolute.setAbsolutePos(null); //reset minLength for correct calculations without stacking\r\n this.shapeAbsolute.setSnappedWithShape(null);\r\n this.shapeAbsolute.setSnappedShapeGroup(null);\r\n }\r\n }\r\n\r\n resetState = () => {\r\n this._state.mouseDown = false;\r\n this._state.mouseDownPosition = null;\r\n this._state.mouseDownSize = null;\r\n this._state.hovering = false;\r\n this._state.isRotatable = false;\r\n };\r\n\r\n updateLinesLength = () => {\r\n for (const line of this.getLines()) {\r\n line.updateLineLength();\r\n }\r\n }\r\n\r\n updateSnappedPos = () => {\r\n if (this.params.canSnap) {\r\n this.shapeAbsolute.setAbsolutePos(null); //reset minLength for correct calculations without stacking\r\n this.shapeAbsolute.setSnappedWithShape(null);\r\n this.shapeAbsolute.setSnappedShapeGroup(null);\r\n\r\n //let distancesToWalls = ShapeHelper.getDistancesToWalls(this);\r\n let distancesToShapes = ShapeHelper.getDistancesToShapes(this);\r\n let distancesToImages = ShapeHelper.getDistancesToImages(this);\r\n //console.log(\"distancesToWalls\", distancesToWalls);\r\n //console.log(\"distancesToShapes\", distancesToShapes);\r\n //console.log(\"distancesToImages\", distancesToImages);\r\n\r\n let snapPossibilitiesToShapes = ShapeHelper.getSnappingPossibilities(distancesToShapes);\r\n let snapPossibilitiesToImages = ShapeHelper.getSnappingPossibilities(distancesToImages);\r\n //let snapPossibilitiesToWalls = ShapeHelper.getSnappingPossibilities(distancesToWalls);\r\n //console.log(\"snapPossibilitiesToShapes\", snapPossibilitiesToShapes);\r\n\r\n //walls\r\n // let [absolutePosToWalls, snappedWithWalls] = ShapeHelper.getAbsolutePosFromSnapPossibilities(snapPossibilitiesToWalls, this.pos);\r\n // if (absolutePosToWalls) {\r\n // this.shapeAbsolute.setAbsolutePos(absolutePosToWalls);\r\n // void snappedWithWalls;\r\n // //snappedWithImage.shapeAbsolute.setSnappedWithImage(this);\r\n // }\r\n\r\n //shapes\r\n let [absolutePosToShapes, snappedWithShape] = ShapeHelper.getAbsolutePosFromSnapPossibilities(snapPossibilitiesToShapes, this.pos);\r\n if (absolutePosToShapes) {\r\n this.shapeAbsolute.setAbsolutePos(absolutePosToShapes);\r\n snappedWithShape.shapeAbsolute.setSnappedWithShape(this);\r\n workspaceControllers.snappedShapeGroups.setSameSnappedShapesGroup(this, snappedWithShape);\r\n }\r\n\r\n //images\r\n let [absolutePosToImages, snappedWithImage] = ShapeHelper.getAbsolutePosFromSnapPossibilities(snapPossibilitiesToImages, this.pos);\r\n if (absolutePosToImages) {\r\n this.shapeAbsolute.setAbsolutePos(absolutePosToImages);\r\n workspaceControllers.snappedShapeGroups.setSameSnappedShapesGroup(this, snappedWithImage);\r\n //snappedWithImage.shapeAbsolute.setSnappedWithImage(this);\r\n }\r\n }\r\n }\r\n\r\n _isMouesOverImage = (mousePos) => {\r\n let scale = workspace.getScale();\r\n let offset = workspace.getOffset();\r\n let realPos = {\r\n x: (this.pos.x * scale) + offset.x,\r\n y: (this.pos.y * scale) + offset.y\r\n };\r\n let realSize = {\r\n width: this.size.width * scale,\r\n height: this.size.height * scale\r\n };\r\n let axis = {\r\n x: realPos.x + (realSize.width / 2),\r\n y: realPos.y + (realSize.height / 2)\r\n }\r\n let points = [\r\n this._getRotatedPoint({x: realPos.x, y: realPos.y}, axis, this.rotatedDegrees),\r\n this._getRotatedPoint({x: realPos.x + realSize.width, y: realPos.y}, axis, this.rotatedDegrees),\r\n this._getRotatedPoint({x: realPos.x + realSize.width, y: realPos.y + realSize.height}, axis, this.rotatedDegrees),\r\n this._getRotatedPoint({x: realPos.x, y: realPos.y + realSize.height}, axis, this.rotatedDegrees)\r\n ];\r\n\r\n let maxX = points[0].x;\r\n let maxY = points[0].y;\r\n let minX = points[0].x;\r\n let minY = points[0].y;\r\n\r\n for (let i = 0; i < points.length; i++) {\r\n let point = points[i];\r\n if (maxX < point.x)\r\n maxX = point.x;\r\n if (minX > point.x)\r\n minX = point.x;\r\n if (maxY < point.y)\r\n maxY = point.y;\r\n if (minY > point.y)\r\n minY = point.y;\r\n }\r\n\r\n const isHovering = mousePos.x > minX && mousePos.y > minY && mousePos.x < maxX && mousePos.y < maxY;\r\n this._setHovering(isHovering);\r\n\r\n return isHovering;\r\n };\r\n\r\n _getRotatedPoint(point, around, angle) {\r\n let s = Math.sin(angle);\r\n let c = Math.cos(angle);\r\n point.x -= around.x;\r\n point.y -= around.y;\r\n\r\n let newPoint = {\r\n x: point.x * c - point.y * s,\r\n y: point.x * s + point.y * c\r\n };\r\n\r\n return {\r\n x: newPoint.x + around.x,\r\n y: newPoint.y + around.y\r\n };\r\n }\r\n\r\n //private event handles\r\n _onMouseMove(mousePos, e) {\r\n if (e.terminate) {\r\n this._setHovering(false);\r\n return false;\r\n }\r\n if (this._isMouesOverImage(mousePos)) {\r\n EventManager.setCursor('move', this)\r\n if (this._state.mouseDown) {\r\n this._moveImage(mousePos);\r\n\r\n return true;\r\n }\r\n }\r\n\r\n //smooth scrolling\r\n if (this._state.mouseDown) {\r\n this._moveImage(mousePos);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n _onMouseUp(mousePos, e) {\r\n void mousePos;\r\n void e;\r\n EventManager.releaseStealLock(this);\r\n if (this._state.mouseDown) {\r\n this.shapeAutoShuffle.handlePlaceShapeOnTheLine();\r\n }\r\n this._state.mouseDown = false;\r\n this._state.mouseDownPosition = null;\r\n this._state.mouseDownSize = null;\r\n }\r\n\r\n _onMouseDown = (mousePos, e) => {\r\n void e;\r\n //if not then handle event with this object\r\n if (this.isHovering()) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n const isShowSlabTool = reduxState.sqftSlabState.isShowSlabTool;\r\n\r\n //Delete this\r\n if (activeButton === SIDEBAR_SLAB_BUTTONS.delete && isShowSlabTool) {\r\n workspace.removeSlabImage(this);\r\n }\r\n\r\n //Move self\r\n if (EventManager.getCursor().indexOf(\"move\") >= 0 || activeButton === SIDEBAR_BUTTONS_MENU.move) {\r\n this._state.mouseDown = true;\r\n this._state.mouseDownPosition = mousePos;\r\n this._state.mouseDownSize = this.getSize();\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n //public methods\r\n setPricePerArea = (val) => { this.pricePerArea = _.clone(val) };\r\n setPosition = (value) => { this.pos = value; }\r\n setId = (id) => { this.id = id };\r\n setFeatureId = (featureId) => { this.featureId = featureId };\r\n getIsRotatable = () => { return this._state.isRotatable };\r\n getState = () => { return this._state };\r\n setIsRotatable = (isRotatable) => { this._state.isRotatable = isRotatable};\r\n setRotationDegrees = (rotationDegrees) => {\r\n this.rotatedDegrees = rotationDegrees\r\n }\r\n getCenter = () => {\r\n return {\r\n x: this.size.width / 2,\r\n y: this.size.height / 2\r\n }\r\n }\r\n getCenterPosition = () => {\r\n const center = this.getCenter();\r\n const position = this.getPosition();\r\n\r\n return {\r\n x: position.x + center.x,\r\n y: position.y + center.y\r\n }\r\n }\r\n\r\n setSize = (value) => {\r\n this.size.width = value.width;\r\n this.size.height = value.height;\r\n }\r\n\r\n setInitialSize = (value) => {\r\n this.initialSize.width = value.width;\r\n this.initialSize.height = value.height;\r\n }\r\n\r\n getPosition = () => {\r\n let absolutePos = this.shapeAbsolute.getAbsolutePosition();\r\n\r\n return absolutePos !== null ? absolutePos : this.pos;\r\n };\r\n\r\n getSnappedPosition = () => { return this._snappedPos(); };\r\n\r\n getPosField = () => {\r\n let position = this.getPosition();\r\n const workspacePos = workspace.getOffset();\r\n const scale = workspace.getScale();\r\n\r\n return {\r\n x: workspacePos.x + ((position.x + (this.size.width / 2)) * scale),\r\n y: workspacePos.y + ((position.y + (this.size.height / 2)) * scale)\r\n }\r\n };\r\n\r\n getOffset = () => {\r\n const scale = config.scale;\r\n const workspacePos = workspace.getOffset();\r\n let _pos = this.getPosition();\r\n if (config.workspace.snapToGrid) {\r\n _pos = this.getSnappedPosition();\r\n }\r\n return {\r\n x: workspacePos.x + (_pos.x * scale),\r\n y: workspacePos.y + (_pos.y * scale)\r\n }\r\n };\r\n\r\n isHovering = () => {\r\n //console.log(\"this._state.hovering\", this._state.hovering);\r\n return this._state.hovering === true;\r\n };\r\n getAttachedTo = () => { return this.attachedTo; };\r\n getImage = () => { return this.image; };\r\n getSize = () => { return this.size; };\r\n getWidth = () => {\r\n return this.getSize().width;\r\n };\r\n getHeight = () => {\r\n return this.getSize().height;\r\n };\r\n getThickness = () => { return this.getSize().thickness; };\r\n getRotation = () => { return this.rotatedDegrees; };\r\n export = () => {\r\n let linesData = [];\r\n const Lines = this.getLines();\r\n for (const lineIndex in Lines) {\r\n if (Lines.hasOwnProperty(lineIndex)) {\r\n linesData.push({lineIndex, ...Lines[lineIndex].exportData()});\r\n }\r\n }\r\n\r\n let exportData = {\r\n pos: this.pos,\r\n id: this.id,\r\n featureId: this.featureId ? this.featureId : this.image.dataset.id, // this.image.dataset.id old support\r\n image: {\r\n src: this.image.currentSrc || $(this.image).attr('src'),\r\n id: this.image.dataset.id,\r\n name: this.image.dataset.name,\r\n nameMetric: this.image.dataset.nameMetric,\r\n width: this.image.width,\r\n height: this.image.height\r\n },\r\n type: this.type,\r\n subType: this.subType,\r\n part: this.part,\r\n size: this.size,\r\n rotatedDegrees: this.rotatedDegrees,\r\n rotatedDegreesSlab: this.rotatedDegreesSlab,\r\n attachedTo: this.attachedTo ? this.attachedTo.id : null,\r\n attachedToParentId: this.attachedTo\r\n ? this.attachedTo.getParent\r\n ? this.attachedTo.getParent().id\r\n : null\r\n : null,\r\n isDisabledInPopup: this.isDisabledInPopup,\r\n pricePerArea: this.pricePerArea,\r\n priority: this.priority,\r\n shapeAbsoluteData: this.shapeAbsolute ? this.shapeAbsolute.export() : null,\r\n linesData: linesData,\r\n };\r\n if (this.attachedTo && this.attachedTo.getLineLength){\r\n exportData.lineLength = config.measureUnit === \"Metric\" ? mmToM(this.attachedTo.getLineLengthMm()) : this.attachedTo.getLineLength();\r\n exportData.partId = this.attachedTo.getParent().partId;\r\n }\r\n if (this.type === \"edge\") {\r\n const navItems = getEdgeFeatures();\r\n let edge = navItems.find(edge => edge.part.dbFeature.id === +this.image.dataset.id);\r\n let unit = edge ? edge.unit : null;\r\n exportData.length = (unit ? unit.toLowerCase() : null) === \"each\"\r\n ? 1\r\n : config.measureUnit === \"Imperial\" ? getEdgeLength(this.attachedTo) : mmToM(getEdgeLength(this.attachedTo));\r\n } else if (this.type === \"backsplash\") {\r\n exportData.length = getBacksplashArea(this.attachedTo.getBacksplashHeight(), this.attachedTo);\r\n } else if (this.type === \"wall\") {\r\n exportData.length = exportData.lineLength;\r\n }\r\n\r\n return exportData;\r\n };\r\n importData = (importData) => {\r\n const skipImportProps = ['image', 'shapeAbsolute', 'linesData'];\r\n Object.keys(importData).forEach(key => {\r\n if (importData.hasOwnProperty(key)) {\r\n if (!skipImportProps.includes(key)) {\r\n this[key] = importData[key];\r\n }\r\n }\r\n });\r\n if (importData.shapeAbsoluteData) {\r\n this.shapeAbsolute.import(importData.shapeAbsoluteData);\r\n }\r\n if (importData.linesData) {\r\n for (const lineData of importData.linesData) {\r\n const line = this.lines.find(line => line.lineIndex === +lineData.lineIndex);\r\n if (line) {\r\n line.importData(lineData);\r\n }\r\n }\r\n }\r\n }\r\n //todo sqft-react is this needed?\r\n // generateImage = (value, shapes) => {\r\n // let domImg = document.createElement('img');\r\n // domImg.crossOrigin = \"Anonymous\";\r\n // let $img = $(domImg);\r\n // $img.css({\r\n // position: 'absolute',\r\n // width: '1px',\r\n // height: '1px'\r\n // });\r\n // $img.attr({\r\n // 'data-id': value.image.id,\r\n // 'data-name': value.image.name,\r\n // });\r\n // let attachedTo = null;\r\n // if (value.attachedTo) {\r\n // for (let i = 0; i < shapes.length; i++) {\r\n // let shape = shapes[i];\r\n // if (shape.getLines && !attachedTo) {\r\n // let lines = shape.getLines();\r\n // for(let n = 0; n < lines.length; n++) {\r\n // let line = lines[n];\r\n // if ( line.id == value.attachedTo && !attachedTo ) {\r\n // attachedTo = line;\r\n // }\r\n // }\r\n // }\r\n // }\r\n // }\r\n // $img.appendTo($('body'));\r\n // $img.attr('src', (config.isKiosk || value.image.src.includes('data:image') ? '' : '/api/SqFtCalc/GetImage?url=') + value.image.src);\r\n // return {\r\n // image: domImg,\r\n // attachedTo: this.attachedTo\r\n // };\r\n // };\r\n getTotalInches = function() {\r\n return 0;\r\n };\r\n\r\n /**\r\n * Public functions\r\n * @param flipDirection\r\n */\r\n flip = function(flipDirection) {\r\n void flipDirection\r\n };\r\n rotate = (degrees, direction) => {\r\n //todo slab rotation QCDES-1358\r\n if (this.type === MOVABLE_IMAGE_TYPES.slabImage) {\r\n return\r\n }\r\n const isSlabMode = store.getState().sqftSlabState.isShowSlabTool;\r\n isSlabMode ? this.rotatedDegreesSlab += degrees : this.rotatedDegrees += degrees;\r\n (this.rotatedDegrees === 360) && (this.rotatedDegrees = 0);\r\n (this.rotatedDegreesSlab === 360) && (this.rotatedDegreesSlab = 0);\r\n\r\n direction = direction || this.Direction.Right;\r\n let angle = (degrees * Math.PI / 180);\r\n if (direction === this.Direction.LEFT)\r\n angle *= -1;\r\n if (this.shapeRotatable) {\r\n this.shapeRotatable.rotateShapeRotatablePoints(this.getCenter(), angle, isSlabMode);\r\n }\r\n this.rotateBorderPoints(angle);\r\n };\r\n rotateBorderPoints = (angle) => {\r\n const center = this.getCenter();\r\n for (const linePoint of this.getLinePoints()) {\r\n linePoint.rotate(center, angle);\r\n }\r\n }\r\n init = (position, image, size, attachedTo, isHidden) => {\r\n this.setPosition(position);\r\n this._setImage(image);\r\n this.setSize(size);\r\n this.setInitialSize(size);\r\n this._setAttachedTo(attachedTo);\r\n function getRandomInt(min, max) {\r\n return Math.floor(Math.random() * (max - min)) + min;\r\n }\r\n this._setFillColor(getRandomInt(0, 255), getRandomInt(0, 255), getRandomInt(0, 255), 0.3);\r\n if (isHidden) {\r\n this.isHidden = true;\r\n } else {\r\n this.initEvents();\r\n //this.initResizablePoint(position);\r\n }\r\n this.lines = this.createLines();\r\n //hide lines for slab images\r\n if (this.type === MOVABLE_IMAGE_TYPES.slabImage) {\r\n this.deregisterLineEvents();\r\n }\r\n\r\n this.renderMovableImage = new RenderMovableImage(this);\r\n };\r\n initEvents = () => {\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n this._onMouseMove,\r\n this,\r\n this.priority ? this.priority : EventManager.priorities.IMAGE - (this.attachedTo ? 1 : 0)\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n this._onMouseDown,\r\n this,\r\n this.priority ? this.priority : EventManager.priorities.IMAGE - (this.attachedTo ? 1 : 0)\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n this._onMouseUp,\r\n this,\r\n this.priority ? this.priority : EventManager.priorities.IMAGE - (this.attachedTo ? 1 : 0)\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this._render,\r\n this,\r\n this.priority ? this.priority : EventManager.priorities.IMAGE - (this.attachedTo ? 1 : 0)\r\n );\r\n };\r\n\r\n /**\r\n * Not used\r\n */\r\n initResizablePoint = () => {\r\n let pointParams = {\r\n priority: EventManager.priorities.BOX_POINT,\r\n movable: true,\r\n isCentered: true,\r\n isVisibleOnHover: true,\r\n moveCallback: (mousePos, movable) => {\r\n //const movablePoint = movable.parent;\r\n const movableImage = movable.grandParent;\r\n //const size = movableImage.getSize();\r\n const state = movableImage.getState();\r\n let scale = workspace.getScale();\r\n let xDiff = (movable.state.mouseDownPosition.x - mousePos.x) / scale;\r\n let yDiff = (movable.state.mouseDownPosition.y - mousePos.y) / scale;\r\n // const newWidth = movable.state.mouseDownSize.width - xDiff;\r\n // const newHeight = movable.state.mouseDownSize.height - yDiff;\r\n const newWidth = (movable.state.mouseDownSize.width - xDiff + movable.state.mouseDownSize.height - yDiff) / 2;\r\n const newHeight = (movable.state.mouseDownSize.height - yDiff + movable.state.mouseDownSize.width - xDiff) / 2;\r\n\r\n if (newHeight >= state.minimumHeight && newWidth >= state.minimumWidth ) {\r\n movableImage.setSize({\r\n width: newWidth,\r\n height: newHeight\r\n });\r\n movable.posX = newWidth;\r\n movable.posY = newHeight;\r\n }\r\n },\r\n mouseUpCallback: (mousePos, movable) => {\r\n movable.state.mouseDownSize = null\r\n },\r\n mouseDownCallback: (mousePos, movable) => {\r\n const movableImage = movable.grandParent;\r\n movable.state.mouseDownSize = {...movableImage.getSize()};\r\n }\r\n };\r\n let pointDesign = {\r\n radius: 10,\r\n lineWidth: 1,\r\n layout: CORE_POINT_LAYOUTS.resize\r\n };\r\n //const position = this.getPosition();\r\n const size = this.getSize();\r\n const pointPositionX = size.width;\r\n const pointPositionY = size.height;\r\n this.resizablePoint = new PointV2(pointPositionX, pointPositionY, this, pointParams, pointDesign);\r\n }\r\n\r\n deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n this.isHidden = true;\r\n this.deregisterLineEvents()\r\n };\r\n\r\n deregisterLineEvents = () => {\r\n const lines = this.getLines();\r\n for (const line of lines) {\r\n line.deregisterEvents();\r\n }\r\n };\r\n\r\n reInitEvents = () => {\r\n if (this.isHidden) {\r\n this.initEvents();\r\n this.isHidden = false;\r\n this.reInitLineEvents();\r\n }\r\n };\r\n\r\n reInitLineEvents = () => {\r\n //hide lines for slab images\r\n if (this.type !== MOVABLE_IMAGE_TYPES.slabImage) {\r\n for (const line of this.getLines()) {\r\n line.reInitEvents();\r\n }\r\n }\r\n };\r\n\r\n destroy = (protect) => {\r\n if (!protect) {\r\n EventManager.removeEvent(this);\r\n for (const line of this.getLines()) {\r\n line.destroy();\r\n }\r\n if (this.resizablePoint) {\r\n this.resizablePoint.destroy();\r\n }\r\n }\r\n };\r\n\r\n stealCursor = function(who) {\r\n if (this === who) {\r\n EventManager.resetCursor(this);\r\n }\r\n };\r\n\r\n resetCursor = function(who) {\r\n void who;\r\n EventManager.resetCursor(this);\r\n };\r\n\r\n // getMidPoint(from, to) {\r\n // return {\r\n // x: from.x + (to.x - from.x)/2,\r\n // y: from.y + (to.y - from.y)/2\r\n // };\r\n // }\r\n\r\n isIE = function() {\r\n return (/Trident/i).test(window.navigator.appVersion);\r\n };\r\n\r\n getSrc = function(img) {\r\n if (img) {\r\n let src = img.getAttribute('src');\r\n if (src) {\r\n return src;\r\n }\r\n src = img.getAttribute(\"style\");\r\n if (src) {\r\n return src.replace(/background-image: url\\(\"\\/api\\/SqFtCalc\\/GetImage\\?url=/g, \"\").replace(/\"\\);/g, \"\");\r\n }\r\n }\r\n return \"\";\r\n };\r\n\r\n isSVG = (img) => {\r\n return (/data:image\\/svg\\+xml;base64,/).test(this.getSrc(img));\r\n };\r\n\r\n getLinePointsPointField = () => {\r\n const points = this.getLines().map(line => line.from);\r\n return points.map(point => getPointField(point.x, point.y, this))\r\n }\r\n\r\n getPointsPointField = () => {\r\n return this.getLinePointsPointField()\r\n }\r\n\r\n getBorderPointsOnWorkspace = () => {\r\n const posField = this.getPosition();\r\n const points = this.getLines().map(line => line.from);\r\n return points.map(point => {\r\n return {\r\n x: posField.x + point.x,\r\n y: posField.y + point.y\r\n }\r\n })\r\n }\r\n\r\n getPointsPosOnWorkspace = () => {\r\n return this.getBorderPointsOnWorkspace();\r\n };\r\n\r\n createBorderPointsPosition = () => {\r\n return [\r\n getImagePoint(0, 0, this),\r\n getImagePoint(this.size.width, 0, this),\r\n getImagePoint(this.size.width, this.size.height, this),\r\n getImagePoint(0, this.size.height, this),\r\n ]\r\n\r\n // return [\r\n // new point(0, 0, this),\r\n // new point(this.size.width, 0, this),\r\n // new point(this.size.width, this.size.height, this),\r\n // new point(0, this.size.height, this),\r\n // ]\r\n }\r\n\r\n getLines = () => {\r\n return this.lines\r\n }\r\n\r\n getPrevLine = (line) => {\r\n const index = this.lines.indexOf(line);\r\n if (index === -1) return null; // Line not found\r\n\r\n return this.lines[(index - 1 + this.lines.length) % this.lines.length]; // Loop back if it's the first line\r\n }\r\n\r\n getNextLine = (line) => {\r\n const index = this.lines.indexOf(line);\r\n if (index === -1) return null; // Line not found\r\n\r\n return this.lines[(index + 1) % this.lines.length]; // Loop back if it's the last line\r\n }\r\n\r\n getLinePoints = () => {\r\n return this.lines.map(line => line.from)\r\n }\r\n\r\n revealMeasurementsInsideShape = () => {\r\n for (const imageLine of this.getLines()) {\r\n imageLine.measurementInsideShape.revealEvents();\r\n }\r\n }\r\n\r\n hideMeasurementsInsideShape = () => {\r\n for (const imageLine of this.getLines()) {\r\n imageLine.measurementInsideShape.hideEvents();\r\n }\r\n }\r\n\r\n isAnyLineHovering = () => {\r\n const lines = this.getLines();\r\n for (const line of lines) {\r\n if (line.isHovering()) {\r\n return true\r\n }\r\n }\r\n\r\n return false\r\n }\r\n\r\n createLines = () => {\r\n return createImageLinesFromPoints(this.createBorderPointsPosition(), this);\r\n }\r\n\r\n shouldRenderMeasurementsInsideTheShape = () => {\r\n return APPLIANCES_THAT_SHOULD_RENDER_MEASUREMENTS_INSIDE_THE_SHAPE.includes(this.subType)\r\n && !hardCodeIsCaesarStone(); //CAES-547 remove measurements for the CaesarStone\r\n }\r\n\r\n getOuterShape = () => {\r\n const centerPos = this.getCenter();\r\n const centerPosOnField = getPointField(centerPos.x, centerPos.y, this);\r\n const shapes = workspace.getShapes(true);\r\n //let countInsidePoints;\r\n for (let shape of shapes) {\r\n //countInsidePoints = 0;\r\n if (shape instanceof sqftShape) {\r\n // for (let borderPoint of borderPoints) {\r\n // if (isPointInsideShape(borderPoint, shape, true)) {\r\n // countInsidePoints += 1\r\n // }\r\n // }\r\n const isCenterInsideShape = isPointInsideShape(centerPosOnField, shape, true);\r\n if (isCenterInsideShape) {\r\n return shape\r\n }\r\n // if (countInsidePoints >= 2) {\r\n // return shape\r\n // }\r\n }\r\n }\r\n\r\n return null\r\n }\r\n\r\n _render = (ctx) => {\r\n this.renderMovableImage.render(ctx);\r\n }\r\n}\r\n\r\nexport default MovableImage;\r\n","import {\r\n getFontsizeSmall,\r\n getMidPoint,\r\n getPointDistance, getPointField, getPointOnTheLine,\r\n} from \"../../../helpers/sqftHelper\";\r\nimport ShapeHelper from \"../../../helpers/shapeHelper\";\r\n//import COLOR_THEMES from \"../../../../../colorThemes\";\r\nimport COLOR_THEMES from \"../store/colorThemes\";\r\nimport sqftConfig from \"../store/sqftConfig\";\r\n//import workspace from \"../core/workspace\";\r\nimport {\r\n RENDER_TEMPLATES,\r\n SIDEBAR_BUTTONS_MENU,\r\n} from \"../../../constants\";\r\nimport {getDistanceLength, getLineCrownMoldingPoints} from \"./lineHelper\";\r\nimport RenderCabinets from \"./renderCabinets\";\r\nimport RenderFigures from \"./renderFigures\";\r\nimport {COLORS as Colors} from \"../../../../../colorThemes\";\r\nimport store from \"../../../../../store\";\r\nimport config from \"../store/sqftConfig\";\r\nimport workspace from \"../core/workspace\";\r\n\r\nexport default class RenderParts {\r\n static drawMeasurementAroundPoints = (ctx, points, minLength = 3) => {\r\n points.forEach((point, index) => {\r\n const nextPoint = points[index + 1] ? points[index + 1] : points[0];\r\n const midPoint = getMidPoint(point, nextPoint);\r\n const distance = getPointDistance(point, nextPoint);\r\n const scale = workspace.getScale();\r\n if (distance / scale > minLength) {\r\n //const length = addDecimalToLength(measureDistanceToInches(distance / sqftConfig.scale));\r\n const length = getDistanceLength(distance / sqftConfig.scale);\r\n //debugger // eslint-disable-line no-debugger\r\n const lineOrientation = ShapeHelper.getLineOrientation(point, nextPoint);\r\n const mText = ctx.measureText(length);\r\n let fontSize = getFontsizeSmall(),\r\n font = (fontSize).toString() + \"px \" + sqftConfig.activeFontBold,\r\n xMargin = 0,\r\n yMargin = 0,\r\n pos = midPoint\r\n ;\r\n\r\n //todo change index logic\r\n switch (lineOrientation) {\r\n case \"horizontal\": {\r\n yMargin = index === 0\r\n ? -fontSize + sqftConfig.scale / sqftConfig.defaultScale\r\n : +fontSize + sqftConfig.scale / sqftConfig.defaultScale + 10;\r\n break;\r\n }\r\n case \"vertical\": {\r\n xMargin = index === 1 ? mText.width + 5 : -mText.width;\r\n break;\r\n }\r\n // todo rotation\r\n case \"NORTHWEST\": { break;}\r\n case \"NORTHEAST\": { break;}\r\n case \"SOUTHWEST\": { break;}\r\n case \"SOUTHEAST\": { break;}\r\n default:\r\n break;\r\n }\r\n pos.x += xMargin;\r\n pos.y += yMargin;\r\n\r\n ctx.beginPath();\r\n ctx.font = font;\r\n ctx.textAlign = \"center\"; //todo\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n ctx.wrapText(length.toString(), pos.x, pos.y, mText.width, font);\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n })\r\n }\r\n\r\n static drawShapeBorders = (ctx, staticOffset, strokeTemplate, fillTemplate, shape) => {\r\n if (sqftConfig.isDevMode()) {\r\n RenderParts.renderDevMode(ctx, shape);\r\n }\r\n let lines = shape.getLines();\r\n const reduxState = store.getState();\r\n const isShowSlabTool = reduxState.sqftSlabState.isShowSlabTool;\r\n\r\n ctx.beginPath();\r\n for (let i = 0; i < lines.length; i++) {\r\n lines[i].staticOffset = staticOffset;\r\n lines[i].render(ctx, i > 0);\r\n lines[i].staticOffset = null;\r\n }\r\n\r\n //set fillStyle and strokeStyle colors\r\n const isShapeHovering = shape.isHoveringOnlyShape();\r\n let shapeColorSet;\r\n\r\n function renderColorSetTemplate(shapeColorSet, isShapeHovering) {\r\n if (isShapeHovering) {// && workspace.getHoverShape() === shape ) {\r\n ctx.strokeStyle = shapeColorSet.primary_border;\r\n ctx.fillStyle = shapeColorSet.primary_hover;\r\n } else {\r\n ctx.strokeStyle = shapeColorSet.primary_border;\r\n ctx.fillStyle = shapeColorSet.primary;\r\n }\r\n }\r\n\r\n function renderFilledPrimaryTemplate(isShapeHovering) {\r\n if (isShapeHovering) {// && workspace.getHoverShape() === shape ) {\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary_hover;\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].active_transparent;\r\n } else {\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].primary_transparent;\r\n }\r\n }\r\n\r\n function renderFilledActiveTemplate(isShapeHovering) {\r\n if (isShapeHovering) {// && workspace.getHoverShape() === shape ) {\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].active_hover;\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].primary_transparent;\r\n } else {\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].active;\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].active_transparent;\r\n }\r\n }\r\n\r\n switch (fillTemplate) {\r\n case RENDER_TEMPLATES.accordingToFeature:\r\n shapeColorSet = shape.getColorSet();\r\n if (shapeColorSet) {\r\n renderColorSetTemplate(shapeColorSet, isShapeHovering)\r\n } else {\r\n renderFilledPrimaryTemplate(isShapeHovering)\r\n }\r\n break;\r\n case RENDER_TEMPLATES.filledPrimary:\r\n renderFilledPrimaryTemplate(isShapeHovering)\r\n break;\r\n case RENDER_TEMPLATES.filledActive:\r\n renderFilledActiveTemplate(isShapeHovering)\r\n break;\r\n }\r\n\r\n //set hover style colors\r\n if (isShapeHovering) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (activeButton === SIDEBAR_BUTTONS_MENU.delete\r\n && !isShowSlabTool\r\n ) {\r\n ctx.fillStyle = Colors.red\r\n }\r\n }\r\n\r\n //set lineWidth\r\n switch (strokeTemplate) {\r\n case RENDER_TEMPLATES.linesOnly:\r\n ctx.lineWidth = 0;\r\n ctx.closePath();\r\n break;\r\n case RENDER_TEMPLATES.default:\r\n default:\r\n ctx.fill();\r\n ctx.lineWidth = 2; // Math.ceil(scale);\r\n ctx.closePath();\r\n ctx.stroke();\r\n break;\r\n }\r\n }\r\n\r\n static getBoundingBoxFromShape = (shape) => {\r\n let minX = Infinity;\r\n let minY = Infinity;\r\n let maxX = -Infinity;\r\n let maxY = -Infinity;\r\n\r\n const lines = shape.getLines();\r\n for (let line of lines) {\r\n const renderTo = line.calculateRenderPosition(line.to);\r\n const renderFrom = line.calculateRenderPosition(line.from);\r\n\r\n minX = Math.min(minX, renderFrom.x, renderTo.x);\r\n minY = Math.min(minY, renderFrom.y, renderTo.y);\r\n maxX = Math.max(maxX, renderFrom.x, renderTo.x);\r\n maxY = Math.max(maxY, renderFrom.y, renderTo.y);\r\n }\r\n\r\n return {\r\n x: minX,\r\n y: minY,\r\n width: maxX - minX,\r\n height: maxY - minY\r\n };\r\n };\r\n\r\n /**\r\n * Function for drawing a rectangle with angled stripes and transparency.\r\n *\r\n * @param ctx\r\n * @param {Number} x - x-coordinate of the top-left corner of the rectangle\r\n * @param {Number} y - y-coordinate of the top-left corner of the rectangle\r\n * @param {Number} width - width of the rectangle\r\n * @param {Number} height - height of the rectangle\r\n * @param {Number} lineWidth - width of the stripe\r\n * @param {Number} angle - angle of the stripes in degrees\r\n * @param {String} color1 - first color (background with transparency)\r\n * @param {String} color2 - second color (stripe color with transparency)\r\n */\r\n static drawStripedRectangle = (\r\n ctx,\r\n x,\r\n y,\r\n width,\r\n height,\r\n lineWidth = 3 * 3.5,\r\n angle = 3 * 1000,\r\n color1 = \"rgba(255, 255, 255, 0.5)\", // Semi-transparent background\r\n color2 = \"rgba(230, 228, 230, 0.5)\" // Semi-transparent stripes\r\n ) => {\r\n const lineGap = 6 * 3.5;\r\n\r\n ctx.save();\r\n\r\n // Define clipping area (visible rectangle)\r\n ctx.beginPath();\r\n ctx.rect(x, y, width, height);\r\n ctx.fillStyle = color1;\r\n ctx.fill();\r\n ctx.clip();\r\n\r\n // Draw diagonal lines across the entire canvas\r\n ctx.beginPath();\r\n ctx.lineWidth = lineWidth;\r\n ctx.strokeStyle = color2;\r\n\r\n // The pattern should cover the entire canvas\r\n for (let i = -ctx.canvas.width * 2; i < ctx.canvas.width; i += lineGap) {\r\n ctx.moveTo(i, -ctx.canvas.height);\r\n ctx.lineTo(i + lineGap + angle, ctx.canvas.height * 2);\r\n }\r\n\r\n ctx.stroke();\r\n ctx.restore();\r\n };\r\n\r\n /**\r\n *\r\n * @param ctx\r\n * @param {Number} x - координата x верхнего левого угла прямоугольника\r\n * @param {Number} y - координата y верхнего левого угла прямоугольника\r\n * @param {Number} width - ширина прямоугольника\r\n * @param {Number} height - высота прямоугольника\r\n */\r\n static fillStripedRectangle = (ctx, x, y, width, height) => {\r\n let gradient = ctx.createLinearGradient(x, y, width, height);\r\n gradient.addColorStop(0.25, '#868d91');\r\n gradient.addColorStop(0.25, '#7b8185');\r\n gradient.addColorStop(0.5, '#7b8185');\r\n gradient.addColorStop(0.5, '#868d91');\r\n gradient.addColorStop(0.75, '#868d91');\r\n gradient.addColorStop(0.75, '#7b8185');\r\n gradient.addColorStop(1, '#7b8185');\r\n\r\n // Заливка шейпа градиентом\r\n ctx.fillStyle = gradient;\r\n ctx.fill();\r\n }\r\n\r\n static drawDiagonalStripesV2 = (ctx, shape, lineWidth = 2, rotationAngle = -Math.PI / 4) => {\r\n const bbox = RenderParts.getBoundingBoxFromShape(shape);\r\n void rotationAngle;\r\n void lineWidth;\r\n\r\n ctx.save();\r\n let lines = shape.getLines();\r\n\r\n //draw border\r\n ctx.beginPath();\r\n ctx.rect(bbox.x, bbox.y, bbox.width, bbox.height);\r\n ctx.lineWidth = 2;\r\n ctx.stroke();\r\n\r\n for (let i = 0; i < lines.length; i++) {\r\n //lines[i].render(ctx, i > 0);\r\n }\r\n const pointPos = lines[1].calculateRenderPosition(lines[1].to);\r\n\r\n RenderParts.fillStripedRectangle(ctx, bbox.x, bbox.y, pointPos.x, pointPos.y);\r\n ctx.closePath();\r\n\r\n ctx.restore();\r\n };\r\n\r\n static drawDiagonalStripes = (ctx, shape, lineWidth = 2, rotationAngle = -Math.PI / 4) => {\r\n const bbox = RenderParts.getBoundingBoxFromShape(shape);\r\n // const lightGray = '#80848a';\r\n // const darkGray = '#787c82';\r\n const lightGray = '#5a5c61';\r\n const darkGray = '#54575b';\r\n void rotationAngle;\r\n\r\n // ctx.save();\r\n // let lines = shape.getLines();\r\n // // ctx.beginPath();\r\n // // ctx.rect(bbox.x, bbox.y, bbox.width, bbox.height);\r\n // ctx.beginPath();\r\n // for (let i = 0; i < lines.length; i++) {\r\n // lines[i].render(ctx, i > 0);\r\n // }\r\n // ctx.closePath();\r\n // ctx.clip();\r\n //\r\n // ctx.lineWidth = 2;\r\n // ctx.stroke();\r\n //\r\n // for (let i = 0; i < lines.length; i++) {\r\n // lines[i].render(ctx, i > 0);\r\n // }\r\n // ctx.closePath();\r\n // ctx.clip();\r\n\r\n const scale = config.scale;\r\n const scaledLineWidth = lineWidth * scale;\r\n\r\n RenderParts.drawStripedRectangle(\r\n ctx,\r\n bbox.x,\r\n bbox.y,\r\n bbox.width,\r\n bbox.height,\r\n scaledLineWidth,\r\n 3 * 1000,\r\n lightGray,\r\n darkGray\r\n );\r\n\r\n ctx.restore();\r\n };\r\n\r\n\r\n static drawHoveredBorders = (ctx,\r\n staticOffset,\r\n shape,\r\n style = {\r\n lineWidth: 3,\r\n strokeStyle: COLOR_THEMES[sqftConfig.activeTheme].primary_hover,\r\n shadowBlur: 4,\r\n extendHoveredLine: 0\r\n }\r\n ) => {\r\n let lines = shape.getLines();\r\n\r\n for (let i = 0; i < lines.length; i++) {\r\n if (lines[i].getState().isHovering) {\r\n ctx.save();\r\n ctx.beginPath();\r\n lines[i].staticOffset = staticOffset;\r\n ctx.lineWidth = style.lineWidth;\r\n ctx.shadowColor = ctx.strokeStyle = style.strokeStyle;\r\n ctx.shadowBlur = style.shadowBlur;\r\n\r\n let pointTo = {...lines[i].to};\r\n let pointFrom = {...lines[i].from};\r\n if (style.extendHoveredLine > 0) {\r\n pointFrom = {pos: getPointOnTheLine(lines[i].from, lines[i].to, 5)};\r\n pointTo = {pos: getPointOnTheLine(lines[i].to, lines[i].from, 5)};\r\n }\r\n const renderTo = lines[i].calculateRenderPosition(pointTo);\r\n const renderFrom = lines[i].calculateRenderPosition(pointFrom);\r\n\r\n ctx.moveTo(renderTo.x, renderTo.y);\r\n ctx.lineTo(renderFrom.x, renderFrom.y);\r\n lines[i].staticOffset = null;\r\n\r\n ctx.stroke();\r\n ctx.closePath();\r\n ctx.restore();\r\n }\r\n }\r\n }\r\n\r\n static drawSpacerBorders = (ctx, staticOffset, shape) => {\r\n let lines = shape.getLines();\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.lineWidth = 2;\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].primary_transparent8;\r\n for (let i = 0; i < lines.length; i++) {\r\n lines[i].staticOffset = staticOffset;\r\n if (i === 0) {\r\n const renderFrom = lines[i].calculateRenderPosition(lines[i].from);\r\n ctx.moveTo(renderFrom.x, renderFrom.y);\r\n }\r\n const renderTo = lines[i].calculateRenderPosition(lines[i].to);\r\n ctx.lineTo(renderTo.x, renderTo.y);\r\n\r\n lines[i].staticOffset = null;\r\n }\r\n\r\n //set hover style colors\r\n if (shape.isHovering()) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (activeButton === SIDEBAR_BUTTONS_MENU.delete) {\r\n ctx.fillStyle = Colors.red\r\n }\r\n }\r\n\r\n ctx.closePath();\r\n ctx.stroke();\r\n ctx.fill();\r\n ctx.restore();\r\n }\r\n\r\n static drawShapeCrownMoldings = (ctx, staticOffset, shape) => {\r\n let lines = shape.getLines();\r\n //ctx.beginPath();\r\n for (let i = 0; i < lines.length; i++) {\r\n lines[i].staticOffset = staticOffset;\r\n if (lines[i].getState().attachedItems.isWithCrownMolding) {\r\n const crownMoldingPoints = getLineCrownMoldingPoints(lines[i]);\r\n ctx.save();\r\n if (lines[i].isHovering()) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (activeButton === SIDEBAR_BUTTONS_MENU.delete) {\r\n ctx.strokeStyle = Colors.red\r\n }\r\n }\r\n RenderCabinets.renderCrownMolding(ctx, crownMoldingPoints);\r\n ctx.restore();\r\n }\r\n lines[i].staticOffset = null;\r\n }\r\n }\r\n\r\n static drawShapeEndCap = (ctx, staticOffset, shape) => {\r\n let lines = shape.getLines();\r\n //ctx.beginPath();\r\n for (let i = 0; i < lines.length; i++) {\r\n lines[i].staticOffset = staticOffset;\r\n const lineState = lines[i].getState();\r\n if (lineState.attachedItems && lineState.attachedItems.isWithEndCap) {\r\n ctx.save();\r\n if (lines[i].isHovering()) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (activeButton === SIDEBAR_BUTTONS_MENU.delete) {\r\n ctx.strokeStyle = Colors.red\r\n }\r\n }\r\n RenderCabinets.renderEndCap(ctx, lines[i]);\r\n ctx.restore();\r\n }\r\n lines[i].staticOffset = null;\r\n }\r\n }\r\n\r\n static drawHandles = (ctx, shape) => {\r\n let lines = shape.getLines();\r\n for (let i = 0; i < lines.length; i++) {\r\n if (lines[i].isWithHandle()) {\r\n const midPoint = getMidPoint(lines[i].from, lines[i].to);\r\n const renderPosition = getPointField(midPoint.x, midPoint.y, shape);\r\n RenderFigures.renderHandle(ctx, renderPosition);\r\n }\r\n }\r\n }\r\n\r\n static renderDevMode = (ctx, shape) => {\r\n // render __intersectionPoints\r\n const intersectionPoints = shape.shapeAbsolute.getIntersectionPoints()\r\n if (intersectionPoints) {\r\n for (let i in intersectionPoints) {\r\n intersectionPoints[i].forEach(intPoint => {\r\n ctx.beginPath();\r\n ctx.arc(intPoint.x, intPoint.y, 20, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n ctx.closePath();\r\n })\r\n }\r\n }\r\n // render slabPos\r\n ctx.beginPath();\r\n let pf = getPointField(shape.slabPos.x, shape.slabPos.y);\r\n ctx.arc(pf.x, pf.y, 10, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n ctx.closePath();\r\n\r\n // render absolutePos\r\n const absolutePos = shape.shapeAbsolute.getAbsolutePosition();\r\n if (absolutePos) {\r\n ctx.beginPath();\r\n ctx.strokeStyle = '#a02f2f';\r\n pf = getPointField(absolutePos.x, absolutePos.y)\r\n ctx.arc(pf.x, pf.y, 5, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n }\r\n}\r\n","import store from \"../../../../../store\";\r\nimport workspace from \"../core/workspace\";\r\nimport {setSqftCroppedSlabImages} from \"../../../../../actions/sqftSlabFunctions\";\r\nimport sqftEventManager from \"./sqftEventManager\";\r\nimport MovableImage from \"../core/shapes/movableImage\";\r\nimport {APPLIANCES_THAT_SHOULD_RENDER_MEASUREMENTS_INSIDE_THE_SHAPE, SHAPE_TYPE} from \"../../../constants\";\r\n\r\nconst sqftImageManager = {\r\n getAppliances: function() {\r\n const shapes = workspace.getShapes();\r\n return shapes.filter(shp => shp.type === SHAPE_TYPE.appliances);\r\n },\r\n getSlabImages: function() {\r\n const state = store.getState();\r\n return state.sqftSlabState.croppedSlabImages;\r\n },\r\n getAppliancesThatShouldRenderMeasurementsInsideTheShape: function() {\r\n const shapes = workspace.getShapes();\r\n return shapes.filter(shp => shp.type === SHAPE_TYPE.appliances\r\n && APPLIANCES_THAT_SHOULD_RENDER_MEASUREMENTS_INSIDE_THE_SHAPE.includes(shp.subType));\r\n },\r\n hideSlabImages: function() {\r\n let movableImages = store.getState().sqftSlabState.croppedSlabImages;\r\n for (let i = movableImages.length - 1; i >= 0; i--) {\r\n movableImages[i].deregisterEvents();\r\n }\r\n },\r\n restoreSlabImages: function() {\r\n let movableImages = store.getState().sqftSlabState.croppedSlabImages;\r\n for (let i = movableImages.length - 1; i >= 0; i--) {\r\n movableImages[i].reInitEvents();\r\n }\r\n },\r\n getExportedSlabImages: function () {\r\n let slabState = store.getState().sqftSlabState;\r\n let croppedImages = slabState.croppedSlabImages;\r\n let exportData = [];\r\n for(let croppedImage of croppedImages) {\r\n exportData.push(croppedImage.export());\r\n }\r\n\r\n return exportData;\r\n },\r\n\r\n removeAllSlabImages: function () {\r\n const state = store.getState();\r\n let slabImages = state.sqftSlabState.croppedSlabImages;\r\n if (slabImages.length > 0) {\r\n store.dispatch(setSqftCroppedSlabImages([]));\r\n }\r\n },\r\n\r\n /**\r\n * @param {[]} data\r\n */\r\n importSlabImages: function (data) {\r\n if (data.length === 0) {\r\n sqftImageManager.removeAllSlabImages();\r\n return\r\n }\r\n let workspaceImages = [];\r\n for(let movableImageData of data) {\r\n let image = new Image();\r\n image.src = movableImageData.image.src;\r\n\r\n let workspaceImage = workspace.addImage(\r\n image,\r\n movableImageData.size.width,\r\n movableImageData.size.height,\r\n null,\r\n null,\r\n \"slabImage\",\r\n null,\r\n function () {},\r\n movableImageData.pos,\r\n null,\r\n movableImageData.id,\r\n sqftEventManager.priorities.SLAB_IMAGE,\r\n movableImageData.featureId,\r\n true\r\n );\r\n\r\n workspaceImage.importData({isDisabledInPopup: movableImageData.isDisabledInPopup});\r\n workspaceImages.push(workspaceImage)\r\n }\r\n\r\n store.dispatch(setSqftCroppedSlabImages(workspaceImages));\r\n },\r\n hideImages: function() {\r\n const shapes = workspace.getShapes();\r\n for (let shape of shapes) {\r\n if (shape instanceof MovableImage && shape.type !== 'slabImage') {\r\n shape.deregisterEvents();\r\n }\r\n }\r\n },\r\n restoreImages: function() {\r\n const shapes = workspace.getShapes();\r\n for (let shape of shapes) {\r\n if (shape instanceof MovableImage && shape.type !== 'slabImage') {\r\n shape.reInitEvents();\r\n }\r\n }\r\n },\r\n hideTextBoxes: function() {\r\n const textBoxes = workspace.textBoxManager.getTextBoxes();\r\n for (let textBox of textBoxes) {\r\n textBox.deregisterEvents();\r\n }\r\n },\r\n restoreTextBoxes: function() {\r\n const textBoxes = workspace.textBoxManager.getTextBoxes();\r\n for (let textBox of textBoxes) {\r\n textBox.reInitEvents();\r\n }\r\n },\r\n getMinMaxShapePoints: function(movableImage) {\r\n let size = movableImage.getSize();\r\n return {\r\n minX : 0,\r\n maxX : size.width,\r\n minY : 0,\r\n maxY : size.height\r\n }\r\n },\r\n};\r\n\r\nexport default sqftImageManager\r\n","import sqftConfig from \"./sqftConfig\";\r\nimport sqftImageManager from \"./sqftImageManager\";\r\nimport sqftShapeManager from \"./sqftShapeManager\";\r\nimport workspace from \"../core/workspace\";\r\nimport slabWorkspace from \"../core/slab/slabWorkspace\";\r\nimport store from \"../../../../../store\";\r\nimport {setIsRoomSwitcherVisible} from \"../../../../../actions/sqftMenuFunctions\";\r\nimport sqftSlabManager from \"./sqftSlabManager\";\r\nimport sqftShapeIntersectionsManager from \"./sqftShapeIntersectionsManager\";\r\nimport workspaceControllers from \"./workspaceControllers\";\r\n\r\nexport const enableRegularMode = () => {\r\n store.dispatch(setIsRoomSwitcherVisible(true));\r\n //sqftConfig.workspace.snapToGrid = true;\r\n slabWorkspace.disableSlabImages();\r\n slabWorkspace.deregisterEvents();\r\n sqftImageManager.hideSlabImages();\r\n sqftShapeManager.hideSeamShapes();\r\n sqftShapeManager.hideSlabShapes();\r\n\r\n sqftSlabManager.deleteShapeOffset();\r\n\r\n sqftImageManager.restoreTextBoxes();\r\n sqftImageManager.restoreImages();\r\n sqftShapeManager.restoreCorePieceShapes();\r\n sqftShapeManager.restoreShapeParts();\r\n\r\n slabWorkspace.slabAdditionalShapes.hideAdditionalShapes(); //this should go last\r\n};\r\n\r\nexport const enableSlabMode = (shouldUpdatePlaceholderFeatureIds = false) => {\r\n store.dispatch(setIsRoomSwitcherVisible(false));\r\n sqftConfig.workspace.snapToGrid = false;\r\n sqftImageManager.restoreSlabImages();\r\n sqftShapeManager.checkForUpdateSlabPoints();\r\n sqftShapeManager.checkForUpdateSlabPosition();\r\n sqftShapeManager.restoreSeamShapes();\r\n sqftShapeManager.restoreSlabShapes();\r\n\r\n sqftSlabManager.reInitShapeOffset();\r\n\r\n slabWorkspace.slabAdditionalShapes.initWaterfallToolShapes(); // 1\r\n slabWorkspace.slabAdditionalShapes.initBacksplashAndEdgeShapes();\r\n slabWorkspace.slabAdditionalShapes.initMiteredToolShapes(); // 2\r\n slabWorkspace.slabAdditionalShapes.initUnderlaymentToolShapes(); // 2\r\n slabWorkspace.slabAdditionalShapes.initBumpoutShapes();\r\n slabWorkspace.slabAdditionalShapes.restoreBacksplashShapes();\r\n slabWorkspace.initLeftPart();\r\n\r\n sqftImageManager.hideImages();\r\n sqftImageManager.hideTextBoxes();\r\n sqftShapeManager.hideShapeParts();\r\n sqftShapeManager.hideCorePieceShapes();\r\n\r\n if (shouldUpdatePlaceholderFeatureIds) {\r\n window.setTimeout(() => { // first we need to enable slab mode to get slab mode coordinates for the shape\r\n sqftShapeIntersectionsManager.updateShapesIntersections();\r\n sqftShapeIntersectionsManager.updateSlabPlaceholderFeatureId();\r\n workspaceControllers.snappedShapeGroups.updateShapesSnappedGroups(false);\r\n }, 0)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n};\r\n\r\nexport const createSlabModeWaterfallShapes = () => {\r\n slabWorkspace.slabAdditionalShapes.initWaterfallToolShapes(); // 1\r\n slabWorkspace.slabAdditionalShapes.initMiteredToolShapes(); // 2\r\n slabWorkspace.slabAdditionalShapes.hideAdditionalShapes(); //this should go last\r\n}\r\n\r\nexport const clearRotateAngles = () => {\r\n sqftConfig.highlight.rotateAngle = false;\r\n const angleTooltip = document.getElementById(\"angle-tooltip\");\r\n if (angleTooltip) {\r\n angleTooltip.style.display = \"none\";\r\n }\r\n\r\n workspace.getShapes().forEach((shape) => {\r\n if (Array.isArray(shape.rotateAngleParts) && shape.rotateAngleParts.length) {\r\n shape.deActivateRotateAngle();\r\n }\r\n });\r\n}\r\n\r\nexport const getDimensionsDependingOnShapePositions = (workspace) => {\r\n const {minX, maxX, minY, maxY} = sqftShapeManager.getMinMaxWorkspacePoints(workspace, true);\r\n let maxCordX = Math.abs(minX) > Math.abs(maxX) ? Math.abs(minX) : Math.abs(maxX);\r\n let maxCordY = Math.abs(minY) > Math.abs(maxY) ? Math.abs(minY) : Math.abs(maxY);\r\n\r\n let imageWidth = maxCordX / sqftConfig.scale * Math.pow(sqftConfig.defaultScale, 2) + 500 / sqftConfig.scale * sqftConfig.defaultScale;\r\n let imageHeight = maxCordY / sqftConfig.scale * Math.pow(sqftConfig.defaultScale, 2) + 500 / sqftConfig.scale * sqftConfig.defaultScale;\r\n\r\n //todo re-wright this\r\n if (window.innerWidth < 1024) {\r\n imageWidth *= 3.75\r\n imageHeight *= 3.75\r\n }\r\n\r\n return [imageWidth, imageHeight]\r\n}\r\n\r\nexport const getFontSizeFromContext = (ctx) => {\r\n const fontSizeMatch = ctx.font.match(/\\d+/);\r\n return fontSizeMatch ? Number(fontSizeMatch[0]) : null;\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n// import store from \"../../../../../store\";\r\n// import {setLookOverlayOpened} from \"../../../../../actions/lookFunctions\";\r\n// import {LOOK_OVERLAYS} from \"../../constants\";\r\n// import {Shower} from \"../../parts/shower\";\r\n\r\nexport default class TubCommon extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n }\r\n\r\n disabledClick() {}\r\n\r\n applyFeatureIfNotCompatible() {\r\n const showerTubComboParent = this.getParent().getParent();\r\n showerTubComboParent.setShowerTubCombo();\r\n showerTubComboParent.setActiveTub(this.bottomTubId);\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked);\r\n\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n\r\n // const showerTubComboParent = this.getParent().getParent();\r\n // const currentBottomTub = showerTubComboParent.bottomTub;\r\n //\r\n // const showNotCompatibleViewConditions = !window.location.hash.includes(\"visualizer\") &&\r\n // (!showerTubComboParent.showerTubComboIsActive || (\r\n // (this.partId === \"walk_in_tub\" && currentBottomTub !== \"walk_in_tub\") || (this.partId !== \"walk_in_tub\" && currentBottomTub === \"walk_in_tub\")\r\n // ));\r\n //\r\n // if (showNotCompatibleViewConditions) {\r\n // store.dispatch(setLookOverlayOpened(LOOK_OVERLAYS.notCompatiblePopup));\r\n // return;\r\n // }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n this.featureClicked();\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n // const layout = this.getParent().layout;\r\n // const showerParent = layout.parts[Shower.id];\r\n // const showerSize = showerParent.showerSize();\r\n // if (showerParent && showerSize) {\r\n // conditions.push({\r\n // propName: \"ShowerSize\",\r\n // propValue: showerSize\r\n // });\r\n // }\r\n return conditions\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerTubComboParent = this.getParent();\r\n return !showerTubComboParent.showerTubComboIsActive || showerTubComboParent.bottomTub !== this.bottomTubId\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n return !this.hideLayerCondition()\r\n }\r\n\r\n}\r\n","import {getWizardListFromBackend} from \"../api/wizard-api\";\r\nimport {setLeadPopup} from \"../globalLogic/globalActions\";\r\nimport {getErrorPopupObject} from \"../components/helpers/popupFunctions\";\r\nimport {getConflictingWizardSteps, getUpdatedAllWizardValues} from \"./wizardLogicOld\";\r\n\r\nexport const SET_WIZARD_LIST = \"SET_WIZARD_LIST\";\r\nexport const SET_WIZARD_ACTIVE_ITEM = \"SET_WIZARD_ACTIVE_ITEM\";\r\nexport const SET_WIZARD_ACTIVE_STEP = \"SET_WIZARD_ACTIVE_STEP\";\r\nexport const SET_WIZARD_SELECTED_VALUES = \"SET_WIZARD_SELECTED_VALUES\";\r\nexport const SET_ALL_WIZARD_SELECTED_VALUES = \"SET_ALL_WIZARD_SELECTED_VALUES\";\r\nexport const RESTORE_ALL_WIZARD_SELECTED_VALUES = \"RESTORE_ALL_WIZARD_SELECTED_VALUES\";\r\nexport const SET_WIZARD_MISSING_FEATURES = \"SET_WIZARD_MISSING_FEATURES\";\r\n\r\nexport const getWizardList = () => {\r\n return async (dispatch) => {\r\n const {wizardList, error} = await getWizardListFromBackend();\r\n if (error) {\r\n dispatch(setLeadPopup(getErrorPopupObject(error)));\r\n } else if (!wizardList.length) {\r\n dispatch(setLeadPopup(getErrorPopupObject(\"No wizards found\")));\r\n }\r\n if (document.kvConfig.devMode) {\r\n console.log(\"wizardList\", wizardList);\r\n }\r\n const wizardsArray = Array.isArray(wizardList.wizardList) ? wizardList.wizardList : wizardList;\r\n const nextActiveItem = document.kvConfig.wizardId\r\n ? wizardsArray.find(wizItem => wizItem.id === document.kvConfig.wizardId) || wizardsArray[0]\r\n : wizardsArray[0];\r\n dispatch(setWizardActiveItem(nextActiveItem));\r\n dispatch(setWizardList(wizardList));\r\n }\r\n};\r\n\r\nexport const setWizardList = (wizardList) => ({\r\n type: SET_WIZARD_LIST,\r\n payload: {wizardList}\r\n});\r\n\r\n// export const setWizardActiveItem = (wizardActiveItem, quoteIndex = null) => {\r\nexport const setWizardActiveItem = (wizardActiveItem) => {\r\n return (dispatch) => {\r\n // return (dispatch, getState) => {\r\n // const {quotesState} = getState();\r\n\r\n dispatch({\r\n type: SET_WIZARD_ACTIVE_ITEM,\r\n payload: {\r\n wizardActiveItem,\r\n // quoteIndex: Number.isInteger(quoteIndex) ? quoteIndex : quotesState.activeQuoteIndex,\r\n quoteIndex: 0,\r\n }\r\n })\r\n }\r\n};\r\n\r\nexport const setWizardActiveStep = (wizardActiveStep) => {\r\n return (dispatch, getState) => {\r\n // const {quotesState, wizardState} = getState();\r\n const {wizardState} = getState();\r\n\r\n let wizardConflictingSteps = wizardState.wizardConflictingSteps;\r\n let newWizValues = Object.assign({}, wizardState.wizardSelectedValues);\r\n if (wizardState.wizardConflictingSteps.length) {\r\n Object.keys(wizardState.wizardSelectedValues).reverse().forEach(selectedKeyNumber => { // erase conflicting selected steps!\r\n if (selectedKeyNumber >= wizardActiveStep) {\r\n delete newWizValues[selectedKeyNumber]\r\n }\r\n });\r\n wizardConflictingSteps = [];\r\n }\r\n let allWizardsValues = wizardState.allWizardsValues;\r\n if (wizardState.wizardActiveItem) {\r\n allWizardsValues = wizardState.allWizardsValues.map(wizObject => {\r\n // if (wizObject.wizardItemId === wizardState.wizardActiveItem.id && wizObject.quoteIndex === quotesState.activeQuoteIndex) {\r\n if (wizObject.wizardItemId === wizardState.wizardActiveItem.id && wizObject.quoteIndex === 0) {\r\n wizObject.lastVisitedStep = wizardActiveStep // keep it up to date to be able to restore\r\n if (wizardState.wizardConflictingSteps.length) {\r\n wizObject.wizardSelectedValues = Object.assign({}, newWizValues)\r\n }\r\n }\r\n return wizObject\r\n })\r\n }\r\n\r\n dispatch({\r\n type: SET_WIZARD_ACTIVE_STEP,\r\n payload: {\r\n wizardActiveStep,\r\n wizardSelectedValues: newWizValues,\r\n wizardConflictingSteps,\r\n allWizardsValues,\r\n // quoteIndex: quotesState.activeQuoteIndex,\r\n quoteIndex: 0,\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport const setWizardSelectedValues = (wizardSelectedValues, direct = false, wizardItem = null) => {\r\n return (dispatch, getState) => {\r\n const {wizardState} = getState();\r\n const wizardActiveItem = wizardItem || wizardState.wizardActiveItem;\r\n\r\n let wizardConflictingSteps = wizardState.wizardConflictingSteps;\r\n\r\n let newWizValues = direct\r\n ? Object.assign({}, wizardSelectedValues)\r\n : Object.assign({}, wizardState.wizardSelectedValues, wizardSelectedValues);\r\n\r\n if (!direct && wizardSelectedValues && Object.keys(wizardSelectedValues).length === 1) {\r\n wizardConflictingSteps = getConflictingWizardSteps(\r\n newWizValues,\r\n {wizardActiveItem, quoteIndex: 0, wizardSelectedValues},\r\n );\r\n }\r\n\r\n if (wizardActiveItem) {\r\n // console.log(\"wizardConflictingSteps\", action.payload.wizardConflictingSteps);\r\n // this works for QKB UI only for now, we are not using it on lixil\r\n const allWizardsValues = wizardConflictingSteps.length // do not change them to be able to restore when wizard is closed\r\n ? wizardState.allWizardsValues\r\n : getUpdatedAllWizardValues(wizardState, 0, wizardActiveItem.id, newWizValues);\r\n\r\n dispatch({\r\n type: SET_WIZARD_SELECTED_VALUES,\r\n payload: {\r\n quoteIndex: 0,\r\n wizardSelectedValues: newWizValues,\r\n allWizardsValues,\r\n wizardConflictingSteps\r\n }\r\n });\r\n\r\n return;\r\n }\r\n\r\n dispatch({\r\n type: SET_WIZARD_SELECTED_VALUES,\r\n payload: {\r\n wizardSelectedValues: newWizValues,\r\n wizardConflictingSteps,\r\n // direct,\r\n quoteIndex: 0,\r\n // wizardActiveItem: wizardItem || wizardState.wizardActiveItem,\r\n // fabricatorState,\r\n // cartItems: cartState.cartItems\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport const setAllWizardSelectedValues = (wizardSelectedValues, quoteIndex, wizardItemId) => ({\r\n type: SET_ALL_WIZARD_SELECTED_VALUES,\r\n payload: {wizardSelectedValues, quoteIndex, wizardItemId}\r\n});\r\n\r\nexport const updateAllWizardValues = (allWizardsValues) => ({\r\n type: RESTORE_ALL_WIZARD_SELECTED_VALUES,\r\n payload: {allWizardsValues}\r\n})\r\n","import {postLixilCalendar, postLixilGetSalesRep} from \"../api/lixil-api\";\r\nimport {defaultTimeValue} from \"./appointmentReducer\";\r\nimport {getLixilCampaignInfo, LIXIL_PRODUCT_TYPES} from \"../lixilLogic/lixilActions\";\r\n\r\nexport const SET_APPOINTMENT_DATE = \"SET_APPOINTMENT_DATE\";\r\nexport const SET_APPOINTMENT_TIME = \"SET_APPOINTMENT_TIME\";\r\nexport const SET_APPOINTMENT_TIME_STEP_ACTIVE = \"SET_APPOINTMENT_TIME_STEP_ACTIVE\";\r\nexport const SET_AVAILABLE_APPOINTMENTS = \"SET_AVAILABLE_APPOINTMENTS\";\r\nexport const SET_APPOINTMENTS_NOT_AVAILABLE = \"SET_APPOINTMENTS_NOT_AVAILABLE\";\r\nexport const SET_SALES_REP_ID = \"SET_SALES_REP_ID\";\r\nexport const setAppointmentDate = (date) => ({\r\n type: SET_APPOINTMENT_DATE,\r\n payload: date\r\n});\r\n\r\nexport const setAppointmentTime = (time = \"\", timeSlot = \"\") => ({\r\n type: SET_APPOINTMENT_TIME,\r\n payload: {time, timeSlot}\r\n});\r\n\r\nexport const setAppointmentTimeStepActive = (timeStepIsActive) => ({\r\n type: SET_APPOINTMENT_TIME_STEP_ACTIVE,\r\n payload: timeStepIsActive\r\n});\r\n\r\nexport const setAvailableAppointments = (availableAppointmentDates) => {\r\n return (dispatch, getState) => {\r\n const {appointmentDate, appointmentTimeSlot} = getState().appointmentState;\r\n let payload = {\r\n availableAppointmentDates\r\n };\r\n if (appointmentDate) {\r\n const formattedToMatchApiDate = formatCalendarDateToMatchAvailableDate(new Date(appointmentDate));\r\n const selectedLixilDateObject = availableAppointmentDates.find(dateObject => {\r\n return dateObject.salesRepAppointmentDate === formattedToMatchApiDate\r\n });\r\n if (!selectedLixilDateObject) {\r\n payload.appointmentDate = \"\";\r\n payload.appointmentTimeSlot = defaultTimeValue;\r\n } else if (!selectedLixilDateObject.salesRepsInSlots.some(timeSlotObject => timeSlotObject.timeSlot === appointmentTimeSlot)) {\r\n payload.appointmentTimeSlot = defaultTimeValue;\r\n }\r\n }\r\n dispatch({\r\n type: SET_AVAILABLE_APPOINTMENTS,\r\n payload\r\n });\r\n }\r\n};\r\n\r\nexport const setAppointmentsNotAvailable = (appointmentsNotAvailable) => ({\r\n type: SET_APPOINTMENTS_NOT_AVAILABLE,\r\n payload: {appointmentsNotAvailable}\r\n});\r\n\r\nexport const setSalesRepId = (salesRepID) => ({\r\n type: SET_SALES_REP_ID,\r\n payload: {salesRepID}\r\n});\r\n\r\nconst getCommonLixilPostData = (store) => {\r\n const {userState, wizardState} = store;\r\n const {userInfo, userLocation} = userState;\r\n\r\n const productId = wizardState.wizardSelectedValues\r\n && wizardState.wizardSelectedValues[1]\r\n && wizardState.wizardSelectedValues[1].selectedFeature\r\n ? wizardState.wizardSelectedValues[1].selectedFeature.id\r\n : 1;\r\n\r\n const productName = getLixilCampaignInfo(store).Product === LIXIL_PRODUCT_TYPES.srBathing\r\n ? LIXIL_PRODUCT_TYPES.srBathing\r\n : \"BR\";\r\n\r\n return {\r\n contactData: {\r\n email: userInfo.email,\r\n firstName: userInfo.firstName,\r\n installationAddress: userInfo.address,\r\n lastName: userInfo.lastName,\r\n phone: userInfo.phone,\r\n zipcode: userLocation.postal || userInfo.postal,\r\n \"city\": userLocation.city,\r\n \"direction\": userLocation.direction,\r\n \"state\": userLocation.state,\r\n \"streetName\": userLocation.streetName,\r\n \"streetNumber\": userLocation.streetNumber,\r\n },\r\n productInfo: {\r\n productId,\r\n productName,\r\n }\r\n }\r\n}\r\n\r\n export const checkLixilCalendar = () => {\r\n return async (dispatch, getState) => {\r\n\r\n const postCalendarData = getCommonLixilPostData(getState());\r\n\r\n // 1) register user\r\n const postCalendarResponse = await postLixilCalendar(postCalendarData);\r\n console.log(\"postCalendarResponse\", postCalendarResponse);\r\n\r\n if (postCalendarResponse && postCalendarResponse.data && postCalendarResponse.data.salesRepAvailability) {\r\n // dispatch(setAppointmentsNotAvailable(false)); // faraday reponse not available for this address\r\n // removed, it should be set when user submitted the form, if they opened calendar and left - it should be noAppt\r\n dispatch(setAvailableAppointments(postCalendarResponse.data.salesRepAvailability.availableSalesReps));\r\n return true\r\n }\r\n\r\n // dispatch(setAvailableAppointments([\r\n // {\r\n // \"salesRepAppointmentDate\": \"2024-03-18\",\r\n // \"salesRepsInSlots\": [\r\n // {\r\n // \"slotEndTime\": \"string\",\r\n // \"slotStartTime\": \"string\",\r\n // \"timeSlot\": \"string\"\r\n // }\r\n // ]\r\n // }\r\n // ]));\r\n\r\n // return !(postCalendarResponse && postCalendarResponse.data && postCalendarResponse.data.salesRepAvailability)\r\n return false\r\n }\r\n }\r\n\r\nexport const getLixilSalesRep = () => {\r\n return async (dispatch, getState) => {\r\n\r\n const store = getState();\r\n const {appointmentState} = store;\r\n\r\n let postData = getCommonLixilPostData(store);\r\n\r\n postData.date = formatCalendarDateToMatchAvailableDate(appointmentState.appointmentDate);\r\n // postData.consultationTime = appointmentState.appointmentTime;\r\n // postData.timeSlotId = 1;\r\n postData.timeSlot = appointmentState.appointmentTimeSlot;\r\n\r\n // 1) register user\r\n const postSalesRepResponse = await postLixilGetSalesRep(postData);\r\n console.log(\"postSalesRepResponse\", postSalesRepResponse);\r\n\r\n if (postSalesRepResponse && postSalesRepResponse.data && postSalesRepResponse.data.salesRepID) {\r\n dispatch(setSalesRepId(postSalesRepResponse.data.salesRepID));\r\n }\r\n\r\n // return !(postCalendarResponse && postCalendarResponse.data && postCalendarResponse.data.salesRepAvailability)\r\n return false\r\n }\r\n}\r\n\r\nexport const formatCalendarDateToMatchAvailableDate = (calendarDate, withSlashes = false) => {\r\n\r\n let day = \"\"+calendarDate.getDate();\r\n let month = \"\"+(calendarDate.getMonth() + 1); // +1 because getMonth returns starting from 0 (January is 0)\r\n let year = \"\"+calendarDate.getFullYear();\r\n\r\n day = day.length === 1 ? \"0\" + day : day;\r\n month = month.length === 1 ? \"0\" + month : month;\r\n\r\n if (withSlashes) {\r\n return month + \"/\" + day + \"/\" + year\r\n }\r\n\r\n return year + \"-\" + month + \"-\" + day\r\n}\r\n\r\nexport const getSelectedLixilDateObject = (appDate, availableAppointmentDates) => {\r\n const formattedToMatchApiDate = formatCalendarDateToMatchAvailableDate(appDate);\r\n const selectedLixilDateObject = availableAppointmentDates.find(dateObject => {\r\n return dateObject.salesRepAppointmentDate === formattedToMatchApiDate\r\n });\r\n if (!selectedLixilDateObject) {\r\n console.log(\"no selected day? try better search, something is incorrect\", );\r\n return null\r\n }\r\n return selectedLixilDateObject\r\n}\r\n","import invert from \"lodash/invert\";\r\nimport {LayoutType} from \"./constants\";\r\nimport {UseFullSizeImages} from \"../../../config\";\r\nimport {pnpoly} from \"../../../misc/utils\";\r\n\r\nlet layouts = {};\r\nObject.keys(LayoutType).forEach(layoutName => {\r\n layouts[layoutName] = {\r\n Walls: {\r\n Ceiling: 1000,\r\n RightWall: 2000,\r\n LeftWall: 3000,\r\n PopoutWall: 6000,\r\n Backsplash: 4000,\r\n BacksplashRightWall: 4050,\r\n BacksplashLeftWall: 4100,\r\n RightWallBacksplash: 4150,\r\n LeftWallBacksplash: 4200,\r\n // FourInchBacksplash: 12000,\r\n // FullHeightBacksplash: 13000,\r\n // SixHeightBacksplash: 14000,\r\n },\r\n Floor: 5000,\r\n Globals: {\r\n GlobalShadow: 7000,\r\n Baseboard: 8000,\r\n CeilingLights: 9000,\r\n CeilingHighlights: 10000,\r\n Decor1: 25000,\r\n Decor2: 32000,\r\n Decor3: 36500, // center island decor\r\n Decor4: 41000,\r\n },\r\n Cabinet: {\r\n TopCabinetShadow: 15000,\r\n TopCabinetShadowPart2: 15005,\r\n BottomCabinetShadow: 15500,\r\n TopCabinet: 16000,\r\n TopCabinetModuleBox: 16050,\r\n CrownMolding: 17000,\r\n TopCabinet2: 19000, //Crown Molding should be higher than Top cabinet (c) Nikita\r\n TopCabinetModuleBox2: 219050, //Crown Molding should be higher than Top cabinet (c) Nikita\r\n CrownMolding2: 20000,\r\n BottomCabinet: 22000,\r\n BottomCabinetModuleBox: 22050,\r\n BottomCabinet2: 27000,\r\n BottomCabinetModuleBox2: 27050,\r\n TopHandle: 28000,\r\n TopHandle2: 28100,\r\n BottomHandle: 28500,\r\n BottomHandle2: 28750,\r\n Peninsula: 29250,\r\n TopCabinetModules: {},\r\n BottomCabinetModules: {},\r\n },\r\n Appliances: {\r\n Microwave: 21000,\r\n Hood: 18000,\r\n Dishwasher: 23000,\r\n Range: 26000,\r\n Fridge: 29000,\r\n FridgeShadow: 29050,\r\n },\r\n CountertopGroup: {\r\n Countertop: 24000,\r\n Countertop2: 30000,\r\n Sink: 43000,\r\n Faucet: 44000,\r\n Stovetop: 45000,\r\n // Countertop3: 42000,\r\n },\r\n CenterIsland: {\r\n CenterIslandShadow: 29500,\r\n Cabinet: 31000,\r\n Countertop: 36000,\r\n Sink: 37000,\r\n Faucet: 38000,\r\n Stovetop: 38500,\r\n Range: 38750,\r\n ChairsShadow: 35000,\r\n Chairs: 39000,\r\n Handle: 40000,\r\n },\r\n };\r\n});\r\n\r\nlayouts[\"Small\"].Appliances.Fridge = 15750;\r\nlayouts[\"SmallWithPeninsula\"].Appliances.Fridge = 15750;\r\nlayouts[\"SmallWithIsland\"].Appliances.Fridge = 15750;\r\nlayouts[\"SmallWithPeninsulaWithIsland\"].Appliances.Fridge = 15750;\r\nlayouts[\"Small\"].Appliances.FridgeShadow = 15800;\r\nlayouts[\"SmallWithPeninsula\"].Appliances.FridgeShadow = 15800;\r\nlayouts[\"SmallWithIsland\"].Appliances.FridgeShadow = 15800;\r\nlayouts[\"SmallWithPeninsulaWithIsland\"].Appliances.FridgeShadow = 15800;\r\n\r\nlet startTopCabinetZIndex = 17100;\r\nlet startTopCabinetZIndex2 = 21100;\r\n\r\nlet startBottomCabinetZIndex = 22100;\r\nlet startBottomCabinetZIndex2 = 27100;\r\n\r\nObject.keys(LayoutType).forEach(layoutName => {\r\n let moduleTopNumber = 1, moduleBottomNumber = 1;\r\n for (let i = 1; i <= 8; i++) { // 8 modules\r\n for (let k = 1; k <= 64; k++) { // 64 module parts\r\n const module_modulePart = i + \"_\" + k;\r\n layouts[layoutName].Cabinet.TopCabinetModules[module_modulePart] = (i <= 5)\r\n ? startTopCabinetZIndex + (i*100)+ k\r\n : startTopCabinetZIndex2 + (moduleTopNumber*100)+ k;\r\n layouts[layoutName].Cabinet.BottomCabinetModules[module_modulePart] = (i <= 6)\r\n ? startBottomCabinetZIndex + (i*100)+ k\r\n : startBottomCabinetZIndex2 + (moduleBottomNumber*100)+ k;\r\n }\r\n if (i > 5) {\r\n moduleTopNumber++;\r\n }\r\n if (i > 6) {\r\n moduleBottomNumber++;\r\n }\r\n }\r\n});\r\n\r\nconst getLayerDimensions = (zIndex, currentLayout) => {\r\n const fullImagesFactor = UseFullSizeImages ? 185.1851851851852 : 100;\r\n\r\n if ((zIndex >= layouts[currentLayout].Cabinet.TopCabinetModules[\"1_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.TopCabinetModules[\"1_64\"])) {\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*240],[(fullImagesFactor/100)*290,(fullImagesFactor/100)*240],[(fullImagesFactor/100)*290,(fullImagesFactor/100)*400],[0,(fullImagesFactor/100)*400]],\r\n width: (fullImagesFactor/100)*290,\r\n height: (fullImagesFactor/100)*160\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.TopCabinetModules[\"2_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.TopCabinetModules[\"2_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*260,(fullImagesFactor/100)*270],[(fullImagesFactor/100)*480,(fullImagesFactor/100)*270],[(fullImagesFactor/100)*480,(fullImagesFactor/100)*510],[(fullImagesFactor/100)*260,(fullImagesFactor/100)*510]],\r\n width: (fullImagesFactor/100)*220,\r\n height: (fullImagesFactor/100)*240\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.TopCabinetModules[\"3_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.TopCabinetModules[\"3_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*470,(fullImagesFactor/100)*300],[(fullImagesFactor/100)*630,(fullImagesFactor/100)*300],[(fullImagesFactor/100)*630,(fullImagesFactor/100)*510],[(fullImagesFactor/100)*470,(fullImagesFactor/100)*510]],\r\n width: (fullImagesFactor/100)*160,\r\n height: (fullImagesFactor/100)*210\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.TopCabinetModules[\"4_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.TopCabinetModules[\"4_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*620,(fullImagesFactor/100)*310],[(fullImagesFactor/100)*770,(fullImagesFactor/100)*310],[(fullImagesFactor/100)*770,(fullImagesFactor/100)*510],[(fullImagesFactor/100)*620,(fullImagesFactor/100)*510]],\r\n width: (fullImagesFactor/100)*150,\r\n height: (fullImagesFactor/100)*200\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.TopCabinetModules[\"5_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.TopCabinetModules[\"5_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*750,(fullImagesFactor/100)*280],[(fullImagesFactor/100)*930,(fullImagesFactor/100)*280],[(fullImagesFactor/100)*930,(fullImagesFactor/100)*510],[(fullImagesFactor/100)*750,(fullImagesFactor/100)*280]],\r\n width: (fullImagesFactor/100)*180,\r\n height: (fullImagesFactor/100)*230\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.TopCabinetModules[\"6_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.TopCabinetModules[\"6_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*910,(fullImagesFactor/100)*260],[(fullImagesFactor/100)*1130,(fullImagesFactor/100)*260],[(fullImagesFactor/100)*1130,(fullImagesFactor/100)*510],[(fullImagesFactor/100)*910,(fullImagesFactor/100)*510]],\r\n width: (fullImagesFactor/100)*220,\r\n height: (fullImagesFactor/100)*250\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.TopCabinetModules[\"7_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.TopCabinetModules[\"7_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*1120,(fullImagesFactor/100)*220],[(fullImagesFactor/100)*1400,(fullImagesFactor/100)*220],[(fullImagesFactor/100)*1400,(fullImagesFactor/100)*520],[(fullImagesFactor/100)*1120,(fullImagesFactor/100)*520]],\r\n width: (fullImagesFactor/100)*280,\r\n height: (fullImagesFactor/100)*300\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.TopCabinetModules[\"8_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.TopCabinetModules[\"8_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*1380,(fullImagesFactor/100)*190],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*190],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*520],[(fullImagesFactor/100)*1380,(fullImagesFactor/100)*520]],\r\n width: (fullImagesFactor/100)*240,\r\n height: (fullImagesFactor/100)*330\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.BottomCabinetModules[\"1_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.BottomCabinetModules[\"1_64\"])) {\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*240],[(fullImagesFactor/100)*290,(fullImagesFactor/100)*240],[(fullImagesFactor/100)*290,(fullImagesFactor/100)*400],[0,(fullImagesFactor/100)*400]],\r\n width: (fullImagesFactor/100)*290,\r\n height: (fullImagesFactor/100)*160\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.BottomCabinetModules[\"2_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.BottomCabinetModules[\"2_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*280,(fullImagesFactor/100)*620],[(fullImagesFactor/100)*480,(fullImagesFactor/100)*620],[(fullImagesFactor/100)*480,(fullImagesFactor/100)*850],[(fullImagesFactor/100)*280,(fullImagesFactor/100)*850]],\r\n width: (fullImagesFactor/100)*200,\r\n height: (fullImagesFactor/100)*230\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.BottomCabinetModules[\"3_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.BottomCabinetModules[\"3_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*470,(fullImagesFactor/100)*610],[(fullImagesFactor/100)*630,(fullImagesFactor/100)*610],[(fullImagesFactor/100)*630,(fullImagesFactor/100)*800],[(fullImagesFactor/100)*470,(fullImagesFactor/100)*800]],\r\n width: (fullImagesFactor/100)*160,\r\n height: (fullImagesFactor/100)*190\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.BottomCabinetModules[\"4_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.BottomCabinetModules[\"4_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*630,(fullImagesFactor/100)*600],[(fullImagesFactor/100)*760,(fullImagesFactor/100)*600],[(fullImagesFactor/100)*760,(fullImagesFactor/100)*800],[(fullImagesFactor/100)*630,(fullImagesFactor/100)*800]],\r\n width: (fullImagesFactor/100)*130,\r\n height: (fullImagesFactor/100)*200\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.BottomCabinetModules[\"5_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.BottomCabinetModules[\"5_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*750,(fullImagesFactor/100)*620],[(fullImagesFactor/100)*920,(fullImagesFactor/100)*620],[(fullImagesFactor/100)*920,(fullImagesFactor/100)*840],[(fullImagesFactor/100)*750,(fullImagesFactor/100)*840]],\r\n width: (fullImagesFactor/100)*170,\r\n height: (fullImagesFactor/100)*220\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.BottomCabinetModules[\"6_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.BottomCabinetModules[\"6_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*910,(fullImagesFactor/100)*640],[(fullImagesFactor/100)*1130,(fullImagesFactor/100)*640],[(fullImagesFactor/100)*1130,(fullImagesFactor/100)*880],[(fullImagesFactor/100)*910,(fullImagesFactor/100)*880]],\r\n width: (fullImagesFactor/100)*220,\r\n height: (fullImagesFactor/100)*240\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.BottomCabinetModules[\"7_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.BottomCabinetModules[\"7_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*1110,(fullImagesFactor/100)*660],[(fullImagesFactor/100)*1390,(fullImagesFactor/100)*660],[(fullImagesFactor/100)*1390,(fullImagesFactor/100)*940],[(fullImagesFactor/100)*1110,(fullImagesFactor/100)*940]],\r\n width: (fullImagesFactor/100)*280,\r\n height: (fullImagesFactor/100)*280\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.BottomCabinetModules[\"8_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.BottomCabinetModules[\"8_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*1380,(fullImagesFactor/100)*690],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*690],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*990],[(fullImagesFactor/100)*1380,(fullImagesFactor/100)*990]],\r\n width: (fullImagesFactor/100)*240,\r\n height: (fullImagesFactor/100)*300\r\n };\r\n }\r\n\r\n switch (zIndex) {\r\n case layouts[currentLayout].Floor:\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*750],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*750],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*1080],[0,(fullImagesFactor/100)*1080]],\r\n width: (fullImagesFactor/100)*1620,\r\n height: (fullImagesFactor/100)*330\r\n };\r\n\r\n //*** Walls ***//\r\n case layouts[currentLayout].Walls.LeftWall:\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*100],[(fullImagesFactor/100)*740,(fullImagesFactor/100)*100],[(fullImagesFactor/100)*740,(fullImagesFactor/100)*900],[0,(fullImagesFactor/100)*900]],\r\n width: (fullImagesFactor/100)*740,\r\n height: (fullImagesFactor/100)*800\r\n };\r\n case layouts[currentLayout].Walls.LeftWallBacksplash:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*210,(fullImagesFactor/100)*500],[(fullImagesFactor/100)*630,(fullImagesFactor/100)*500],[(fullImagesFactor/100)*630,(fullImagesFactor/100)*590],[(fullImagesFactor/100)*210,(fullImagesFactor/100)*590]],\r\n };\r\n case layouts[currentLayout].Walls.RightWall:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*600,(fullImagesFactor/100)*45],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*45],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*970],[(fullImagesFactor/100)*600,(fullImagesFactor/100)*970]],\r\n width: (fullImagesFactor/100)*1020,\r\n height: (fullImagesFactor/100)*925\r\n };\r\n case layouts[currentLayout].Walls.RightWallBacksplash:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*630,(fullImagesFactor/100)*330],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*200],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*580],[(fullImagesFactor/100)*630,(fullImagesFactor/100)*580]],\r\n };\r\n case layouts[currentLayout].Walls.Ceiling:\r\n return {\r\n polygonArray: [[0,0],[(fullImagesFactor/100)*1620,0],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*260],[0,(fullImagesFactor/100)*260]],\r\n width: (fullImagesFactor/100)*1620,\r\n height: (fullImagesFactor/100)*260\r\n };\r\n case layouts[currentLayout].Walls.PopoutWall:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*200,(fullImagesFactor/100)*120],[(fullImagesFactor/100)*740,(fullImagesFactor/100)*120],[(fullImagesFactor/100)*740,(fullImagesFactor/100)*880],[(fullImagesFactor/100)*200,(fullImagesFactor/100)*880]],\r\n width: (fullImagesFactor/100)*540,\r\n height: (fullImagesFactor/100)*760\r\n };\r\n case layouts[currentLayout].Walls.Backsplash:\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*200],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*200],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*700],[0,(fullImagesFactor/100)*700]],\r\n width: (fullImagesFactor/100)*1620,\r\n height: (fullImagesFactor/100)*500\r\n };\r\n case layouts[currentLayout].Walls.BacksplashLeftWall:\r\n return {\r\n polygonArray: [\r\n [(fullImagesFactor/100)*200,(fullImagesFactor/100)*280],\r\n [(fullImagesFactor/100)*632,(fullImagesFactor/100)*336],\r\n [(fullImagesFactor/100)*632,(fullImagesFactor/100)*600],\r\n [(fullImagesFactor/100)*200,(fullImagesFactor/100)*640]],\r\n };\r\n case layouts[currentLayout].Walls.BacksplashRightWall:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*633,(fullImagesFactor/100)*336],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*210],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*680],[(fullImagesFactor/100)*633,(fullImagesFactor/100)*600]],\r\n };\r\n\r\n //*** Cabinet ***//\r\n case layouts[currentLayout].Cabinet.BottomCabinet:\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*590],[(fullImagesFactor/100)*1000,(fullImagesFactor/100)*590],[(fullImagesFactor/100)*1000,(fullImagesFactor/100)*860],[0,(fullImagesFactor/100)*860]],\r\n width: (fullImagesFactor/100)*1000,\r\n height: (fullImagesFactor/100)*270\r\n };\r\n case layouts[currentLayout].Cabinet.BottomCabinet2:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*1090,(fullImagesFactor/100)*620],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*620],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*1080],[(fullImagesFactor/100)*1090,(fullImagesFactor/100)*1080]],\r\n width: (fullImagesFactor/100)*530,\r\n height: (fullImagesFactor/100)*480\r\n };\r\n case layouts[currentLayout].Cabinet.CrownMolding:\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*160],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*160],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*350],[0,(fullImagesFactor/100)*350]],\r\n width: (fullImagesFactor/100)*1620,\r\n height: (fullImagesFactor/100)*190\r\n };\r\n case layouts[currentLayout].Cabinet.CrownMolding2:\r\n return {\r\n polygonArray: [\r\n [(fullImagesFactor/100)*900,(fullImagesFactor/100)*110],\r\n [(fullImagesFactor/100)*1620,(fullImagesFactor/100)*110],\r\n [(fullImagesFactor/100)*1620,(fullImagesFactor/100)*280],\r\n [(fullImagesFactor/100)*900,(fullImagesFactor/100)*280]\r\n ],\r\n width: (fullImagesFactor/100)*720,\r\n height: (fullImagesFactor/100)*170\r\n };\r\n case layouts[currentLayout].Cabinet.TopCabinet:\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*180],[(fullImagesFactor/100)*1000,(fullImagesFactor/100)*180],[(fullImagesFactor/100)*1000,(fullImagesFactor/100)*520],[0,(fullImagesFactor/100)*520]],\r\n width: (fullImagesFactor/100)*1000,\r\n height: (fullImagesFactor/100)*340\r\n };\r\n case layouts[currentLayout].Cabinet.TopCabinet2:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*910,(fullImagesFactor/100)*130],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*130],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*530],[(fullImagesFactor/100)*910,(fullImagesFactor/100)*530]],\r\n width: (fullImagesFactor/100)*710,\r\n height: (fullImagesFactor/100)*400\r\n };\r\n case layouts[currentLayout].Cabinet.Peninsula:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*1190,(fullImagesFactor/100)*650],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*650],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*1080],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*1080]],\r\n width: (fullImagesFactor/100)*430,\r\n height: (fullImagesFactor/100)*430\r\n };\r\n case layouts[currentLayout].Cabinet.TopHandle:\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*230],[(fullImagesFactor/100)*990,(fullImagesFactor/100)*230],[(fullImagesFactor/100)*990,(fullImagesFactor/100)*550],[0,(fullImagesFactor/100)*550]],\r\n width: (fullImagesFactor/100)*990,\r\n height: (fullImagesFactor/100)*320\r\n };\r\n case layouts[currentLayout].Cabinet.TopHandle2:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*990,(fullImagesFactor/100)*150],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*150],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*550],[(fullImagesFactor/100)*990,(fullImagesFactor/100)*550]],\r\n width: (fullImagesFactor/100)*630,\r\n height: (fullImagesFactor/100)*400\r\n };\r\n case layouts[currentLayout].Cabinet.BottomHandle:\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*620],[(fullImagesFactor/100)*910,(fullImagesFactor/100)*620],[(fullImagesFactor/100)*910,(fullImagesFactor/100)*920],[0,(fullImagesFactor/100)*920]],\r\n width: (fullImagesFactor/100)*910,\r\n height: (fullImagesFactor/100)*300\r\n };\r\n case layouts[currentLayout].Cabinet.BottomHandle2:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*1100,(fullImagesFactor/100)*670],[(fullImagesFactor/100)*1100,(fullImagesFactor/100)*670],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*1000],[(fullImagesFactor/100)*1160,(fullImagesFactor/100)*1000]],\r\n width: (fullImagesFactor/100)*520,\r\n height: (fullImagesFactor/100)*330\r\n };\r\n\r\n //*** Appliances ***//\r\n case layouts[currentLayout].Appliances.Dishwasher:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*650,(fullImagesFactor/100)*610],[(fullImagesFactor/100)*840,(fullImagesFactor/100)*840],[(fullImagesFactor/100)*840,(fullImagesFactor/100)*840],[(fullImagesFactor/100)*650,(fullImagesFactor/100)*610]],\r\n width: (fullImagesFactor/100)*190,\r\n height: (fullImagesFactor/100)*230\r\n };\r\n case layouts[currentLayout].Appliances.Fridge:\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*400],[(fullImagesFactor/100)*880,(fullImagesFactor/100)*400],[(fullImagesFactor/100)*880,(fullImagesFactor/100)*1080],[0,(fullImagesFactor/100)*1080]],\r\n width: (fullImagesFactor/100)*880,\r\n height: (fullImagesFactor/100)*680\r\n };\r\n case layouts[currentLayout].Appliances.Hood:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*870,(fullImagesFactor/100)*130],[(fullImagesFactor/100)*1190,(fullImagesFactor/100)*130],[(fullImagesFactor/100)*1190,(fullImagesFactor/100)*520],[(fullImagesFactor/100)*870,(fullImagesFactor/100)*520]],\r\n width: (fullImagesFactor/100)*320,\r\n height: (fullImagesFactor/100)*390\r\n };\r\n case layouts[currentLayout].Appliances.Microwave:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*890,(fullImagesFactor/100)*370],[(fullImagesFactor/100)*1130,(fullImagesFactor/100)*370],[(fullImagesFactor/100)*1130,(fullImagesFactor/100)*520],[(fullImagesFactor/100)*890,(fullImagesFactor/100)*520]],\r\n width: (fullImagesFactor/100)*240,\r\n height: (fullImagesFactor/100)*150\r\n };\r\n case layouts[currentLayout].Appliances.Range:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*890,(fullImagesFactor/100)*550],[(fullImagesFactor/100)*1200,(fullImagesFactor/100)*550],[(fullImagesFactor/100)*1200,(fullImagesFactor/100)*910],[(fullImagesFactor/100)*890,(fullImagesFactor/100)*910]],\r\n width: (fullImagesFactor/100)*310,\r\n height: (fullImagesFactor/100)*360\r\n };\r\n\r\n //*** CountertopGroup ***//\r\n case layouts[currentLayout].CountertopGroup.Countertop:\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*570],[(fullImagesFactor/100)*1020,(fullImagesFactor/100)*570],[(fullImagesFactor/100)*1020,(fullImagesFactor/100)*650],[0,(fullImagesFactor/100)*650]],\r\n width: (fullImagesFactor/100)*1020,\r\n height: (fullImagesFactor/100)*80\r\n };\r\n case layouts[currentLayout].CountertopGroup.Countertop2:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*1090,(fullImagesFactor/100)*630],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*630],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*1070],[(fullImagesFactor/100)*1090,(fullImagesFactor/100)*1070]],\r\n width: (fullImagesFactor/100)*530,\r\n height: (fullImagesFactor/100)*440\r\n };\r\n case layouts[currentLayout].CountertopGroup.Sink:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*1240,(fullImagesFactor/100)*630],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*630],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*720],[(fullImagesFactor/100)*1240,(fullImagesFactor/100)*720]],\r\n width: (fullImagesFactor/100)*380,\r\n height: (fullImagesFactor/100)*90\r\n };\r\n case layouts[currentLayout].CountertopGroup.Faucet:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*1240,(fullImagesFactor/100)*580],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*580],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*720],[(fullImagesFactor/100)*1240,(fullImagesFactor/100)*720]],\r\n width: (fullImagesFactor/100)*380,\r\n height: (fullImagesFactor/100)*140\r\n };\r\n case layouts[currentLayout].CountertopGroup.Stovetop:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*530,(fullImagesFactor/100)*660],[(fullImagesFactor/100)*920,(fullImagesFactor/100)*660],[(fullImagesFactor/920)*1200,(fullImagesFactor/100)*760],[(fullImagesFactor/100)*530,(fullImagesFactor/100)*760]],\r\n width: (fullImagesFactor/100)*390,\r\n height: (fullImagesFactor/100)*100\r\n };\r\n\r\n //*** CenterIsland ***//\r\n case layouts[currentLayout].CenterIsland.Cabinet:\r\n case layouts[currentLayout].CenterIsland.Handle:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*250,(fullImagesFactor/100)*640],[(fullImagesFactor/100)*1160,(fullImagesFactor/100)*640],[(fullImagesFactor/100)*1160,(fullImagesFactor/100)*1080],[(fullImagesFactor/100)*1160,(fullImagesFactor/100)*1080]],\r\n width: (fullImagesFactor/100)*910,\r\n height: (fullImagesFactor/100)*440\r\n };\r\n case layouts[currentLayout].CenterIsland.Countertop:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*110,(fullImagesFactor/100)*640],[(fullImagesFactor/100)*1190,(fullImagesFactor/100)*640],[(fullImagesFactor/100)*1190,(fullImagesFactor/100)*1080],[(fullImagesFactor/100)*110,(fullImagesFactor/100)*1080]],\r\n width: (fullImagesFactor/100)*1080,\r\n height: (fullImagesFactor/100)*(fullImagesFactor/100)*440\r\n };\r\n case layouts[currentLayout].CenterIsland.Chairs:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*90,(fullImagesFactor/100)*690],[(fullImagesFactor/100)*1160,(fullImagesFactor/100)*690],[(fullImagesFactor/100)*1160,(fullImagesFactor/100)*1080],[(fullImagesFactor/100)*90,(fullImagesFactor/100)*1080]],\r\n width: (fullImagesFactor/100)*1070,\r\n height: (fullImagesFactor/100)*390\r\n };\r\n case layouts[currentLayout].CenterIsland.Sink:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*530,(fullImagesFactor/100)*650],[(fullImagesFactor/100)*900,(fullImagesFactor/100)*650],[(fullImagesFactor/100)*900,(fullImagesFactor/100)*750],[(fullImagesFactor/100)*530,(fullImagesFactor/100)*750]],\r\n width: (fullImagesFactor/100)*370,\r\n height: (fullImagesFactor/100)*100\r\n };\r\n case layouts[currentLayout].CenterIsland.Faucet:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*530,(fullImagesFactor/100)*550],[(fullImagesFactor/100)*900,(fullImagesFactor/100)*550],[(fullImagesFactor/100)*900,(fullImagesFactor/100)*750],[(fullImagesFactor/100)*530,(fullImagesFactor/100)*750]],\r\n width: (fullImagesFactor/100)*370,\r\n height: (fullImagesFactor/100)*200\r\n };\r\n case layouts[currentLayout].CenterIsland.Stovetop:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*530,(fullImagesFactor/100)*660],[(fullImagesFactor/100)*920,(fullImagesFactor/100)*660],[(fullImagesFactor/920)*1200,(fullImagesFactor/100)*760],[(fullImagesFactor/100)*530,(fullImagesFactor/100)*760]],\r\n width: (fullImagesFactor/100)*390,\r\n height: (fullImagesFactor/100)*100\r\n };\r\n case layouts[currentLayout].CenterIsland.Range:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*530,(fullImagesFactor/100)*660],[(fullImagesFactor/100)*920,(fullImagesFactor/100)*660],[(fullImagesFactor/920)*1200,(fullImagesFactor/100)*760],[(fullImagesFactor/100)*530,(fullImagesFactor/100)*760]],\r\n width: (fullImagesFactor/100)*390,\r\n height: (fullImagesFactor/100)*100\r\n };\r\n default:\r\n return null\r\n }\r\n};\r\nconst checkForCanvasScale = (canvas, polygonArray) => {\r\n if (canvas && ((canvas.width !== canvas.offsetWidth) || (canvas.height !== canvas.offsetHeight))) {\r\n return polygonArray.map(point => {\r\n point = point.map(dot => Math.round(dot*canvas.offsetWidth/canvas.width));\r\n return point\r\n })\r\n }\r\n return polygonArray\r\n};\r\n\r\nexport default {\r\n layouts,\r\n getMenuByHoveredLayer: (currentLayout, layer, canvas) => {\r\n // console.log('currentLayout', currentLayout);\r\n // console.log('layer', layer);\r\n if ((\r\n (layer.zIndex >= layouts[currentLayout].Cabinet.TopCabinetModules[\"1_1\"])\r\n && (layer.zIndex <= layouts[currentLayout].Cabinet.TopCabinetModules[\"5_64\"])\r\n ) || (\r\n (layer.zIndex >= layouts[currentLayout].Cabinet.TopCabinetModules[\"6_1\"])\r\n && (layer.zIndex <= layouts[currentLayout].Cabinet.TopCabinetModules[\"8_64\"])\r\n )) {\r\n return {\r\n contextMenuPartId: \"top_cabinet\",\r\n module: invert(layouts[currentLayout].Cabinet.TopCabinetModules)[layer.zIndex],\r\n };\r\n } else if ((\r\n (layer.zIndex >= layouts[currentLayout].Cabinet.BottomCabinetModules[\"1_1\"])\r\n && (layer.zIndex <= layouts[currentLayout].Cabinet.BottomCabinetModules[\"6_64\"])\r\n ) || (\r\n (layer.zIndex >= layouts[currentLayout].Cabinet.BottomCabinetModules[\"7_1\"])\r\n && (layer.zIndex <= layouts[currentLayout].Cabinet.BottomCabinetModules[\"8_64\"])\r\n )) {\r\n return {\r\n contextMenuPartId: \"bottom_cabinet\",\r\n module: invert(layouts[currentLayout].Cabinet.BottomCabinetModules)[layer.zIndex],\r\n };\r\n }\r\n switch (layer.zIndex) {\r\n case layouts[currentLayout].Floor:\r\n return {\r\n parent: \"Floor\",\r\n child: \"Floor\"\r\n };\r\n case layouts[currentLayout].Walls.LeftWall: {\r\n let leftWallBacksplash = getLayerDimensions(layouts[currentLayout].Walls.LeftWallBacksplash, currentLayout);\r\n leftWallBacksplash.polygonArray = checkForCanvasScale(canvas, leftWallBacksplash.polygonArray);\r\n if (pnpoly(leftWallBacksplash.polygonArray, document.hoveredMousePos)) {\r\n return {\r\n contextMenuPartId: \"left_wall_custom\"\r\n };\r\n } else {\r\n return {\r\n parent: \"Walls\",\r\n child: \"Left Wall\"\r\n };\r\n }\r\n }\r\n case layouts[currentLayout].Walls.RightWall: {\r\n let rightWallBacksplash = getLayerDimensions(layouts[currentLayout].Walls.RightWallBacksplash, currentLayout);\r\n rightWallBacksplash.polygonArray = checkForCanvasScale(canvas, rightWallBacksplash.polygonArray);\r\n if (pnpoly(rightWallBacksplash.polygonArray, document.hoveredMousePos)) {\r\n return {\r\n contextMenuPartId: \"right_wall_custom\"\r\n };\r\n } else {\r\n return {\r\n parent: \"Walls\",\r\n child: \"Right Wall\"\r\n };\r\n }\r\n }\r\n case layouts[currentLayout].Walls.PopoutWall:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Popout Wall\"\r\n };\r\n case layouts[currentLayout].Walls.Backsplash: {\r\n let backsplashLeftWall = getLayerDimensions(layouts[currentLayout].Walls.BacksplashLeftWall, currentLayout);\r\n let backsplashRightWall = getLayerDimensions(layouts[currentLayout].Walls.BacksplashRightWall, currentLayout);\r\n backsplashLeftWall.polygonArray = checkForCanvasScale(canvas, backsplashLeftWall.polygonArray);\r\n backsplashRightWall.polygonArray = checkForCanvasScale(canvas, backsplashRightWall.polygonArray);\r\n if (pnpoly(backsplashLeftWall.polygonArray, document.hoveredMousePos)) {\r\n return {\r\n contextMenuPartId: \"backsplash_custom_left\"\r\n };\r\n } else if (pnpoly(backsplashRightWall.polygonArray, document.hoveredMousePos)) {\r\n return {\r\n contextMenuPartId: \"backsplash_custom_right\"\r\n };\r\n } else {\r\n return {\r\n contextMenuPartId: \"backsplash_custom\"\r\n };\r\n }\r\n }\r\n case layouts[currentLayout].Walls.Ceiling:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Ceiling\"\r\n };\r\n case layouts[currentLayout].Cabinet.TopCabinet:\r\n case layouts[currentLayout].Cabinet.TopCabinet2:\r\n return {\r\n parent: \"Cabinet\",\r\n child: \"Top Cabinet\"\r\n };\r\n case layouts[currentLayout].Cabinet.BottomCabinet:\r\n case layouts[currentLayout].Cabinet.BottomCabinet2:\r\n case layouts[currentLayout].Cabinet.Peninsula:\r\n return {\r\n parent: \"Cabinet\",\r\n child: \"Bottom Cabinet\"\r\n };\r\n case layouts[currentLayout].Cabinet.CrownMolding:\r\n case layouts[currentLayout].Cabinet.CrownMolding2:\r\n return {\r\n parent: \"Cabinet\",\r\n child: \"Crown Molding\"\r\n };\r\n case layouts[currentLayout].Cabinet.TopHandle:\r\n case layouts[currentLayout].Cabinet.TopHandle2:\r\n return {\r\n parent: \"Cabinet\",\r\n child: \"Top Handle\"\r\n };\r\n case layouts[currentLayout].Cabinet.BottomHandle:\r\n case layouts[currentLayout].Cabinet.BottomHandle2:\r\n return {\r\n parent: \"Cabinet\",\r\n child: \"Bottom Handle\"\r\n };\r\n case layouts[currentLayout].Appliances.Range:\r\n return {\r\n parent: \"Appliance\",\r\n child: \"Range\"\r\n };\r\n case layouts[currentLayout].Appliances.Fridge:\r\n return {\r\n parent: \"Appliance\",\r\n child: \"Fridge\"\r\n };\r\n case layouts[currentLayout].Appliances.Hood:\r\n return {\r\n parent: \"Appliance\",\r\n child: \"Hood\"\r\n };\r\n case layouts[currentLayout].Appliances.Microwave:\r\n return {\r\n parent: \"Appliance\",\r\n child: \"Microwave\"\r\n };\r\n case layouts[currentLayout].Appliances.Dishwasher:\r\n return {\r\n parent: \"Appliance\",\r\n child: \"Dishwasher\"\r\n };\r\n case layouts[currentLayout].CountertopGroup.Edge:\r\n return {\r\n parent: \"Countertop\",\r\n child: \"Edge\"\r\n };\r\n // case layouts[currentLayout].CountertopGroup.Countertop2:\r\n case layouts[currentLayout].CountertopGroup.Sink:\r\n case layouts[currentLayout].CountertopGroup.Faucet:\r\n case layouts[currentLayout].CountertopGroup.Countertop:\r\n case layouts[currentLayout].CountertopGroup.Countertop2:\r\n return {\r\n contextMenuPartId: \"countertop_group_custom\"\r\n };\r\n case layouts[currentLayout].CountertopGroup.Stovetop:\r\n return {\r\n parent: \"Countertop\",\r\n child: \"Stovetop\"\r\n };\r\n case layouts[currentLayout].CenterIsland.Chairs:\r\n return {\r\n parent: \"Center Island\",\r\n child: \"Chairs\"\r\n };\r\n case layouts[currentLayout].CenterIsland.Cabinet:\r\n return {\r\n parent: \"Center Island\",\r\n child: \"Cabinet\"\r\n };\r\n case layouts[currentLayout].CenterIsland.Edge:\r\n return {\r\n parent: \"Center Island\",\r\n child: \"Edge\"\r\n };\r\n case layouts[currentLayout].CenterIsland.Faucet:\r\n case layouts[currentLayout].CenterIsland.Sink:\r\n case layouts[currentLayout].CenterIsland.Stovetop:\r\n case layouts[currentLayout].CenterIsland.Range:\r\n case layouts[currentLayout].CenterIsland.Countertop:\r\n return {\r\n contextMenuPartId: \"center_island_custom\"\r\n };\r\n case layouts[currentLayout].CenterIsland.Handle:\r\n return {\r\n parent: \"Center Island\",\r\n child: \"Handle\"\r\n };\r\n default:\r\n return \"\"\r\n }\r\n },\r\n getLayerDimensions\r\n}\r\n\r\n\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {centerIslandThumbnail} from \"../assets\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PLACEMENTS} from \"../constants\";\r\n\r\nimport Cabinet from \"../subparts/centerIsland/cabinet\";\r\nimport Faucet from \"../subparts/centerIsland/faucet\";\r\nimport Sink from \"../subparts/centerIsland/sink\";\r\nimport Edge from \"../subparts/centerIsland/edge\";\r\nimport Countertop from \"../subparts/centerIsland/countertop\";\r\nimport IslandHood from \"../subparts/centerIsland/islandHood\";\r\nimport Stovetop from \"../subparts/centerIsland/stovetop\";\r\nimport Pendants from \"../subparts/centerIsland/pendants\";\r\nimport RightIsland from \"../subparts/centerIsland/rightIsland\";\r\nimport {setActiveFeaturesBeforeAllWalls} from \"../../../look/lookNavigation/lookNavigationFunctions\";\r\nimport {CABINET_GROUP, COUNTERTOP_GROUP} from \"../../../kvComponent/core/constants\";\r\n\r\n// () = ()\r\n\r\nexport default class CenterIsland extends Part {\r\n static id = 'CenterIsland';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'CenterIsland';\r\n this.partThumbnail = centerIslandThumbnail;\r\n this.translateId = \"visualizer.kitchen.center_island\";\r\n\r\n // related items\r\n this.cabinet = null;\r\n this.countertop = null;\r\n this.faucet = null;\r\n this.sink = null;\r\n this.edge = null;\r\n this.islandHood = null;\r\n this.relatedGroupNames = [\"Center Island\", \"Center Island Countertop\", \"Faucet\", \"Sink\", \"Edge Profile\",\r\n \"Island Hood\", \"Stovetop\", \"Pendants\", \"Right Island\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n shouldLoadInDifferentGroups = false,\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Center Island\":\r\n case \"Cabinets Center Island\":\r\n case \"Center Island Cabinet\":\r\n relatedItemName = \"cabinet\";\r\n RelatedItemClass = Cabinet;\r\n break;\r\n case \"Center Island Countertop\":\r\n case \"Countertop Center Island\":\r\n relatedItemName = \"countertop\";\r\n RelatedItemClass = Countertop;\r\n break;\r\n case \"Faucet\":\r\n if (loadFeature && ((dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) || (!dbFeature.metaData[\"Placement\"] && !dbFeature.s3Bindings))) {\r\n if (!dbFeature.metaData[\"Placement\"]) {\r\n shouldLoadInDifferentGroups = true;\r\n }\r\n relatedItemName = \"faucet\";\r\n RelatedItemClass = Faucet;\r\n }\r\n break;\r\n case \"Sink\":\r\n if (loadFeature && ((dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) || (!dbFeature.metaData[\"Placement\"] && !dbFeature.s3Bindings))) {\r\n if (!dbFeature.metaData[\"Placement\"]) {\r\n shouldLoadInDifferentGroups = true;\r\n }\r\n relatedItemName = \"sink\";\r\n RelatedItemClass = Sink;\r\n }\r\n break;\r\n case \"Edge Profile\":\r\n case \"Edge\":\r\n shouldLoadInDifferentGroups = true;\r\n relatedItemName = \"edge\";\r\n RelatedItemClass = Edge;\r\n break;\r\n case \"Island hood\":\r\n case \"Island Hood\":\r\n relatedItemName = \"islandHood\";\r\n RelatedItemClass = IslandHood;\r\n break;\r\n case \"Island Stove\":\r\n relatedItemName = \"stovetop\";\r\n RelatedItemClass = Stovetop;\r\n break;\r\n case \"Pendants\":\r\n relatedItemName = \"pendants\";\r\n RelatedItemClass = Pendants;\r\n break;\r\n case \"Right Island\":\r\n relatedItemName = \"rightIsland\";\r\n RelatedItemClass = RightIsland;\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature, shouldLoadInDifferentGroups)\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts(withHidden = true) {\r\n return this.relatedItems\r\n .filter(item => {\r\n if (item.partId === \"center_island_handle\") {\r\n item.visible = item.features.filter(f => f.matchesMetaForArrayOfConditions(item.getArrayOfConditions())).length;\r\n }\r\n return this.filterRelatedItem(item, withHidden)\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n getCabinetType() {\r\n return this.cabinet && this.cabinet.activeFeature\r\n ? this.cabinet.activeFeature.dbFeature.metaData[\"Cabinet\"]\r\n : \"\"\r\n }\r\n\r\n getChairType() {\r\n return this.chairs && this.chairs.activeFeature\r\n ? this.chairs.activeFeature.dbFeature.metaData[\"Chair\"]\r\n : \"\"\r\n }\r\n\r\n setSpecificRules() {\r\n if (this.edge) {\r\n this.edge.setEdgeNotInVisualizer()\r\n }\r\n }\r\n\r\n setPrevioslySelected(featureGroup) {\r\n setActiveFeaturesBeforeAllWalls(featureGroup.partId === \"center_island_cabinet\" ? CABINET_GROUP : COUNTERTOP_GROUP);\r\n }\r\n\r\n}\r\n","import React, {useEffect, useState} from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport NavItemPositionModalButton from \"./navItemPositionModalButton\";\r\nimport {toggleNavItemPositionModal} from \"../../../actions/navigationFunctions\";\r\nimport {CORNER_SHELVES_POSITIONS, PAN_POSITIONS, SIDE_POSITIONS} from \"../../bvSceneComponent/core/constants\";\r\n// import {SLAT_WALL_POSITIONS} from \"../../commonVisualizer/core/constants\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {featureInterface} from \"../../../interfaces/featureInterface\";\r\nimport NavItemPositionModalSlatWall from \"./navItemPositionModalSlatWall\";\r\n// import NavItemPositionModalSlatWallButton from \"./navItemPositionModalSlatWallButton\";\r\n\r\nconst disallowBlurClasses = [\".nav-pos\", \".feature\", \".menu-list__item\", \".m-feature\"];\r\n\r\nconst getPositionsArray = (partId) => {\r\n switch (partId) {\r\n case \"corner_shelf\":\r\n return CORNER_SHELVES_POSITIONS\r\n // case \"slat_wall\":\r\n // return SLAT_WALL_POSITIONS\r\n case \"shower_pan_combo\":\r\n case \"shower_fixture\":\r\n case \"grab_bar\":\r\n case \"soap_dish\":\r\n return PAN_POSITIONS\r\n default:\r\n return document.kvConfig.visualizerType === \"bvState\" ? SIDE_POSITIONS : [\"L\",\"R\", \"C\"]\r\n // return [\"L\",\"R\", \"C\"]\r\n }\r\n}\r\n\r\nconst NavItemPositionModal = (props) => {\r\n\r\n const {navItemPositionModal, toggleNavItemPositionModal, activePartId, windowWidth, windowHeight, isWizard,\r\n activeFeature} = props;\r\n const [parent, setParent] = useState(null);\r\n const [checkboxesUpdated, setCheckboxesUpdated] = useState(true);\r\n const left = navItemPositionModal.popupPosition.left;\r\n const top = navItemPositionModal.popupPosition.top;\r\n\r\n const contextMenuBlur = (e) => {\r\n if (!disallowBlurClasses.some(cls => e.target.closest(cls)) && navItemPositionModal.popupOpened) {\r\n toggleNavItemPositionModal({\r\n popupOpened: false,\r\n activePartId: \"\"\r\n })\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n document.addEventListener('click', contextMenuBlur);\r\n return () => {\r\n document.removeEventListener('click', contextMenuBlur)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [navItemPositionModal]);\r\n\r\n useEffect(() => {\r\n const layout = getCurrentLayout();\r\n setParent(layout.getFeatureGroupByPartId(activePartId))\r\n }, [activePartId]);\r\n\r\n const updateCheckboxes = () => {\r\n setCheckboxesUpdated(!checkboxesUpdated);\r\n };\r\n\r\n useEffect(() => {\r\n updateCheckboxes();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [left, top, activePartId]);\r\n\r\n if (!navItemPositionModal.popupOpened || !parent) { // added !parent because the buttons were transitioning the modal width after the parent is set\r\n return null\r\n }\r\n\r\n const isMobile = windowWidth < 991;\r\n const maxRight = left > windowWidth - 200;\r\n const fixedTop = top > (windowHeight - 130) ? windowHeight - 130 : top;\r\n //\r\n // console.log(\"windowHeight\", windowHeight);\r\n // console.log(\"top\", top);\r\n // console.log(\"fixedTop\", fixedTop);\r\n\r\n const styles = isMobile ? {\r\n left: maxRight ? \"auto\" : left + \"px\",\r\n top: fixedTop + \"px\",\r\n right: maxRight ? 0 : \"auto\"\r\n } : {\r\n transform: `translate(${maxRight ? left - 200 : left}px, ${fixedTop}px)`,\r\n }\r\n\r\n const triangleStyles = isMobile ? {\r\n left: left + \"px\",\r\n top: fixedTop + \"px\",\r\n position: \"fixed\",\r\n marginTop: 10,\r\n } : maxRight ? {\r\n left: \"auto\",\r\n right: \"40px\"\r\n } : {}\r\n\r\n const isShelf = activePartId === \"corner_shelf\";\r\n const isSlatWall = activePartId === \"slat_wall\";\r\n\r\n if (isSlatWall) {\r\n return \r\n }\r\n\r\n let positionsArray = getPositionsArray(activePartId);\r\n\r\n positionsArray = positionsArray.filter(pos => {\r\n return parent && parent.getMatchingPositionFeature(pos, activeFeature);\r\n });\r\n\r\n return (\r\n
    3 ? \" nav-pos--shelf\" : \"\")\r\n + (positionsArray.length === 3 ? \" nav-pos--three\" : \"\") + (isWizard ? \" nav-pos--wizard\" : \"\")}\r\n style={styles}>\r\n \r\n
    \r\n
    \r\n

    {isShelf ? \"Left\" : \"Side\"}

    \r\n
    \r\n {positionsArray.slice(0, 3).map((shelf, shelfIndex) => {\r\n return \r\n })}\r\n
    \r\n
    \r\n {isShelf && (positionsArray.length > 3) ? (\r\n
    \r\n

    Right

    \r\n
    \r\n {positionsArray.slice(3, 6).map((shelf, shelfIndex) => {\r\n return \r\n })}\r\n
    \r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nNavItemPositionModal.propTypes = {\r\n // feature: PropTypes.object.isRequired\r\n activeFeature: PropTypes.shape(featureInterface),\r\n isWizard: PropTypes.bool\r\n}\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n const {windowHeight, windowWidth} = store.serverState;\r\n return {\r\n navItemPositionModal: store.navigationState.navItemPositionModal,\r\n activeFeature: ownProps.activeFeature || store.selectionState.activeFeature,\r\n activePartId: store.navigationState.navItemPositionModal.activePartId,\r\n windowHeight,\r\n windowWidth,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n toggleNavItemPositionModal\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(NavItemPositionModal)\r\n","import {getQuotePriceWithTaxes, getTotalPrice, toFixedFeatureCost} from \"./misc/helpers\";\r\nimport store from \"./store\";\r\nimport {getAllFeatureFilters, getFilterGroupValue} from \"./misc/utils\";\r\nimport {filterCartItems} from \"./bvcomponents/look/lookNavigation/lookFunctions2\";\r\n\r\n\r\nexport const getAnalyticsEcommerceItem = (feature, quantity = 1, index = 0) => {\r\n if (!feature) {\r\n return false\r\n }\r\n const {fabricatorState, filterState} = store.getState();\r\n const {filterGroups} = filterState;\r\n\r\n let item_brand = \"\";\r\n const manufacturerFilterGroup = filterGroups.find(filterGroup => filterGroup.name.trim() === \"Manufacturer\");\r\n if (manufacturerFilterGroup) {\r\n const featureFilters = getAllFeatureFilters(feature);\r\n if (featureFilters && Array.isArray(featureFilters[manufacturerFilterGroup.id]) && featureFilters[manufacturerFilterGroup.id].length) {\r\n const filterValueObject = getFilterGroupValue(featureFilters[manufacturerFilterGroup.id][0], manufacturerFilterGroup)\r\n if (filterValueObject) {\r\n item_brand = filterValueObject.displayText;\r\n }\r\n }\r\n }\r\n\r\n const featureGroup = feature.getParent();\r\n const itemQuantity = Number.isInteger(quantity) ? quantity : 1;\r\n\r\n return {\r\n item_id: feature.dbFeature.sku, // \"SKU_12345\"\r\n item_name: feature.getCustomFullDisplayName(), // \"Stan and Friends Tee\",\r\n affiliation: fabricatorState.companyName || \"\", // \"Google Merchandise Store\",\r\n coupon: \"\", // \"SUMMER_FUN\", // we never have any\r\n discount: 0.00, // 2.22 // we are not using them yet\r\n index,\r\n item_brand, // \"Google\", // Manufacturer filter\r\n item_category: feature.dbFeature.lixilProductCategory || \"\", // \"Apparel\",\r\n item_category2: feature.dbFeature.lixilProductSubCategory || \"\", // \"Adult\",\r\n item_category3: feature.getCollectionName(filterGroups), // \"Shirts\",\r\n item_category4: \"\", // \"Crew\",\r\n item_category5: \"\", // \"Short sleeve\",\r\n item_list_id: feature.partId, // \"related_products\",\r\n item_list_name: featureGroup.dbName || featureGroup.partName || \"\", //\"Related Products\",\r\n item_variant: feature.getColorName(filterGroups), // \"green\",\r\n location_id: \"\", // \"ChIJIQBpAG2ahYAR_6128GcTUEo\",\r\n price: +toFixedFeatureCost(feature, itemQuantity),\r\n quantity: itemQuantity\r\n }\r\n}\r\n\r\nexport const getAnalyticsEcommerceValues = (cartItemsToCount) => {\r\n const {cartState, fabricatorState} = store.getState();\r\n const cartItems = cartItemsToCount || cartState.cartItems;\r\n const fabricatorSettings = fabricatorState.settings;\r\n\r\n const cartItemsToInclude = filterCartItems(cartItems);\r\n const totalPrice = getTotalPrice(null, false, cartItemsToInclude);\r\n\r\n const tax = totalPrice.priceTaxes.length\r\n ? totalPrice.priceTaxes.reduce((acc, tax) => acc + tax.materialTax, 0)\r\n : totalPrice.materialTaxes\r\n\r\n return {\r\n currency: fabricatorSettings.currency,\r\n value: getQuotePriceWithTaxes(totalPrice),\r\n items: cartItemsToInclude.map((cartItem, cartItemIndex) => {\r\n return getAnalyticsEcommerceItem(cartItem.cartFeature, cartItem.quantity, cartItemIndex)\r\n }),\r\n tax: tax || 0,\r\n shipping: totalPrice.totalDeliveryCost || 0,\r\n }\r\n}\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl, FormattedHTMLMessage} from \"react-intl\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\n\r\nimport LookListContentHeaderRightSide from \"../../list/lookListContentHeaderRightSide\";\r\nimport {setLookOpened, setLookPageOpened} from \"../../../../actions/lookFunctions\";\r\nimport {ROUTES} from \"../../../../routes\";\r\nimport GroheCartStepper from \"./groheCartStepper\";\r\n\r\nconst GroheCartHeaderCommon = (props) => {\r\n\r\n const {title, subTitle, afterTitle, withSave, intl, history, location, isMobile, setLookPageOpened, setLookOpened,\r\n className, subTitleValues} = props;\r\n\r\n const closeCartClick = () => {\r\n setLookPageOpened(\"\");\r\n setLookOpened(null);\r\n history.push(ROUTES.home);\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n {isMobile ? (\r\n
    \r\n \r\n \r\n \r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n

    \r\n {afterTitle}\r\n

    \r\n {subTitle ? (\r\n

    \r\n \r\n

    \r\n ) : null}\r\n
    \r\n {location && (location.pathname !== ROUTES.cartSuccess) ? (\r\n
    \r\n \r\n {withSave ? null : }\r\n
    \r\n ) : null}\r\n
    \r\n )\r\n};\r\n\r\nGroheCartHeaderCommon.propTypes = {\r\n title: PropTypes.string.isRequired,\r\n subTitle: PropTypes.string,\r\n className: PropTypes.string,\r\n afterTitle: PropTypes.any,\r\n withSave: PropTypes.bool,\r\n subTitleValues: PropTypes.object,\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {isMobile} = store.serverState;\r\n return {\r\n isMobile,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookPageOpened,\r\n setLookOpened,\r\n};\r\n\r\nexport default injectIntl(\r\n withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(GroheCartHeaderCommon)\r\n )\r\n)\r\n","//********* SQFT *********//\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const toggleShowManualCalculation = (showManualCalculation) => ({\r\n type: types.TOGGLE_SHOW_MANUAL_CALCULATION,\r\n payload: {showManualCalculation}\r\n});\r\n\r\nexport const setSwitcherPosition = (switcherPosition) => ({\r\n type: types.SET_SWITCHER_POSITION,\r\n payload: {switcherPosition}\r\n});\r\n\r\nexport const addManualCalculateRow = (type) => ({\r\n type: types.ADD_MANUAL_CALCULATION_ROW,\r\n payload: {type}\r\n});\r\n\r\nexport const updateManualCalculateRow = (type, row, updatedRowValue) => ({\r\n type: types.UPDATE_MANUAL_CALCULATION_ROW,\r\n payload: {type, row, updatedRowValue}\r\n});\r\n\r\nexport const updateManualCalculateRows = (manualCalculationRows) => ({\r\n type: types.UPDATE_MANUAL_CALCULATION_ROWS,\r\n payload: manualCalculationRows\r\n});\r\n\r\nexport const deleteManualCalculateRow = (type, id) => ({\r\n type: types.DELETE_MANUAL_CALCULATION_ROW,\r\n payload: {type, id}\r\n});\r\n","import { hashHistory } from 'react-router';\r\nimport store from '../store';\r\nimport {getCurrentLayout} from \"../bvcomponents/appLayout\";\r\nimport {switchToWizardItem} from \"../bvcomponents/qkbPages/materialsWizard/useChangeWizardStepRoute\";\r\n\r\nexport const changeRoutePath = (activePart, nextRelatedItemIndex, withHidden = true) => {\r\n let selectionGroup = store.getState().selectionState.selectionGroup;\r\n if (!selectionGroup) {\r\n return\r\n }\r\n const partName = selectionGroup.toLowerCase();\r\n // console.log('activePart', activePart);\r\n if (!activePart) {\r\n return\r\n }\r\n if (activePart.menuType === 0 || activePart.partName === \"Toilet\") {\r\n const nextPath = 'materials/'+partName;\r\n if (!window.location.href.includes(nextPath)) {\r\n hashHistory.push(nextPath);\r\n }\r\n } else {\r\n const part = activePart.subParts(withHidden)[nextRelatedItemIndex];\r\n if (part) {\r\n const subPartName = part.part.partName.toLowerCase().replace(\" \",\"-\");\r\n const nextPath = 'materials/'+partName+'/'+subPartName;\r\n if (!window.location.href.includes(nextPath)) {\r\n hashHistory.push(nextPath);\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport const getMaterialsFixedName = (qtCategoryName = \"\") => {\r\n return qtCategoryName.replace(/ /g,\"-\").replace(/\\//g,\"-\").toLowerCase()\r\n}\r\n\r\nexport const changeQTRoutePath = (qtCategoryName, nextRelatedItemIndex) => {\r\n\r\n const {wizardIsActive, wizardActiveItem} = store.getState().wizardState;\r\n if (wizardIsActive) {\r\n switchToWizardItem(wizardActiveItem);\r\n return\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n if (!qtCategoryName) {\r\n qtCategoryName = store.getState().qtState.qtActiveCategory || layout.qtCategories[0].name;\r\n }\r\n if (!nextRelatedItemIndex && (nextRelatedItemIndex !== 0)) {\r\n nextRelatedItemIndex = store.getState().selectionState.activePartRelatedItemIndex;\r\n }\r\n let qtCategory = layout.qtCategories.find(qtCat => qtCat.name === qtCategoryName);\r\n if (!qtCategory) { //cases when we switched visualizer type and qtCategoryName is still an old one\r\n qtCategory = layout.qtCategories[0];\r\n }\r\n let partName = getMaterialsFixedName(qtCategoryName);\r\n let nextSubPart = qtCategory.subParts[nextRelatedItemIndex] || qtCategory.subParts[0];\r\n if (!nextSubPart) {\r\n console.log(\"ERROR, no subparts exist in the category\", qtCategory);\r\n if (layout.qtCategories[0] && layout.qtCategories[0].subParts.length) {\r\n hashHistory.push('materials/'+partName);\r\n return\r\n } else {\r\n for (let i = 0; i < layout.qtCategories.length; i++) {\r\n // here we check at least some category which has featureGroup with features!\r\n if (layout.qtCategories[i] && layout.qtCategories[i].subParts.length) {\r\n partName = getMaterialsFixedName(layout.qtCategories[i].name);\r\n nextSubPart = layout.qtCategories[i].subParts[0];\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n if (!nextSubPart) {\r\n hashHistory.push(\"/materials\");\r\n return;\r\n }\r\n const subPartName = getMaterialsFixedName(nextSubPart.part.partName);\r\n const nextPath = 'materials/'+partName+'/'+subPartName;\r\n if (!window.location.href.includes(nextPath)) {\r\n hashHistory.push(nextPath);\r\n }\r\n\r\n return nextSubPart\r\n\r\n};\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport $ from 'jquery';\r\nimport {connect} from \"react-redux\";\r\n\r\nimport DemoPoint from \"./demoPoint\";\r\nimport Config from \"../../../config\";\r\n\r\nclass DemoPoints extends React.Component {\r\n\r\n static propTypes = {\r\n layoutFeatures: PropTypes.array.isRequired,\r\n layoutType: PropTypes.number.isRequired,\r\n canvasId: PropTypes.string.isRequired,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n points: [],\r\n currentLayoutType: null,\r\n dimensions: {\r\n width: this.props.canvasDimensions.width,\r\n height: this.props.canvasDimensions.height\r\n },\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.setPoints(this.props);\r\n this.handleResize();\r\n $(window).on('resize', this.handleResize);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (this.state.currentLayoutType !== nextProps.layoutType) {\r\n this.setPoints(nextProps);\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n $(window).off('resize', this.handleResize);\r\n }\r\n\r\n setPoints = (nextProps) => {\r\n const points = [];\r\n nextProps.layoutFeatures.forEach((parentGroup) => {\r\n // console.log(\"parentGroup\", parentGroup);\r\n switch (document.kvConfig.visualizerType) {\r\n case \"Bathroom\":\r\n case \"BV\": {\r\n if (parentGroup.partName === \"Walls\") {\r\n const pointB = this.getBathroomPointPositionByPartName(\"Wall B\");\r\n const pointC = this.getBathroomPointPositionByPartName(\"Wall C\");\r\n points.push(pointB, pointC);\r\n } else if (parentGroup.partName === \"Vanity\") {\r\n const vanity = this.getBathroomPointPositionByPartName(\"Vanity\");\r\n const mirror = this.getBathroomPointPositionByPartName(\"Mirror\");\r\n points.push(vanity, mirror);\r\n } else if (!(nextProps.layoutType === 0 &&\r\n (parentGroup.partName === \"Window\" || parentGroup.partName === \"Bathtub\"))) {\r\n const point = this.getBathroomPointPositionByPartName(parentGroup.partName, nextProps);\r\n if (point.left || point.top) {\r\n points.push(point);\r\n }\r\n }\r\n break;\r\n }\r\n case \"bvScene\": {\r\n const bvScenePoints = [\r\n {\r\n partId: \"shower_head\",\r\n left: 925,\r\n top: 400,\r\n },\r\n {\r\n partId: \"toilet\",\r\n left: 380,\r\n top: 820,\r\n },\r\n {\r\n partId: \"vanity_sink\",\r\n left: 530,\r\n top: 670,\r\n },\r\n {\r\n partId: \"bathtub_body\",\r\n left: 1520,\r\n top: 760,\r\n },\r\n ]\r\n parentGroup.relatedItems.forEach(relItem => {\r\n const relPoint = bvScenePoints.find(bvScenePoint => {\r\n return bvScenePoint.partId === relItem.partId && !relItem.disabled\r\n })\r\n if (relPoint) {\r\n points.push(relPoint)\r\n }\r\n });\r\n break;\r\n }\r\n case \"Kitchen\":\r\n case \"KV\": {\r\n switch (parentGroup.partName) {\r\n case \"Walls\": {\r\n points.push(\r\n this.getKitchenPointPosition(\"left_wall\"),\r\n this.getKitchenPointPosition(\"right_wall\"),\r\n this.getKitchenPointPosition(\"ceiling\")\r\n );\r\n break;\r\n }\r\n case \"Appliances\": {\r\n points.push(\r\n this.getKitchenPointPosition(\"hood\"),\r\n this.getKitchenPointPosition(\"range\"),\r\n this.getKitchenPointPosition(\"fridge\"),\r\n this.getKitchenPointPosition(\"dishwasher\")\r\n );\r\n break;\r\n }\r\n case \"Countertop\": {\r\n points.push(\r\n this.getKitchenPointPosition(\"countertop3\"),\r\n this.getKitchenPointPosition(\"sink1\")\r\n );\r\n break;\r\n }\r\n case \"Cabinet\": {\r\n points.push(\r\n this.getKitchenPointPosition(\"top_cabinet\"),\r\n this.getKitchenPointPosition(\"top_cabinet2\"),\r\n this.getKitchenPointPosition(\"bottom_cabinet\")\r\n );\r\n break;\r\n }\r\n case \"CenterIsland\": {\r\n points.push(\r\n this.getKitchenPointPosition(\"center_island_counterop\"),\r\n this.getKitchenPointPosition(\"center_island_cabinet\"),\r\n this.getKitchenPointPosition(\"center_island_chairs\")\r\n );\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n });\r\n this.setState({\r\n points,\r\n currentLayoutType: nextProps.layoutType\r\n });\r\n };\r\n\r\n handleResize = () => {\r\n const canvas = $(document.getElementById(this.props.canvasId));\r\n this.setState({\r\n dimensions: {\r\n width: canvas.width(),\r\n height: canvas.height()\r\n }\r\n });\r\n };\r\n\r\n getBathroomPointPositionByPartName = (partName, nextProps = this.props) => {\r\n switch (partName) {\r\n case \"Vanity\":\r\n return {\r\n left: 356,\r\n top: 720,\r\n };\r\n case \"Mirror\":\r\n return {\r\n left: 318,\r\n top: 422,\r\n };\r\n case \"Toilet\":\r\n return {\r\n left: 625,\r\n top: 740,\r\n };\r\n case \"Floor\":\r\n return {\r\n left: nextProps.layoutType === 0 ? 762 : 990,\r\n top: 990,\r\n };\r\n case \"Window\":\r\n return {\r\n left: 1290,\r\n top: 475,\r\n };\r\n case \"Bathtub\":\r\n return {\r\n left: 1450,\r\n top: 915,\r\n };\r\n case \"Shower\":\r\n return {\r\n left: 930,\r\n top: 600,\r\n };\r\n case \"Wall B\":\r\n return {\r\n left: 600,\r\n top: 440,\r\n };\r\n case \"Wall C\":\r\n return {\r\n left: 1480,\r\n top: 580,\r\n };\r\n default :\r\n return {\r\n left: 0,\r\n top: 0,\r\n }\r\n }\r\n };\r\n\r\n getKitchenPointPosition = (partId, nextProps = this.props) => {\r\n nextProps === 12 ? null : false;\r\n switch (partId) {\r\n case \"left_wall\":\r\n return {\r\n left: 450,\r\n top: 550,\r\n };\r\n case \"right_wall\":\r\n return {\r\n left: 1050,\r\n top: 550,\r\n };\r\n case \"ceiling\":\r\n return {\r\n left: 740,\r\n top: 120,\r\n };\r\n case \"hood\":\r\n return {\r\n left: 1020,\r\n top: 400,\r\n };\r\n case \"range\":\r\n return {\r\n left: 1000,\r\n top: 680,\r\n };\r\n case \"fridge\":\r\n return {\r\n left: 175,\r\n top: 600,\r\n };\r\n case \"dishwasher\":\r\n return {\r\n left: 720,\r\n top: 655,\r\n };\r\n case \"top_cabinet\":\r\n return {\r\n left: 740,\r\n top: 410,\r\n };\r\n case \"top_cabinet2\":\r\n return {\r\n left: 1380,\r\n top: 370,\r\n };\r\n case \"bottom_cabinet\":\r\n return {\r\n left: 1260,\r\n top: 780,\r\n };\r\n case \"center_island_counterop\":\r\n return {\r\n left: 600,\r\n top: 750,\r\n };\r\n case \"center_island_cabinet\":\r\n return {\r\n left: 1040,\r\n top: 890,\r\n };\r\n case \"center_island_chairs\":\r\n return {\r\n left: 390,\r\n top: 870,\r\n };\r\n case \"sink1\":\r\n return {\r\n left: 1430,\r\n top: 670,\r\n };\r\n case \"countertop3\":\r\n return {\r\n left: 1450,\r\n top: 930,\r\n };\r\n default :\r\n return {\r\n left: 0,\r\n top: 0,\r\n }\r\n }\r\n };\r\n\r\n render() {\r\n const dashboardFramed = Config.isVisualizerManagement();\r\n return this.state.dimensions.width && this.state.dimensions.height && !dashboardFramed ? (\r\n
    \r\n {this.state.points.map((point, index) => {\r\n const pointResponsive = {\r\n left: point.left * (this.state.dimensions.width / this.props.canvasDimensions.width),\r\n top: point.top * (this.state.dimensions.height / this.props.canvasDimensions.height),\r\n };\r\n return \r\n })}\r\n
    \r\n ) : null\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {canvasDimensions} = store.bathroomVisualizerState;\r\n return {\r\n canvasDimensions,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DemoPoints)\r\n","import React from \"react\";\r\n\r\nimport Misc from './../../misc/misc';\r\nimport {getMousePos, requestAnimFrame, isTouchDevice} from \"../../misc/utils\";\r\nimport {isIE} from \"../../misc/helpers\";\r\nimport {loaderDisable} from \"../ui/loaderView\";\r\nimport enhanceCanvas from \"./canvasEnhancements\";\r\n// import {UseFullSizeImages} from \"../../config\";\r\nimport {getBackgroundLayers} from \"../../misc/getCanvasImageFromLayout\";\r\nimport ImageCanvasCommon from \"./imageCanvasCommon\";\r\n\r\n// import { getHoverZonesForPreset, getHoveringZone, hoverImages } from \"./imageCanvasTouchZones\";\r\n\r\nexport default class ImageCanvasCommonNew extends ImageCanvasCommon {\r\n\r\n finishDraw = (images, layers, alreadyRenderedImages, errorImages, callback) => {\r\n clearTimeout(this.id);\r\n this.id = 0;\r\n let copyImages = null;\r\n\r\n const {width, height} = this.props;\r\n\r\n // const fullImagesFactor = UseFullSizeImages ? 100 : 54;\r\n\r\n if (this.props.useMouseHovering && (this.shouldUpdateGreenZone || !this.state.layersHoverings.length)) {\r\n copyImages = [...images];\r\n }\r\n\r\n const backgroundLayers = getBackgroundLayers(layers, null, true);\r\n\r\n // console.log(\"layers\", layers);\r\n\r\n if (backgroundLayers.length) { // draw backgrounds first\r\n this.backCtxBg.clearRect(0, 0, width, height); // clear previous\r\n\r\n images.forEach((imageObject) => {\r\n if (imageObject.src.includes(\"data:image\") || errorImages.includes(imageObject.src)) {\r\n return\r\n }\r\n const layer = backgroundLayers.find(layer => layer.image === imageObject.src);\r\n if (layer) {\r\n this.drawImage(layer, imageObject, this.backCtxBg, width, height)\r\n }\r\n imageObject = null;\r\n });\r\n enhanceCanvas(this.canvasBg);\r\n this.backCtx.drawImage(this.canvasBg, 0, 0, width, height, 0, 0, width, height);\r\n const greenImage = images.find((imageObject) => imageObject.src.includes(\"data:image\"));\r\n if (greenImage) {\r\n const layer = backgroundLayers.find(layer => layer.image === greenImage.src);\r\n if (layer) {\r\n this.drawImage(layer, greenImage, this.backCtx, width, height)\r\n }\r\n }\r\n }\r\n\r\n images.forEach((loadedImage) => {\r\n if (errorImages.includes(loadedImage.src)) {\r\n return\r\n }\r\n const layer = layers.find(layers => layers.image === loadedImage.src);\r\n if (layer && (!backgroundLayers.length || (layer.zIndex < backgroundLayers[backgroundLayers.length - 1].zIndex))) {\r\n this.drawImage(layer, loadedImage, this.backCtx, width, height)\r\n }\r\n loadedImage = null;\r\n });\r\n\r\n // this.ctx.drawImage(this.backCtx.canvas, 0, 0);\r\n requestAnimFrame(this.ctx.drawImage(this.backCtx.canvas, 0, 0));\r\n\r\n if (this.props.useMouseHovering) {\r\n const isMobile = Misc.isMobile() || isTouchDevice();\r\n if (!isMobile && !isIE() && !this.state.mouseMoveSet && this.canvas) {\r\n this.setOnMouseMove();\r\n }\r\n this.setState({\r\n alreadyRenderedImages\r\n });\r\n if (this.shouldUpdateGreenZone || !this.state.layersHoverings.length) {\r\n this.setLayersHoverings(layers, copyImages, errorImages)\r\n }\r\n }\r\n\r\n if (!window.requestInProcess) {\r\n if (this.props.setShowCanvasLoader) {\r\n this.props.setShowCanvasLoader(false)\r\n } else {\r\n this.props.disableLoader ? this.props.disableLoader() : loaderDisable();\r\n }\r\n }\r\n\r\n // window.t1 = performance.now();\r\n // console.log(\"Call to doSomething took \" + (window.t1 - window.t0) + \" milliseconds.\");\r\n\r\n if (callback) {\r\n callback()\r\n }\r\n };\r\n\r\n getGliaImage = () => {\r\n return (\r\n
    \r\n this.canvasImg = el} alt=\"\" id={this.props.canvasId + \"Img\"}\r\n className=\"canvas-co-image blurred\" />\r\n
    \r\n )\r\n };\r\n\r\n nonTransparentPixelHovered = (mousePosArray, layerHovering) => {\r\n const x1 = layerHovering.layer.cropCoords ? layerHovering.layer.cropCoords[0] : layerHovering.layerDimensions.polygonArray[0][0];\r\n const y1 = layerHovering.layer.cropCoords ? layerHovering.layer.cropCoords[1] : layerHovering.layerDimensions.polygonArray[0][1];\r\n return mousePosArray.some(mousePos => {\r\n let pixelHovered = null;\r\n try {\r\n pixelHovered = layerHovering.context2D.getImageData(\r\n (((mousePos.x / this.canvas_scale) / this.state.dimensions.width * this.props.width)) - x1,\r\n (((mousePos.y / this.canvas_scale) / this.state.dimensions.height * this.props.height)) - y1,\r\n 1,\r\n 1,\r\n {willReadFrequently: true}).data[3]\r\n } catch (e) {\r\n console.log(\"can't find hovered pixel\",\r\n layerHovering.context2D,\r\n (((mousePos.x / this.canvas_scale) / this.state.dimensions.width * this.props.width)) - x1,\r\n (((mousePos.y / this.canvas_scale) / this.state.dimensions.height * this.props.height)) - y1\r\n );\r\n }\r\n return pixelHovered > 120\r\n })\r\n }\r\n\r\n setHoveredLayer = (evt) => {\r\n\r\n if (window.touchMove) {\r\n return false\r\n }\r\n\r\n if (this.pinchZoom) {\r\n this.canvas_scale = this.pinchZoom.getScale();\r\n if (this.canvas_scale !== 1) {\r\n return false\r\n }\r\n }\r\n\r\n const {layout} = this.props;\r\n const canvas = this.canvas;\r\n let mousePos = getMousePos(evt, canvas);\r\n let hovered = false;\r\n\r\n // console.log('mousePos', mousePos);\r\n\r\n if (this.pinchZoom) {\r\n this.canvas_scale = this.pinchZoom.getScale();\r\n }\r\n\r\n if (mousePos && (window.innerWidth < 480)) { // rotated version\r\n let temp = mousePos.x;\r\n // noinspection JSSuspiciousNameCombination\r\n mousePos.x = mousePos.y;\r\n mousePos.y = this.canvas.offsetHeight - temp;\r\n // console.log('mousePos2', mousePos);\r\n }\r\n\r\n if (this.state.layersHoverings.length) {\r\n let i = 0;\r\n for (i; i < this.state.layersHoverings.length; i++) {\r\n const layerHovering = this.state.layersHoverings[i];\r\n if ( mousePos\r\n && layerHovering\r\n && layerHovering.layerDimensions\r\n && !this.layerIsExcludedFromHover(layerHovering.layer, layout)\r\n // && pnpoly(layerHovering.layerDimensions.polygonArray, mousePos)\r\n ) {\r\n let mousePosArray = [mousePos];\r\n if (layout.checkMorePointsPartIds && layout.checkMorePointsPartIds.includes(layerHovering.layer.partId)) {\r\n for (let k = 1; k <= 20; k++) {\r\n mousePosArray = [\r\n ...mousePosArray,\r\n {x: mousePos.x - k, y: mousePos.y - k},\r\n {x: mousePos.x + k, y: mousePos.y - k},\r\n {x: mousePos.x - k, y: mousePos.y + k},\r\n {x: mousePos.x + k, y: mousePos.y + k},\r\n {x: mousePos.x - k, y: mousePos.y},\r\n {x: mousePos.x + k, y: mousePos.y},\r\n {x: mousePos.x, y: mousePos.y - k},\r\n {x: mousePos.x, y: mousePos.y + k},\r\n ]\r\n }\r\n }\r\n // console.log(\"checkMorePointsPartIds\", mousePosArray);\r\n if (this.nonTransparentPixelHovered(mousePosArray, layerHovering)) {\r\n hovered = true;\r\n document.hoveredLayer = layerHovering.layer;\r\n document.hoveredMousePos = mousePos;\r\n if (!isIE() && (this.activeGreenZoneIndex !== layerHovering.layer.zIndex)) {\r\n // console.log('layerHovering active = ', layerHovering);\r\n this.activeGreenZoneIndex = layerHovering.layer.zIndex;\r\n this.renderGreenLayer(layerHovering);\r\n }\r\n\r\n break; // break for...of loop\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!hovered) {\r\n document.hoveredLayer = null;\r\n this.draw(this.state.layers); // reload all layers without hovered\r\n }\r\n\r\n };\r\n\r\n renderGreenLayerByZindex = (zIndex, partId) => {\r\n if (!isIE()) {\r\n const neededLayerHovering = this.state.layersHoverings.find((layerHovering) => {\r\n if (partId) {\r\n return layerHovering.layer.zIndex === zIndex && layerHovering.layer.partId === partId\r\n }\r\n return layerHovering.layer.zIndex === zIndex\r\n });\r\n neededLayerHovering ? this.renderGreenLayer(neededLayerHovering, true) : this.draw(this.state.layers)\r\n }\r\n };\r\n\r\n drawImage = (layer, imageObject, canvasContext, width, height) => {\r\n try {\r\n if (layer.cropCoords) {\r\n let layerWidth = layer.cropCoords[2] - layer.cropCoords[0];\r\n let layerHeight = layer.cropCoords[3] - layer.cropCoords[1];\r\n canvasContext.drawImage(imageObject, 0, 0, layerWidth, layerHeight, layer.cropCoords[0], layer.cropCoords[1], layerWidth, layerHeight);\r\n } else if (layer.layerDimensions) {\r\n const dim = layer.layerDimensions;\r\n // console.log('yep', dim.width, dim.height, dim.polygonArray[0][0], dim.polygonArray[0][1], dim.width, dim.height);\r\n const firstX = layer.isGreenHovering ? 0 : dim.polygonArray[0][0]; // green is already cropped\r\n const firstY = layer.isGreenHovering ? 0 : dim.polygonArray[0][1]; // green is already cropped\r\n canvasContext.drawImage(imageObject, firstX, firstY, dim.width, dim.height, dim.polygonArray[0][0], dim.polygonArray[0][1], dim.width, dim.height);\r\n // } else if (loadedImage.coords) {\r\n // loadedImage.width = loadedImage.width*fullImagesFactor/100;\r\n // loadedImage.height = loadedImage.height*fullImagesFactor/100;\r\n // const max_x = loadedImage.coords.max_x*fullImagesFactor/100;\r\n // const min_x = this.props.width*loadedImage.coords.min_x;\r\n // const min_y = this.props.height*loadedImage.coords.min_y;\r\n // const max_y = loadedImage.coords.max_y*fullImagesFactor/100;\r\n // const width = max_x - min_x;\r\n // const height = max_y - min_y;\r\n // console.log('width', width);\r\n // console.log('height', height);\r\n // console.log('min_x', min_x);\r\n // console.log('min_y', min_y);\r\n // console.log('max_x', max_x);\r\n // console.log('max_y', max_y);\r\n // this.backCtx.drawImage(loadedImage, 0, 0, loadedImage.width, loadedImage.height, min_x, min_y, loadedImage.width, loadedImage.height);\r\n } else {\r\n // imageObject.width = width;\r\n // imageObject.height = height;\r\n canvasContext.drawImage(imageObject, 0, 0, width, height);\r\n }\r\n } catch (e) {\r\n console.log(\"canvas context cant draw image\", imageObject);\r\n }\r\n }\r\n\r\n onMouseDown = (event) => {\r\n if (this.pinchZoom && this.pinchZoom.onMouseDown) {\r\n this.pinchZoom.onMouseDown(event)\r\n }\r\n }\r\n\r\n onMouseMove = (event) => {\r\n if (this.pinchZoom && this.pinchZoom.onMouseMove) {\r\n this.pinchZoom.onMouseMove(event)\r\n }\r\n }\r\n\r\n onMouseUp = (event) => {\r\n if (this.pinchZoom && this.pinchZoom.onMouseUp) {\r\n this.pinchZoom.onMouseUp(event, this.props.lookCanvasClick) // we should be here always // callback is passed to execute after drag n drop\r\n } else if (this.props.lookCanvasClick) {\r\n this.props.lookCanvasClick()\r\n }\r\n }\r\n\r\n render() {\r\n const style = {};\r\n if (this.props.transform) {\r\n style.transform = this.props.transform\r\n }\r\n return (\r\n //
    \r\n
    \r\n {/*
    */}\r\n {/* {this.pinchZoom ? this.pinchZoom.el.style.transform + \" // \" + this.pinchZoom.container.style.transform : null}*/}\r\n {/*
    */}\r\n {this.props.useMouseHovering ? this.getGliaImage() : null}\r\n this.canvas = el}\r\n className={\"canvas-el\" + (this.props.useMouseHovering ? \" canvas-el--pointer\" : \"\")}\r\n onMouseDown={this.onMouseDown}\r\n onMouseMove={this.onMouseMove}\r\n onMouseUp={this.onMouseUp}\r\n onDoubleClick={null}\r\n id={this.props.canvasId}\r\n width={this.props.width}\r\n height={this.props.height}\r\n // onTouchStart={this.moveStart}\r\n // onTouchMove={this.move}\r\n // onTouchEnd={this.moveEnd}\r\n data-mobile={Misc.isMobile() || isTouchDevice()}\r\n style={style} />\r\n
    \r\n );\r\n }\r\n\r\n}\r\n","import React from \"react\";\r\n\r\nimport Button from \"@mui/material/Button\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nconst GroheCartStickyFooter = (props) => {\r\n\r\n const {stickyFooterButtons} = props;\r\n\r\n return (\r\n
    \r\n {stickyFooterButtons.map(button => (\r\n \r\n ))}\r\n
    \r\n )\r\n};\r\n\r\nexport default GroheCartStickyFooter\r\n","'use strict';\r\n\r\nObject.defineProperty(exports, \"__esModule\", {\r\n value: true\r\n});\r\nexports.showLoading = exports.resetLoading = exports.loadingBarReducer = exports.loadingBarMiddleware = exports.LoadingBar = exports.ImmutableLoadingBar = exports.hideLoading = undefined;\r\n\r\nvar _loading_bar = require('./loading_bar');\r\n\r\nvar _loading_bar2 = _interopRequireDefault(_loading_bar);\r\n\r\nvar _loading_bar_middleware = require('./loading_bar_middleware');\r\n\r\nvar _loading_bar_middleware2 = _interopRequireDefault(_loading_bar_middleware);\r\n\r\nvar _loading_bar_ducks = require('./loading_bar_ducks');\r\n\r\nvar _immutable = require('./immutable');\r\n\r\nvar _immutable2 = _interopRequireDefault(_immutable);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\r\n\r\nexports.hideLoading = _loading_bar_ducks.hideLoading;\r\nexports.ImmutableLoadingBar = _immutable2.default;\r\nexports.LoadingBar = _loading_bar.LoadingBar;\r\nexports.loadingBarMiddleware = _loading_bar_middleware2.default;\r\nexports.loadingBarReducer = _loading_bar_ducks.loadingBarReducer;\r\nexports.resetLoading = _loading_bar_ducks.resetLoading;\r\nexports.showLoading = _loading_bar_ducks.showLoading;\r\nexports.default = _loading_bar2.default;","import {getFeatureCost} from \"./helpers\";\r\nimport {BATHROOM_VISUALIZER_TYPES} from \"../config\";\r\n\r\n/**\r\n * returns feature compressed object that can be passed on the backend (without redundant info)\r\n * @param fromCartItem {cartItemInterface}\r\n * @param fromFeature {featureInterface}\r\n * @param quoteIndex {number}\r\n * @returns {object}\r\n */\r\nexport const getCompressedFeature = (fromCartItem, fromFeature, quoteIndex = 0) => {\r\n if (!fromFeature || !fromFeature.dbFeature) {\r\n return null\r\n }\r\n const currentQuote = fromCartItem && Number.isInteger(fromCartItem.currentQuote) ? fromCartItem.currentQuote : quoteIndex;\r\n const compressedDbFeature = {\r\n partName: fromFeature.partName,\r\n sharedFeatureName: fromFeature.dbFeature.sharedFeatureName,\r\n dbFeatureId: fromFeature.dbFeature.id,\r\n sku: fromFeature.dbFeature.sku,\r\n partId: fromFeature.partId,\r\n featureDefinitionID: fromFeature.dbFeature.featureDefinitionID,\r\n noteText: fromFeature.notesList[currentQuote], // we don't restore noteText from here, we take it from getCompressedCartItem\r\n }\r\n if (fromFeature.dbFeature.priceWasChanged) {\r\n compressedDbFeature.customCost = fromFeature.dbFeature.cost; // to restore job feature prices\r\n compressedDbFeature.customPrice = fromFeature.dbFeature.price; // to restore job feature prices\r\n }\r\n if (fromFeature.dbFeature.markUpString) {\r\n compressedDbFeature.markUpString = fromFeature.dbFeature.markUpString; // to be able to compare! not needed for now\r\n }\r\n return compressedDbFeature\r\n}\r\n\r\n/**\r\n * returns cart item compressed object that can be passed on the backend // IS NOT USED IN PARSE RESPONSE ! ONLY NOTE TEXT IS USED\r\n * @param fromCartItem {cartItemInterface}\r\n // * @param fromFeature {featureInterface}\r\n // * @param quoteIndex {number}\r\n * @returns {object}\r\n */\r\nexport const getCompressedCartItem = (fromCartItem) => {\r\n if (!fromCartItem) {\r\n return null\r\n }\r\n const compressedCartItem = {\r\n partId: fromCartItem.partId,\r\n featureId: fromCartItem.cartFeature.dbFeature.featureDefinition_id,\r\n sku: fromCartItem.cartFeature.dbFeature.sku,\r\n quantity: fromCartItem.quantity,\r\n fabricatorFeatureId: fromCartItem.cartFeature.dbFeature.id,\r\n calculatedCost: getFeatureCost(fromCartItem.cartFeature, fromCartItem.quantity, fromCartItem.fromQtCategory),\r\n noteText: fromCartItem.noteText,\r\n addedBy: fromCartItem.addedBy,\r\n isRemoved: fromCartItem.isRemoved,\r\n }\r\n if (fromCartItem.cartFeature.dbFeature.priceWasChanged) {\r\n compressedCartItem.customCost = fromCartItem.cartFeature.dbFeature.cost; // to restore job feature prices\r\n compressedCartItem.customPrice = fromCartItem.cartFeature.dbFeature.price; // to restore job feature prices\r\n }\r\n if (fromCartItem.cartFeature.dbFeature.markUpString) {\r\n compressedCartItem.markUpString = fromCartItem.cartFeature.dbFeature.markUpString; // to be able to compare! not needed for now\r\n }\r\n return compressedCartItem\r\n}\r\n\r\n/**\r\n * returns cart items compressed objects\r\n * @param cartItems {[cartItemInterface]}\r\n * @returns {array}\r\n */\r\nexport const getCompressedCartItems = (cartItems) => {\r\n return cartItems.map(ci => {\r\n if (!ci.cartFeature || !ci.cartFeature.dbFeature) {\r\n return null\r\n }\r\n const cartItem = Object.assign({}, ci, {\r\n cartFeature: getCompressedFeature(ci, ci.cartFeature),\r\n });\r\n if (ci.relatedProductParent) {\r\n cartItem.relatedProductParent = getCompressedFeature(ci, ci.relatedProductParent);\r\n }\r\n if (ci.bundleParentId) {\r\n cartItem.bundleParentId = ci.bundleParentId;\r\n }\r\n return cartItem\r\n }).filter(cartItem => !!cartItem)\r\n}\r\n\r\n/**\r\n * sets feature groups properties TO bvState\r\n * @param bvState {object}\r\n * @param layout {object}\r\n * @returns {object}\r\n */\r\nexport const getFeatureGroupsProperties = (bvState, layout) => {\r\n layout.getFeatures(true).forEach((parentGroup) => {\r\n let relatedItems = parentGroup.getRelatedItems();\r\n relatedItems.forEach((subPart) => {\r\n if (subPart.customNames) {\r\n bvState[subPart.partId + \"_customNames\"] = subPart.customNames;\r\n }\r\n })\r\n })\r\n return bvState\r\n}\r\n\r\n/**\r\n * sets feature groups properties FROM bvState\r\n * @param bvState {object}\r\n * @param layout {object}\r\n * @returns {object}\r\n */\r\nexport const setFeatureGroupsProperties = (bvState, layout) => {\r\n layout.getFeatures(true).forEach((parentGroup) => {\r\n let relatedItems = parentGroup.getRelatedItems();\r\n relatedItems.forEach((subPart) => {\r\n if (bvState[subPart.partId + \"_customNames\"]) {\r\n subPart.customNames = bvState[subPart.partId + \"_customNames\"];\r\n }\r\n })\r\n })\r\n return bvState\r\n}\r\n\r\n\r\n/**\r\n * adds cookie to request data\r\n * @param data {object}\r\n * @returns {object}\r\n */\r\nexport const addGACookie = (data) => {\r\n try {\r\n if (!document.cookie) {\r\n return data\r\n }\r\n const getCookie = name => {\r\n const splitted = document.cookie.match(new RegExp(`(^| )${name}=([^;]+)`));\r\n return splitted ? splitted[2] : \"\"\r\n };\r\n data.cookiesAll = document.cookie;\r\n data.cookie_ga = getCookie(\"_ga\");\r\n } catch (error) {\r\n console.log(\"can't access cookie\", error);\r\n }\r\n return data\r\n}\r\n\r\nexport const getCartItemPartIdFix = (partId) => {\r\n if ((partId !== \"shower_wall\") && (partId !== \"shower_interior_wall\")) {\r\n return partId\r\n }\r\n const isBathroom = BATHROOM_VISUALIZER_TYPES.includes(document.kvConfig.visualizerType);\r\n if (isBathroom) {\r\n if (document.kvConfig.visualizerType === \"bvLook\") {\r\n return \"shower_wall\"\r\n }\r\n return \"shower_interior_wall\"\r\n }\r\n return partId // just in case\r\n}\r\n\r\nexport const fixFeaturesResponse = (response) => {\r\n if (!response) {\r\n return []\r\n }\r\n if (Array.isArray(response)) {\r\n return response;\r\n }\r\n if (Array.isArray(response.features)) {\r\n if (Array.isArray(response.relatedFeatures) && response.relatedFeatures.length) {\r\n // for (let i = 0; i < response.relatedFeatures.length; i++) {\r\n // response.relatedFeatures[i].isRelatedDbFeature = true;\r\n // }\r\n // console.log(\"response.relatedFeatures\", response.relatedFeatures);\r\n return [...response.relatedFeatures, ...response.features] // we should always be here // related goes first\r\n }\r\n return response.features; // keep it as an array\r\n }\r\n return [];\r\n}\r\n","//INITIAL FLOW\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const setFabricatorSubscriptions = (fabricatorSubscriptions) => ({\r\n type: types.SET_FABRICATOR_SUBSCRIPTIONS,\r\n payload: {fabricatorSubscriptions}\r\n});\r\n\r\nexport const setInitialFlowAdditionalRooms = (initialFlowAdditionalRooms) => ({\r\n type: types.SET_INITIAL_FLOW_ADDITIONAL_ROOMS,\r\n payload: {initialFlowAdditionalRooms}\r\n});\r\n\r\nexport const setInitialFlowType = (initialFlowType) => ({\r\n type: types.SET_INITIAL_FLOW_BUTTON,\r\n payload: {initialFlowType}\r\n});\r\n\r\nexport const setInitialFlowRoom = (initialFlowRoom) => ({\r\n type: types.SET_INITIAL_FLOW_ROOM,\r\n payload: {initialFlowRoom}\r\n});\r\n\r\nexport const setInitialFlowVisualizerNotAvailable = (visualizerNotAvailable) => ({\r\n type: types.SET_INITIAL_FLOW_VISUALIZER_NOT_AVAILABLE,\r\n payload: {visualizerNotAvailable}\r\n});\r\n\r\nexport const setInitialFlowFinished = (initialFlowFinished) => ({\r\n type: types.SET_INITIAL_FLOW_FINISHED,\r\n payload: {initialFlowFinished}\r\n});\r\n\r\nexport const setInitialFlowRoomLayout = (initialFlowRoomLayout) => ({\r\n type: types.SET_INITIAL_FLOW_ROOM_LAYOUT,\r\n payload: {initialFlowRoomLayout}\r\n});\r\nexport const setInitialFlowStep = (initialFlowStep) => ({\r\n type: types.SET_INITIAL_FLOW_STEP,\r\n payload: {initialFlowStep}\r\n});\r\n","import $ from 'jquery';\r\n\r\nimport JsonApi from \"./jsonApi\";\r\nimport store from \"../store\";\r\nimport {loaderEnable, loaderDisable} from \"../bvcomponents/ui/loaderView\";\r\nimport * as types from \"../actions/actionTypes\";\r\nimport Misc from \"../misc/misc\";\r\nimport Config, {IS_LIXIL_UI, IS_OFFLINE_MODE, POST_MESSAGES} from \"../config\";\r\nimport Analytics from '../analytics';\r\nimport {saveQuote} from \"./server-api\";\r\nimport {\r\n renderErrorPopup,\r\n renderAccountNotActivatedErrorPopup,\r\n renderConfirmPopup,\r\n renderMessagePopup\r\n} from \"./api-popups\";\r\nimport {ConfirmPopupTypes, QuoteRequestType, UserAction} from \"../bvcomponents/visComponents/constants\";\r\nimport {setJobId, showCheckoutLayout, toggleUserPopup} from \"../actions/actionFunctions\";\r\nimport {showQuoteSavedNotification} from \"../bvcomponents/ui/successNotification\";\r\nimport ActionTypes from \"../misc/actionTypes\";\r\nimport {setAlreadyRegisteredUserInfo, setEmployeesList} from \"../actions/userFunctions\";\r\nimport {restorePaymentInfo} from \"../actions/paymentFunctions\";\r\nimport {addGACookie} from \"../misc/backendFunctions\";\r\n\r\n\r\nexport const scheduleCustomer = (data) => {\r\n loaderEnable(\"loader.scheduleCustomerText\", \"loader.scheduleCustomerTitle\");\r\n const state = store.getState();\r\n const {serverState} = state;\r\n let {time} = data;\r\n let am = true;\r\n if (time > 1200) {\r\n am = false;\r\n time -= 1200;\r\n }\r\n const scheduleData = {\r\n scheduleEntryData: {\r\n date: data.date,\r\n time: `${time / 100}:00`,\r\n am: am,\r\n duration: 60,\r\n alert: 30,\r\n appointmentType: 'Quote'\r\n },\r\n jobId: serverState.jobId,\r\n jobIdType: 'JobQuote'\r\n };\r\n\r\n JsonApi.scheduleCustomer(scheduleData)\r\n .then(response => {\r\n console.log('Schedule answer', response);\r\n loaderDisable();\r\n store.dispatch({\r\n type: types.SHOW_SCHEDULER,\r\n payload: {show: false}\r\n })\r\n });\r\n};\r\n\r\nexport const setUserLoginResponse = (responseData,\r\n fromConfirmationDialog = false,\r\n quoteRequestType,\r\n yesNoConsultationRequest,\r\n showSchedule,\r\n checkout,\r\n userPopupType) => {\r\n console.log(responseData);\r\n // const saveQuoteAfterLogin = state.userState.saveQuoteAfterLogin;\r\n // if (!saveQuoteAfterLogin) {\r\n // loaderDisable();\r\n // }\r\n const state = store.getState();\r\n\r\n if (responseData.error) {\r\n Analytics.sendClickEvent(\"user-login-failure\");\r\n if (state.fabricatorState.isNhance) {\r\n Analytics.sendParentPostMessage(POST_MESSAGES.userLoginFalse);\r\n }\r\n const {error} = responseData;\r\n loaderDisable();\r\n if (responseData.error.indexOf('has not been activated yet') !== -1) {\r\n const userInfo = store.getState().userState.userInfo;\r\n renderAccountNotActivatedErrorPopup(error, userInfo.email);\r\n } else {\r\n renderErrorPopup(responseData.error);\r\n }\r\n if (fromConfirmationDialog) {\r\n store.dispatch(toggleUserPopup({\r\n userPopupOpened: true,\r\n userPopupType\r\n }));\r\n }\r\n return false;\r\n }\r\n\r\n const fabricatorSettings = state.fabricatorState.settings;\r\n\r\n // const docuSignObj = fabricatorSettings.docuSignAuth ? JSON.parse(fabricatorSettings.docuSignAuth) : null;\r\n // Config.setUserInfo(responseData);\r\n Analytics.sendClickEvent(\"user-login-success\");\r\n Analytics.setUserId(responseData.encodedUserId);\r\n Analytics.setExistingMixPanelPerson(responseData.email);\r\n if (state.fabricatorState.isNhance) {\r\n Analytics.sendParentPostMessage(POST_MESSAGES.userLoginTrue);\r\n }\r\n const updatedUserInfo = Misc.parseUserResponse(responseData);\r\n // const isPhoneNumberValidated = responseData.isPhoneNumberValidated || !responseData.pendingPhoneVerification;\r\n const isPhoneNumberValidated = !fabricatorSettings.twoFA || responseData.isPhoneNumberValidated || !responseData.pendingPhoneVerification;\r\n\r\n store.dispatch({\r\n type: types.TOGGLE_USER_POPUP,\r\n payload: {\r\n userPopupOpened: false,\r\n userIsLoggedIn: true,\r\n isPhoneNumberValidated,\r\n userInfo: updatedUserInfo,\r\n // email: responseData.email,\r\n encodedUserId: responseData.encodedUserId,\r\n // phoneNumber: responseData.phoneNumber,\r\n // values: responseData.values\r\n }\r\n });\r\n\r\n if (responseData.billingAddress || responseData.shippingAddress) { // update user state\r\n store.dispatch(restorePaymentInfo(Misc.parseShippingAndBillingResponse(responseData)));\r\n }\r\n\r\n if (IS_LIXIL_UI) { // we don't go below, as we already have save in the lixil logic\r\n return {...responseData, isPhoneNumberValidated: isPhoneNumberValidated || !fabricatorSettings.twoFA}\r\n }\r\n\r\n if (fabricatorSettings.twoFA && responseData.pendingPhoneVerification) {\r\n store.dispatch({\r\n type: types.TOGGLE_USER_POPUP,\r\n payload: {userPopupOpened: true}\r\n });\r\n } else {\r\n saveQuote({\r\n submit: true,\r\n quoteRequestType,\r\n yesNoConsultationRequest,\r\n fromCheckOutPage: window.location.href.includes('shoppingcart'),\r\n showContractSignOnError: true,\r\n showReceipt: false\r\n })\r\n .then((response) => {\r\n $(document).trigger(ActionTypes.USER_IS_LOGGED_IN); // click on the active item it the navigation\r\n if (response) {\r\n let responseDataBase = response;\r\n if (responseData) {\r\n responseDataBase = responseData;\r\n }\r\n const responseData = typeof responseDataBase === 'object' ? responseDataBase : JSON.parse(responseDataBase);\r\n console.log('saveQuote response:', responseData);\r\n store.dispatch(setJobId(responseData.jobId));\r\n }\r\n if (showSchedule) {\r\n loaderDisable();\r\n if (fabricatorSettings.enableCalendarForScheduling) {\r\n store.dispatch({\r\n type: types.SHOW_SCHEDULER,\r\n payload: {show: true}\r\n })\r\n } else {\r\n renderMessagePopup('userPopup.messageBox.appointmentRequested');\r\n }\r\n } else {\r\n loaderDisable();\r\n showQuoteSavedNotification(\r\n quoteRequestType === QuoteRequestType.RequestQuote\r\n ? \"successNotification.titleQuoteRequested\"\r\n : \"successNotification.titleQuoteSaved\"\r\n );\r\n // console.log('DS - login', fabricatorSettings.showPricing, docuSignObj);\r\n // if (fabricatorSettings.showPricing && docuSignObj && docuSignObj.isEnabled)\r\n // store.dispatch(showDocuSign(true));\r\n if (checkout && fabricatorSettings.checkout) {\r\n showCheckoutLayout(fabricatorSettings);\r\n }\r\n }\r\n })\r\n .catch((error) => {\r\n console.error('saveQuote error:', error);\r\n loaderDisable();\r\n })\r\n }\r\n\r\n if (showSchedule) {\r\n if (fabricatorSettings.enableCalendarForScheduling) {\r\n store.dispatch({\r\n type: types.SHOW_SCHEDULER,\r\n payload: {show: true}\r\n })\r\n } else {\r\n renderMessagePopup('userPopup.messageBox.appointmentRequested');\r\n }\r\n }\r\n}\r\n\r\nexport const userLogin = ({\r\n showConfirmationPopup = false,\r\n showSchedule = false,\r\n quoteRequestType = QuoteRequestType.RegularDesign,\r\n yesNoConsultationRequest = false,\r\n userPopupType,\r\n fromConfirmationDialog = false,\r\n checkout = false\r\n } = {}) => {\r\n if (showConfirmationPopup) {\r\n store.dispatch({\r\n type: types.TOGGLE_USER_POPUP,\r\n payload: {\r\n userPopupOpened: false\r\n }\r\n });\r\n renderConfirmPopup(ConfirmPopupTypes.ConsultationRequest, {\r\n userAction: UserAction.Login,\r\n userPopupType\r\n });\r\n return;\r\n }\r\n const state = store.getState();\r\n const userInfo = state.userState.userInfo;\r\n const showAdditionalFields = state.userState.showAdditionalFields;\r\n if (!IS_LIXIL_UI) {\r\n loaderEnable();\r\n }\r\n let data = {\r\n email: userInfo.email,\r\n password: userInfo.password,\r\n employeeId: showAdditionalFields ? +userInfo.employeeId : 0,\r\n fabricatorId: document.kvConfig.userId,\r\n }\r\n data = addGACookie(data);\r\n\r\n return JsonApi.userLogin(data)\r\n .then((response) => {\r\n return setUserLoginResponse(\r\n response.data,\r\n fromConfirmationDialog,\r\n quoteRequestType,\r\n yesNoConsultationRequest,\r\n showSchedule,\r\n checkout,\r\n userPopupType\r\n )\r\n })\r\n .catch((error) => {\r\n console.log('User login error:', error);\r\n loaderDisable();\r\n renderErrorPopup(\"Login \"+new Error(error.message || error));\r\n if (state.fabricatorState.isNhance) {\r\n Analytics.sendParentPostMessage(POST_MESSAGES.userLoginFalse);\r\n }\r\n });\r\n};\r\n\r\nconst callUserRegisterErrorPopup = (responseData,\r\n userPopupType,\r\n fromConfirmationDialog,\r\n assignQuote = false,\r\n withCheckoutLogic = false,\r\n noInternetCallBack = null,\r\n afterContractSignCallback = null,\r\n executeAfterRegisterIfUserExist = null) => {\r\n Analytics.sendClickEvent(\"user-register-failure\");\r\n\r\n if (responseData.isEmailTaken && responseData.errorUserMatch) {\r\n store.dispatch(setAlreadyRegisteredUserInfo({...responseData.errorUserMatch, assignQuote, withCheckoutLogic, userId: responseData.userId}));\r\n renderConfirmPopup(ConfirmPopupTypes.AssignQuoteOnExistingUser, {applyFunction: executeAfterRegisterIfUserExist}, true)\r\n return\r\n }\r\n\r\n renderErrorPopup(responseData.error, \"\", noInternetCallBack, withCheckoutLogic, null, afterContractSignCallback);\r\n\r\n if (fromConfirmationDialog) {\r\n store.dispatch(toggleUserPopup({\r\n userPopupOpened: true,\r\n userPopupType\r\n }));\r\n }\r\n\r\n}\r\n\r\nexport const userRegister = async ({\r\n showConfirmationPopup = false,\r\n showSchedule = false,\r\n quoteRequestType = QuoteRequestType.RegularDesign,\r\n yesNoConsultationRequest = false,\r\n userPopupType,\r\n fromConfirmationDialog = false,\r\n // checkout = false,\r\n assignQuote = false,\r\n withCheckoutLogic = false,\r\n noInternetCallBack = null,\r\n afterContractSignCallback = null,\r\n executeAfterRegisterIfUserExist = null,\r\n } = {}) => {\r\n //console.log('register', quoteRequestType);\r\n if (showConfirmationPopup) {\r\n store.dispatch({\r\n type: types.TOGGLE_USER_POPUP,\r\n payload: {\r\n userPopupOpened: false\r\n }\r\n });\r\n renderConfirmPopup(ConfirmPopupTypes.ConsultationRequest, {\r\n userAction: UserAction.Register,\r\n userPopupType,\r\n quoteRequestType\r\n });\r\n return;\r\n }\r\n\r\n const {userState, serverState, fabricatorState} = store.getState();\r\n const userInfo = userState.userInfo;\r\n // userInfo.phone = userInfo.phoneNumber;\r\n // if (!store.getState().userState.showAdditionalFields) {\r\n // userInfo.employeeId = \"\"\r\n // }\r\n if (!IS_LIXIL_UI) {\r\n loaderEnable();\r\n }\r\n let data = {\r\n email: userInfo.email,\r\n firstName: userInfo.firstName,\r\n phone: `+${userInfo.country.dialCode} ${userInfo.phoneNumber}`,\r\n agreedToTerms: userInfo.agreedToTerms,\r\n subscribeToNewsletter: userInfo.subscribeToNewsletter,\r\n isNew: true,\r\n postal: userInfo.postal,\r\n salesPersonFullName: userInfo.salesPersonFullName,\r\n salesPersonEmail: userInfo.salesPersonEmail,\r\n employeeId: +userInfo.employeeId,\r\n fabricatorId: Config.kvConfig.userId || 61986,\r\n quoteRequestType,\r\n yesNoConsultationRequest,\r\n lastName: userInfo.lastName,\r\n address1: userInfo.address1,\r\n address2: userInfo.address2,\r\n city: userInfo.city,\r\n state: userInfo.state,\r\n country: userInfo.country.iso2,\r\n preferredCommunicationMethod: userInfo.preferredCommunicationMethod,\r\n howDidYouHearAboutUs: userInfo.howDidYouHearAboutUs,\r\n phone2: userInfo.phone2,\r\n language: serverState.language,\r\n subId: document.subId && document.subId.toString ? document.subId.toString() : null,\r\n };\r\n\r\n data = addGACookie(data);\r\n\r\n if (assignQuote) {\r\n [\"lastName\", \"phone2\", \"address1\", \"address2\", \"city\", \"preferredCommunicationMethod\", \"howDidYouHearAboutUs\"]\r\n .forEach((property) => {\r\n data[property] = userInfo[property] // new fields added in new assign quote popup\r\n })\r\n }\r\n\r\n let registerResponse;\r\n\r\n try {\r\n registerResponse = await JsonApi.userRegister(data);\r\n } catch (error) {\r\n if (error && (error.message === \"Network Error\") && IS_OFFLINE_MODE) {\r\n registerResponse = {data: {error: \"Network Error\"}}\r\n }\r\n }\r\n\r\n if (!IS_LIXIL_UI) {\r\n loaderDisable();\r\n }\r\n\r\n if (registerResponse.data.error) {\r\n callUserRegisterErrorPopup(registerResponse.data, userPopupType, fromConfirmationDialog, assignQuote, withCheckoutLogic, noInternetCallBack, afterContractSignCallback, executeAfterRegisterIfUserExist);\r\n if (fabricatorState.isNhance) {\r\n Analytics.sendParentPostMessage(POST_MESSAGES.userRegisterFalse);\r\n }\r\n return;\r\n }\r\n\r\n Analytics.sendClickEvent(\"user-register-success\");\r\n // Config.setUserInfo(registerResponse.data);\r\n Analytics.setUserId(registerResponse.data.encodedUserId);\r\n Analytics.setMixPanelPerson(registerResponse.data.email, registerResponse.data.firstName, registerResponse.data.phoneNumber);\r\n if (fabricatorState.isNhance) {\r\n Analytics.sendParentPostMessage(POST_MESSAGES.userRegisterTrue);\r\n }\r\n\r\n if (assignQuote) {\r\n return registerResponse.data\r\n }\r\n const fabricatorSettings = fabricatorState.settings;\r\n\r\n if (IS_LIXIL_UI) {\r\n store.dispatch(toggleUserPopup({\r\n userIsLoggedIn: true,\r\n encodedUserId: registerResponse.data.encodedUserId,\r\n isPhoneNumberValidated: !fabricatorSettings.twoFA,\r\n }));\r\n return registerResponse.data\r\n }\r\n\r\n // const docuSignObj = fabricatorSettings.docuSignAuth ? JSON.parse(fabricatorSettings.docuSignAuth) : null;\r\n store.dispatch(toggleUserPopup({\r\n userPopupOpened: fabricatorSettings.twoFA,\r\n schedulerPending: fabricatorSettings.twoFA,\r\n userIsLoggedIn: true,\r\n // when user first register we need to check whether the fabricator requires to validate the phone number\r\n isPhoneNumberValidated: !fabricatorSettings.twoFA, // if 2FA is required we consider user is still NOT logged in\r\n ...registerResponse.data,\r\n userInfo: {\r\n email: registerResponse.data.email\r\n }\r\n }));\r\n\r\n const submit = window.location.href.includes('shoppingcart');\r\n const saveQuoteResponse = await saveQuote({\r\n submit,\r\n yesNoConsultationRequest,\r\n quoteRequestType,\r\n fromCheckOutPage: submit,\r\n showReceipt: false\r\n });\r\n\r\n if (fabricatorSettings.twoFA)\r\n return;\r\n\r\n $(document).trigger(ActionTypes.USER_IS_LOGGED_IN); // click on the active item it the navigation\r\n if (saveQuoteResponse) {\r\n let responseDataBase = saveQuoteResponse;\r\n if (saveQuoteResponse.data) {\r\n responseDataBase = saveQuoteResponse.data;\r\n }\r\n const responseData = typeof responseDataBase === 'object' ? responseDataBase : JSON.parse(responseDataBase);\r\n //console.log('saveQuote response:', responseData);\r\n store.dispatch(setJobId(responseData.jobId));\r\n }\r\n if (showSchedule) {\r\n if (fabricatorSettings.enableCalendarForScheduling) {\r\n store.dispatch({\r\n type: types.SHOW_SCHEDULER,\r\n payload: {show: true}\r\n })\r\n } else {\r\n renderMessagePopup(\"userPopup.messageBox.appointmentRequested\");\r\n }\r\n } else {\r\n // store.dispatch({\r\n // type: types.CHANGE_MESSAGE_BOX,\r\n // payload: {\r\n // visible: true,\r\n // error: false,\r\n // inline: false,\r\n // message: \"userPopup.messageBox.designSavedSuccess\",\r\n // buttons: [{\r\n // text: \"messageBox.buttonOk\",\r\n // color: \"green\",\r\n // click: () => {\r\n // store.dispatch({\r\n // type: types.CHANGE_MESSAGE_BOX,\r\n // payload: {\r\n // visible: false,\r\n // }\r\n // });\r\n //\r\n // // console.log('DS - register', fabricatorSettings.showPricing, docuSignObj);\r\n // // if (fabricatorSettings.showPricing && docuSignObj && docuSignObj.isEnabled)\r\n // // store.dispatch(showDocuSign(true));\r\n //\r\n // if (checkout && fabricatorSettings.checkout && fabricatorSettings.hasPaymentGateway) {\r\n // showCheckoutLayout(fabricatorSettings);\r\n // }\r\n // }\r\n // }]\r\n // }\r\n // });\r\n }\r\n\r\n if (saveQuoteResponse.error || saveQuoteResponse.data && saveQuoteResponse.data.error) {\r\n loaderDisable();\r\n renderErrorPopup(saveQuoteResponse.error || saveQuoteResponse.data.error, \"\", noInternetCallBack);\r\n }\r\n return null\r\n};\r\n\r\nexport const resetUserPassword = () => {\r\n const state = store.getState();\r\n const email = state.userState.userInfo.email;\r\n const language = state.serverState.language;\r\n loaderEnable();\r\n JsonApi.resetUserPassword(email, language)\r\n .then((response) => {\r\n loaderDisable();\r\n console.log('resetUserPassword response:', response);\r\n if (response.data.error) {\r\n renderErrorPopup(response.data.error);\r\n } else if (IS_LIXIL_UI) {\r\n store.dispatch({\r\n type: types.CHANGE_MESSAGE_BOX,\r\n payload: {\r\n visible: true,\r\n title: \"leadCapturePopup.forgot.successPopup.title\",\r\n message: \"leadCapturePopup.forgot.successPopup.text\",\r\n }\r\n })\r\n } else {\r\n store.dispatch({\r\n type: types.CHANGE_MESSAGE_BOX,\r\n payload: {\r\n visible: true,\r\n message: \"userPopup.messageBox.passwordHasBeenSent\",\r\n error: false,\r\n inline: false,\r\n buttons: [{\r\n text: \"messageBox.buttonOk\",\r\n color: \"blue\",\r\n click: () => {\r\n store.dispatch({\r\n type: types.CHANGE_MESSAGE_BOX,\r\n payload: {\r\n visible: false,\r\n }\r\n });\r\n }\r\n }]\r\n }\r\n });\r\n }\r\n })\r\n .catch((error) => {\r\n loaderDisable();\r\n renderErrorPopup(error);\r\n });\r\n};\r\n\r\nexport const getEmployees = (withLoader = true) => {\r\n if (withLoader) {\r\n loaderEnable();\r\n }\r\n return JsonApi.getEmployees()\r\n .then((response) => {\r\n if (withLoader) {\r\n loaderDisable();\r\n }\r\n //console.log('getEmployees response:', response);\r\n const emplList = response && response.data ? [...response.data] : [];\r\n store.dispatch(setEmployeesList(emplList));\r\n return emplList\r\n })\r\n .catch((error) => {\r\n if (withLoader) {\r\n loaderDisable();\r\n }\r\n console.log('getEmployees error:', error);\r\n return []\r\n // renderErrorPopup(error);\r\n });\r\n};\r\n\r\nexport const getCustomerById = ({customerId,\r\n showContractOnError = false,\r\n noInternetCallBack,\r\n afterContractSignCallback}) => {\r\n loaderEnable();\r\n return JsonApi.getCustomerById(customerId)\r\n .then(response => response.data)\r\n .catch((error) => {\r\n loaderDisable();\r\n renderErrorPopup(error, \"\", noInternetCallBack, showContractOnError, null, afterContractSignCallback);\r\n });\r\n};\r\n\r\nexport const generateTwoFaAuthenticationToken = () => {\r\n return JsonApi.generateAuthenticationToken()\r\n .then(response => response.data || response)\r\n .catch(error => console.log(\"Server error validateAuthentication \"+new Error(error)))\r\n};\r\n\r\nexport const validateTwoFaAuthentication = (token, authCode, phone) => {\r\n return JsonApi.validateAuthenticationRequest(token, authCode, phone)\r\n .then(response => response.data)\r\n .catch(error => console.log(\"Server error validateAuthentication \"+new Error(error)))\r\n};\r\n\r\nexport const sendAuthenticationRequest = (token, to, type) => {\r\n return JsonApi.sendAuthenticationRequest(token, to, type)\r\n .then(response => response.data)\r\n .catch(error => console.log(\"Server error sendAuthenticationRequest \"+new Error(error)))\r\n};\r\n","import $ from \"jquery\";\r\nimport eventManager from \"../../store/sqftEventManager\";\r\nimport Config from \"../../store/sqftConfig\";\r\nimport workspace from \"../workspace\";\r\nimport Cursor from \"./cursor\";\r\nimport MiteredOverlay from \"../shapes/overlays/mitered\";\r\nimport {\r\n inchesToMm,\r\n measureDistanceToInches,\r\n mmToInches,\r\n} from \"../../../../helpers/sqftHelper\";\r\nimport {iconPlusBlue} from \"../../../../assetsSQFT\";\r\nimport store from \"../../../../../../store\";\r\nimport {\r\n addMiteredSection,\r\n changeMiteredSection,\r\n deleteMiteredSection\r\n} from \"../../../../../../actions/sqftMiteredFunctions\";\r\nimport {updateSQFTCalculations} from \"../../../../../../actions/sqftFunctions\";\r\nimport {\r\n EDGE_LABELS,\r\n MITERED_OVERLAY_TYPE,\r\n RESOURCE_ATTACHED_TO_TYPE,\r\n SIDEBAR_BUTTONS_MENU, SIDEBAR_HIDDEN_BUTTONS,\r\n SIDEBAR_NAVIGATION_BUTTONS\r\n} from \"../../../../constants\";\r\nimport {setSQFTMenuOpened, setSQFTMenuOpenedLock} from \"../../../../../../actions/sqftMenuFunctions\";\r\nimport {attachResource} from \"./resourseCanas\";\r\nimport {getEdgeFeatures} from \"../../../../helpers/shapeHelper\";\r\nimport {getMiterEdgeFeature, getMiterUnderwrap} from \"../../../../helpers/featureHelper\";\r\n\r\nexport default class MiteredController {\r\n cursor;\r\n design = {\r\n imgSrc: iconPlusBlue\r\n };\r\n nodes = {\r\n miteredSectionsHTML: $('#mitered-sections'),\r\n };\r\n miteredSections = [];\r\n\r\n createCursor = () => {\r\n this.cursor = new Cursor();\r\n this.cursor.setCursorImage(this.design.imgSrc);\r\n eventManager.setCursor('mitered-select', this, true);\r\n };\r\n\r\n registerEvents = () => {\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_UP,\r\n this.onMouseUp,\r\n this,\r\n eventManager.priorities.OVERALL\r\n );\r\n };\r\n\r\n attachMiteredEdge = (seg) => {\r\n if (seg && !seg.isWithMitered() && !seg.isWithBumpout()) {\r\n //add tool\r\n attachResource(seg, null, RESOURCE_ATTACHED_TO_TYPE.mitered, null, null, '', 0, null, null, false);\r\n\r\n //add green edge\r\n const miterEdgeFeature = getMiterEdgeFeature();\r\n if (miterEdgeFeature) {\r\n const name = miterEdgeFeature.getFeatureName();\r\n attachResource(seg, null, RESOURCE_ATTACHED_TO_TYPE.edge, miterEdgeFeature.dbFeature.id, null, name);\r\n }\r\n }\r\n };\r\n\r\n attachMiteredUnderwrapEdge = (seg) => {\r\n if (seg && !seg.isWithMitered() && !seg.isWithBumpout()) {\r\n //add tool\r\n attachResource(seg, null, RESOURCE_ATTACHED_TO_TYPE.mitered, null, null, '', 0, null, null, false);\r\n\r\n //add green edge\r\n const miterEdgeFeature = getMiterUnderwrap();\r\n if (miterEdgeFeature) {\r\n const name = miterEdgeFeature.getFeatureName();\r\n attachResource(seg, null, RESOURCE_ATTACHED_TO_TYPE.edge, miterEdgeFeature.dbFeature.id, null, name);\r\n }\r\n }\r\n };\r\n\r\n onMouseUp = (mousePos) => {\r\n void mousePos;\r\n let hoverShape = workspace.getHoverShape();\r\n\r\n if (hoverShape && hoverShape.getHoverSegment) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n const activeSubMenuButton = reduxState.sqftMenuState.activeSubMenuButton;\r\n if (activeButton === SIDEBAR_NAVIGATION_BUTTONS.mitered || activeSubMenuButton === SIDEBAR_HIDDEN_BUTTONS.buttonMitered) {\r\n let seg = hoverShape.getHoverSegment();\r\n if (seg && seg.isWithMitered() && reduxState.sqftMenuState.activeButton === SIDEBAR_BUTTONS_MENU.delete) {\r\n seg.deleteMitered();\r\n } else if (seg && seg.isWithMitered()) {\r\n void 0;\r\n } else {\r\n this.attachMiteredEdge(seg, this.cursor.cursorImage);\r\n }\r\n }\r\n }\r\n\r\n this.cursor.checkForRestoreCursor();\r\n };\r\n\r\n addSection = (miteredSection) => {\r\n const reduxState = store.getState();\r\n store.dispatch(addMiteredSection(miteredSection));\r\n store.dispatch(setSQFTMenuOpened(SIDEBAR_NAVIGATION_BUTTONS.mitered));\r\n const updateCalculations = reduxState.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n };\r\n\r\n updateSection = (miteredSection) => {\r\n store.dispatch(changeMiteredSection(miteredSection));\r\n store.dispatch(setSQFTMenuOpened(SIDEBAR_NAVIGATION_BUTTONS.mitered));\r\n store.dispatch(setSQFTMenuOpenedLock(true));\r\n\r\n const reduxState = store.getState();\r\n const updateCalculations = reduxState.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n }\r\n\r\n deleteSection = (miteredOverlay) => {\r\n store.dispatch(deleteMiteredSection(miteredOverlay.id));\r\n };\r\n\r\n createMiteredOverlay = (line) => {\r\n const reduxState = store.getState();\r\n const miteredSections = reduxState.sqftMiteredState.miteredSections;\r\n\r\n return new MiteredOverlay(line, miteredSections.length + 1, MITERED_OVERLAY_TYPE.mitered)\r\n };\r\n\r\n destroy = (protect, revertBackAfterMouseUp) => {\r\n if (revertBackAfterMouseUp) {\r\n eventManager.removeEvent(self, eventManager.events.RENDER); //remove render only, but wait for mouse up to set cursor again\r\n this.isWaitingToRestoreCursor = true;\r\n } else {\r\n this.deregisterEvents();\r\n }\r\n //this.hide();\r\n };\r\n\r\n deregisterEvents() {\r\n eventManager.resetCursor(this);\r\n eventManager.removeEvent(this);\r\n this.cursor ? this.cursor.deregisterEvents() : null;\r\n Config.highlight.lines = false;\r\n }\r\n\r\n static getTotalArea = () => {\r\n let miteredSections = workspace.getMiteredSections();\r\n let miteredSectionsArea = 0;\r\n for (let i = 0; i < miteredSections.length; i++) {\r\n miteredSectionsArea += miteredSections[i] ? miteredSections[i].getMiteredToolTotalArea() : null;\r\n }\r\n\r\n return miteredSectionsArea;\r\n };\r\n\r\n onMeasureUnitChange = () => {\r\n let miteredSections = workspace.getMiteredSections();\r\n let miteredSectionsArea = 0;\r\n for (let i = 0; i < miteredSections.length; i++) {\r\n let segments = miteredSections[i].getSegments();\r\n\r\n segments.map((segment) => {\r\n segment.height = Config.measureUnit === \"Metric\"\r\n ? inchesToMm(segment.height)\r\n : mmToInches(segment.height);\r\n\r\n if (segment.thickness) {\r\n segment.thickness.value = Config.measureUnit === \"Metric\"\r\n ? inchesToMm(segment.thickness.value)\r\n : mmToInches(segment.thickness.value)\r\n }\r\n });\r\n\r\n miteredSections[i].heightNumberText.value = segments[0].height\r\n }\r\n\r\n return miteredSectionsArea;\r\n };\r\n\r\n getTransformedMeasureUnit = (value) => {\r\n return Config.measureUnit === \"Metric\"\r\n ? measureDistanceToInches(value).millimeters // ? distanceToMillimeters(inchesToMm(segment.length.value))\r\n : value;\r\n };\r\n\r\n getEdgesLength = () => {\r\n let additionalLength = 0;\r\n const lines = workspace.getLines();\r\n for (const line of lines) {\r\n if (line.from.getMiteredFeatureId()) {\r\n additionalLength += this.getEdgeLengthValue();\r\n }\r\n }\r\n\r\n return additionalLength\r\n }\r\n\r\n getEdgeLengthValue = () => {\r\n return Config.measureUnit === \"Imperial\"\r\n ? (2 * 33) / 40\r\n : (2 * 900) / 1000;\r\n }\r\n\r\n getExportedMiteredEdges = () => {\r\n let addedEdges = [];\r\n const lines = workspace.getLines();\r\n for (const line of lines) {\r\n const miteredFeatureId = line.from.getMiteredFeatureId();\r\n if (miteredFeatureId) {\r\n const edgeLengthValue = this.getEdgeLengthValue();\r\n const navItems = getEdgeFeatures();\r\n let edgeFeature = navItems.find(edge => edge.part.dbFeature.id === miteredFeatureId);\r\n\r\n addedEdges.push({\r\n partId: EDGE_LABELS.edge,\r\n type: EDGE_LABELS.edge,\r\n name: edgeFeature ? workspace.intl.formatMessage({id: edgeFeature.part.dbFeature.sharedFeatureName}) : \"\",\r\n featureId: miteredFeatureId,\r\n segments: 1,\r\n length: edgeLengthValue,\r\n area: edgeLengthValue\r\n });\r\n }\r\n }\r\n\r\n return addedEdges\r\n }\r\n}\r\n","import * as types from \"./actionTypes\";\r\n\r\nexport const setMiteredSections = (miteredSections) => ({\r\n type: types.SET_MITERED_SECTIONS,\r\n payload: {miteredSections}\r\n});\r\n\r\nexport const addMiteredSection = (miteredSection) => ({\r\n type: types.ADD_MITERED_SECTION,\r\n payload: miteredSection\r\n});\r\n\r\nexport const changeMiteredSection = (miteredSection) => ({\r\n type: types.CHANGE_MITERED_SECTION,\r\n payload: miteredSection\r\n});\r\n\r\nexport const deleteMiteredSection = (id) => ({\r\n type: types.DELETE_MITERED_SECTION,\r\n payload: {id}\r\n});\r\n\r\nexport const deleteAllMiteredSections = () => ({\r\n type: types.DELETE_ALL_MITERED_SECTIONS,\r\n payload: {}\r\n});\r\n","import {SHAPE_PART_ID} from \"./constants\";\r\n\r\nexport const SHAPE_HARDCODED_PART_IDS = [\r\n SHAPE_PART_ID.seamPiece,\r\n SHAPE_PART_ID.backsplashPiece,\r\n SHAPE_PART_ID.waterfallPiece,\r\n SHAPE_PART_ID.slabPlaceHolder,\r\n SHAPE_PART_ID.upper_cabinet_boxes,\r\n SHAPE_PART_ID.lower_cabinet_boxes,\r\n SHAPE_PART_ID.tall_cabinet_boxes,\r\n];\r\n\r\nexport const SHAPE_PART_IDS_VISIBLE_ONLY_IN_THE_SLAB_MODE = [\r\n SHAPE_PART_ID.seamPiece,\r\n SHAPE_PART_ID.backsplashPiece,\r\n SHAPE_PART_ID.waterfallPiece,\r\n SHAPE_PART_ID.slabPlaceHolder,\r\n];\r\n\r\nexport const SHAPE_PART_IDS_FROM_ADDITIONAL_SHAPES_LIST = [\r\n SHAPE_PART_ID.backsplashPiece,\r\n SHAPE_PART_ID.waterfallPiece,\r\n];\r\n","import {Part} from \"../part\";\r\nimport {wallsThumbnail} from \"../../../bvComponent/core/assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport store from \"../../../../store\";\r\nimport LeftWall from \"../subparts/walls/leftWall\";\r\nimport RightWall from \"../subparts/walls/rightWall\";\r\nimport CenterWall from \"../subparts/walls/centerWall\";\r\nimport BackWall from \"../subparts/walls/backWall\";\r\nimport Ceiling from \"../subparts/walls/ceiling\";\r\nimport FrontWall from \"../subparts/walls/frontWall\";\r\nimport SplitWall from \"../subparts/walls/splitWall\";\r\nimport LeftWallSplitter from \"../subparts/walls/leftWallSplitter\";\r\nimport CeilingPanels from \"../subparts/walls/ceilingPanels\";\r\n\r\nexport default class Walls extends Part {\r\n static id = 'Walls';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Walls';\r\n this.translateId = \"visualizer.bathroom.walls\";\r\n this.partThumbnail = wallsThumbnail;\r\n\r\n // related items\r\n this.leftWall = null;\r\n this.rightWall = null;\r\n this.centerWall = null;\r\n this.frontWall = null;\r\n this.popoutWall = null;\r\n this.backWall = null;\r\n this.ceiling = null;\r\n this.ceilingPanels = null;\r\n this.splitWall = null;\r\n this.leftWallSplitter = null;\r\n\r\n this.allWallsApplied = true;\r\n this.relatedGroupNames = [\"Backsplash\", \"Left Wall Splitter\", \"Left Wall\", \"Right Wall\", \"Center Wall\",\r\n \"Front Wall\", \"Back Wall\", \"Ceiling\", \"Ceiling Panels\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Left Wall\":\r\n case \"Left Wall Crop\":\r\n relatedItemName = \"leftWall\";\r\n RelatedItemClass = LeftWall;\r\n break;\r\n case \"Right Wall\":\r\n case \"Right Wall Crop\":\r\n relatedItemName = \"rightWall\";\r\n RelatedItemClass = RightWall;\r\n break;\r\n case \"Center Wall\":\r\n relatedItemName = \"centerWall\";\r\n RelatedItemClass = CenterWall;\r\n break;\r\n case \"Front Wall\":\r\n case \"Front Wall Crop\":\r\n relatedItemName = \"frontWall\";\r\n RelatedItemClass = FrontWall;\r\n break;\r\n case \"Back Wall\":\r\n case \"Beack Wall\":\r\n relatedItemName = \"backWall\";\r\n RelatedItemClass = BackWall;\r\n break;\r\n case \"Split Wall\":\r\n relatedItemName = \"splitWall\";\r\n RelatedItemClass = SplitWall;\r\n break;\r\n case \"Left Wall Splitter\":\r\n relatedItemName = \"leftWallSplitter\";\r\n RelatedItemClass = LeftWallSplitter;\r\n break;\r\n case \"Ceiling Panels\":\r\n relatedItemName = \"ceilingPanels\";\r\n RelatedItemClass = CeilingPanels;\r\n break;\r\n case \"Ceiling\":\r\n case \"Cealing\":\r\n relatedItemName = \"ceiling\";\r\n RelatedItemClass = Ceiling;\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts(withHidden = true) {\r\n return this.relatedItems\r\n .filter(item => {\r\n return this.filterRelatedItem(item, withHidden)\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n recoverPrevioslySelected(activeRelatedPart) {\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n this.relatedItems.forEach(relatedItem => {\r\n if (relatedItem.partId !== activeRelatedPart.partId && relatedItem.activeFeatureBeforeAllWalls) {\r\n if (relatedItem.activeFeatureBeforeAllWalls === \"placeholder\") {\r\n relatedItem.placeholderChanged = false;\r\n relatedItem.firstClick[activeQuoteIndex] = false;\r\n } else if (!relatedItem.selectedByUser) {\r\n relatedItem.activeFeatureBeforeAllWalls.clickFromAllWalls();\r\n }\r\n }\r\n });\r\n }\r\n\r\n getSplitWallType() {\r\n if (!this.splitWall) {\r\n return null\r\n }\r\n if (!this.splitWall.disabled && this.splitWall.activeFeature && this.splitWall.activeFeature.metaData[\"SplitWallType\"]\r\n && this.splitWall.activeFeature.matchesMetaForArrayOfConditions(this.splitWall.getArrayOfConditions())) {\r\n return this.splitWall.activeFeature.metaData[\"SplitWallType\"]\r\n } else {\r\n return [\"NW\", \"0\"]\r\n }\r\n }\r\n\r\n}\r\n","import debounce from \"lodash/debounce\";\r\nimport $ from 'jquery';\r\n\r\nimport {getMetadataByDimensions, scrollToDivInArea} from \"../../../misc/utils\";\r\nimport {getEventPosition, getFeatureIsLocked, isIframe} from \"../../../misc/helpers\";\r\nimport {vanityWizardFilters, showerWizardFilters, NotQCVanityDoorStylesFilters} from '../../bvComponent/core/constants';\r\nimport {\r\n CABINET_GROUP,\r\n CABINET_WIZARD_BUTTONS, COUNTERTOP_GROUP,\r\n COUNTERTOP_WIZARD_BUTTONS, LayoutAbbreviations,\r\n MODULE_CONTEXT_MENU_TYPES\r\n} from '../../kvComponent/core/constants';\r\nimport {ContentType, PartMenuType, UserPopupTypes} from \"../constants\";\r\nimport ActionTypes from \"../../../misc/actionTypes\";\r\nimport Analytics from './../../../analytics';\r\nimport {getBvGroupFeatures} from \"../../../api/server-api\";\r\nimport {loaderDisable, loaderEnable} from \"../../ui/loaderView\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport CountertopSwitchers from \"../../kvComponent/navigation/countertopSwitchers\";\r\nimport CabinetSwitchers from \"../../kvComponent/navigation/cabinetSwitchers\";\r\nimport NavigationRequests from \"./navigationRequests\";\r\nimport {toggleUpdateDisableFeatureGroupRadio} from \"../../../actions/navigationFunctions\";\r\nimport store from \"../../../store\";\r\nimport {CABINET_GROUP_BATHROOM, COUNTERTOP_GROUP_BATHROOM} from \"../../bvSceneComponent/core/constants\";\r\nimport Config from \"../../../config\";\r\nimport {\r\n // checkForCompatabilityAlert,\r\n clickOnSimilarFeatures,\r\n getApplyToLogic,\r\n} from \"../../look/lookNavigation/lookNavigationFunctions\";\r\nimport {navFeatureCLick} from \"../../look/lookNavigation/lookFunctions\";\r\nimport {updateCanvasCount} from \"../../../actions/actionFunctions\";\r\nimport {VISUALIZER_MANAGEMENT_ACTIONS} from \"../../../misc/constants\";\r\nimport {searchProductRequest} from \"../../../api/search-api\";\r\nimport {featureCanChangeShowerSize, searchForSameNameWallsBeforeFeatureApply} from \"../../look/bathroomFunctions\";\r\nimport {getSideBarSubParts} from \"./navUtils\";\r\n// import {setLookCompatabilityAlert} from \"../../../actions/lookFunctions\";\r\n\r\nexport default class Navigation extends NavigationRequests { // this class is used for both Desktop & Mobile navigations to avoid method's duplicating\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n showNavigation: false,\r\n contentType: ContentType.None,\r\n parentNavigationItem: null, // coming from main menu, Vanity, Floor, ...\r\n childNavigationItem: null, // coming from a complex part's sub part, such as Vanity/Toilet\r\n searchText: \"\",\r\n designNavigationItems: [],\r\n contextMenuOpen: false,\r\n hoveredLayer: {},\r\n navWidth: 0,\r\n contextMenuPosition: {\r\n top: 0,\r\n left: 0\r\n },\r\n contextMenuPonyWall: false,\r\n filters: {},\r\n activeDefaultPreset: null,\r\n updateSidebarItems: false,\r\n vanityWizardGroups: vanityWizardFilters.map((filterName) => { // filterGroupsId's & their selected values\r\n return {\r\n filterName,\r\n selectedValueId: null,\r\n selectedValueName: \"\",\r\n hidden: filterName === \"Material\"\r\n }\r\n }),\r\n showerWallWizardGroups: showerWizardFilters.map((filterName) => { // filterGroupsId's & their selected values\r\n const wizardFilters = [\"SlabColor\", \"TileColor\", \"TilePattern\", \"AcrylicPattern\", \"AcrylicColor\"];\r\n return {\r\n filterName,\r\n selectedValueId: null,\r\n selectedValueName: \"\",\r\n hidden: wizardFilters.includes(filterName)\r\n }\r\n }),\r\n showerWallWizardGroupsSelected: false,\r\n showFeatureWizard: true,\r\n wizardStepIndex: 0,\r\n wizardActiveItemIsLocked: false,\r\n showFilterSelection: false\r\n };\r\n\r\n this.shouldRecoverWalls = false;\r\n this.navigationIsClosing = false;\r\n this.defaultPresetIndexToClick = null;\r\n }\r\n\r\n _componentDidMount() {\r\n const layout = getCurrentLayout();\r\n this.setState({\r\n designNavigationItems: layout.designNavigationItems(),\r\n });\r\n this.setIframeMessaging();\r\n document.getElementById(this.props.canvasId).addEventListener('click', this.bindCanvasClick);\r\n $(document).on(ActionTypes.USER_IS_LOGGED_IN, this.userHasLoggedIn);\r\n if (window.innerWidth < 480) { // workarounds for screens without the rotate icon\r\n // if (!window.rotatedCanvasTranslateIsSet) { // making canvas scroll to center\r\n // setTimeout(() => {\r\n // const $canvas = $('.canvas');\r\n // $canvas.css(\"transform\", `translateY(${window.innerWidth - $canvas.height()}px`);\r\n // window.rotatedCanvasTranslateIsSet = true;\r\n // }, 500);\r\n // }\r\n $(\".room .menu\").hide();\r\n setTimeout(() => {\r\n $(\".room .menu\").show(); // fix for menu blocking the main canvas\r\n }, 0)\r\n }\r\n\r\n }\r\n\r\n componentWillUnmount() {\r\n document.getElementById(this.props.canvasId).removeEventListener('click', this.bindCanvasClick);\r\n $(document).off(ActionTypes.USER_IS_LOGGED_IN, this.userHasLoggedIn);\r\n $(document).off('click', this.handleWrapperBlur);\r\n $(document).off(ActionTypes.OPEN_MOBILE_NAVIGATION);\r\n $(document).off(ActionTypes.CHANGE_MOBILE_MENU_CONTENT_TYPE);\r\n if (Config.isVisualizerManagement()) {\r\n window.removeEventListener(\"message\", this.messageListening);\r\n }\r\n if (this.props.toggleDesktopNavigation) {\r\n this.props.toggleDesktopNavigation(false)\r\n }\r\n if (this.props.setActiveNavigationNames) {\r\n this.props.setActiveNavigationNames(\"\", \"\")\r\n }\r\n }\r\n\r\n _componentWillReceiveProps(nextProps) {\r\n if (nextProps.visualizerTutorialStep === 2 && (this.props.visualizerTutorialStep === 1)\r\n && this.props.setVisualizerTutorialStep\r\n && this.props.showVisualizerTutorial) {\r\n this.openLayoutMenu(() => {\r\n const $scrollList = $(\".layout-list\");\r\n if (!$scrollList || !$scrollList.find(\".active\") || !$scrollList.find(\".active\").offset()) {\r\n return false\r\n }\r\n $scrollList.animate({scrollLeft: $scrollList.find(\".active\").offset().left}, 800, () => {\r\n // $(\"html, body\").animate({scrollTop: document.body.scrollHeight/4}, 500);\r\n setTimeout(() => {\r\n setTimeout(() => {\r\n this.closeNavigation();\r\n this.props.setVisualizerTutorialStep(3);\r\n this.props.showVisualizerTutorial(true);\r\n }, 300)\r\n }, 600)\r\n });\r\n });\r\n }\r\n const layout = getCurrentLayout();\r\n if(!this.state.designNavigationItems || !this.state.designNavigationItems.length) {\r\n this.setState({designNavigationItems: layout.designNavigationItems()});\r\n }\r\n }\r\n\r\n updateComponent = () => {\r\n this.forceUpdate();\r\n };\r\n\r\n userHasLoggedIn = () => { // click on current active item after unlock\r\n const layout = getCurrentLayout();\r\n if (this.props.activeFeature && this.state.showNavigation && this.state.contentType === ContentType.Design) {\r\n if (this.state.childNavigationItem) {\r\n const navItemToClick = layout.designNavigationItems(this.state.childNavigationItem, {}, \"\", true)\r\n .find(navItem => {\r\n return this.props.activeFeature.dbFeature.id === navItem.part.dbFeature.id;\r\n });\r\n if (navItemToClick) {\r\n this.handleNavigationItemClick(navItemToClick);\r\n }\r\n } else {\r\n this.handleNavigationItemClick({\r\n part: this.props.activeFeature\r\n });\r\n }\r\n this.props.refreshCB();\r\n } else if (this.state.contentType === ContentType.DisplayRoom && (this.defaultPresetIndexToClick || this.defaultPresetIndexToClick === 0)\r\n && (!this.props.fabricatorSettings.twoFA || (this.props.fabricatorSettings.twoFA && this.props.isPhoneNumberValidated))) {\r\n this.handleDefaultPresetClick(this.defaultPresetIndexToClick)\r\n }\r\n this.forceUpdate(); // update react virtualized grid for Safari mobile\r\n };\r\n\r\n setIframeMessaging = () => {\r\n if (Config.isVisualizerManagement()) {\r\n window.addEventListener(\"message\", this.messageListening);\r\n }\r\n };\r\n\r\n messageListening = (event) => {\r\n if (event.data && event.data.action === VISUALIZER_MANAGEMENT_ACTIONS.closeVisualizerNavigation) {\r\n this.closeMobileNavigationMenu();\r\n }\r\n };\r\n\r\n closeMobileNavigationMenu = () => {};\r\n\r\n triggerOpenNavigationMenu = (hoveredZone, clickedParent, activeNavigationFilter = null) => {\r\n const layout = getCurrentLayout();\r\n const designNavigationItems = layout.designNavigationItems();\r\n const menuItemToShow = clickedParent\r\n ? designNavigationItems.find(item => item.text === clickedParent)\r\n : designNavigationItems.find(item => item.text === hoveredZone);\r\n\r\n if (menuItemToShow) {\r\n this.setState({\r\n parentNavigationItem: menuItemToShow,\r\n childNavigationItem: null\r\n }, () => {\r\n\r\n if (menuItemToShow.part.menuType === PartMenuType.Simple) {\r\n this.checkIfAllFeaturesReceived(menuItemToShow, \"parentNavigationItem\");\r\n }\r\n\r\n if (menuItemToShow.part.handleClick) {\r\n menuItemToShow.part.handleClick();\r\n }\r\n // this.props.refreshCB(); // this refresh canvas (making redraw), but we need green zone to be shown! if needed - make settimeout 2 secs\r\n\r\n if (clickedParent) {\r\n const subMenuItemToShow = this.state.parentNavigationItem.part.subParts().find(item => {\r\n return item.text === hoveredZone\r\n });\r\n if (subMenuItemToShow) {\r\n this.handleSubPartClick(subMenuItemToShow, activeNavigationFilter);\r\n }\r\n }\r\n\r\n });\r\n this.props.setDefaultSelectionGroup(menuItemToShow.part.partName);\r\n }\r\n if (hoveredZone === \"Floor\") {\r\n $('html, body').animate({scrollTop: document.body.scrollHeight}, 800);\r\n } else if (hoveredZone === \"Ceiling\" || hoveredZone === \"Window\") {\r\n $('html, body').animate({scrollTop: 0}, 800);\r\n }\r\n };\r\n\r\n handleParentItemClick = (item) => {\r\n this.setState({\r\n parentNavigationItem: item,\r\n showFilterSelection: item.text === \"Floor\" && item.part.allFeaturesReceived, // show filters only if subItemPart has all features\r\n }, () => {\r\n // if (subParts[0] && (subParts[0].part.menuType !== PartMenuType.Simple)) {\r\n // this.handleSubPartClick(subParts[0])\r\n // }\r\n if (item.text === \"Walls\" || item.text === \"Shower\" || item.text === \"Bathtub\" || item.text === \"Vanity\" || item.text === \"Toilet\"\r\n || (item.menuType === PartMenuType.Complex)) {\r\n const subParts = getSideBarSubParts(this.state.parentNavigationItem.part);\r\n if (subParts.length) {\r\n this.handleSubPartClick(subParts[0])\r\n }\r\n }\r\n if ((item.text === \"Ceiling\" &&\r\n (document.kvConfig.visualizerType === \"Bathroom\" || document.kvConfig.visualizerType === \"BV\")) || item.text === \"Window\") {\r\n this.setState({\r\n childNavigationItem: null\r\n });\r\n this.checkIfAllFeaturesReceived(item, \"parentNavigationItem\");\r\n }\r\n this.scrollToDefault(item);\r\n });\r\n this.props.setDefaultSelectionGroup(item.part.partName);\r\n };\r\n\r\n handleLayoutItemClick = layoutType => {\r\n const layout = getCurrentLayout();\r\n if (document.kvConfig.visualizerType === \"Kitchen\" && layout.getCurrentLayoutAbbreviation().includes(\"I\")\r\n && !LayoutAbbreviations[layoutType].includes(\"I\")) {\r\n this.resetNavigation();\r\n }\r\n if (layout.type !== layoutType) {\r\n this.changeLayout(layoutType)\r\n }\r\n };\r\n\r\n resetNavigation = () => {\r\n this.setState({\r\n parentNavigationItem: null,\r\n childNavigationItem: null,\r\n searchText: \"\"\r\n });\r\n this.props.setActiveFeature(null);\r\n if (this.props.setActiveNavigationFilter) {\r\n this.props.setActiveNavigationFilter(CABINET_WIZARD_BUTTONS[0].buttonId);\r\n this.props.setActiveNavigationFilterStepIndex(0);\r\n }\r\n };\r\n\r\n getSearchProducts = (searchText) => {\r\n if (searchText && searchText.length > 2) {\r\n this.props.setNavigationLoading(true);\r\n const childItem = this.state.childNavigationItem ? this.state.childNavigationItem.part : this.state.parentNavigationItem.part;\r\n const promises = [searchProductRequest(childItem, searchText)];\r\n if (COUNTERTOP_GROUP.includes(childItem.partId) && document.kvConfig.visualizerType !== \"kvScene\") {\r\n // we have requests on click\r\n const layout = getCurrentLayout();\r\n COUNTERTOP_GROUP.forEach(neededPartId => {\r\n if (neededPartId !== childItem.partId) {\r\n const featureGroup = layout.getFeatureGroupByPartId(neededPartId);\r\n if (featureGroup) {\r\n promises.push(Navigation.searchFeaturesByName(featureGroup, searchText, 1000));\r\n }\r\n }\r\n });\r\n }\r\n Promise.all(promises)\r\n .then(() => {\r\n this.props.setNavigationLoading(false); // for loading & desktop update\r\n this.setState({ // for mobile update\r\n render: false,\r\n }, () => {\r\n this.setState({\r\n render: true,\r\n });\r\n });\r\n })\r\n }\r\n };\r\n\r\n searchAPIDebounced = debounce(this.getSearchProducts, 500);\r\n\r\n handleSearchInputChange = async (event) => {\r\n const searchText = event.target.value;\r\n this.setState({\r\n searchText\r\n });\r\n await this.searchAPIDebounced(searchText);\r\n };\r\n\r\n ponyWallAndLeftWallClick = (menuItem) => {\r\n const layout = getCurrentLayout();\r\n if (!this.props.fabricatorSettings.leadCapture || (this.props.fabricatorSettings.leadCapture && this.props.userIsLoggedIn)) {\r\n if (menuItem.part.partId === \"shower_body\" && (menuItem.text === \"Left Shower Wall\" || menuItem.text === \"Pony Wall\")) {\r\n const shower = layout.parts.Shower;\r\n const activeShower = shower.getActiveShowerGroup();\r\n const dimensions = getMetadataByDimensions(activeShower.showerDimensions());\r\n const wallParent = layout.parts.Walls;\r\n if (menuItem.text === \"Left Shower Wall\" && dimensions === \"Pony\" && wallParent.ponyWall.placeholderChanged) { // switch from Pony -> to Left Shower Wall\r\n const name1 = wallParent.ponyWall.activeFeature.getSplittedFeatureName();\r\n this.receiveAllFeaturesAndClickFeatureByName(wallParent, \"left_shower_wall\", name1);\r\n } else if (menuItem.text === \"Pony Wall\" && dimensions !== \"Pony\" && wallParent.wallExL.placeholderChanged) {\r\n const name1 = wallParent.wallExL.activeFeature.getSplittedFeatureName();\r\n this.receiveAllFeaturesAndClickFeatureByName(wallParent, \"pony_wall\", name1);\r\n }\r\n }\r\n }\r\n };\r\n\r\n receiveAllFeaturesAndClickFeatureByName = (parent, partId, name1) => {\r\n const exLSubPart = parent.getRelatedItems().find(relItem => relItem.partId === partId);\r\n const findAndClick = () => {\r\n const wallExLFeature = parent.wallExL.navigationSubItems().find(navItem => {\r\n return navItem.part.getSplittedFeatureName() === name1\r\n });\r\n if (wallExLFeature) {\r\n wallExLFeature.part.handleClick(true);\r\n this.props.refreshCB();\r\n }\r\n };\r\n findAndClick(); // first try without the request\r\n this.checkIfAllFeaturesReceived({part: exLSubPart}, null, findAndClick); // then receive all walls\r\n };\r\n\r\n _menuOpened = () => {\r\n if (isIframe() && window.parent) {\r\n window.parent.postMessage({\r\n action: 'menu_opened',\r\n payload: {}\r\n }, \"*\");\r\n }\r\n if (this.props.setDemoPointClicked && !this.props.visualizerTutorialIsOpened) {\r\n this.props.setDemoPointClicked()\r\n }\r\n if (this.props.toggleDesktopNavigation) {\r\n this.props.toggleDesktopNavigation(true)\r\n }\r\n if (this.props.setModuleContextMenuType) {\r\n this.props.setModuleContextMenuType(MODULE_CONTEXT_MENU_TYPES.Filters)\r\n }\r\n };\r\n\r\n renderErrorPopup(message) {\r\n this.props.changeMessageBoxState({\r\n visible: true,\r\n error: true,\r\n message,\r\n buttons: [{\r\n text: \"messageBox.buttonOk\",\r\n color: 'red',\r\n click: () => {\r\n this.props.changeMessageBoxState({visible:false});\r\n }\r\n }]\r\n });\r\n }\r\n\r\n itemClick = async (item, ignoreLocked) => {\r\n\r\n const layout = getCurrentLayout();\r\n\r\n if (item && item.text === \"Floor\") {\r\n $('html, body').animate({scrollTop: document.body.scrollHeight}, 800);\r\n } else if (item && item.text === \"Ceiling\") {\r\n $('html, body').animate({scrollTop: 0}, 800);\r\n }\r\n\r\n if (layout.visualizerType === \"bvScene\") {\r\n await searchForSameNameWallsBeforeFeatureApply(item.part);\r\n }\r\n\r\n if (layout.isNewLayout && !item.part.relatedItems) {\r\n\r\n const applyFeature = async (feature) => {\r\n\r\n if (featureCanChangeShowerSize(feature)) {\r\n await searchForSameNameWallsBeforeFeatureApply(feature);\r\n }\r\n\r\n navFeatureCLick(feature, true, ignoreLocked);\r\n\r\n const applyToLogic = getApplyToLogic(item.part);\r\n if (applyToLogic && Array.isArray(applyToLogic.currentApplyToArray) && applyToLogic.currentApplyToArray.length) {\r\n await clickOnSimilarFeatures(item.part, applyToLogic, true);\r\n }\r\n }\r\n\r\n // const compatabilityLogic = checkForCompatabilityAlert(item.part);\r\n // if (compatabilityLogic.length) {\r\n // store.dispatch(setLookCompatabilityAlert({\r\n // visible: true,\r\n // compatabilityLogic,\r\n // clickedFeature: item.part,\r\n // applyFunction: applyFeature.bind(this, item.part) // always apply features from this popup\r\n // }));\r\n // return false\r\n // }\r\n\r\n await applyFeature(item.part);\r\n\r\n } else {\r\n\r\n await item.part.handleClick(ignoreLocked);\r\n\r\n if (this.isWallItem(item.part) && item.part.getParent().getParent().allWallsApplied) {\r\n this.applyAllWalls(item.part, ignoreLocked);\r\n }\r\n if (CABINET_GROUP.includes(item.part.partId) || CABINET_GROUP_BATHROOM.includes(item.part.partId)) {\r\n const featureIsLocked = getFeatureIsLocked(item.part);\r\n CabinetSwitchers.applyAllCabinets(item.part, !featureIsLocked || ignoreLocked);\r\n } else if (COUNTERTOP_GROUP.includes(item.part.partId) || COUNTERTOP_GROUP_BATHROOM.includes(item.part.partId)) {\r\n const featureIsLocked = getFeatureIsLocked(item.part);\r\n CountertopSwitchers.applyAllCountertops(item.part, !featureIsLocked || ignoreLocked);\r\n }\r\n }\r\n\r\n if (item.part.getParent && item.part.getParent().disabled) {\r\n const itemParent = item.part.getParent();\r\n const itemIsLocked = getFeatureIsLocked(item.part, ignoreLocked);\r\n let exLAndBathtubAndSmallRoom = false;\r\n if (itemParent.partId === \"left_shower_wall\" && layout.type === 0) {\r\n const showerBody = layout.parts.Shower.showerBody;\r\n if (showerBody && showerBody.disabled) {\r\n exLAndBathtubAndSmallRoom = true\r\n }\r\n }\r\n if (itemParent.disabled && !exLAndBathtubAndSmallRoom && !itemIsLocked) {\r\n itemParent.disabled = false;\r\n itemParent.disabledClick(); // disable also related parts\r\n store.dispatch(toggleUpdateDisableFeatureGroupRadio(true));\r\n store.dispatch(toggleUpdateDisableFeatureGroupRadio(false));\r\n }\r\n }\r\n if (item.part.getParent && item.part.getParent().getParent) { // enable shower if child is clicked\r\n const parent = item.part.getParent().getParent();\r\n if (parent.partName === \"Shower\" && parent.showerBody.disabled) {\r\n parent.showerBody.disabled = false;\r\n parent.showerBody.disabledClick(); // enable also related parts\r\n }\r\n }\r\n $(window).trigger(ActionTypes.CHANGE_LAYOUT); // update canvas\r\n store.dispatch(updateCanvasCount()); // for look remove button\r\n };\r\n\r\n callMetaMathesFailedPopup = (item, nonCompatibleWith) => {\r\n // console.log('item.matchesMetaFailedArray', item.matchesMetaFailedArray);\r\n const featureIsLocked = getFeatureIsLocked(item.part);\r\n if (!featureIsLocked) {\r\n const message = {\r\n id: \"messageBox.metaDataMatchesFailed\",\r\n featureGroup: item.part.getParent().partName.toLowerCase(),\r\n featureName: item.part.getFeatureName(),\r\n nonCompatibleWith\r\n };\r\n this.props.changeMessageBoxState({\r\n visible: true,\r\n message,\r\n buttons: [{\r\n text: \"messageBox.buttonYes\",\r\n color: 'green',\r\n click: () => {\r\n item.part.handleChangeParent(nonCompatibleWith); // change parent(vanity size)\r\n item.part.handleClick(); // set active\r\n const childNavigationItem = this.state.childNavigationItem;\r\n this.setState({ // update component & navigation\r\n childNavigationItem: null,\r\n },() => {\r\n this.setState({\r\n childNavigationItem\r\n })\r\n });\r\n setTimeout(() => {\r\n scrollToDivInArea($('.feature.active'), $('.categories-list'));\r\n }, 1000);\r\n this.props.changeMessageBoxState({visible:false});\r\n }\r\n },{\r\n text: \"messageBox.buttonNo\",\r\n color: \"blue\",\r\n click: () => {\r\n this.props.changeMessageBoxState({visible:false});\r\n }\r\n }]\r\n });\r\n }\r\n };\r\n\r\n callToiletFailPopup = (clickFrom, item, ignoreLocked = false) => {\r\n const featureIsLocked = getFeatureIsLocked(item.part, ignoreLocked);\r\n if (!featureIsLocked) {\r\n const message = (clickFrom === 'toilet') ? \"messageBox.toiletMetaDataFailed\" : \"messageBox.toiletMetaDataFailedVanity\";\r\n const buttons = (clickFrom === 'toilet')\r\n ? [{\r\n text: \"messageBox.buttonOk\",\r\n color: \"blue\",\r\n click: () => {\r\n this.props.changeMessageBoxState({visible:false});\r\n }\r\n }]\r\n : [{\r\n text: \"messageBox.buttonNo\",\r\n color: \"blue\",\r\n click: () => {\r\n this.props.changeMessageBoxState({visible:false});\r\n }\r\n },{\r\n text: \"messageBox.buttonYes\",\r\n color: \"green\",\r\n click: () => {\r\n this.itemClick(item, ignoreLocked);\r\n this.props.changeMessageBoxState({visible:false});\r\n }\r\n }];\r\n this.props.changeMessageBoxState({\r\n visible: true,\r\n message,\r\n buttons\r\n });\r\n }\r\n };\r\n\r\n toggleApplyWallsCheckbox = () => {\r\n const wallParent = this.state.parentNavigationItem.part;\r\n wallParent.allWallsApplied = !wallParent.allWallsApplied;\r\n if (!wallParent.allWallsApplied && this.shouldRecoverWalls) {\r\n wallParent.recoverPrevioslySelected(this.state.childNavigationItem.part)\r\n } else if (\r\n wallParent.allWallsApplied\r\n && this.state.childNavigationItem\r\n && this.state.childNavigationItem.part\r\n && this.state.childNavigationItem.part.activeFeature\r\n && this.state.childNavigationItem.part.placeholderChanged) {\r\n this.applyAllWalls(this.state.childNavigationItem.part.activeFeature, false);\r\n }\r\n this.props.refreshCB();\r\n };\r\n\r\n rememberWallsSelection = () => { // this is set when new Wall Navigation Item is clicked\r\n const featureGroup = this.state.childNavigationItem.part;\r\n if ((this.isWallItem(featureGroup) || featureGroup.allWallsCanBeApplied)\r\n && this.state.parentNavigationItem.part.setPrevioslySelected) {\r\n this.state.parentNavigationItem.part.setPrevioslySelected(featureGroup);\r\n }\r\n this.shouldRecoverWalls = false;\r\n };\r\n\r\n applyAllWalls = (navigationItemPart, ignoreLocked) => {\r\n // console.log('navigationItem', navigationItem);\r\n const layout = getCurrentLayout();\r\n const wallParent = this.state.parentNavigationItem.part;\r\n const allWalls = wallParent.relatedItems;\r\n\r\n if (document.kvConfig.visualizerType === \"Bathroom\" || document.kvConfig.visualizerType === \"BV\") {\r\n allWalls.forEach((relatedItem) => {\r\n if (this.isWallItem(relatedItem) && (relatedItem.partId !== navigationItemPart.partId)) {\r\n const wallsPartIds = [\"right_shower_wall\", \"left_shower_wall\", \"pony_wall\"];\r\n let featuresAvailableToClick = wallsPartIds.includes(relatedItem.partId)\r\n ? relatedItem.getAvailableFeatures()\r\n : relatedItem.features; // for other walls we don't have filters\r\n const navigationItemName = navigationItemPart.dbFeature.sharedFeatureName;\r\n const neededFeature = featuresAvailableToClick.find((feature) => {\r\n const featureName = feature.dbFeature.sharedFeatureName;\r\n return navigationItemName === featureName\r\n });\r\n // console.log('neededFeature', neededFeature);\r\n neededFeature && neededFeature.clickFromAllWalls(ignoreLocked);\r\n } else if (relatedItem.partId === \"accent_wall\" && !relatedItem.placeholderChanged) {\r\n relatedItem.disabled = true;\r\n }\r\n });\r\n const vanity = layout.parts[\"Vanity\"];\r\n if (vanity.vanityBacksplash && !vanity.vanityBacksplash.placeholderChanged) {\r\n vanity.vanityBacksplash.disabled = true;\r\n }\r\n } else if (document.kvConfig.visualizerType !== \"Bathroom\") {\r\n allWalls.forEach((relatedItem) => {\r\n if (this.isWallItem(relatedItem) && (relatedItem.partId !== navigationItemPart.partId)) {\r\n const navigationItemName = navigationItemPart.dbFeature.sharedFeatureName;\r\n const neededFeature = relatedItem.features.find((feature) => {\r\n const featureName = feature.dbFeature.sharedFeatureName;\r\n return featureName === navigationItemName\r\n });\r\n // console.log('neededFeature', neededFeature);\r\n neededFeature && neededFeature.clickFromAllWalls(ignoreLocked);\r\n }\r\n });\r\n }\r\n\r\n this.shouldRecoverWalls = true;\r\n this.props.refreshCB();\r\n };\r\n\r\n removeChoosingView = (partName) => {\r\n // console.log('partName', partName);\r\n switch (partName) {\r\n case \"Vanity\":\r\n this.props.setVanityType(true);\r\n break;\r\n case \"Shower\":\r\n this.props.setShowerType(true);\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n handleSubTypeClick = subType => { // sidebar radio button click\r\n Analytics.sendClickEvent('sub-type-clicked-' + subType);\r\n this.removeChoosingView(this.state.parentNavigationItem.part.partName);\r\n if (this.props.changeActivePartRelatedItemIndex) {\r\n this.props.changeActivePartRelatedItemIndex(0); // set first item on materials page\r\n }\r\n this.state.parentNavigationItem.part.handleSubTypeClick(subType, this.handleNavigationItemClick);\r\n const childNavigationItem = this.state.parentNavigationItem.part.setDefaultPartAfterSubTypeClick();\r\n this.setState({\r\n childNavigationItem,\r\n showFilterSelection: childNavigationItem.part.allFeaturesReceived, // show filters only if subItemPart has all features\r\n showerWallWizardGroupsSelected: false,\r\n searchText: \"\"\r\n },() => {\r\n this.setNewActiveFeature();\r\n this.rememberWallsSelection();\r\n this.checkIfAllFeaturesReceived(childNavigationItem, \"childNavigationItem\");\r\n });\r\n /*set new materials page subIndex*/\r\n this.setActivePartRelatedItemIndex(childNavigationItem);\r\n this.props.refreshCB();\r\n };\r\n\r\n setActivePartRelatedItemIndex = (childNavigationItem) => {\r\n const layout = getCurrentLayout();\r\n let nextSubPartIndex = 0;\r\n if (this.state.parentNavigationItem && !layout.qtCategories) { // we don't need to set for qtCategories\r\n const subParts = childNavigationItem.part.getParent().subParts(false);\r\n nextSubPartIndex = subParts.findIndex(currentSubPart => {\r\n return currentSubPart.part.partId === childNavigationItem.part.partId;\r\n });\r\n }\r\n setTimeout(() => {\r\n this.props.changeActivePartRelatedItemIndex(nextSubPartIndex); // setTimeout is needed cause it needs parent to be updated\r\n }, 0);\r\n };\r\n\r\n setNewActiveFeature = (subNavigationItem) => {\r\n if (!subNavigationItem) {\r\n subNavigationItem = this.state.childNavigationItem || this.state.parentNavigationItem || null;\r\n }\r\n\r\n if (subNavigationItem) {\r\n const featureToSet = ((this.props.fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote))\r\n && !this.props.userIsLoggedIn && subNavigationItem.part.activeLockedFeature)\r\n || ((this.props.fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote))\r\n && this.props.userIsLoggedIn\r\n && subNavigationItem.part.activeLockedFeature\r\n && !subNavigationItem.part.placeholderChanged)\r\n ? subNavigationItem.part.activeLockedFeature\r\n : subNavigationItem.part.activeFeature;\r\n this.props.setActiveFeature(featureToSet);\r\n }\r\n };\r\n\r\n handleDefaultPresetClick = (index, presetIsLocked) => {\r\n const layout = getCurrentLayout();\r\n Analytics.sendClickEvent('preset-selected-' + index);\r\n if (presetIsLocked) {\r\n this.defaultPresetIndexToClick = index;\r\n this.props.toggleUserPopup({\r\n userPopupOpened: true\r\n });\r\n return\r\n }\r\n this.defaultPresetIndexToClick = null;\r\n this.setState({\r\n activeDefaultPreset: index\r\n }, () => {\r\n window.requestInProcess = true;\r\n loaderEnable();\r\n const defaultPreset = this.props.bvPresets[index];\r\n console.log('defaultPreset', defaultPreset);\r\n const cabinetParent = layout.parts[\"Cabinet\"];\r\n const noCabinets = (cabinetParent && cabinetParent.topCabinet\r\n && !cabinetParent.topCabinet.allFeaturesReceived) || (cabinetParent && cabinetParent.bottomCabinet\r\n && !cabinetParent.bottomCabinet.allFeaturesReceived);\r\n if (noCabinets && (document.kvConfig.visualizerType !== \"kvScene\")) {\r\n const neededParts = [\"top_cabinet\", \"bottom_cabinet\"];\r\n const allRelated = cabinetParent.relatedItems.filter((relatedItem) => {\r\n return neededParts.includes(relatedItem.partId) && !relatedItem.allFeaturesReceived\r\n });\r\n const promises = allRelated.map((relatedItem) => {\r\n return getBvGroupFeatures(relatedItem.dbName || relatedItem.partName).then(response => {\r\n relatedItem.setGroupFeatures(Array.isArray(response) ? response : []);\r\n return response\r\n })\r\n });\r\n Promise.all(promises)\r\n .then(() => this.finishPresetLoading(layout, defaultPreset))\r\n } else {\r\n loaderEnable();\r\n this.finishPresetLoading(layout, defaultPreset);\r\n }\r\n });\r\n };\r\n\r\n finishPresetLoading = (layout, preset) => {\r\n layout.setItemsFromBvState(preset)\r\n .then(() => {\r\n window.requestInProcess = false;\r\n loaderDisable();\r\n });\r\n }\r\n\r\n handleUserLoginClick = (userPopupType = UserPopupTypes.Unlock) => {\r\n this.props.toggleUserPopup({\r\n userPopupOpened: true,\r\n userPopupType\r\n });\r\n };\r\n\r\n currentActiveItemIsLocked = (useWizard) => {\r\n\r\n const {visualizerManagement, isBackend, jobId, canSaveQuote} = document.kvConfig;\r\n const {fabricatorSettings, isPhoneNumberValidated, activeFeature, filterGroups, activeQuoteIndex} = this.props;\r\n const {showFeatureWizard, wizardActiveItemIsLocked} = this.state;\r\n\r\n if (!fabricatorSettings.leadCapture\r\n || (fabricatorSettings.leadCapture && visualizerManagement)\r\n || (fabricatorSettings.leadCapture && isPhoneNumberValidated)\r\n || (fabricatorSettings.leadCapture && (isBackend && jobId && canSaveQuote))){\r\n return false\r\n }\r\n\r\n const itemHasLockedFilters = () => {\r\n let lockedFilters = false;\r\n const filterValues = activeFeature && activeFeature.dbFeature && activeFeature.dbFeature.filterValueIDs;\r\n if (filterValues) {\r\n lockedFilters = Object.keys(filterValues).some((filterKey) => {\r\n const filterGroup = filterGroups.find(group => group.id === +filterKey);\r\n const filterValue = filterGroup && filterGroup.values && filterGroup.values.find(value => value.id === filterValues[filterKey][0]);\r\n return filterValue && filterValue.lockedInWizard\r\n });\r\n }\r\n return lockedFilters\r\n };\r\n\r\n return (\r\n activeFeature\r\n && activeFeature.getParent().firstClick[activeQuoteIndex]\r\n && activeFeature.dbFeature\r\n && !activeFeature.dbFeature.unlocked\r\n && !activeFeature.notAvailableInVisualizer\r\n && !(useWizard && showFeatureWizard)\r\n ) || (useWizard && showFeatureWizard && wizardActiveItemIsLocked) || itemHasLockedFilters()\r\n };\r\n\r\n checkedForLockedPresets = () => {\r\n // const layout_typelayout_type: 1\r\n const layout = getCurrentLayout();\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const showSmallRoomLayout = fabricatorSettings &&\r\n (fabricatorSettings.showSmallDesignForClients\r\n || (fabricatorSettings.showSmallDesignFromDashboard && document.kvConfig.isBackend));\r\n return Array.isArray(this.props.bvPresets) && this.props.bvPresets.length\r\n ? this.props.bvPresets\r\n .filter(preset => {\r\n if (!showSmallRoomLayout && (document.kvConfig.visualizerType === \"Bathroom\"\r\n || document.kvConfig.visualizerType === \"BV\")) {\r\n return preset.layout_type !== 0\r\n }\r\n return preset\r\n })\r\n .map((preset) => {\r\n if (preset.presetUnlocked) {\r\n preset.presetIsLocked = false\r\n } else {\r\n preset.presetIsLocked = this.props.fabricatorSettings.leadCapture\r\n && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)\r\n && !this.props.isPhoneNumberValidated && (!preset.presetUnlocked || layout.bvStateHasLockedItems(preset))\r\n }\r\n // console.log(\"preset.presetIsLocked\", preset.presetIsLocked);\r\n return preset\r\n }).sort((a, b) => a.presetIsLocked !== b.presetIsLocked ? a.presetIsLocked < b.presetIsLocked ? -1 : 1 : 0) // sort by presetIsLocked\r\n : []\r\n };\r\n\r\n closeContextMenu = () => {\r\n this.setState({\r\n contextMenuOpen: false,\r\n })\r\n };\r\n\r\n /*** WIZARD ***/\r\n\r\n exitFeatureWizard = (wizardGroups, partId) => {\r\n this.setState({\r\n wizardStepIndex: 0,\r\n showFeatureWizard: false,\r\n wizardActiveItemIsLocked: false,\r\n searchText: \"\"\r\n });\r\n this.setWizardGroups(wizardGroups, partId);\r\n };\r\n\r\n enableFeatureWizard = (wizardStepIndex) => {\r\n this.setState({\r\n wizardStepIndex,\r\n showerWallWizardGroupsSelected: wizardStepIndex !== 0\r\n }, () => {\r\n this.setState({\r\n showFeatureWizard: true,\r\n })\r\n });\r\n };\r\n\r\n setWizardStepIndex = (wizardStepIndex) => {\r\n this.setState({\r\n wizardStepIndex\r\n })\r\n };\r\n\r\n setWizardGroups = (wizardGroups, partId) => {\r\n const wizardGroupsName = this.getWizardGroupsByPartId(partId);\r\n this.setState({\r\n [wizardGroupsName]: this.state[wizardGroupsName].map((wizardGroup) => {\r\n const currentGroup = wizardGroups.find(wGroup => wGroup.filterName === wizardGroup.filterName);\r\n if (currentGroup) {\r\n wizardGroup.selectedValueId = currentGroup.selectedValueId;\r\n wizardGroup.selectedValueName = currentGroup.selectedValueName;\r\n wizardGroup.hidden = currentGroup.hidden;\r\n wizardGroup.values = currentGroup.values;\r\n }\r\n return wizardGroup\r\n })\r\n })\r\n };\r\n\r\n setWizardLockedItem = (itemIsLocked) => {\r\n this.setState({\r\n wizardActiveItemIsLocked: itemIsLocked\r\n })\r\n };\r\n\r\n resetActiveFeature = () => {\r\n this.props.setActiveFeature(null);\r\n this.setState({\r\n wizardActiveItemIsLocked: false\r\n })\r\n };\r\n\r\n resetWizardSteps = () => {\r\n this.setState({\r\n vanityWizardGroups: vanityWizardFilters.map((filterName) => { // filterGroupsId's & their selected values\r\n return {\r\n filterName,\r\n selectedValueId: null,\r\n selectedValueName: \"\",\r\n hidden: filterName === \"Material\"\r\n }\r\n }),\r\n showerWallWizardGroups: showerWizardFilters.map((filterName) => {\r\n const wizardFilters = [\"SlabColor\", \"TileColor\", \"TilePattern\", \"AcrylicPattern\", \"AcrylicColor\"];\r\n return {\r\n filterName,\r\n selectedValueId: null,\r\n selectedValueName: \"\",\r\n hidden: wizardFilters.includes(filterName)\r\n }\r\n }),\r\n showFeatureWizard: true,\r\n wizardStepIndex: 0,\r\n wizardActiveItemIsLocked: false,\r\n })\r\n };\r\n\r\n getWizardGroupsByPartId = (partId) => {\r\n switch (partId) {\r\n case \"vanity_cabinet\":\r\n return \"vanityWizardGroups\";\r\n case \"shower_interior_wall\":\r\n return \"showerWallWizardGroups\";\r\n default:\r\n return \"\";\r\n }\r\n };\r\n\r\n getFilterDisplayName = (filterName, intl = null) => {\r\n switch (filterName) {\r\n case \"DoorStyle\":\r\n return intl ? intl.formatMessage({id: \"Door Style\"}) : \"Door Style\"\r\n case \"Material\":\r\n return intl\r\n ? intl.formatMessage({id: this.state.childNavigationItem.part.partId === \"vanity_cabinet\" ? \"WoodType\" : \"Material\"})\r\n : this.state.childNavigationItem.part.partId === \"vanity_cabinet\" ? \"Wood Type\" : \"Material\";\r\n case \"AcrylicColor\":\r\n case \"DuraBathColor\":\r\n case \"SlabColor\":\r\n case \"TileColor\":\r\n return intl ? intl.formatMessage({id: \"Color\"}) : \"Color\";\r\n case \"AcrylicPattern\":\r\n return intl ? intl.formatMessage({id: \"Pattern\"}) : \"Pattern\";\r\n default:\r\n return intl ? intl.formatMessage({id: filterName}) : filterName\r\n }\r\n };\r\n\r\n removeFilterSelection = () => {\r\n this.setState({\r\n showFilterSelection: false\r\n })\r\n };\r\n\r\n toggleWizardFilterSelection = (showerWallWizardGroupsSelected) => {\r\n this.setState({\r\n showerWallWizardGroupsSelected\r\n })\r\n };\r\n\r\n setWizardFiltersFromActiveItem = (activeFeature) => {\r\n\r\n const {fabricatorSettings} = this.props;\r\n const useWizard = fabricatorSettings && (fabricatorSettings.wizardConsumers || (fabricatorSettings.wizardClients && document.kvConfig.isBackend));\r\n\r\n if (useWizard) {\r\n const currentActiveFilters = activeFeature.dbFeature.filterValueIDs;\r\n const partId = this.state.childNavigationItem.part.partId;\r\n const wizardGroupsName = this.getWizardGroupsByPartId(partId);\r\n\r\n let wizardGroups = this.state[wizardGroupsName].map((wizardGroup) => {\r\n if (partId === \"vanity_cabinet\") {\r\n const filterGroup = this.props.filterGroups.find(filterGroup => {\r\n return filterGroup.name === wizardGroup.filterName\r\n });\r\n let filterGroupValue = {};\r\n if (filterGroup && currentActiveFilters[filterGroup.id]) {\r\n const selectedFilterValueId = currentActiveFilters[filterGroup.id][0];\r\n filterGroupValue = filterGroup && filterGroup.values.find(filterGroupValue => {\r\n return filterGroupValue.id === selectedFilterValueId\r\n });\r\n }\r\n // console.log('filterGroupValue', filterGroupValue);\r\n if (wizardGroup.filterName === \"Material\") { // check for existing BV filters\r\n const doorStyleFilter = this.props.filterGroups.find(filterGroup => filterGroup.name.trim() === \"DoorStyle\");\r\n if (doorStyleFilter) {\r\n const doorStyleActiveValue = currentActiveFilters[doorStyleFilter.id];\r\n const doorStyleFilterValue = doorStyleFilter.values.find(filterObj => {\r\n return doorStyleActiveValue && filterObj.id === doorStyleActiveValue[0]\r\n });\r\n // console.log('doorStyleFilterValue', doorStyleFilterValue);\r\n wizardGroup.hidden = filterGroupValue && doorStyleFilterValue && !NotQCVanityDoorStylesFilters.includes(doorStyleFilterValue.value);\r\n }\r\n }\r\n } else if (partId === \"shower_interior_wall\") {\r\n const stepName = wizardGroup.filterName.toLowerCase();\r\n const materialFilter = this.props.filterGroups.find(filterGroup => filterGroup.name.trim() === \"Material\");\r\n if (Object.keys(currentActiveFilters).length && materialFilter && currentActiveFilters[materialFilter.id]) { // check for existing BV filters\r\n const materialValueId = currentActiveFilters[materialFilter.id][0];\r\n const materialValue = materialFilter.values.find(val => val.id === materialValueId);\r\n // console.log('materialValue.value', materialValue.value);\r\n wizardGroup.hidden = (materialValue && (\r\n (materialValue.value !== \"DuraBath\" && stepName === \"durabathcolor\")\r\n || (materialValue.value !== \"DuraBath\" && materialValue.value !== \"Tile\" && stepName === \"tilepattern\")\r\n || (materialValue.value !== \"Acrylic\" && stepName === \"acrylicpattern\")\r\n || (materialValue.value !== \"Acrylic\" && stepName === \"acryliccolor\")\r\n || (materialValue.value !== \"Tile\" && stepName === \"tilecolor\")\r\n || (materialValue.value !== \"Slab\" && stepName === \"slabcolor\")\r\n ))\r\n }\r\n }\r\n return wizardGroup\r\n });\r\n\r\n this.setState({\r\n [wizardGroupsName]: wizardGroups\r\n });\r\n }\r\n };\r\n\r\n /*** WIZARD END ***/\r\n\r\n setNavigationFilterIfTheChildWasChanged(childNavigationItemPartId, activeNavigationFilter) {\r\n if (this.props.setActiveNavigationFilter && !activeNavigationFilter) {\r\n if (childNavigationItemPartId === \"edge_profile\"\r\n || childNavigationItemPartId === \"center_island_edge\"\r\n && this.props.activeNavigationFilter !== COUNTERTOP_WIZARD_BUTTONS[3].buttonId) {\r\n this.props.setActiveNavigationFilter(COUNTERTOP_WIZARD_BUTTONS[3].buttonId);\r\n this.props.setActiveNavigationFilterStepIndex(3);\r\n } else if (childNavigationItemPartId === \"countertop\"\r\n || childNavigationItemPartId === \"center_island_countertop\"\r\n && (\r\n this.props.activeNavigationFilter !== COUNTERTOP_WIZARD_BUTTONS[0].buttonId\r\n || this.props.activeNavigationFilter !== COUNTERTOP_WIZARD_BUTTONS[1].buttonId\r\n || this.props.activeNavigationFilter !== COUNTERTOP_WIZARD_BUTTONS[2].buttonId\r\n )){\r\n this.props.setActiveNavigationFilter(COUNTERTOP_WIZARD_BUTTONS[0].buttonId);\r\n this.props.setActiveNavigationFilterStepIndex(0);\r\n } else if (childNavigationItemPartId === \"backsplash\"\r\n && !(this.props.activeNavigationFilter !== COUNTERTOP_WIZARD_BUTTONS[4].buttonId)) {\r\n this.props.setActiveNavigationFilter(COUNTERTOP_WIZARD_BUTTONS[4].buttonId);\r\n this.props.setActiveNavigationFilterStepIndex(4);\r\n }\r\n }\r\n }\r\n\r\n showPositionsPopup = (item, event) => {\r\n const itemParent = item.part.getParent ? item.part.getParent() : null;\r\n const featureIsLocked = getFeatureIsLocked(item.part);\r\n if (itemParent && !item.part.notAvailableInVisualizer && !featureIsLocked\r\n && this.props.toggleNavItemPositionModal && itemParent.showLayerPositionsModal\r\n && itemParent.showLayerPositionsModal(item.part) && event) {\r\n const eventPosition = getEventPosition(event);\r\n this.props.toggleNavItemPositionModal({\r\n popupOpened: true,\r\n popupPosition: {\r\n left: eventPosition.x,\r\n top: eventPosition.y\r\n },\r\n activePartId: item.part.partId,\r\n });\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS); // update buttons\r\n return true\r\n } else if (this.props.navItemPositionModal && this.props.navItemPositionModal.popupOpened) {\r\n this.props.toggleNavItemPositionModal({\r\n popupOpened: false,\r\n });\r\n }\r\n return false\r\n }\r\n\r\n}\r\n","import {getSaveJobData} from \"./saveJobData\";\r\nimport {postSaveJob, postScheduleAppointment} from \"../api/job-api\";\r\nimport {getSaveAppointmentData} from \"./saveAppointmentData\";\r\nimport {registerUser, updateUser} from \"../api/user\";\r\nimport {setRegisteredUserData, setUserInfo} from \"../userLogic/userActions\";\r\n\r\nexport const SET_LOADING = \"SET_LOADING\";\r\nexport const EXPAND_FOOTER_INFO = \"EXPAND_FOOTER_INFO\";\r\nexport const SET_LEAD_POPUP = \"SET_LEAD_POPUP\";\r\nexport const ALLOW_SAVING_JOB_ON_INPUT_STEP = \"ALLOW_SAVING_JOB_ON_INPUT_STEP\";\r\nexport const SET_JOB_SAVED = \"SET_JOB_SAVED\";\r\nexport const SET_FOOTER_INFO_BUTTON_TEXT = \"SET_FOOTER_INFO_BUTTON_TEXT\";\r\nexport const setLoading = (isLoading, faradayLoading = false) => ({\r\n type: SET_LOADING,\r\n payload: {isLoading, faradayLoading}\r\n});\r\nexport const expandFooterInfo = (footerInfoExpanded = false) => ({\r\n type: EXPAND_FOOTER_INFO,\r\n payload: {footerInfoExpanded}\r\n});\r\nexport const setFooterInfoButtonText = (footerInfoButtonText = \"\") => ({\r\n type: EXPAND_FOOTER_INFO,\r\n payload: {footerInfoButtonText}\r\n});\r\nexport const setLeadPopup = (leadPopup) => ({\r\n type: SET_LEAD_POPUP,\r\n payload: leadPopup\r\n});\r\n\r\nexport const setJobSaved = (jobData) => ({\r\n type: SET_JOB_SAVED,\r\n payload: jobData\r\n});\r\n\r\nexport const setAllowJobSavingOnInputStep = () => ({\r\n type: ALLOW_SAVING_JOB_ON_INPUT_STEP,\r\n});\r\n\r\nconst someUserInfoIsDifferent = (userInfo, registeredUser) => {\r\n return Object.keys(registeredUser).some(key => registeredUser[key] !== userInfo[key])\r\n}\r\n\r\nexport const saveJobAction = (isDelayedSave = false) => {\r\n return async (dispatch, getState) => {\r\n const store = getState();\r\n const {appointmentDate} = store.appointmentState;\r\n const {userInfo, registeredUser} = store.userState;\r\n\r\n if (!userInfo.isLoggedIn) {\r\n // 1) register user\r\n const registered = await registerUser(store);\r\n console.log(\"registered\", registered);\r\n if (registered && registered.data) {\r\n dispatch(setRegisteredUserData(registered.data.email, registered.data.authToken));\r\n }\r\n dispatch(setUserInfo(\"isLoggedIn\", true));\r\n } else if (someUserInfoIsDifferent(userInfo, registeredUser)) {\r\n // 1.5) update user info\r\n const updatedCustomer = await updateUser(store);\r\n if (updatedCustomer && updatedCustomer.data && updatedCustomer.data.success) {\r\n dispatch(setRegisteredUserData(store.userState.userInfo.email, updatedCustomer.data.token));\r\n }\r\n }\r\n\r\n // 2) save job\r\n // getState() needed here to have registered email\r\n const saveJobResponse = await postSaveJob(getSaveJobData(getState(), isDelayedSave));\r\n\r\n if (!saveJobResponse || !saveJobResponse.data) {\r\n console.error(\"job wasn't saved\", saveJobResponse);\r\n return\r\n }\r\n\r\n // 3) set appointment\r\n if (appointmentDate && saveJobResponse.data.jobId) { // check fab setting here if needed\r\n await postScheduleAppointment(getSaveAppointmentData(store, saveJobResponse.data.jobId));\r\n }\r\n\r\n dispatch(setJobSaved({jobId: saveJobResponse.data.jobId}));\r\n }\r\n}\r\n\r\n// if (registered.data && registered.data.isEmailTaken && registered.data.errorUserMatch) {\r\n// visitContextDispatch(visitContextAction({\r\n// popup: Object.assign({}, visitContextState.popup, {\r\n// visible: true,\r\n// text: \"This email already exists in the system. Would you like to add your quote to this customer?\",\r\n// buttons: [{\r\n// text: \"No\",\r\n// onClick: () => {\r\n// visitContextDispatch(visitContextAction({\r\n// popup: Object.assign({}, visitContextState.popup, {visible: false})\r\n// }));\r\n// }\r\n// }, {\r\n// text: \"Yes\",\r\n// onClick: () => {\r\n// // here we can take some info from already registered user\r\n// visitContextDispatch(visitContextAction({\r\n// popup: Object.assign({}, visitContextState.popup, {visible: false})\r\n// }));\r\n// visitContextDispatch(visitContextChangeFormAction(\"isLoggedIn\", true, \"contact\"));\r\n// switchToAppointmentPage();\r\n// }\r\n// }],\r\n// })\r\n// }))\r\n// return false\r\n// }\r\n","import {getNextWizardSteps} from \"./wizardLogicOld\";\r\n\r\nexport const LEAD_WIZARD_GROUP_TYPES = {\r\n group: \"group\",\r\n filter: \"filter\",\r\n custom: \"custom\",\r\n inputs: \"inputs\",\r\n contact: \"contact\",\r\n appointment: \"appointment\",\r\n review: \"review\",\r\n success: \"success\",\r\n}\r\n\r\n/**\r\n * this returns new wizard steps depending on the current selection\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @param currentStep {number}\r\n * @param wizardSelectedValues {object}\r\n * @returns {object}\r\n */\r\nexport const getLeadFormSteps = (wizardActiveItem, currentStep, wizardSelectedValues) => {\r\n const wizardSteps = getNextWizardSteps(wizardActiveItem, currentStep, wizardSelectedValues);\r\n // console.log(\"wizardSteps\", wizardSteps);\r\n let leadFormSteps = [];\r\n wizardSteps.forEach(step => {\r\n if (step.stepGroups.length && step.stepGroups[0].leadStep) {\r\n let existingLeadStepObject = leadFormSteps.find(leadStepObject => {\r\n return leadStepObject.leadStepName === step.stepGroups[0].leadStep\r\n });\r\n if (!existingLeadStepObject) {\r\n existingLeadStepObject = {\r\n leadStepName: step.stepGroups[0].leadStep,\r\n leadStepUrl: step.stepGroups[0].leadStepUrl,\r\n leadSubSteps: []\r\n }\r\n leadFormSteps.push(existingLeadStepObject);\r\n }\r\n existingLeadStepObject.leadSubSteps.push({\r\n stepIndex: step.stepIndex,\r\n wizardGroup: step.stepGroups[0], // not needed for now\r\n });\r\n }\r\n })\r\n // const leadFormSteps = wizardSteps.reduce((total, step) => {\r\n // if (step.stepGroups.length && step.stepGroups[0].leadStep && !total.includes(step.stepGroups[0].leadStep)) {\r\n // total.push(step.stepGroups[0].leadStep)\r\n // }\r\n // return total\r\n // }, []);\r\n return leadFormSteps\r\n}\r\n\r\n/**\r\n * this returns lowercased url\r\n * @param leadStepName {string}\r\n * @returns {string}\r\n */\r\nexport const getUrlLeadStepName = (leadStepName = \"\") => {\r\n if (!leadStepName) {\r\n return \"\"\r\n }\r\n return leadStepName.toLowerCase().replace(/ /g,\"-\")\r\n}\r\n","import React from \"react\";\r\nimport orderBy from \"lodash/orderBy\";\r\nimport throttle from \"lodash/throttle\";\r\nimport clone from \"lodash/clone\";\r\nimport $ from 'jquery';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Misc from './../../misc/misc';\r\nimport ActionTypes from \"./../../misc/actionTypes\";\r\nimport {getMousePos, getTranslateX, requestAnimFrame, isTouchDevice} from \"../../misc/utils\";\r\nimport {makeHoveringLayer} from \"../../misc/imageHovering\";\r\nimport {getEventPosition, isIE} from \"../../misc/helpers\";\r\nimport PinchZoom from \"../../lib/pinch-zoom\";\r\nimport {loaderEnable, loaderDisable} from \"../ui/loaderView\";\r\nimport enhanceCanvas from \"./canvasEnhancements\";\r\nimport Config, {IS_LIXIL_UI} from \"../../config\";\r\nimport {checkForLayerParts} from \"./canvasCheckForLayerParts\";\r\nimport {hardCodelyRemovedClicking} from \"../look/lookNavigation/lookFunctions2\";\r\nimport {VISUALIZER_MANAGEMENT_ACTIONS} from \"../../misc/constants\";\r\n// import {UseFullSizeImages} from \"../../config\";\r\n\r\n// import { getHoverZonesForPreset, getHoveringZone, hoverImages } from \"./imageCanvasTouchZones\";\r\n\r\nexport default class ImageCanvasCommon extends React.Component {\r\n static propTypes = {\r\n layers: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n layoutType: PropTypes.string.isRequired,\r\n width: PropTypes.number.isRequired,\r\n height: PropTypes.number.isRequired,\r\n canvasId: PropTypes.string.isRequired,\r\n useMouseHovering: PropTypes.bool,\r\n useTouchZoom: PropTypes.bool,\r\n enableLoader: PropTypes.func,\r\n disableLoader: PropTypes.func,\r\n setShowCanvasLoader: PropTypes.func,\r\n lookCanvasClick: PropTypes.func,\r\n transform: PropTypes.string,\r\n fabricatorData: PropTypes.object,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.canvas = null;\r\n this.state = {\r\n mouseMoveSet: false,\r\n dimensions: {\r\n width: props.width,\r\n height: props.height\r\n },\r\n hoverZones: {},\r\n layers: [],\r\n layersHoverings: [],\r\n // layersHoveringsCached: [],\r\n imagesRendered: [],\r\n backgroundLayers: [],\r\n backgroundImages: [],\r\n allowPropsLayers: true,\r\n };\r\n this.id = 0;\r\n this.ctx = null;\r\n this.backCtx = null;\r\n this.resizedCanvas = null;\r\n this.resizedContext = null;\r\n this.timeout = 0;\r\n this.canvas_scale = 1;\r\n this.shouldUpdateGreenZone = false;\r\n this.pinchZoom = null;\r\n this.x = 0;\r\n this.y = 0;\r\n this.delta = 0;\r\n this.statusSwipe = false;\r\n this.detectedSwipeLeft = false;\r\n this.detectedSwipeRight = false;\r\n this.currentTranslate = 0;\r\n this.navBreakPoint = 991;\r\n this.activeGreenZoneIndex = null;\r\n /*** background canvas ***/\r\n this.canvasBg = null;\r\n this.backCtxBg = null;\r\n /*** background canvas end ***/\r\n }\r\n\r\n componentDidMount() {\r\n const {width, height} = this.props;\r\n this.ctx = this.canvas.getContext('2d');\r\n const c = document.createElement('canvas');\r\n c.width = width;\r\n c.height = height;\r\n this.backCtx = c.getContext('2d');\r\n this.resizedCanvas = document.createElement(\"canvas\");\r\n this.resizedContext = this.resizedCanvas.getContext(\"2d\");\r\n\r\n /*** background canvas ***/\r\n this.canvasBg = document.createElement('canvas');\r\n this.canvasBg.width = width;\r\n this.canvasBg.height = height;\r\n this.backCtxBg = this.canvasBg.getContext('2d');\r\n this.backCtxBg.globalCompositeOperation = \"lighten\";\r\n /*** background canvas end ***/\r\n\r\n $(window).on('resize', this.handleOrientationChange);\r\n this.handleOrientationChange();\r\n $(window).on('setPinchZoom', this.createPinchZoom);\r\n if (window.setPinchZoom || IS_LIXIL_UI) {\r\n this.createPinchZoom();\r\n }\r\n $(window).on(ActionTypes.REMOVE_GREEN_ZONE_ON_CANVAS, (event, callback) => {\r\n this.draw(this.state.layers, callback);\r\n });\r\n\r\n if (Config.isVisualizerManagement()) {\r\n window.addEventListener(\"message\", (event) => {\r\n if (event.data && (event.data.action === VISUALIZER_MANAGEMENT_ACTIONS.getState\r\n || event.data.action === VISUALIZER_MANAGEMENT_ACTIONS.checkState)) {\r\n this.draw(this.state.layers)\r\n }\r\n })\r\n }\r\n if (this.props.layers.length && this.state.allowPropsLayers) {\r\n this.drawPropsLayers();\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n $(window).off('resize', this.handleOrientationChange);\r\n $(window).off('setPinchZoom', this.createPinchZoom);\r\n $(window).off(ActionTypes.GET_CANVAS_SCALE);\r\n $(window).off(ActionTypes.RESET_CANVAS);\r\n $(window).off(ActionTypes.ENABLE_PINCH_ZOOM);\r\n $(window).off(ActionTypes.DISABLE_PINCH_ZOOM);\r\n $(window).off(ActionTypes.REMOVE_GREEN_ZONE_ON_CANVAS);\r\n }\r\n\r\n drawPropsLayers = () => {\r\n this.setState({\r\n layers: this.props.layers\r\n });\r\n this.shouldUpdateGreenZone = true;\r\n this.draw(this.props.layers, this.props.useMouseHovering ? this.updateGliaCanvasImage : null);\r\n };\r\n\r\n createPinchZoom = () => {\r\n if ((Misc.isMobile() || isTouchDevice() || Config.isVisualizerManagement() || IS_LIXIL_UI) && this.props.useTouchZoom && !this.pinchZoom) {\r\n this.pinchZoom = new PinchZoom(this.canvas, {canUseUpdate: this.props.useTouchZoom});\r\n $(window).on(ActionTypes.RESET_CANVAS, () => {\r\n // $('.canvas-text').html('xxx');\r\n this.pinchZoom.reset();\r\n });\r\n $(window).on(ActionTypes.ENABLE_PINCH_ZOOM, () => {\r\n this.pinchZoom.enable();\r\n });\r\n $(window).on(ActionTypes.DISABLE_PINCH_ZOOM, () => {\r\n this.pinchZoom.disable();\r\n });\r\n if (this.props.updateLookCanvas) {\r\n this.props.updateLookCanvas();\r\n }\r\n }\r\n // const dashboardFramed = Config.isVisualizerManagement();\r\n };\r\n\r\n componentWillReceiveProps(nextProps) {\r\n const onlyLayers = nextProps.layers.filter((layer) => {\r\n return !layer.image.includes(\"/static\")\r\n });\r\n const onlyStateLayers = this.state.layers.filter((layer) => {\r\n return !layer.image.includes(\"/static\")\r\n });\r\n\r\n let needToUpdateCanvas = onlyLayers.length !== onlyStateLayers.length,\r\n i = 0;\r\n\r\n if (!needToUpdateCanvas && onlyLayers.length && onlyStateLayers.length) {\r\n for (i; i < onlyLayers.length; i++) {\r\n if (onlyLayers[i].zIndex !== onlyStateLayers[i].zIndex || onlyLayers[i].image !== onlyStateLayers[i].image) {\r\n needToUpdateCanvas = true;\r\n // console.log('break on ' + i + ' element');\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (nextProps.layers.length && this.state.allowPropsLayers) {\r\n this.setState({\r\n layers: nextProps.layers\r\n });\r\n // if (this.state.mouseMoveSet) {\r\n // this.setLayersHoverings(nextProps.layers);\r\n // }\r\n }\r\n\r\n if (needToUpdateCanvas && this.state.allowPropsLayers) {\r\n this.shouldUpdateGreenZone = true;\r\n this.draw(nextProps.layers, this.props.useMouseHovering ? this.updateGliaCanvasImage : null);\r\n }\r\n }\r\n\r\n handleOrientationChange = () => {\r\n const canvas = $(this.canvas);\r\n const canvasWidth = canvas.width();\r\n const canvasHeight = canvas.height();\r\n const fromDesktopToMobile = this.state.dimensions.width > this.navBreakPoint && canvasWidth < this.navBreakPoint;\r\n const fromMobileToDesktop = this.state.dimensions.width < this.navBreakPoint && canvasWidth > this.navBreakPoint;\r\n this.setState({\r\n dimensions: {\r\n width: canvasWidth,\r\n height: canvasHeight,\r\n layersHoverings: (fromDesktopToMobile || fromMobileToDesktop) ? [] : this.state.layersHoverings, // recreate layersHoverings\r\n }\r\n });\r\n };\r\n\r\n imageCanvasScroll = (canvasClass, removeAllClasses) => {\r\n if (!window.canvasIsDragging && this.pinchZoom) {\r\n this.pinchZoom.reset();\r\n // $('.canvas-text').html($('.canvas-text').html() + canvasClass);\r\n this.pinchZoom.imageCanvasScroll(\r\n canvasClass.toLowerCase().replace(\" \", \"-\"),\r\n removeAllClasses,\r\n this.props.layoutType,\r\n this.props.layoutScene\r\n );\r\n }\r\n };\r\n\r\n layerIsExcludedFromHover = (layer) => {\r\n const {layout} = this.props;\r\n if (Array.isArray(layout.disabledClickablePartIds) && layout.disabledClickablePartIds.includes(layer.partId)) {\r\n return true\r\n }\r\n if (hardCodelyRemovedClicking(layer.partId, layout, this.props.fabricatorData)) {\r\n return true\r\n }\r\n return layout.excludedPartIdsFromHover\r\n ? layer.partId && layout.excludedPartIdsFromHover.some(partId => partId === layer.partId || layer.partId.indexOf(partId) > -1)\r\n : layout.excludedIndexesFromHover\r\n ? layout.excludedIndexesFromHover(this.props.layoutType).includes(layer.zIndex)\r\n : false\r\n }\r\n\r\n setLayersHoverings = (layers, images, errorImages) => {\r\n\r\n let layersHoverings = this.state.layersHoverings, i;\r\n // console.log('this.state.layersHoverings-->', this.state.layersHoverings);\r\n // console.log('layers', layers);\r\n\r\n const {layout} = this.props;\r\n\r\n layers.forEach((layer, index) => {\r\n\r\n // console.log('setLayersHovering:', layer);\r\n\r\n const excludedLayer = this.layerIsExcludedFromHover(layer, layout);\r\n\r\n if (!layer.isGreenHovering && !excludedLayer) {\r\n // search for current layer zIndex\r\n const existingGreenLayerHoveringIndex = layersHoverings.findIndex((layerHovering) => {\r\n return layerHovering ? layerHovering.layer.zIndex === layer.zIndex : 0\r\n });\r\n\r\n const getHoveringLayer = () => {\r\n return makeHoveringLayer(layer, images[index], this.props.layoutType, {\r\n width: this.props.width,\r\n height: this.props.height\r\n }, this.props.fabricatorData)\r\n }\r\n\r\n // if it exist & name is different - change it(simple layer replace)\r\n if (existingGreenLayerHoveringIndex > -1) {\r\n if (layer.image !== this.state.layersHoverings[existingGreenLayerHoveringIndex].layer.image\r\n && images[index] && !errorImages.includes(images[index].src)) {\r\n const hoveringLayer = getHoveringLayer();\r\n if (hoveringLayer) {\r\n layersHoverings.splice(existingGreenLayerHoveringIndex, 1, hoveringLayer)\r\n }\r\n }\r\n } else {\r\n if (images[index] && !errorImages.includes(images[index].src)) {\r\n const hoveringLayer = getHoveringLayer();\r\n if (hoveringLayer) {\r\n layersHoverings.push(hoveringLayer) // simple push\r\n }\r\n } else {\r\n console.info(\"makeHoveringLayer failed! no image for layer\", index);\r\n }\r\n }\r\n }\r\n });\r\n\r\n for (i = 0; i < layersHoverings.length; ++i) { // go over new green layers, and remove redundant\r\n const notNeededMoreLayerIndex = layers.findIndex((layer) => {\r\n return layer.zIndex === layersHoverings[i].layer.zIndex\r\n });\r\n if (notNeededMoreLayerIndex === -1) {\r\n layersHoverings.splice(i, 1);\r\n --i; // Correct the index value\r\n }\r\n }\r\n\r\n this.setState({\r\n layersHoverings: orderBy(layersHoverings, 'layer.zIndex', layout.isNewLayout ? 'asc' : 'desc')\r\n // order by zIndex (top go last in new layouts)\r\n }, () => {\r\n this.shouldUpdateGreenZone = false;\r\n });\r\n };\r\n\r\n draw = (layers, callback) => {\r\n\r\n let cnt = 0;\r\n const images = [];\r\n\r\n // if (!window.count) {\r\n // window.count = 1;\r\n // }\r\n // console.log('draw!', window.count);\r\n // window.count++;\r\n\r\n this.id = setTimeout(() => {\r\n if (!this.id) {\r\n return;\r\n }\r\n clearTimeout(this.id);\r\n if (this.props.setShowCanvasLoader) {\r\n if (!window.requestInProcess) {\r\n this.props.setShowCanvasLoader(true)\r\n }\r\n } else if (layers.length) {\r\n this.props.enableLoader\r\n ? this.props.enableLoader()\r\n : loaderEnable(\"loader.canvasLoadingText\");\r\n }\r\n }, 500);\r\n\r\n this.backCtx.fillStyle = 'white';\r\n this.backCtx.fillRect(0, 0, this.props.width, this.props.height);\r\n // this.backCtx.clearRect(0, 0, this.props.width, this.props.height);\r\n\r\n // console.log('layers', layers);\r\n\r\n const alreadyRenderedImages = this.state.imagesRendered;\r\n const errorImages = [];\r\n\r\n // if (this.state.errorImages.length) {\r\n // layers = layers.filter(layer => !this.state.errorImages.includes(layer.image))\r\n // }\r\n\r\n layers.forEach((layer) => {\r\n const alreadyRenderedImage = alreadyRenderedImages.find((imageRendered) => {\r\n return layer.image === imageRendered.src\r\n });\r\n let image;\r\n if (layer.isGreenHovering) {\r\n image = layer.hoveringImage;\r\n } else if (alreadyRenderedImage && this.state.allowPropsLayers) {\r\n image = alreadyRenderedImage.image;\r\n if (!isIE()) { // IE11 doesn't like when someone is making empty src\r\n image.src = \"\"; // https://bugs.chromium.org/p/chromium/issues/detail?id=7731#c12\r\n }\r\n } else {\r\n image = new Image();\r\n image.crossOrigin = 'Anonymous';\r\n alreadyRenderedImages.push({\r\n image,\r\n src: layer.image\r\n });\r\n }\r\n image.layerDimensions = layer.layerDimensions || null;\r\n image.coords = layer.coords || null;\r\n images.push(image);\r\n image.onload = () => {\r\n cnt++;\r\n if (cnt === layers.length) {\r\n this.finishDraw(images, layers, alreadyRenderedImages, errorImages, callback)\r\n }\r\n };\r\n image.onerror = () => {\r\n //display error\r\n console.info('Coudn\\'t load image:', image.src);\r\n cnt++;\r\n errorImages.push(image.src);\r\n if (cnt === layers.length) {\r\n this.finishDraw(images, layers, alreadyRenderedImages, errorImages, callback);\r\n }\r\n };\r\n try {\r\n image.src = layer.image;\r\n } catch (e) {\r\n console.log(e, 'Can\\'t apply image src', layer.image);\r\n }\r\n\r\n });\r\n };\r\n\r\n getBackgroundLayers = (layers = this.state.layers) => {\r\n const {layoutType, layout} = this.props;\r\n return layers.filter((layer) => {\r\n return layout.zIndexes[layoutType] && layout.zIndexes[layoutType].Background &&\r\n Object.values(layout.zIndexes[layoutType].Background).some(zIndex => zIndex === layer.zIndex);\r\n })\r\n };\r\n\r\n finishDraw = (images, layers, alreadyRenderedImages, errorImages, callback) => {\r\n clearTimeout(this.id);\r\n this.id = 0;\r\n\r\n const {width, height} = this.props;\r\n\r\n // const fullImagesFactor = UseFullSizeImages ? 100 : 54;\r\n\r\n const backgroundLayers = this.getBackgroundLayers(layers);\r\n\r\n if (backgroundLayers.length) { // draw backgrounds first\r\n this.backCtxBg.clearRect(0, 0, width, height); // clear previous\r\n\r\n const greenImage = images.find((imageObject) => imageObject.src.includes(\"data:image\"));\r\n if (greenImage) {\r\n const layer = backgroundLayers.find(layer => layer.image === greenImage.src);\r\n if (layer && layer.zIndex !== 500) {\r\n const greenImageIndex = images.findIndex((imageObject) => imageObject.src.includes(\"data:image\"));\r\n images.splice(greenImageIndex - 1, 1); // remove regular layer, draw only green one\r\n }\r\n }\r\n\r\n images.forEach((imageObject) => {\r\n if (errorImages.includes(imageObject.src)) {\r\n return\r\n }\r\n const layer = backgroundLayers.find(layer => layer.image === imageObject.src);\r\n if (layer) {\r\n if (layer.layerDimensions) {\r\n const dim = layer.layerDimensions;\r\n // console.log('yep', dim.width, dim.height, dim.polygonArray[0][0], dim.polygonArray[0][1], dim.width, dim.height);\r\n this.backCtxBg.drawImage(imageObject, 0, 0, dim.width, dim.height, dim.polygonArray[0][0], dim.polygonArray[0][1], dim.width, dim.height);\r\n } else {\r\n // imageObject.width = width;\r\n // imageObject.height = height;\r\n this.backCtxBg.drawImage(imageObject, 0, 0, width, height);\r\n }\r\n }\r\n imageObject = null;\r\n });\r\n enhanceCanvas(this.canvasBg);\r\n this.backCtx.drawImage(this.canvasBg, 0, 0, width, height, 0, 0, width, height);\r\n }\r\n\r\n images.forEach((loadedImage) => {\r\n if (errorImages.includes(loadedImage.src)) {\r\n return\r\n }\r\n const layer = layers.find(layers => layers.image === loadedImage.src);\r\n if (layer && (!backgroundLayers.length || (layer.zIndex > backgroundLayers[backgroundLayers.length - 1].zIndex))) {\r\n if (loadedImage.layerDimensions) {\r\n const dim = loadedImage.layerDimensions;\r\n // console.log('yep', dim.width, dim.height, dim.polygonArray[0][0], dim.polygonArray[0][1], dim.width, dim.height);\r\n this.backCtx.drawImage(loadedImage, 0, 0, dim.width, dim.height, dim.polygonArray[0][0], dim.polygonArray[0][1], dim.width, dim.height);\r\n } else if (loadedImage.coords) {\r\n // loadedImage.width = loadedImage.width*fullImagesFactor/100;\r\n // loadedImage.height = loadedImage.height*fullImagesFactor/100;\r\n // const max_x = loadedImage.coords.max_x*fullImagesFactor/100;\r\n const min_x = this.props.width*loadedImage.coords.min_x;\r\n const min_y = this.props.height*loadedImage.coords.min_y;\r\n // const max_y = loadedImage.coords.max_y*fullImagesFactor/100;\r\n // const width = max_x - min_x;\r\n // const height = max_y - min_y;\r\n // console.log('width', width);\r\n // console.log('height', height);\r\n // console.log('min_x', min_x);\r\n // console.log('min_y', min_y);\r\n // console.log('max_x', max_x);\r\n // console.log('max_y', max_y);\r\n try {\r\n this.backCtx.drawImage(loadedImage, 0, 0, loadedImage.width, loadedImage.height, min_x, min_y, loadedImage.width, loadedImage.height);\r\n } catch (e) {\r\n console.log(e, 'Can\\'t draw image with coords on the canvas', loadedImage.src);\r\n }\r\n } else {\r\n try {\r\n this.backCtx.drawImage(loadedImage, 0, 0, width, height, 0, 0, width, height);\r\n } catch (e) {\r\n console.log(e, 'Can\\'t draw image on the canvas', loadedImage.src);\r\n }\r\n }\r\n }\r\n loadedImage = null;\r\n });\r\n\r\n // this.ctx.drawImage(this.backCtx.canvas, 0, 0);\r\n requestAnimFrame(this.ctx.drawImage(this.backCtx.canvas, 0, 0));\r\n\r\n if (this.props.useMouseHovering) {\r\n const isMobile = Misc.isMobile() || isTouchDevice();\r\n if (!isMobile && !isIE() && !this.state.mouseMoveSet && this.canvas) {\r\n this.setOnMouseMove();\r\n }\r\n this.setState({\r\n alreadyRenderedImages\r\n });\r\n if (this.shouldUpdateGreenZone || !this.state.layersHoverings.length) {\r\n this.setLayersHoverings(layers, images, errorImages)\r\n }\r\n }\r\n\r\n if (!window.requestInProcess) {\r\n this.props.disableLoader ? this.props.disableLoader() : loaderDisable();\r\n }\r\n\r\n // window.t1 = performance.now();\r\n // console.log(\"Call to doSomething took \" + (window.t1 - window.t0) + \" milliseconds.\");\r\n\r\n if (callback) {\r\n callback()\r\n }\r\n };\r\n\r\n getGliaImage = () => {\r\n return this.canvasImg = el} alt=\"\" id={this.props.canvasId + \"Img\"}\r\n className=\"canvas-co-image\" />\r\n };\r\n\r\n updateGliaCanvasImage = () => {\r\n // if (this.pinchZoom && this.pinchZoom.containerScrolled && layers.some(layer => layer.image.includes('data:image/png;base64'))) {\r\n // return\r\n // }\r\n if (this.resizedContext && this.canvas) {\r\n this.resizedCanvas.height = this.canvas.height / 2;\r\n this.resizedCanvas.width = this.canvas.width / 2;\r\n const backgroundCanvas = document.getElementById(\"canvasBackgrounds\");\r\n if (backgroundCanvas) {\r\n this.resizedContext.drawImage(backgroundCanvas, 0, 0, this.resizedCanvas.width, this.resizedCanvas.height);\r\n }\r\n this.resizedContext.drawImage(this.canvas, 0, 0, this.resizedCanvas.width, this.resizedCanvas.height);\r\n this.canvasImg.src = this.resizedCanvas.toDataURL(\"image/jpeg\", 0.7);\r\n }\r\n };\r\n\r\n setOnMouseMove = () => {\r\n this.setState({\r\n mouseMoveSet: true\r\n });\r\n const delayBetweenUpdates = 50;\r\n this.canvas.addEventListener('mousemove', throttle(this.setHoveredLayer, delayBetweenUpdates), false);\r\n };\r\n\r\n setHoveredLayer = (evt) => {\r\n\r\n const {layoutType, layout} = this.props;\r\n const canvas = this.canvas;\r\n let mousePos = getMousePos(evt, canvas);\r\n let hovered = false;\r\n\r\n // console.log('mousePos', mousePos);\r\n\r\n if (Misc.isMobile() || isTouchDevice() || isIE()) {\r\n if (this.props.useTouchZoom) {\r\n $(window).trigger(ActionTypes.GET_CANVAS_SCALE);\r\n }\r\n }\r\n\r\n if (mousePos && (window.innerWidth < 480)) { // rotated version\r\n let temp = mousePos.x;\r\n // noinspection JSSuspiciousNameCombination\r\n mousePos.x = mousePos.y;\r\n mousePos.y = this.canvas.offsetHeight - temp;\r\n // console.log('mousePos2', mousePos);\r\n }\r\n\r\n if (this.state.layersHoverings.length) {\r\n let i = 0;\r\n for (i; i < this.state.layersHoverings.length; i++) {\r\n const layerHovering = this.state.layersHoverings[i];\r\n if ( mousePos\r\n && layerHovering\r\n && layerHovering.layerDimensions\r\n && !this.layerIsExcludedFromHover(layerHovering.layer, layout)\r\n // && pnpoly(layerHovering.layerDimensions.polygonArray, mousePos)\r\n && layerHovering.context2D.getImageData(\r\n (((mousePos.x / this.canvas_scale) / this.state.dimensions.width * this.props.width)) - layerHovering.layerDimensions.polygonArray[0][0],\r\n (((mousePos.y / this.canvas_scale) / this.state.dimensions.height * this.props.height)) - layerHovering.layerDimensions.polygonArray[0][1],\r\n 1,\r\n 1,\r\n {willReadFrequently: true}).data[3] > 120) {\r\n hovered = true;\r\n document.hoveredLayer = layerHovering.layer;\r\n document.hoveredMousePos = mousePos;\r\n if (!isIE() && (this.activeGreenZoneIndex !== layerHovering.layer.zIndex)) {\r\n // console.log('layerHovering active = ', layerHovering);\r\n const windowHover = layerHovering.layer.zIndex === layout.zIndexes[layoutType].Window_Default;\r\n let windowLayerHovering = '';\r\n if (windowHover) {\r\n windowLayerHovering = this.state.layersHoverings.find(layersHovering => {\r\n return layersHovering.layer.zIndex === layout.zIndexes[layoutType].Window_Covering\r\n });\r\n }\r\n this.activeGreenZoneIndex = layerHovering.layer.zIndex;\r\n this.renderGreenLayer(windowHover && windowLayerHovering ? windowLayerHovering : layerHovering);\r\n }\r\n\r\n break; // break for...of loop\r\n }\r\n }\r\n }\r\n\r\n if (!hovered) {\r\n document.hoveredLayer = null;\r\n this.draw(this.state.layers); // reload all layers without hovered\r\n }\r\n\r\n };\r\n\r\n renderGreenLayerByZindex = (zIndex) => {\r\n if (!isIE()) {\r\n const neededLayerHovering = this.state.layersHoverings.find((layerHovering) => {\r\n return layerHovering.layer.zIndex === zIndex\r\n });\r\n neededLayerHovering ? this.renderGreenLayer(neededLayerHovering) : this.draw(this.state.layers)\r\n }\r\n };\r\n\r\n renderGreenLayer = (layerHovering, allLayers = false) => {\r\n let layers = clone(this.state.layers);\r\n\r\n clearTimeout(this.timeout); // timeout for updating layers\r\n\r\n const hoveredLayerIndex = layers.findIndex((layer) => {\r\n if (this.props.layout && this.props.layout.isNewLayout && layerHovering) {\r\n return (layer.zIndex === layerHovering.layer.zIndex) && (layerHovering.layer.partId === layer.partId)\r\n }\r\n return layer.zIndex === layerHovering.layer.zIndex\r\n });\r\n\r\n if (hoveredLayerIndex > -1) {\r\n const layersToRender = checkForLayerParts(this, layers, hoveredLayerIndex, layerHovering, allLayers);\r\n // console.log('layersToRender', layersToRender);\r\n this.draw(layersToRender);\r\n this.timeout = setTimeout(() => { // remove green layer\r\n this.activeGreenZoneIndex = null;\r\n if (this.canvas) {\r\n this.draw(this.state.layers);\r\n }\r\n }, 2000);\r\n }\r\n };\r\n\r\n moveStart = (event) => {\r\n const eventPosition = getEventPosition(event);\r\n const thisX = parseFloat(eventPosition.x).toFixed(2);\r\n const thisY = parseFloat(eventPosition.y).toFixed(2);\r\n setTimeout(() => {\r\n if (window.mobileMenuOpened && !window.imageCanvasScroll && !window.imageCanvasScroll2) {\r\n this.x = thisX;\r\n this.y = thisY;\r\n this.statusSwipe = true;\r\n this.detectedSwipeLeft = false;\r\n this.detectedSwipeRight = false;\r\n this.currentTranslate = getTranslateX(this.canvas);\r\n $('.canvas-text').html(this.currentTranslate);\r\n }\r\n }, 100);\r\n };\r\n\r\n move = (event) => {\r\n\r\n if (this.statusSwipe && window.mobileMenuOpened) {\r\n\r\n window.canvasIsDragging = true;\r\n\r\n const eventPosition = getEventPosition(event);\r\n\r\n let\r\n x = parseFloat(eventPosition.x).toFixed(2),\r\n y = parseFloat(eventPosition.y).toFixed(2),\r\n tX = parseFloat((x - this.x).toFixed(2)),\r\n tY = parseFloat((y - this.y).toFixed(2));\r\n\r\n if (!this.detectedSwipeRight || !this.detectedSwipeLeft) {\r\n if (Math.abs(parseFloat(tX)) >= this.delta) {\r\n if (parseFloat(tX) > this.delta) {\r\n this.detectedSwipeRight = true;\r\n } else if (parseFloat(tX) < -this.delta) {\r\n this.detectedSwipeLeft = true;\r\n }\r\n }\r\n }\r\n\r\n if ((this.detectedSwipeLeft || this.detectedSwipeRight) && Math.abs(tX) > Math.abs(tY)) {\r\n // console.log('Math.abs(tX)', Math.abs(tX));\r\n\r\n const nextPosition = Math.round((this.currentTranslate + tX)*100)/100;\r\n const percentage = this.state.dimensions.width < 680 ? 60 : 50;\r\n // const percentage = 50;\r\n const visibleCanvasWidth = (percentage / 100) * this.state.dimensions.width; // percentage of number\r\n\r\n // console.log('nextPosition', nextPosition);\r\n // $('.canvas-text').html(nextPosition);\r\n // console.log('visibleCanvasWidth', visibleCanvasWidth);\r\n\r\n if (Math.abs(nextPosition) < visibleCanvasWidth && nextPosition < 0) {\r\n const transform2d = 'translateX(' + nextPosition + 'px)';\r\n this.canvas.style.webkitTransform = transform2d;\r\n this.canvas.style.mozTransform = transform2d;\r\n this.canvas.style.msTransform = transform2d;\r\n this.canvas.style.oTransform = transform2d;\r\n this.canvas.style.transform = transform2d;\r\n }\r\n }\r\n }\r\n\r\n };\r\n\r\n moveEnd = () => {\r\n\r\n // let\r\n // x = getEventPosition(e).x,\r\n // tX = parseFloat((x - this.x).toFixed(2));\r\n\r\n this.x = 0;\r\n this.y = 0;\r\n this.statusSwipe = false;\r\n if (this.pinchZoom) {\r\n $(window).trigger(ActionTypes.CANVAS_SCALE_CHANGED, [this.pinchZoom.getScale()]);\r\n }\r\n\r\n if (this.detectedSwipeLeft || this.detectedSwipeRight) {\r\n this.currentTranslate = getTranslateX(this.canvas);\r\n this.detectedSwipeLeft = false;\r\n this.detectedSwipeRight = false;\r\n window.canvasIsDragging = false;\r\n this.pinchZoom.enable();\r\n // $(this.canvas).css({\r\n // transform: `none`\r\n // });\r\n }\r\n };\r\n\r\n render() {\r\n return (\r\n
    \r\n {/*
    */}\r\n {this.getGliaImage()}\r\n this.canvas = el}\r\n className={\"canvas-el\" + (this.props.useMouseHovering ? \" canvas-el--pointer\" : \"\")}\r\n id={this.props.canvasId}\r\n width={this.props.width}\r\n height={this.props.height}\r\n onTouchStart={this.moveStart}\r\n onTouchMove={this.move}\r\n onTouchEnd={this.moveEnd}\r\n style={{position: \"relative\"}} />\r\n
    \r\n );\r\n }\r\n}\r\n","const layouts = {\r\n Large: {\r\n Background: 100,\r\n Floor: 600,\r\n Ceiling: 200,\r\n Wall_A: 300,\r\n Wall_B: 400,\r\n Wall_C: 500,\r\n Wall_A_Accent_Mask: 700,\r\n Global_Shadow_Overlay: 800,\r\n Window_Default: 900,\r\n Window_Covering: 1000,\r\n Ceiling_Lights: 1100,\r\n Wall_Lights: 1300,\r\n Towel_Rack: 1400,\r\n Shower: {\r\n Custom60in: {\r\n Body: 2000,\r\n Floor: 2004,\r\n ShowerDrain: 2005,\r\n FloorShadow: 2006,\r\n ExtrusionWallRight: 2010,\r\n ExtrusionWallRightShadow: 2011,\r\n Wall: 2020,\r\n Wall2: 2021,\r\n WallAccent: 2022,\r\n WallAccent2: 2023,\r\n WallShadow: 2024,\r\n LargeCornerCaddie: 2025,\r\n Fixture: 2031,\r\n ShowerHead: 2032,\r\n ShowerPanCombo: 2033,\r\n LargeCornerSeat: 2034,\r\n CornerCaddie: 2035,\r\n SoapDish: 2036,\r\n SmallCornerShelf: 2038,\r\n GrabBar: 2039,\r\n ExtrusionWallLeftHalfWall: 2041,\r\n ExtrusionWallLeftShadowHalfWall: 2042,\r\n Threshold: 2043,\r\n ThresholdShadow: 2044,\r\n ShowerDoor: 2045,\r\n ShowerDoorHandle: 2046,\r\n ExtrusionWallLeft: 2047,\r\n ExtrusionWallLeftShadow: 2048,\r\n Overlay: 2050,\r\n Glass: 2060,\r\n PonyWall: 2070,\r\n PonyWallShadow: 2071,\r\n PonyWallCap: 5025,\r\n PonyWallCapShadow: 5026,\r\n PonyWallGlass: 5027,\r\n },\r\n Steam60in: {\r\n ExtrusionWallLeft: 2500,\r\n Body: {\r\n 0: 2550, // default body (no parts)\r\n 1: 2520, // Part = 1\r\n 2: 2530, // Part = 2\r\n },\r\n Fixture: 2525,\r\n Overlay: 2600\r\n },\r\n TubCombo: {\r\n WallConfiguration: 2065,\r\n Liner: 2027,\r\n ReplacementTub: 2028,\r\n WalkInTub: 2029,\r\n JettedTub: 2030,\r\n },\r\n },\r\n BathTub: {\r\n FreeStanding: {\r\n FixtureFloorMount: 3000,\r\n Base: 3005,\r\n Fixture: 3010,\r\n },\r\n Custom60in: {\r\n FixtureFloorMount: 3500,\r\n Base: 3505,\r\n Spa: 3515,\r\n Top: 3525,\r\n Fixture: 3530\r\n }\r\n },\r\n Toilet: 4000,\r\n Vanity: {\r\n Custom: {\r\n Cabinet: 5000,\r\n Handle: 5010,\r\n VanityBacksplash: 5020,\r\n CounterTop: 5030,\r\n Mirror: 5040,\r\n Faucet: 5050,\r\n Sink: 5060,\r\n },\r\n Complete: {\r\n VanityBacksplash: 5500,\r\n Faucet: 5510,\r\n Cabinet: 5520,\r\n Mirror: 5530,\r\n }\r\n }\r\n },\r\n Small: {\r\n Background: 100,\r\n Floor: 450,\r\n Ceiling: 200,\r\n Wall_A: 300,\r\n Wall_B: 400,\r\n Wall_C: 500,\r\n Wall_A_Accent_Mask: 700,\r\n Global_Shadow_Overlay: 800,\r\n Window_Default: 900,\r\n Window_Covering: 1000,\r\n Ceiling_Lights: 1100,\r\n Wall_Lights: 1300,\r\n Towel_Rack: 1400,\r\n Shower: {\r\n Custom60in: {\r\n Body: 2000,\r\n Floor: 2004,\r\n ShowerDrain: 2005,\r\n FloorShadow: 2006,\r\n ExtrusionWallRight: 2010,\r\n ExtrusionWallRightShadow: 2011,\r\n Wall: 2020,\r\n Wall2: 2021,\r\n WallAccent: 2022,\r\n WallAccent2: 2023,\r\n WallShadow: 2024,\r\n LargeCornerCaddie: 2025,\r\n Fixture: 2031,\r\n ShowerHead: 2032,\r\n ShowerPanCombo: 2033,\r\n LargeCornerSeat: 2034,\r\n CornerCaddie: 2035,\r\n SoapDish: 2036,\r\n SmallCornerShelf: 2038,\r\n GrabBar: 2039,\r\n ExtrusionWallLeftHalfWall: 2041,\r\n ExtrusionWallLeftShadowHalfWall: 2042,\r\n Threshold: 2043,\r\n ThresholdShadow: 2044,\r\n ShowerDoor: 2045,\r\n ShowerDoorHandle: 2046,\r\n ExtrusionWallLeft: 2047,\r\n ExtrusionWallLeftShadow: 2048,\r\n Overlay: 2050,\r\n Glass: 2060,\r\n PonyWall: 2070,\r\n PonyWallShadow: 2071,\r\n PonyWallCap: 5025,\r\n PonyWallCapShadow: 5026,\r\n PonyWallGlass: 5027,\r\n },\r\n Steam60in: {\r\n ExtrusionWallLeft: 2500,\r\n Body: {\r\n 0: 2550, // default body (no parts)\r\n 1: 2520, // Part = 1\r\n 2: 2530, // Part = 2\r\n },\r\n Fixture: 2525,\r\n Overlay: 2600\r\n },\r\n TubCombo: {\r\n WallConfiguration: 2065,\r\n Liner: 2027,\r\n ReplacementTub: 2028,\r\n WalkInTub: 2029,\r\n JettedTub: 2030,\r\n },\r\n },\r\n BathTub: {\r\n FreeStanding: {\r\n FixtureFloorMount: 3000,\r\n Base: 3005,\r\n Fixture: 3010,\r\n },\r\n Custom60in: {\r\n FixtureFloorMount: 3500,\r\n Base: 3505,\r\n Spa: 3515,\r\n Top: 3525,\r\n Fixture: 3530\r\n }\r\n },\r\n Toilet: 4000,\r\n Vanity: {\r\n Custom: {\r\n Cabinet: 5000,\r\n Handle: 5010,\r\n VanityBacksplash: 5020,\r\n CounterTop: 5030,\r\n Mirror: 5040,\r\n Faucet: 5050,\r\n Sink: 5060,\r\n },\r\n Complete: {\r\n VanityBacksplash: 5500,\r\n Faucet: 5510,\r\n Cabinet: 5520,\r\n Mirror: 5530,\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport default {\r\n layouts,\r\n getMenuByHoveredLayer: (currentLayout, layer) => {\r\n\r\n // console.log('currentLayout', currentLayout);\r\n // console.log('layer', layer);\r\n\r\n switch (layer.zIndex) {\r\n\r\n // General\r\n case layouts[currentLayout].Floor:\r\n return {\r\n parent: \"Floor\",\r\n child: \"Floor\"\r\n };\r\n case layouts[currentLayout].Ceiling:\r\n return \"Ceiling\";\r\n case layouts[currentLayout].Toilet:\r\n return {\r\n parent: \"Toilet\",\r\n child: \"Toilet\"\r\n };\r\n case layouts[currentLayout].Window_Default:\r\n return \"Window\";\r\n\r\n // case layouts[currentLayout].Shower.Steam60in.ExtrusionWallLeft:\r\n // case layouts[currentLayout].Shower.Steam60in.Body[\"1\"]:\r\n // case layouts[currentLayout].Shower.Steam60in.Body[\"2\"]:\r\n // case layouts[currentLayout].Shower.Steam60in.Fixture:\r\n // return {\r\n // parent: \"Shower\",\r\n // child: \"Shower Body\"\r\n // };\r\n case layouts[currentLayout].Wall_A:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Wall A\"\r\n };\r\n case layouts[currentLayout].Wall_C:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Wall C\"\r\n };\r\n case layouts[currentLayout].Shower.Custom60in.ExtrusionWallRight:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Right Shower Wall\"\r\n };\r\n case layouts[currentLayout].Vanity.Custom.Mirror:\r\n return {\r\n parent: \"Vanity\",\r\n child: \"Mirror\"\r\n };\r\n case layouts[currentLayout].Shower.Custom60in.ExtrusionWallLeft:\r\n case layouts[currentLayout].Shower.Custom60in.ExtrusionWallLeftHalfWall:\r\n case layouts[currentLayout].Shower.Custom60in.PonyWall:\r\n return \"left_wall_custom\";\r\n case layouts[currentLayout].Vanity.Custom.VanityBacksplash:\r\n case layouts[currentLayout].Wall_A_Accent_Mask:\r\n case layouts[currentLayout].Wall_B:\r\n return \"wall_b_custom\";\r\n case layouts[currentLayout].Vanity.Complete.Cabinet:\r\n case layouts[currentLayout].Vanity.Custom.Handle:\r\n case layouts[currentLayout].Vanity.Custom.CounterTop:\r\n case layouts[currentLayout].Vanity.Custom.Faucet:\r\n case layouts[currentLayout].Vanity.Custom.Sink:\r\n case layouts[currentLayout].Vanity.Custom.Cabinet:\r\n return \"vanity_custom\";\r\n\r\n case layouts[currentLayout].Shower.Custom60in.Threshold:\r\n return {\r\n parent: \"Shower\",\r\n child: \"Threshold\"\r\n };\r\n case layouts[currentLayout].Shower.Custom60in.WallAccent:\r\n case layouts[currentLayout].Shower.Custom60in.WallAccent2:\r\n return {\r\n parent: \"Shower\",\r\n child: \"Shower Walls Accent\"\r\n };\r\n case layouts[currentLayout].Shower.Custom60in.CornerCaddie:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Corner Caddie\"\r\n };\r\n case layouts[currentLayout].Shower.Custom60in.LargeCornerCaddie:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Large Corner Caddie\"\r\n };\r\n case layouts[currentLayout].Shower.Custom60in.LargeCornerSeat:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Large Corner Seat\"\r\n };\r\n case layouts[currentLayout].Shower.Custom60in.SoapDish:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Soap Dish\"\r\n };\r\n case layouts[currentLayout].Shower.Custom60in.SmallCornerShelf:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Small Corner Shelf\"\r\n };\r\n case layouts[currentLayout].Shower.Custom60in.GrabBar:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Grab Bar\"\r\n };\r\n case layouts[currentLayout].Shower.Custom60in.Glass:\r\n case layouts[currentLayout].Shower.Custom60in.Floor:\r\n case layouts[currentLayout].Shower.Custom60in.ShowerPanCombo:\r\n case layouts[currentLayout].Shower.Custom60in.Wall:\r\n case layouts[currentLayout].Shower.Custom60in.Wall2:\r\n case layouts[currentLayout].Shower.Custom60in.Fixture:\r\n case layouts[currentLayout].Shower.Custom60in.ShowerHead:\r\n case layouts[currentLayout].Shower.Custom60in.Body:\r\n case layouts[currentLayout].Shower.Custom60in.Overlay:\r\n case layouts[currentLayout].Shower.Custom60in.ShowerDoor:\r\n case layouts[currentLayout].Shower.Custom60in.ShowerDoorHandle:\r\n case layouts[currentLayout].Shower.Steam60in.ExtrusionWallLeft:\r\n case layouts[currentLayout].Shower.Steam60in.Body[\"1\"]:\r\n case layouts[currentLayout].Shower.Steam60in.Body[\"2\"]:\r\n case layouts[currentLayout].Shower.Steam60in.Fixture:\r\n return \"shower_custom\";\r\n // BathTub\r\n case layouts[currentLayout].BathTub.Custom60in.Top:\r\n case layouts[currentLayout].BathTub.Custom60in.Spa:\r\n case layouts[currentLayout].BathTub.Custom60in.Base:\r\n case layouts[currentLayout].BathTub.FreeStanding.Base:\r\n case layouts[currentLayout].BathTub.FreeStanding.Fixture:\r\n case layouts[currentLayout].BathTub.FreeStanding.FixtureFloorMount:\r\n case layouts[currentLayout].BathTub.Custom60in.Fixture:\r\n case layouts[currentLayout].BathTub.Custom60in.FixtureFloorMount:\r\n return \"bathtub_custom\";\r\n // BathTub\r\n case layouts[currentLayout].Shower.TubCombo.Liner:\r\n case layouts[currentLayout].Shower.TubCombo.ReplacementTub:\r\n case layouts[currentLayout].Shower.TubCombo.WalkInTub:\r\n case layouts[currentLayout].Shower.TubCombo.JettedTub:\r\n case layouts[currentLayout].Shower.TubCombo.WallConfiguration:\r\n return \"shower_combo\";\r\n // BathTub\r\n case layouts[currentLayout].Shower.Custom60in.PonyWallCap:\r\n case layouts[currentLayout].Shower.Custom60in.PonyWallGlass:\r\n return \"shower_pony_wall\";\r\n default:\r\n return \"\"\r\n }\r\n },\r\n getLayerDimensions: (zIndex, currentLayout) => {\r\n switch (zIndex) {\r\n // General\r\n case layouts[currentLayout].Floor:\r\n return {\r\n polygonArray: [[80,770],[1620,770],[1620,1080],[80,1080]],\r\n width: 1540,\r\n height: 310\r\n };\r\n case layouts[currentLayout].Ceiling:\r\n return {\r\n polygonArray: [[0,0],[1620,0],[1620,320],[0,320]],\r\n width: 1620,\r\n height: 320\r\n };\r\n case layouts[currentLayout].Toilet:\r\n return {\r\n polygonArray: [[500,640],[820,640],[820,960],[500,960]],\r\n width: 320,\r\n height: 320\r\n };\r\n case layouts[currentLayout].Window_Default:\r\n case layouts[currentLayout].Window_Covering:\r\n return {\r\n polygonArray: [[1200,240],[1400,240],[1400,780],[1200,780]],\r\n width: 200,\r\n height: 540\r\n };\r\n case layouts[currentLayout].Shower.Steam60in.ExtrusionWallLeft:\r\n case layouts[currentLayout].Shower.Steam60in.Body[\"1\"]:\r\n case layouts[currentLayout].Shower.Steam60in.Body[\"2\"]:\r\n case layouts[currentLayout].Shower.Steam60in.Fixture:\r\n case layouts[currentLayout].Shower.Custom60in.ExtrusionWallRight:\r\n case layouts[currentLayout].Shower.Custom60in.ExtrusionWallLeft:\r\n case layouts[currentLayout].Shower.Custom60in.ExtrusionWallLeftHalfWall:\r\n case layouts[currentLayout].Shower.Custom60in.PonyWall:\r\n case layouts[currentLayout].Shower.Custom60in.Threshold:\r\n case layouts[currentLayout].Shower.Custom60in.Glass:\r\n case layouts[currentLayout].Shower.Custom60in.Floor:\r\n case layouts[currentLayout].Shower.Custom60in.ShowerPanCombo:\r\n case layouts[currentLayout].Shower.Custom60in.Wall:\r\n case layouts[currentLayout].Shower.Custom60in.Wall2:\r\n case layouts[currentLayout].Shower.Custom60in.WallAccent:\r\n case layouts[currentLayout].Shower.Custom60in.WallAccent2:\r\n case layouts[currentLayout].Shower.Custom60in.Fixture:\r\n case layouts[currentLayout].Shower.Custom60in.ShowerHead:\r\n case layouts[currentLayout].Shower.Custom60in.Body:\r\n case layouts[currentLayout].Shower.Custom60in.Overlay:\r\n case layouts[currentLayout].Shower.Custom60in.ShowerDoor:\r\n case layouts[currentLayout].Shower.Custom60in.ShowerDoorHandle:\r\n case layouts[currentLayout].Shower.Custom60in.PonyWallCap:\r\n case layouts[currentLayout].Shower.Custom60in.PonyWallGlass:\r\n case layouts[currentLayout].Shower.Custom60in.SoapDish:\r\n case layouts[currentLayout].Shower.Custom60in.LargeCornerSeat:\r\n case layouts[currentLayout].Shower.Custom60in.LargeCornerCaddie:\r\n case layouts[currentLayout].Shower.Custom60in.CornerCaddie:\r\n case layouts[currentLayout].Shower.Custom60in.SmallCornerShelf:\r\n case layouts[currentLayout].Shower.Custom60in.GrabBar:\r\n case layouts[currentLayout].Shower.TubCombo.Liner:\r\n case layouts[currentLayout].Shower.TubCombo.ReplacementTub:\r\n case layouts[currentLayout].Shower.TubCombo.WalkInTub:\r\n case layouts[currentLayout].Shower.TubCombo.JettedTub:\r\n case layouts[currentLayout].Shower.TubCombo.WallConfiguration:\r\n return {\r\n polygonArray: [[570,0],[1500,0],[1540,1080],[570,1080]],\r\n width: 970,\r\n height: 1080\r\n };\r\n case layouts[currentLayout].Wall_A:\r\n return {\r\n polygonArray: [[0,0],[130,0],[130,1080],[0,1080]],\r\n width: 130,\r\n height: 1080\r\n };\r\n case layouts[currentLayout].Wall_A_Accent_Mask:\r\n return {\r\n polygonArray: [[90,120],[700,120],[700,690],[90,690]],\r\n width: 610,\r\n height: 570\r\n };\r\n case layouts[currentLayout].Wall_C:\r\n return {\r\n polygonArray: [[900,0],[1620,0],[1620,1080],[900,1080]],\r\n width: 720,\r\n height: 1080\r\n };\r\n case layouts[currentLayout].Wall_B:\r\n return {\r\n polygonArray: [[80,140],[1080,140],[1080,990],[80,990]],\r\n width: 1000,\r\n height: 850\r\n };\r\n case layouts[currentLayout].Vanity.Custom.Mirror:\r\n return {\r\n polygonArray: [[80,170],[700,170],[700,630],[80,630]],\r\n width: 620,\r\n height: 460\r\n };\r\n case layouts[currentLayout].Vanity.Custom.VanityBacksplash:\r\n return {\r\n polygonArray: [[80,580],[700,580],[700,680],[80,680]],\r\n width: 620,\r\n height: 100\r\n };\r\n case layouts[currentLayout].Vanity.Custom.CounterTop:\r\n return {\r\n polygonArray: [[80,610],[770,610],[770,710],[80,710]],\r\n width: 690,\r\n height: 100\r\n };\r\n case layouts[currentLayout].Vanity.Custom.Faucet:\r\n case layouts[currentLayout].Vanity.Custom.Sink:\r\n return {\r\n polygonArray: [[80,500],[700,500],[700,710],[80,710]],\r\n width: 620,\r\n height: 210\r\n };\r\n case layouts[currentLayout].Vanity.Complete.Cabinet:\r\n case layouts[currentLayout].Vanity.Custom.Handle:\r\n case layouts[currentLayout].Vanity.Custom.Cabinet:\r\n return {\r\n polygonArray: [[80,500],[780,500],[780,1070],[80,1070]],\r\n width: 700,\r\n height: 570\r\n };\r\n // BathTub\r\n case layouts[currentLayout].BathTub.Custom60in.Top:\r\n case layouts[currentLayout].BathTub.Custom60in.Spa:\r\n case layouts[currentLayout].BathTub.Custom60in.Base:\r\n case layouts[currentLayout].BathTub.FreeStanding.Base:\r\n case layouts[currentLayout].BathTub.FreeStanding.Fixture:\r\n case layouts[currentLayout].BathTub.FreeStanding.FixtureFloorMount:\r\n case layouts[currentLayout].BathTub.Custom60in.Fixture:\r\n case layouts[currentLayout].BathTub.Custom60in.FixtureFloorMount:\r\n return {\r\n polygonArray: [[750,580],[1620,580],[1620,1080],[750,1080]],\r\n width: 870,\r\n height: 500\r\n };\r\n default:\r\n return null\r\n }\r\n }\r\n}\r\n\r\n\r\n","import {LayoutAbbreviation, LayoutType} from \"./constants\";\r\nimport {UseFullSizeImages} from \"../../../config\";\r\n\r\nlet layouts = {};\r\nObject.keys(LayoutType).forEach(layoutName => {\r\n layouts[layoutName] = {\r\n Background: {\r\n BackgroundBG: 100,\r\n Floor: 200,\r\n LeftWall: 300,\r\n ShowerWall: 400,\r\n RightWall: 550,\r\n CenterWall: 600,\r\n },\r\n ShowerWallAccent: 1000,\r\n Accessories: {\r\n WindowBody: 1000,\r\n WindowKits: 1100,\r\n LargeCornerCaddie: 2010,\r\n LargeCornerCaddie2: 2020,\r\n Fixture: 2100,\r\n LargeCornerSeat: 3330,\r\n LargeCornerSeat2: 3340,\r\n CornerCaddie: 2410,\r\n CornerCaddie2: 2420,\r\n SoapDish: 2500,\r\n SoapDish2: 2510,\r\n SoapDish3: 2520,\r\n SmallCornerShelf: 2600,\r\n GrabBar: 3500, // more that the fixture\r\n GrabBar2: 3510,\r\n GrabBar3: 3520,\r\n CornerShelf1: 2810,\r\n CornerShelf2: 2820,\r\n CornerShelf3: 2830,\r\n CornerShelf4: 2840,\r\n CornerShelf5: 2850,\r\n CornerShelf6: 2860,\r\n ShowerPod: 2900,\r\n LargeShelf: 2905,\r\n ShampooShelf: 2902,\r\n Seats: 3320,\r\n ShowerRod: 4200,\r\n TowelBar: 4250,\r\n },\r\n Shower: {\r\n ShowerPan: 3200,\r\n ShowerPanCombo: 3300,\r\n ShowerHead: 3350,\r\n ShowerFixture: 3410,\r\n ShowerFixture2: 3420,\r\n ShowerDoorHandle: 3600,\r\n // Threshold\r\n TubCombo: {\r\n WallConfiguration: 3600,\r\n Liner: 3700,\r\n ReplacementTub: 3800,\r\n WalkInTub: 3900,\r\n JettedTub: 4000,\r\n },\r\n ShowerDoor: 4100,\r\n ShowerDoor2: 4110,\r\n },\r\n Walls: {\r\n LeftWall: 4800,\r\n CeilingPanels: 4050, // less than shower doors\r\n RightWall: 4900,\r\n },\r\n Toilet: 5000,\r\n PaperHolder: 5050,\r\n Vanity: {\r\n Cabinet: 6000,\r\n Handle: 6100,\r\n CounterTop: 6200,\r\n VanityBacksplash: 6300,\r\n Mirror: 6400,\r\n Faucet: 6500,\r\n Sink: 6600,\r\n },\r\n Globals: {\r\n ToiletPaper: 8000,\r\n ToiletPaperHolder: 8050,\r\n Towel: 8100,\r\n LightFixture: 8200,\r\n LampFixture: 8250,\r\n DecorWindow: 8300,\r\n DecorSeat: 8400,\r\n },\r\n Bathtub: {\r\n BathTubFixture: 9000,\r\n BathTubBody: 9100,\r\n }\r\n };\r\n});\r\n\r\nlayouts[\"Layout4\"].Vanity = {\r\n Cabinet: 10000,\r\n Handle: 10100,\r\n CounterTop: 10200,\r\n VanityBacksplash: 10300,\r\n Mirror: 10400,\r\n Faucet: 10500,\r\n Sink: 10600,\r\n};\r\nlayouts[\"Layout4\"].Globals.DecorWindow = 1200;\r\nlayouts[\"Layout4\"].Toilet = 15000;\r\nlayouts[\"Layout4\"].Globals.DecorSeat = 18000;\r\nlayouts[\"Layout4\"].Globals.LightFixture = 19000;\r\nlayouts[\"Layout4\"].Globals.LampFixture = 19100;\r\nlayouts[\"Layout4\"].Globals.ToiletPaperHolder = 20000;\r\nlayouts[\"Layout4\"].PaperHolder = 20000;\r\n\r\n\r\nconst getLayerDimensions = (zIndex, currentLayout) => {\r\n const fullImagesFactor = UseFullSizeImages ? 177.77 : 100;\r\n const sizeFactor = fullImagesFactor / 100;\r\n switch (zIndex) {\r\n // case layouts[currentLayout].Background.ShowerWall:\r\n // return {\r\n // polygonArray: [[sizeFactor*350,sizeFactor*50],[sizeFactor*950,sizeFactor*50],[sizeFactor*950,sizeFactor*930],[sizeFactor*350,sizeFactor*930]],\r\n // width: sizeFactor*600,\r\n // height: sizeFactor*900\r\n // };\r\n case layouts[currentLayout].Shower.ShowerFixture:\r\n case layouts[currentLayout].Shower.ShowerFixture2:\r\n case layouts[currentLayout].Shower.ShowerDoorHandle:\r\n case layouts[currentLayout].Shower.ShowerHead:\r\n case layouts[currentLayout].ShowerWallAccent:\r\n case layouts[currentLayout].Accessories.Fixture:\r\n case layouts[currentLayout].Accessories.LargeCornerSeat:\r\n case layouts[currentLayout].Accessories.LargeCornerSeat2:\r\n case layouts[currentLayout].Accessories.CornerCaddie:\r\n case layouts[currentLayout].Accessories.CornerCaddie2:\r\n case layouts[currentLayout].Accessories.SoapDish:\r\n case layouts[currentLayout].Accessories.SoapDish2:\r\n case layouts[currentLayout].Accessories.SoapDish3:\r\n case layouts[currentLayout].Accessories.SmallCornerShelf:\r\n case layouts[currentLayout].Accessories.GrabBar:\r\n case layouts[currentLayout].Accessories.GrabBar2:\r\n case layouts[currentLayout].Accessories.GrabBar3:\r\n case layouts[currentLayout].Accessories.CornerShelf1:\r\n case layouts[currentLayout].Accessories.CornerShelf2:\r\n case layouts[currentLayout].Accessories.CornerShelf3:\r\n case layouts[currentLayout].Accessories.CornerShelf4:\r\n case layouts[currentLayout].Accessories.CornerShelf5:\r\n case layouts[currentLayout].Accessories.CornerShelf6:\r\n case layouts[currentLayout].Accessories.ShowerPod:\r\n case layouts[currentLayout].Accessories.LargeShelf:\r\n case layouts[currentLayout].Accessories.Seats:\r\n case layouts[currentLayout].Accessories.ShowerRod:\r\n case layouts[currentLayout].Accessories.WindowBody:\r\n case layouts[currentLayout].Accessories.WindowKits: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*350,sizeFactor*130],[sizeFactor*950,sizeFactor*130],[sizeFactor*950,sizeFactor*930],[sizeFactor*350,sizeFactor*930]],\r\n width: sizeFactor*600,\r\n height: sizeFactor*800\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*560,0],[sizeFactor*1240,0],[sizeFactor*1240,sizeFactor*930],[sizeFactor*560,sizeFactor*930]],\r\n width: sizeFactor*580,\r\n height: sizeFactor*930\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Shower.ShowerDoor:\r\n case layouts[currentLayout].Shower.ShowerDoor2: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*350,0],[sizeFactor*950,0],[sizeFactor*950,sizeFactor*930],[sizeFactor*350,sizeFactor*930]],\r\n width: sizeFactor*600,\r\n height: sizeFactor*800\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*560,0],[sizeFactor*1240,0],[sizeFactor*1240,sizeFactor*930],[sizeFactor*560,sizeFactor*930]],\r\n width: sizeFactor*580,\r\n height: sizeFactor*930\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Accessories.LargeCornerCaddie:\r\n case layouts[currentLayout].Accessories.LargeCornerCaddie2: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*350,sizeFactor*30],[sizeFactor*950,sizeFactor*30],[sizeFactor*950,sizeFactor*930],[sizeFactor*350,sizeFactor*930]],\r\n width: sizeFactor*600,\r\n height: sizeFactor*900\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*560,0],[sizeFactor*1240,0],[sizeFactor*1240,sizeFactor*930],[sizeFactor*560,sizeFactor*930]],\r\n width: sizeFactor*580,\r\n height: sizeFactor*930\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Shower.Shower:\r\n case layouts[currentLayout].Shower.ShowerPanCombo: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*350,sizeFactor*730],[sizeFactor*950,sizeFactor*730],[sizeFactor*950,sizeFactor*930],[sizeFactor*350,sizeFactor*930]],\r\n width: sizeFactor*600,\r\n height: sizeFactor*200\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*560,sizeFactor*730],[sizeFactor*1260,sizeFactor*730],[sizeFactor*1260,sizeFactor*930],[sizeFactor*560,sizeFactor*930]],\r\n width: sizeFactor*700,\r\n height: sizeFactor*200\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Shower.TubCombo.WallConfiguration:\r\n case layouts[currentLayout].Shower.TubCombo.Liner:\r\n case layouts[currentLayout].Shower.TubCombo.JettedTub:\r\n case layouts[currentLayout].Shower.TubCombo.ReplacementTub:\r\n case layouts[currentLayout].Shower.TubCombo.WalkInTub:\r\n return {\r\n polygonArray: [[sizeFactor*300,sizeFactor*280],[sizeFactor*1000,sizeFactor*280],[sizeFactor*1000,sizeFactor*1080],[sizeFactor*300,sizeFactor*1080]],\r\n width: sizeFactor*700,\r\n height: sizeFactor*800\r\n };\r\n case layouts[currentLayout].Toilet:\r\n case layouts[currentLayout].PaperHolder: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*700,sizeFactor*500],[sizeFactor*1250,sizeFactor*500],[sizeFactor*1250,sizeFactor*1080],[sizeFactor*700,sizeFactor*1080]],\r\n width: sizeFactor*550,\r\n height: sizeFactor*580\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*100,sizeFactor*500],[sizeFactor*600,sizeFactor*500],[sizeFactor*600,sizeFactor*1080],[sizeFactor*100,sizeFactor*1080]],\r\n width: sizeFactor*500,\r\n height: sizeFactor*580\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Vanity.Cabinet:\r\n return {\r\n polygonArray: [[sizeFactor*920,sizeFactor*530],[sizeFactor*1920,sizeFactor*530],[sizeFactor*1920,sizeFactor*1080],[sizeFactor*920,sizeFactor*1080]],\r\n width: sizeFactor*1000,\r\n height: sizeFactor*550\r\n };\r\n case layouts[currentLayout].Vanity.CounterTop:\r\n return {\r\n polygonArray: [[sizeFactor*900,sizeFactor*500],[sizeFactor*1920,sizeFactor*500],[sizeFactor*1920,sizeFactor*1080],[sizeFactor*900,sizeFactor*1080]],\r\n width: sizeFactor*1020,\r\n height: sizeFactor*580\r\n };\r\n case layouts[currentLayout].Vanity.Faucet:\r\n case layouts[currentLayout].Vanity.Sink:\r\n case layouts[currentLayout].Vanity.VanityBacksplash: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*900,sizeFactor*400],[sizeFactor*1900,sizeFactor*400],[sizeFactor*1900,sizeFactor*830],[sizeFactor*800,sizeFactor*830]],\r\n width: sizeFactor*1000,\r\n height: sizeFactor*430\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*300,sizeFactor*400],[sizeFactor*730,sizeFactor*400],[sizeFactor*730,sizeFactor*930],[sizeFactor*300,sizeFactor*930]],\r\n width: sizeFactor*430,\r\n height: sizeFactor*530\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Vanity.Mirror:\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*1100,0],[sizeFactor*1900,0],[sizeFactor*1900,sizeFactor*640],[sizeFactor*1100,sizeFactor*640]],\r\n width: sizeFactor*800,\r\n height: sizeFactor*640\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*130,100],[sizeFactor*600,100],[sizeFactor*600,sizeFactor*540],[sizeFactor*130,sizeFactor*540]],\r\n width: sizeFactor*470,\r\n height: sizeFactor*440\r\n };\r\n }\r\n }\r\n return null;\r\n case layouts[currentLayout].Walls.CenterWall:\r\n case layouts[currentLayout].Background.CenterWall: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return null;\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*360,0],[sizeFactor*760,0],[sizeFactor*760,sizeFactor*880],[sizeFactor*360,sizeFactor*880]],\r\n width: sizeFactor*400,\r\n height: sizeFactor*880\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Walls.RightWall:\r\n case layouts[currentLayout].Background.RightWall: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*750,0],[sizeFactor*1920,0],[sizeFactor*1920,sizeFactor*1080],[sizeFactor*750,sizeFactor*1080]],\r\n width: sizeFactor*1170,\r\n height: sizeFactor*1080\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*120,0],[sizeFactor*1920,0],[sizeFactor*1920,sizeFactor*930],[sizeFactor*120,sizeFactor*930]],\r\n width: sizeFactor*1900,\r\n height: sizeFactor*930\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Walls.LeftWall:\r\n case layouts[currentLayout].Background.LeftWall: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[0,0],[sizeFactor*600,0],[sizeFactor*600,sizeFactor*1080],[0,sizeFactor*1080]],\r\n width: sizeFactor*600,\r\n height: sizeFactor*1080\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[0,0],[sizeFactor*600,0],[sizeFactor*600,sizeFactor*1080],[0,sizeFactor*1080]],\r\n width: sizeFactor*600,\r\n height: sizeFactor*1080\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Walls.CeilingPanels:\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*300,0],[sizeFactor*950,0],[sizeFactor*950,sizeFactor*100],[sizeFactor*300,sizeFactor*100]],\r\n width: sizeFactor*650,\r\n height: sizeFactor*100\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*560,0],[sizeFactor*1240,0],[sizeFactor*1240,sizeFactor*930],[sizeFactor*560,sizeFactor*930]],\r\n width: sizeFactor*580,\r\n height: sizeFactor*930\r\n };\r\n }\r\n }\r\n return null;\r\n case layouts[currentLayout].Background.Floor: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*100,sizeFactor*800],[sizeFactor*1300,sizeFactor*800],[sizeFactor*1300,sizeFactor*1080],[sizeFactor*100,sizeFactor*1080]],\r\n width: sizeFactor*1200,\r\n height: sizeFactor*280\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[0,sizeFactor*740],[sizeFactor*1920,740],[sizeFactor*1920,sizeFactor*1080],[0,sizeFactor*1080]],\r\n width: sizeFactor*1920,\r\n height: sizeFactor*340\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Background.ShowerWall:\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*350,0],[sizeFactor*1650,0],[sizeFactor*1650,sizeFactor*930],[sizeFactor*350,sizeFactor*930]],\r\n width: sizeFactor*1300,\r\n height: sizeFactor*930\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*250,0],[sizeFactor*1250,0],[sizeFactor*1250,sizeFactor*930],[sizeFactor*250,sizeFactor*930]],\r\n width: sizeFactor*1000,\r\n height: sizeFactor*930\r\n };\r\n }\r\n }\r\n return null;\r\n case layouts[currentLayout].Bathtub.BathTubBody:\r\n return {\r\n polygonArray: [[sizeFactor*800,sizeFactor*580],[sizeFactor*1920,sizeFactor*580],[sizeFactor*1920,sizeFactor*1080],[sizeFactor*800,sizeFactor*1080]],\r\n width: sizeFactor*1120,\r\n height: sizeFactor*500\r\n };\r\n case layouts[currentLayout].Bathtub.BathTubFixture:\r\n return {\r\n polygonArray: [[sizeFactor*1380,sizeFactor*370],[sizeFactor*1660,sizeFactor*370],[sizeFactor*1660,sizeFactor*1000],[sizeFactor*1380,sizeFactor*1000]],\r\n width: sizeFactor*280,\r\n height: sizeFactor*730\r\n };\r\n default:\r\n return null\r\n }\r\n};\r\n\r\nexport default {\r\n layouts,\r\n getMenuByHoveredLayer: (currentLayout, layer) => {\r\n // console.log('currentLayout', currentLayout);\r\n // console.log('layer', layer);\r\n switch (layer.zIndex) {\r\n // General\r\n case layouts[currentLayout].Ceiling:\r\n return \"Ceiling\";\r\n case layouts[currentLayout].Toilet:\r\n return {\r\n parent: \"Toilet\",\r\n child: \"Toilet\"\r\n };\r\n case layouts[currentLayout].PaperHolder:\r\n return {\r\n parent: \"Toilet\",\r\n child: \"Paper Holder\"\r\n };\r\n // case layouts[currentLayout].Shower.ExtrusionWallLeft:\r\n // case layouts[currentLayout].Shower.Body[\"1\"]:\r\n // case layouts[currentLayout].Shower.Body[\"2\"]:\r\n // case layouts[currentLayout].Shower.Fixture:\r\n // return {\r\n // parent: \"Shower\",\r\n // child: \"Shower Body\"\r\n // };\r\n case layouts[currentLayout].Wall_A:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Wall A\"\r\n };\r\n case layouts[currentLayout].Wall_C:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Wall C\"\r\n };\r\n case layouts[currentLayout].Vanity.Mirror:\r\n return {\r\n parent: \"Vanity\",\r\n child: \"Mirror\"\r\n };\r\n // case layouts[currentLayout].Shower.ExtrusionWallLeft:\r\n // case layouts[currentLayout].Shower.ExtrusionWallLeftHalfWall:\r\n // case layouts[currentLayout].Shower.PonyWall:\r\n // return \"left_wall_custom\";\r\n case layouts[currentLayout].Vanity.VanityBacksplash:\r\n case layouts[currentLayout].Wall_B:\r\n return \"wall_b_custom\";\r\n case layouts[currentLayout].Vanity.Handle:\r\n case layouts[currentLayout].Vanity.CounterTop:\r\n case layouts[currentLayout].Vanity.Faucet:\r\n case layouts[currentLayout].Vanity.Sink:\r\n case layouts[currentLayout].Vanity.Cabinet:\r\n return \"vanity_custom\";\r\n\r\n case layouts[currentLayout].Shower.Threshold:\r\n return {\r\n parent: \"Shower\",\r\n child: \"Threshold\"\r\n };\r\n case layouts[currentLayout].Accessories.CornerCaddie:\r\n case layouts[currentLayout].Accessories.CornerCaddie2:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Corner Caddie\"\r\n };\r\n case layouts[currentLayout].Accessories.LargeCornerCaddie:\r\n case layouts[currentLayout].Accessories.LargeCornerCaddie2:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Large Corner Caddie\"\r\n };\r\n case layouts[currentLayout].Accessories.LargeCornerSeat:\r\n case layouts[currentLayout].Accessories.LargeCornerSeat2:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Large Corner Seat\"\r\n };\r\n case layouts[currentLayout].Accessories.SoapDish:\r\n case layouts[currentLayout].Accessories.SoapDish2:\r\n case layouts[currentLayout].Accessories.SoapDish3:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Soap Dish\"\r\n };\r\n case layouts[currentLayout].Accessories.SmallCornerShelf:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Small Corner Shelf\"\r\n };\r\n case layouts[currentLayout].Accessories.GrabBar:\r\n case layouts[currentLayout].Accessories.GrabBar2:\r\n case layouts[currentLayout].Accessories.GrabBar3:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Grab Bar\"\r\n };\r\n case layouts[currentLayout].Accessories.CornerShelf1:\r\n case layouts[currentLayout].Accessories.CornerShelf2:\r\n case layouts[currentLayout].Accessories.CornerShelf3:\r\n case layouts[currentLayout].Accessories.CornerShelf4:\r\n case layouts[currentLayout].Accessories.CornerShelf5:\r\n case layouts[currentLayout].Accessories.CornerShelf6:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Corner Shelf\"\r\n };\r\n case layouts[currentLayout].Accessories.ShowerPod:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Shower Pod\"\r\n };\r\n case layouts[currentLayout].Accessories.LargeShelf:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Large Shelf\"\r\n };\r\n case layouts[currentLayout].Accessories.ShampooShelf:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Shampoo Shelf\"\r\n };\r\n case layouts[currentLayout].Accessories.Seats:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Seats\"\r\n };\r\n case layouts[currentLayout].Accessories.ShowerRod:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Shower Rod\"\r\n };\r\n case layouts[currentLayout].Accessories.TowelBar:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Towel Bar\"\r\n };\r\n case layouts[currentLayout].Accessories.WindowBody:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Window\"\r\n };\r\n case layouts[currentLayout].Accessories.WindowKits:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Window Kits\"\r\n };\r\n case layouts[currentLayout].Walls.RightWall:\r\n case layouts[currentLayout].Background.RightWall:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Right Wall\"\r\n };\r\n case layouts[currentLayout].Background.LeftWall:\r\n case layouts[currentLayout].Walls.LeftWall:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Left Wall\"\r\n };\r\n case layouts[currentLayout].Background.CenterWall:\r\n case layouts[currentLayout].Walls.CenterWall:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Center Wall\"\r\n };\r\n case layouts[currentLayout].Walls.CeilingPanels:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Ceiling Panels\"\r\n };\r\n case layouts[currentLayout].Shower.ShowerHead:\r\n return {\r\n parent: \"Shower\",\r\n child: \"Shower Head\"\r\n };\r\n case layouts[currentLayout].Background.Floor:\r\n return {\r\n parent: \"Floor\",\r\n child: \"Floor\"\r\n };\r\n case layouts[currentLayout].Shower.Glass:\r\n case layouts[currentLayout].Shower.Floor:\r\n case layouts[currentLayout].Shower.ShowerPanCombo:\r\n case layouts[currentLayout].Background.ShowerWall:\r\n case layouts[currentLayout].Shower.Body:\r\n case layouts[currentLayout].Shower.Overlay:\r\n case layouts[currentLayout].Shower.ShowerDoor:\r\n case layouts[currentLayout].Shower.ShowerDoor2:\r\n case layouts[currentLayout].Shower.ShowerDoorHandle:\r\n case layouts[currentLayout].Shower.ExtrusionWallLeft:\r\n case layouts[currentLayout].Shower.Fixture:\r\n case layouts[currentLayout].Shower.ShowerFixture:\r\n case layouts[currentLayout].Shower.ShowerFixture2:\r\n case layouts[currentLayout].ShowerWallAccent:\r\n return \"shower_custom\";\r\n case layouts[currentLayout].Shower.TubCombo.Liner:\r\n case layouts[currentLayout].Shower.TubCombo.ReplacementTub:\r\n case layouts[currentLayout].Shower.TubCombo.WalkInTub:\r\n case layouts[currentLayout].Shower.TubCombo.JettedTub:\r\n case layouts[currentLayout].Shower.TubCombo.WallConfiguration:\r\n return \"shower_combo\";\r\n // BathTub\r\n case layouts[currentLayout].Shower.PonyWallCap:\r\n case layouts[currentLayout].Shower.PonyWallGlass:\r\n return \"shower_pony_wall\";\r\n case layouts[currentLayout].Bathtub.BathTubBody:\r\n case layouts[currentLayout].Bathtub.BathTubFixture:\r\n return \"bathtub_custom\";\r\n default:\r\n return \"\"\r\n }\r\n },\r\n getLayerDimensions\r\n}\r\n\r\n\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport { showerAccessoriesThumbnail } from '../../../bvComponent/core/assets';\r\nimport LargeCornerSeat from \"../subparts/showerAccessories/largeCornerSeat\";\r\nimport SoapDish from \"../subparts/showerAccessories/soapDish\";\r\nimport CornerCaddie from \"../subparts/showerAccessories/cornerCaddie\";\r\nimport LargeCornerCaddie from \"../subparts/showerAccessories/largeCornerCaddie\";\r\nimport GrabBar from \"../subparts/showerAccessories/grabBar\";\r\nimport CornerShelf from \"../subparts/showerAccessories/cornerShelf\";\r\nimport ShowerPod from \"../subparts/showerAccessories/showerPod\";\r\nimport Seats from \"../subparts/showerAccessories/seats\";\r\nimport ShowerRod from \"../subparts/showerAccessories/showerRod\";\r\nimport WindowBody from \"../subparts/showerAccessories/windowBody\";\r\nimport WindowKits from \"../subparts/showerAccessories/windowKits\";\r\nimport LargeShelf from \"../subparts/showerAccessories/largeShelf\";\r\nimport TowelBar from \"../subparts/showerAccessories/towelBar\";\r\nimport ShampooShelf from \"../subparts/showerAccessories/shampooShelf\";\r\n\r\nexport class ShowerAccessories extends Part {\r\n static id = 'Shower Accessories';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partThumbnail = showerAccessoriesThumbnail;\r\n this.partName = 'Shower Accessories';\r\n this.translateId = \"visualizer.bathroom.accessories\";\r\n this.relatedItems = [];\r\n\r\n // related items\r\n this.soapDish = null;\r\n this.largeCornerSeat = null;\r\n this.largeCornerCaddie = null;\r\n this.cornerCaddie = null;\r\n this.smallCornerShelf = null;\r\n this.grabBar = null;\r\n this.showerPod = null;\r\n this.seats = null;\r\n this.windowBody = null;\r\n this.windowKits = null;\r\n this.largeShelf = null;\r\n this.shampooShelf = null;\r\n this.towelBar = null;\r\n\r\n //current active caddie type\r\n this.caddie_type = \"corner_shelf\";\r\n\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Soap Dish\":\r\n relatedItemName = \"soapDish\";\r\n RelatedItemClass = SoapDish;\r\n break;\r\n case \"Large Corner Seat\":\r\n relatedItemName = \"largeCornerSeat\";\r\n RelatedItemClass = LargeCornerSeat;\r\n break;\r\n case \"Large Corner Caddie\":\r\n relatedItemName = \"largeCornerCaddie\";\r\n RelatedItemClass = LargeCornerCaddie;\r\n break;\r\n case \"Corner Caddie\":\r\n relatedItemName = \"cornerCaddie\";\r\n RelatedItemClass = CornerCaddie;\r\n break;\r\n case \"Grab Bar\":\r\n relatedItemName = \"grabBar\";\r\n RelatedItemClass = GrabBar;\r\n break;\r\n case \"Shower Rod\":\r\n relatedItemName = \"showerRod\";\r\n RelatedItemClass = ShowerRod;\r\n break;\r\n case \"Corner Shelf\":\r\n case \"Small Corner Shelf\":\r\n relatedItemName = \"cornerShelf\";\r\n RelatedItemClass = CornerShelf;\r\n break;\r\n case \"Shower Pod\":\r\n case \"Storage Pod\":\r\n case \"Storage Pods\":\r\n relatedItemName = \"showerPod\";\r\n RelatedItemClass = ShowerPod;\r\n break;\r\n case \"Large Shelf\":\r\n relatedItemName = \"largeShelf\";\r\n RelatedItemClass = LargeShelf;\r\n break;\r\n case \"Shampoo Shelf\":\r\n relatedItemName = \"shampooShelf\";\r\n RelatedItemClass = ShampooShelf;\r\n break;\r\n case \"Seats\":\r\n case \"flip-Up Seat\":\r\n case \"Flip-Up Seat\":\r\n relatedItemName = \"seats\";\r\n RelatedItemClass = Seats;\r\n break;\r\n case \"Window Kit\":\r\n case \"Window Kits\": {\r\n relatedItemName = \"windowKits\";\r\n RelatedItemClass = WindowKits;\r\n break;\r\n }\r\n case \"Window\": {\r\n relatedItemName = \"decorWindow\";\r\n RelatedItemClass = WindowBody;\r\n break;\r\n }\r\n case \"Towel Bar\": {\r\n relatedItemName = \"towelBar\";\r\n RelatedItemClass = TowelBar;\r\n break;\r\n }\r\n\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n}\r\n\r\n","export const LayoutType = {\r\n Layout1: 1,\r\n // Layout2: 2,\r\n Layout31: 31,\r\n};\r\n\r\nexport const LayoutAbbreviation = {\r\n All: \"ALL\",\r\n Layout1: \"Layout1\",\r\n // Layout2: \"Layout2\",\r\n Layout31: \"Layout31\",\r\n};\r\n\r\nexport const LayoutAbbreviations = [\r\n \"Layout1\",\r\n // \"Layout2\",\r\n \"Layout31\",\r\n];\r\nexport const LayoutAbbreviationsToRemove = [\r\n \"Layout31\",\r\n // \"Layout2\",\r\n \"Layout1\",\r\n];\r\n\r\nexport const METADATA = {\r\n ALL: \"ALL\"\r\n};\r\n\r\nexport const DECORS_MAX = 10;\r\n","import React, {useEffect, useState} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport ChevronLeftIcon from \"@mui/icons-material/ChevronLeft\";\r\nimport ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\r\n\r\nimport MaterialSpinner from \"../../../../ui/materialSpinner\";\r\nimport {THUMBNAIL_SIZES} from \"../../../../../misc/utils\";\r\nimport {featureThumbnailUrl} from \"../../../../../misc/helpers\";\r\nimport {baseNewImagesPath} from \"../../../../assets\";\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS, PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport {LOOK_OVERLAYS} from \"../../../core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport {setLookOverlayOpened} from \"../../../../../actions/lookFunctions\";\r\n\r\nconst LookFeatureImage = (props) => {\r\n\r\n const {lookActiveFeature, intl, withoutGallery, featureIsLocked, setLookOverlayOpened} = props;\r\n const [isLoading, toggleLoader] = useState(true);\r\n const [galleryImages, setGalleryImages] = useState([]);\r\n const [activeImageIndex, setActiveImageIndex] = useState(0);\r\n\r\n useEffect(() => {\r\n let featureGalleryImages = (lookActiveFeature.dbFeature.galleryEnabled && Array.isArray(lookActiveFeature.dbFeature.galleryImages)\r\n && lookActiveFeature.dbFeature.galleryImages.length) ? lookActiveFeature.dbFeature.galleryImages : [];\r\n setGalleryImages([{\r\n url: featureThumbnailUrl(lookActiveFeature) || `${baseNewImagesPath}images/image-not-found.png`,\r\n preview: featureThumbnailUrl(lookActiveFeature, THUMBNAIL_SIZES.medium)\r\n }, // main image thumbnail\r\n ...featureGalleryImages\r\n ]);\r\n setActiveImageIndex(0);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [lookActiveFeature]);\r\n\r\n const arrowClick = (analyticsLabel, nextIndex) => {\r\n Analytics.sendClickEvent(analyticsLabel);\r\n if (featureIsLocked) {\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture);\r\n return false\r\n }\r\n if (nextIndex !== activeImageIndex) {\r\n toggleLoader(true);\r\n setActiveImageIndex(nextIndex)\r\n }\r\n }\r\n\r\n const backButtonClick = () => {\r\n const analyticsLabel = IS_PRODUCT_JOURNEY\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureImageChangeLeft\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeatureImageChangeLeft;\r\n const nextIndex = galleryImages[activeImageIndex - 1] ? activeImageIndex - 1 : galleryImages.length - 1\r\n arrowClick(analyticsLabel, nextIndex)\r\n };\r\n\r\n const nextButtonClick = () => {\r\n const analyticsLabel = IS_PRODUCT_JOURNEY\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureImageChangeRight\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeatureImageChangeRight;\r\n const nextIndex = galleryImages[activeImageIndex + 1] ? activeImageIndex + 1 : 0\r\n arrowClick(analyticsLabel, nextIndex)\r\n };\r\n //\r\n // const thumbnailClick = (index) => {\r\n // props.toggleGalleryVisible(true);\r\n // props.setGalleryActiveImageIndex(index);\r\n // };\r\n\r\n // console.log(\"galleryImages\", galleryImages);\r\n const mainImageUrl = galleryImages[activeImageIndex];\r\n\r\n return (\r\n
    \r\n {withoutGallery ? null : (\r\n \r\n \r\n \r\n )}\r\n
    \r\n {isLoading || !mainImageUrl ? : null}\r\n
    \r\n {mainImageUrl ? thumbnailClick(activeImageIndex)}\r\n src={mainImageUrl.url} onLoad={() => toggleLoader(false)} alt=\"\"/> : null}\r\n
    \r\n
    \r\n {withoutGallery ? null : (\r\n \r\n \r\n \r\n )}\r\n
    \r\n )\r\n};\r\n\r\nLookFeatureImage.propTypes = {\r\n withoutGallery: PropTypes.bool,\r\n forFeature: PropTypes.shape(featureInterface),\r\n featureIsLocked: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n const {lookActiveFeature} = store.lookState;\r\n return {\r\n lookActiveFeature: ownProps.forFeature || lookActiveFeature,\r\n windowWidth: store.serverState.windowWidth,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookOverlayOpened\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookFeatureImage)\r\n);\r\n","import store from \"./../../../store\";\r\nimport config from \"../components/canvas/store/sqftConfig\";\r\nimport workspace from \"../components/canvas/core/workspace\";\r\nimport {\r\n calculateHypotenuse,\r\n getBacksplashArea,\r\n getEdgeLength,\r\n inchesToLNFT,\r\n inchesToMm,\r\n mm2ToM2,\r\n mmToM,\r\n sqInchesToSqFoot\r\n} from \"./sqftHelper\";\r\nimport {RESOURCE_ATTACHED_TO_TYPE, SQFT_FEATURES} from \"../constants\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport MiteredController from \"../components/canvas/core/controls/mitered\";\r\nimport sqftSlabManager from \"../components/canvas/store/sqftSlabManager\";\r\nimport sqftShapeManager from \"../components/canvas/store/sqftShapeManager\";\r\nimport {SHAPE_LAYOUTS} from \"../components/canvas/core/cabinet/cabinetShapes\";\r\n//import {findGLBLink, getThirdPartyAR3DMetaData} from \"./sqft3dArHelper\";\r\n\r\nexport function manualCalculationsCheckForChangesApplied() {\r\n return manualCalculationsCountertopArea() > 0 || manualCalculationsEdgesLength() > 0 || manualCalculationsBacksplashArea() > 0\r\n}\r\n\r\n//TODO include edges length\r\nexport function manualCalculationsCountertopArea() {\r\n const state = store.getState();\r\n\r\n let totalArea = state.sqftManualCalculationState.countertopRows.reduce((sum, row) => {\r\n if (!row.length || !row.width || isNaN(row.length) || isNaN(row.width)) {\r\n return sum\r\n }\r\n\r\n return config.measureUnit === \"Imperial\"\r\n ? sum + Math.ceil(sqInchesToSqFoot(row.length * row.width))\r\n : sum + mm2ToM2(row.length * row.width)\r\n }, 0);\r\n\r\n return Math.ceil10(totalArea, -2);\r\n}\r\n\r\nexport function manualCalculationsEdgesLength() {\r\n const state = store.getState();\r\n let totalArea = state.sqftManualCalculationState.edgeRows.reduce((sum, row) => {\r\n if (!row.length || !row.height || isNaN(row.length) || isNaN(row.height)) {\r\n return sum\r\n }\r\n\r\n return sum + manualCalculationsEdgeLength(row.selectedFeature, row.length)\r\n }, 0);\r\n\r\n return config.measureUnit === \"Imperial\" ? Math.ceil10(totalArea) : Math.ceil10(totalArea, -2);\r\n}\r\n\r\nexport function manualCalculationsEdgeLength(selectedFeature, length) {\r\n return selectedFeature.dbFeature.unit.toLowerCase() === \"each\"\r\n ? 1\r\n : config.measureUnit === \"Imperial\" ? Math.ceil10(inchesToLNFT(length)) : Math.ceil10(mmToM(length), -2);\r\n}\r\n\r\nexport function manualCalculationsBacksplashArea() {\r\n const state = store.getState();\r\n\r\n return getRowSum(state.sqftManualCalculationState.backsplashRows);\r\n}\r\nconst getRowSum = (row) => {\r\n let totalArea = row.reduce((sum, row) => {\r\n if (!row.length || !row.height || isNaN(row.length) || isNaN(row.height)) {\r\n return sum\r\n }\r\n\r\n return config.measureUnit === \"Imperial\"\r\n ? sum + Math.ceil(sqInchesToSqFoot(row.length * row.height))\r\n : sum + mm2ToM2(row.length * row.height)\r\n }, 0);\r\n\r\n return Math.ceil10(totalArea, -2);\r\n}\r\n\r\nexport function getCountertopArea() {\r\n let totalArea = 0;\r\n const shapes = sqftShapeManager.getCounterTopShapes();\r\n //console.log(\"-------------------------\",);\r\n shapes\r\n .sort((a, b) => a.id - b.id)\r\n .forEach(function(shape) {\r\n totalArea += shape.getTotalArea();\r\n });\r\n //console.log(\"-------------------------\",);\r\n //console.log(\"total sqInchesToSqFoot(totalArea)\", sqInchesToSqFoot(totalArea));\r\n return {\r\n totalAreaToMeasureUnit: config.measureUnit === \"Imperial\" ? Math.ceil(sqInchesToSqFoot(totalArea)) : mm2ToM2(totalArea),\r\n totalArea: totalArea,\r\n shapeLength: shapes.length\r\n }\r\n}\r\n\r\nexport function getCabinetsVolume(partIds) {\r\n let totalVolume = 0;\r\n const shapes = sqftShapeManager.getCabinetShapes(partIds);\r\n shapes\r\n .sort((a, b) => a.id - b.id)\r\n .forEach(function(shape) {\r\n totalVolume += shape.getTotalVolume();\r\n });\r\n\r\n return config.measureUnit === \"Imperial\" ? Math.ceil(sqInchesToSqFoot(totalVolume)) : mm2ToM2(totalVolume)\r\n}\r\n\r\nexport function getCabinetsDoorsSQFT(partIds) {\r\n let totalSQFT = 0;\r\n const shapes = sqftShapeManager.getCabinetShapes(partIds);\r\n shapes\r\n .sort((a, b) => a.id - b.id)\r\n .forEach((shape) => {\r\n totalSQFT += getCabinetDoorsSQFT(shape)\r\n });\r\n\r\n return Math.ceil10(totalSQFT, -2);\r\n}\r\n\r\nexport function getCabinetDoorsSQFT(shape) {\r\n let totalSQFT = 0;\r\n let cathetus = shape.getWidth() - shape.getDepth(true);\r\n let lines = shape.getLines();\r\n\r\n debugger // eslint-disable-line no-debugger\r\n switch (shape.shapeParams.shapeLayout) {\r\n case SHAPE_LAYOUTS.LowerLCorner: //SHAPE_LAYOUTS.lowerLayoutType1,\r\n totalSQFT += (lines[2].getLineLength() + lines[3].getLineLength()) * shape.getHeight(true);\r\n break;\r\n case SHAPE_LAYOUTS.LowerDullangle: //SHAPE_LAYOUTS.lowerLayoutType2,\r\n case SHAPE_LAYOUTS.LowerDualangle: //SHAPE_LAYOUTS.lowerLayoutType2,\r\n totalSQFT += lines[1].getLineLength() * shape.getHeight(true) + lines[2].getLineLength() * shape.getHeight(true);\r\n break;\r\n case SHAPE_LAYOUTS.LowerIroningBoard: break;//SHAPE_LAYOUTS.lowerLayoutType3,\r\n case SHAPE_LAYOUTS.LowerIroningBoardRight: break;//SHAPE_LAYOUTS.lowerLayoutType3,\r\n case SHAPE_LAYOUTS.LowerIroningBoardLeft: break;//SHAPE_LAYOUTS.lowerLayoutType3,\r\n case SHAPE_LAYOUTS.LowerDimondShape: //SHAPE_LAYOUTS.lowerLayoutType4,\r\n totalSQFT += Math.round10(calculateHypotenuse(cathetus, cathetus), -2) * shape.getHeight(true);\r\n break;\r\n case SHAPE_LAYOUTS.LowerDimondCorner: //SHAPE_LAYOUTS.lowerLayoutType5,\r\n totalSQFT += (shape.getWidth() - shape.getDepth(true)) * 2;\r\n break;\r\n case SHAPE_LAYOUTS.UpperLCorner: // SHAPE_LAYOUTS.upperLayoutType2,\r\n totalSQFT += (shape.getWidth() - shape.getDepth(true)) * 2;\r\n break;\r\n case SHAPE_LAYOUTS.UpperDimondShape: //SHAPE_LAYOUTS.upperLayoutType4,\r\n totalSQFT += Math.round10(calculateHypotenuse(cathetus, cathetus), -2);\r\n break;\r\n case SHAPE_LAYOUTS.UpperDimondCorner: //SHAPE_LAYOUTS.upperLayoutType5,\r\n totalSQFT += Math.round10(calculateHypotenuse(cathetus, cathetus), -2);\r\n break;\r\n default:\r\n totalSQFT += shape.getWidth() * shape.getHeight(true);\r\n break;\r\n }\r\n\r\n return config.measureUnit === \"Imperial\" ? Math.ceil10(sqInchesToSqFoot(totalSQFT), -2) : mm2ToM2(totalSQFT)\r\n}\r\n\r\nexport function getCabinetsLNFT(partIds) {\r\n let totalLength = 0;\r\n let cathetus = 0;\r\n let lines = null;\r\n const shapes = sqftShapeManager.getCabinetShapes(partIds);\r\n shapes\r\n .sort((a, b) => a.id - b.id)\r\n .forEach((shape) => {\r\n switch (shape.shapeParams.shapeLayout) {\r\n case SHAPE_LAYOUTS.LowerLCorner: //SHAPE_LAYOUTS.lowerLayoutType1,\r\n totalLength += (shape.getWidth() - shape.getDepth(true)) * 2;\r\n break;\r\n case SHAPE_LAYOUTS.LowerDullangle: //SHAPE_LAYOUTS.lowerLayoutType2,\r\n case SHAPE_LAYOUTS.LowerDualangle: //SHAPE_LAYOUTS.lowerLayoutType2,\r\n lines = shape.getLines();\r\n totalLength += lines[1].getLineLength() + lines[2].getLineLength()\r\n break;\r\n case SHAPE_LAYOUTS.LowerIroningBoard: break;//SHAPE_LAYOUTS.lowerLayoutType3,\r\n case SHAPE_LAYOUTS.LowerDimondShape: //SHAPE_LAYOUTS.lowerLayoutType4,\r\n totalLength += Math.round10(calculateHypotenuse(cathetus, cathetus), -1);\r\n break;\r\n case SHAPE_LAYOUTS.LowerDimondCorner: //SHAPE_LAYOUTS.lowerLayoutType5,\r\n totalLength += (shape.getWidth() - shape.getDepth(true)) * 2;\r\n break;\r\n case SHAPE_LAYOUTS.UpperLCorner: // SHAPE_LAYOUTS.upperLayoutType2,\r\n totalLength += (shape.getWidth() - shape.getDepth(true)) * 2;\r\n break;\r\n case SHAPE_LAYOUTS.UpperDimondShape: //SHAPE_LAYOUTS.upperLayoutType4,\r\n totalLength += Math.round10(calculateHypotenuse(cathetus, cathetus), -1);\r\n break;\r\n case SHAPE_LAYOUTS.UpperDimondCorner: //SHAPE_LAYOUTS.upperLayoutType5,\r\n totalLength += Math.round10(calculateHypotenuse(cathetus, cathetus), -1);\r\n break;\r\n default:\r\n totalLength += shape.getWidth();\r\n break;\r\n }\r\n });\r\n\r\n return totalLength //config.measureUnit === \"Imperial\" ? Math.ceil(inchesToLNFT(totalLength)) : mm2ToM2(totalLength)\r\n}\r\n\r\nexport function getQuantityFromFilters(partIds, filterKey) {\r\n let totalQuantity = 0;\r\n const shapes = sqftShapeManager.getCabinetShapes(partIds);\r\n const { filterGroups } = store.getState().filterState;\r\n\r\n shapes\r\n .sort((a, b) => a.id - b.id)\r\n .forEach(function(shape) {\r\n const feature = shape.getFeature();\r\n let quantity = 0;\r\n if (feature) {\r\n quantity = feature.getFeatureSavedFilterName(filterGroups, filterKey, filterKey);\r\n }\r\n totalQuantity += +quantity;\r\n });\r\n\r\n return totalQuantity;\r\n}\r\n\r\nexport function getTotalDoors(partIds) {\r\n return getQuantityFromFilters(partIds, \"Number_of_Doors\");\r\n}\r\n\r\nexport function getTotalKnobs(partIds) {\r\n return getQuantityFromFilters(partIds, \"Number_of_Knobs\");\r\n}\r\n\r\nexport function getTotalDrawers(partIds) {\r\n return getQuantityFromFilters(partIds, \"Number_of_Drawers\");\r\n}\r\n\r\nexport function getEdgesArea() {\r\n let edgeCount = 0;\r\n //let edges = workspace.getShapeType('edge');\r\n const edges = workspace.getAttachedToLineResource(RESOURCE_ATTACHED_TO_TYPE.edge);\r\n\r\n for (const edge of edges) {\r\n const attachedTo = workspace.getLineOrCornerLineById(edge.attachedToId);\r\n edgeCount += getEdgeLength(attachedTo);\r\n }\r\n\r\n if (workspace.miteredController instanceof MiteredController) {\r\n edgeCount += workspace.miteredController.getEdgesLength();\r\n }\r\n\r\n return config.measureUnit === \"Imperial\" ? Math.ceil(edgeCount) : Math.ceil10(edgeCount, -2);\r\n}\r\n\r\nexport function getBacksplashTotalArea() {\r\n let backsplashesArea = 0;\r\n const state = store.getState();\r\n const attachedToLineResources = state.sqftResourceState.attachedToLine;\r\n const backsplashes = attachedToLineResources.filter(attachedToLineResources => attachedToLineResources.type === RESOURCE_ATTACHED_TO_TYPE.backsplash)\r\n for (let i = 0; i < backsplashes.length; i++) {\r\n const line = workspace.getLineOrCornerLineById(backsplashes[i].attachedToId)\r\n if (line) {\r\n backsplashesArea += getBacksplashArea(line.getBacksplashHeight(), line);\r\n }\r\n }\r\n\r\n const backsplashLabeledShapes = sqftShapeManager.getBacksplashLabeledShapes()\r\n backsplashLabeledShapes.forEach(function(shape) {\r\n if (shape.getTotalArea) {\r\n const shapeArea = shape.getTotalArea();\r\n backsplashesArea += config.measureUnit === \"Imperial\" ? Math.ceil(sqInchesToSqFoot(shapeArea)) : mm2ToM2(shapeArea)\r\n }\r\n });\r\n\r\n return config.measureUnit === \"Imperial\" ? Math.ceil10(backsplashesArea) : Math.ceil10(backsplashesArea, -2);\r\n}\r\n\r\nexport const getConvertedMultipliedValue = (length, height) => {\r\n return config.measureUnit === \"Imperial\"\r\n ? Math.ceil(sqInchesToSqFoot(length * height))\r\n : mm2ToM2(length * height)\r\n}\r\n\r\nexport const getExportedManualCalculateBacksplashes = () => {\r\n const state = store.getState();\r\n let backsplashes = [];\r\n\r\n state.sqftManualCalculationState.backsplashRows.forEach((row) => {\r\n if (!row.length || !row.height || isNaN(row.length) || isNaN(row.height)) {\r\n return\r\n }\r\n let area = getConvertedMultipliedValue(row.length, row.height);\r\n let linearFeet = Math.ceil(inchesToLNFT(row.length)); // / 12\r\n let M = mmToM(row.length);\r\n backsplashes.push({\r\n id: row.id,\r\n partId: \"backsplashes\",\r\n length: area,\r\n squareFeet: area,\r\n realLength: config.measureUnit === \"Imperial\" ? linearFeet : M,\r\n inputLength: row.length,\r\n inputHeight: row.height,\r\n });\r\n });\r\n\r\n return backsplashes;\r\n}\r\n\r\nexport const getExportedManualCalculateEdges = () => {\r\n const state = store.getState();\r\n let selectedEdges = [];\r\n\r\n state.sqftManualCalculationState.edgeRows.forEach((row) => {\r\n if (!row.length || !row.height || isNaN(row.length) || isNaN(row.height)) {\r\n return\r\n }\r\n if (!row.selectedFeature) {\r\n console.log(\"edge was not selected in manual calculations\");\r\n return\r\n }\r\n selectedEdges.push({\r\n id: row.id,\r\n featureId: row.selectedFeature.dbFeature.id,\r\n partId: \"edges\",\r\n length: manualCalculationsEdgeLength(row.selectedFeature, row.length),\r\n unit: row.selectedFeature.dbFeature.unit,\r\n inputLength: row.length,\r\n inputHeight: row.height,\r\n name: row.type,\r\n segments: 1,\r\n });\r\n });\r\n\r\n return selectedEdges;\r\n}\r\n\r\n/**\r\n * @returns string\r\n */\r\nexport const getCountertopQtCategory = () => {\r\n const layout = getCurrentLayout();\r\n const mainNeeded = \"center_island_countertop\";\r\n const oppositeNeeded = \"countertop\";\r\n let featureGroupCountertop = layout.getSubPartFromQtCategories(mainNeeded);\r\n if (!featureGroupCountertop) {\r\n return oppositeNeeded\r\n }\r\n\r\n return mainNeeded\r\n}\r\n\r\n/**\r\n * @returns countertops[]\r\n */\r\nexport const getExportedManualCalculateCountertops = () => {\r\n const state = store.getState();\r\n let countertops = [];\r\n\r\n state.sqftManualCalculationState.countertopRows.forEach((row) => {\r\n if (!row.length || !row.width || isNaN(row.length) || isNaN(row.width)) {\r\n return\r\n }\r\n countertops.push({\r\n id: row.id,\r\n partId: getCountertopQtCategory(),\r\n inputLength: row.length,\r\n inputWidth: row.width,\r\n area: getConvertedMultipliedValue(row.length, row.width)\r\n });\r\n });\r\n\r\n return countertops;\r\n}\r\n\r\n/**\r\n * This will return area for slabImages and slab placeHolder shapes\r\n * @return {Number|*|number}\r\n */\r\nexport function getSlabTotalArea() {\r\n const state = store.getState();\r\n let slabImages = state.sqftSlabState.croppedSlabImages;\r\n let slabPlaceHolderShapes = sqftSlabManager.getSlabPlaceHolderShapes();\r\n if (slabImages.length === 0 && slabPlaceHolderShapes.length === 0) {\r\n return 0\r\n }\r\n let totalArea = [...slabImages, ...slabPlaceHolderShapes].reduce((previousValue, slabImage) => {\r\n let imageSize = slabImage.getSize()\r\n previousValue += imageSize.width * imageSize.height\r\n\r\n return previousValue\r\n }, 0)\r\n\r\n return config.measureUnit === \"Imperial\" ? Math.ceil10(sqInchesToSqFoot(totalArea)) : Math.ceil10(mmToM(totalArea), -2);\r\n}\r\n\r\nexport function getSlabImagesAreaGrouped() {\r\n const state = store.getState();\r\n const slabImages = state.sqftSlabState.croppedSlabImages;\r\n const slabPlaceHolderShapes = sqftSlabManager.getSlabPlaceHolderShapes();\r\n const slabImagesAndPlaceHolders = [...slabImages, ...slabPlaceHolderShapes];\r\n\r\n let slabImagesPrepared = [];\r\n for (let movableImage of slabImagesAndPlaceHolders) {\r\n let preparedSlabImage = slabImagesPrepared.find(prepared =>\r\n prepared.featureId === movableImage.featureId\r\n );\r\n\r\n if (preparedSlabImage) {\r\n preparedSlabImage.isDisabledInPopup = preparedSlabImage.isDisabledInPopup && movableImage.isDisabledInPopup;\r\n continue;\r\n }\r\n\r\n let totalArea = getSlabSameTypeArea(movableImage.featureId, slabImagesAndPlaceHolders);\r\n let totalSlabs = getSlabSameType(movableImage.featureId, slabImagesAndPlaceHolders).length;\r\n\r\n slabImagesPrepared.push({\r\n id: movableImage.id,\r\n partId: SQFT_FEATURES.slabs,\r\n slabParentPartId: movableImage.slabParentPartId,\r\n featureId: movableImage.featureId,\r\n totalSlabs: totalSlabs,\r\n totalArea: totalArea,\r\n pricePerArea: movableImage.pricePerArea,\r\n shouldUseSlabPricing: movableImage.shouldUseSlabPricing,\r\n isDisabledInPopup: movableImage.isDisabledInPopup\r\n });\r\n }\r\n\r\n return slabImagesPrepared;\r\n}\r\n\r\nexport function getSlabSameTypeArea(featureId, croppedSlabImages) {\r\n let totalArea = croppedSlabImages\r\n .filter(croppedSlabImage => croppedSlabImage.featureId === featureId)\r\n .reduce((previousValue, slabImage) => {\r\n const imageSize = slabImage.getSize();\r\n const width = config.measureUnit === \"Imperial\" ? imageSize.width : inchesToMm(imageSize.width);\r\n const height = config.measureUnit === \"Imperial\" ? imageSize.height : inchesToMm(imageSize.height);\r\n previousValue += width * height;\r\n\r\n return previousValue\r\n }, 0)\r\n\r\n return config.measureUnit === \"Imperial\" ? Math.ceil10(sqInchesToSqFoot(totalArea)) : Math.ceil10(mm2ToM2(totalArea), -2);\r\n}\r\n\r\nexport function getSlabSameType(featureId, croppedSlabImages) {\r\n return croppedSlabImages.filter(croppedSlabImage => croppedSlabImage.featureId === featureId);\r\n}\r\n","import workspace from \"../workspace\";\r\nimport sqftShapeManager from \"../../store/sqftShapeManager\";\r\nimport Rectangle from \"../shapes/layouts/rectangle\";\r\nimport {CABINET_LABELS, SHAPE_PART_ID} from \"../../../../constants\";\r\nimport Polygon from \"../shapes/layouts/polygon\";\r\nimport SlabAdditionalShape from \"../slab/slabAdditionalShape\";\r\nimport {createIroningBoardShape} from \"./cabinetShapesSpecialLayouts\";\r\nimport {getCabinetDimensions, getRelatedFeatureMetadata, getSpecialShape} from \"../../../../helpers/sqft3dArHelper\";\r\n\r\nexport const SHAPE_LAYOUTS = {\r\n // old layout names deprecated\r\n upperLayoutType2: \"upperLayoutType2\",\r\n upperLayoutType4: \"upperLayoutType4\",\r\n upperLayoutType5: \"upperLayoutType5\",\r\n\r\n lowerLayoutType1: \"lowerLayoutType1\",\r\n lowerLayoutType2: \"lowerLayoutType2\",\r\n lowerLayoutType3: \"lowerLayoutType3\",\r\n lowerLayoutType4: \"lowerLayoutType4\",\r\n lowerLayoutType5: \"lowerLayoutType5\",\r\n\r\n // new layout names\r\n rectangle: \"rectangle\",\r\n LowerLCorner: \"LowerLCorner\", //SHAPE_LAYOUTS.lowerLayoutType1,\r\n LowerDullangle: \"LowerDullangle\", //SHAPE_LAYOUTS.lowerLayoutType2,\r\n LowerDualangle: \"LowerDualangle\", //SHAPE_LAYOUTS.lowerLayoutType2,\r\n LowerIroningBoard: \"LowerIroningBoard\",//SHAPE_LAYOUTS.lowerLayoutType3,\r\n LowerDimondShape: \"LowerDimondShape\",//SHAPE_LAYOUTS.lowerLayoutType4,\r\n LowerDimondCorner: \"LowerDimondCorner\",//SHAPE_LAYOUTS.lowerLayoutType5,\r\n\r\n UpperLCorner: \"UpperLCorner\",// SHAPE_LAYOUTS.upperLayoutType2,\r\n UpperDimondShape: \"UpperDimondShape\",//SHAPE_LAYOUTS.upperLayoutType4,\r\n UpperDimondCorner: \"UpperDimondCorner\",//SHAPE_LAYOUTS.upperLayoutType5,\r\n LowerIroningBoardRight: \"LowerIroningBoardRight\",\r\n LowerIroningBoardLeft: \"LowerIroningBoardLeft\",\r\n};\r\n\r\nexport const SHAPE_UPPER_LAYOUTS = [\r\n SHAPE_LAYOUTS.UpperLCorner,\r\n SHAPE_LAYOUTS.UpperDimondShape,\r\n SHAPE_LAYOUTS.UpperDimondCorner,\r\n];\r\n\r\nexport const SHAPE_LOWER_LAYOUTS = [\r\n SHAPE_LAYOUTS.LowerLCorner,\r\n SHAPE_LAYOUTS.LowerDullangle,\r\n SHAPE_LAYOUTS.LowerDualangle,\r\n SHAPE_LAYOUTS.LowerIroningBoard,\r\n SHAPE_LAYOUTS.LowerDimondShape,\r\n SHAPE_LAYOUTS.LowerDimondCorner,\r\n SHAPE_LAYOUTS.LowerIroningBoardRight,\r\n SHAPE_LAYOUTS.LowerIroningBoardLeft,\r\n];\r\nexport const SHAPE_DIAMOND_LAYOUTS = [\r\n SHAPE_LAYOUTS.LowerDimondCorner,\r\n SHAPE_LAYOUTS.UpperDimondShape,\r\n];\r\n\r\nexport const IRONING_BOARD_DIRECTION = {\r\n left: 'left',\r\n right: 'right'\r\n}\r\n\r\n// const LAYOUT_TYPES = {\r\n// upper: SHAPE_UPPER_LAYOUTS,\r\n// lower: SHAPE_LOWER_LAYOUTS,\r\n// };\r\n\r\nclass CabinetShapes {\r\n constructor() {\r\n this.upperShapes = [];\r\n this.lowerShapes = [];\r\n this.otherShapes = [];\r\n this.additionalShapes = [];\r\n this.shapes = {\r\n /**\r\n * |‾‾‾‾|\r\n * | /\r\n * |__/\r\n */\r\n UpperDimondCorner: [\r\n 'SM-DCW2436', 'SW-DCW2430', 'SM-DCW2442',\r\n 'Providence Cabinets Shaker White 27\" W, 36\" H Diagonal Corner Wall Cabinet',\r\n 'Providence Cabinets Shaker White 27\" W, 42\" H Diagonal Corner Wall Cabinet',\r\n 'SW-W1230', 'SM-W1236', 'SM-W1242',\r\n ],\r\n /**\r\n * |‾‾‾‾|\r\n * | _|\r\n * |__|\r\n */\r\n UpperLCorner: [\r\n 'Providence Cabinets Shaker White Corner Wall Cabinet 24\"W 36\" H',\r\n 'Providence Cabinets Shaker White 24\" W, 30\" H Diagonal Corner Wall Cabinet',\r\n 'Providence Cabinets Shaker White Corner Wall Cabinet 24\"W 30\"H',\r\n 'Providence Cabinets Shaker White Corner Wall Cabinet 24\"W 42\"H',\r\n 'Providence Cabinets Shaker White Corner Wall Cabinet 24\"W 42\" H',\r\n ],\r\n /**\r\n * |‾‾‾‾‾|\r\n * | __|\r\n * |__|\r\n */\r\n LowerLCorner: ['SM-ERB36/BER36', 'Providence Cabinets Shaker White 33\" Lazy Susan'],\r\n /**\r\n * |‾‾‾/\r\n * | >\r\n * |/\r\n */\r\n LowerDullangle: ['SW-BEC24'],\r\n /**\r\n * |‾‾‾|\r\n * | |\r\n * | )\r\n */\r\n LowerIroningBoard: ['SW-BES12'],\r\n LowerIroningBoardRight: ['SW-BES12'],\r\n /**\r\n * |‾‾‾‾|\r\n * | /\r\n * |__/\r\n */\r\n UpperDimondShape: [],\r\n };\r\n this.specialShapes = {\r\n LowerLCorner: SHAPE_LAYOUTS.LowerLCorner,\r\n LowerDullangle: SHAPE_LAYOUTS.LowerDullangle,\r\n LowerDualangle: SHAPE_LAYOUTS.LowerDualangle,\r\n LowerIroningBoard: SHAPE_LAYOUTS.LowerIroningBoard,\r\n LowerDimondShape: SHAPE_LAYOUTS.LowerDimondShape,\r\n LowerDimondCorner: SHAPE_LAYOUTS.LowerDimondCorner,\r\n LowerIroningBoardRight: SHAPE_LAYOUTS.LowerIroningBoardRight,\r\n LowerIroningBoardLeft: SHAPE_LAYOUTS.LowerIroningBoardLeft,\r\n\r\n UpperLCorner: SHAPE_LAYOUTS.UpperLCorner,\r\n UpperDimondShape: SHAPE_LAYOUTS.UpperDimondShape,\r\n UpperDimondCorner: SHAPE_LAYOUTS.UpperDimondCorner,\r\n }\r\n }\r\n\r\n addShape = (feature, parentFeature, position = null) => {\r\n const dimensions = getCabinetDimensions(feature, parentFeature);\r\n if (feature.partId === CABINET_LABELS.upper_cabinet_boxes) {\r\n return this.addShapeHelper(\r\n this.upperShapes, 'square', feature.partId,\r\n this.getShapeLayout(feature, parentFeature), dimensions, position, feature, parentFeature\r\n );\r\n } else if (feature.partId === CABINET_LABELS.lower_cabinet_boxes) {\r\n return this.addShapeHelper(\r\n this.lowerShapes, 'square', feature.partId,\r\n this.getShapeLayout(feature, parentFeature), dimensions, position, feature, parentFeature\r\n );\r\n } else {\r\n return this.addShapeHelper(\r\n this.otherShapes, 'square', feature.partId,\r\n this.getShapeLayout(feature, parentFeature), dimensions, position, feature, parentFeature\r\n );\r\n }\r\n };\r\n\r\n addShapeHelper = (shapeArray, shapeType, partId, shapeLayout, dimensions, position, feature, parentFeature) => {\r\n const shapeLines = this.getShapeLines(shapeLayout, dimensions);\r\n const shapeParams = { shapeCabinet: true, canSnap: true, ...dimensions, shapeLayout };\r\n const shapeId = sqftShapeManager.addShape(shapeLines, shapeType, position, partId, null, shapeParams);\r\n const shape = workspace.getShapeById(shapeId);\r\n sqftShapeManager.setShapeFeatureId(shapeId, feature.dbFeature.id);\r\n sqftShapeManager.setShapeRelatedParentFeatureId(shapeId, parentFeature.dbFeature.id);\r\n shape.setOriginalPointsCoords(shape.getPointsCoords());\r\n shapeArray.push(shapeId);\r\n console.log(\"Feature SharedFeatureName\", feature.dbFeature.sharedFeatureName);\r\n console.log(\"Feature Metadata\", getRelatedFeatureMetadata(feature, parentFeature));\r\n return shapeId;\r\n };\r\n\r\n getShapeLayout = (feature, parentFeature) => {\r\n const thirdPartyAR3DMetaData = getRelatedFeatureMetadata(feature, parentFeature);\r\n const specialShape = getSpecialShape(thirdPartyAR3DMetaData);\r\n if (specialShape) {\r\n const specialLayoutName = specialShape.replace(/\\s/g, \"\");\r\n if (this.specialShapes[specialLayoutName]) {\r\n return this.specialShapes[specialLayoutName]\r\n }\r\n }\r\n\r\n // Hardcoded Layouts\r\n for (const layout of Object.keys(SHAPE_LAYOUTS)) {\r\n if (this.shapes[layout] && feature.dbFeature && this.shapes[layout].includes(feature.dbFeature.sharedFeatureName) ||\r\n (feature.part && this.shapes[layout].includes(feature.part.dbFeature.sharedFeatureName))) {\r\n return layout;\r\n }\r\n }\r\n\r\n return SHAPE_LAYOUTS.rectangle;\r\n };\r\n\r\n getShapeLines = (shapeLayout, { width, height, depth }) => {\r\n void height;\r\n let cathetus = depth / Math.sqrt(2);\r\n switch (shapeLayout) {\r\n case SHAPE_LAYOUTS.lowerLayoutType1:\r\n case SHAPE_LAYOUTS.LowerLCorner:\r\n return new Polygon(this.createPoints([\r\n { x: 0, y: 0 },\r\n { x: width, y: 0 },\r\n { x: width, y: depth },\r\n { x: depth, y: depth },\r\n { x: depth, y: width },\r\n { x: 0, y: width }\r\n ]), true, true);\r\n case SHAPE_LAYOUTS.lowerLayoutType2:\r\n case SHAPE_LAYOUTS.LowerDullangle:\r\n case SHAPE_LAYOUTS.LowerDualangle:\r\n return new Polygon(this.createPoints([\r\n { x: 0, y: 0 },\r\n { x: width, y: 0 },\r\n { x: width - 8, y: depth - 8 },\r\n { x: 0, y: depth }\r\n ]), true, true);\r\n case SHAPE_LAYOUTS.lowerLayoutType3:\r\n case SHAPE_LAYOUTS.LowerIroningBoard:\r\n case SHAPE_LAYOUTS.LowerIroningBoardRight:\r\n return createIroningBoardShape(width, depth, width, IRONING_BOARD_DIRECTION.right);\r\n case SHAPE_LAYOUTS.LowerIroningBoardLeft:\r\n return createIroningBoardShape(width, depth, width, IRONING_BOARD_DIRECTION.left);\r\n case SHAPE_LAYOUTS.lowerLayoutType4:\r\n case SHAPE_LAYOUTS.LowerDimondShape:\r\n return new Polygon(this.createPoints([\r\n { x: 0, y: 0 },\r\n { x: width, y: 0 },\r\n { x: width, y: depth },\r\n { x: depth, y: width },\r\n { x: 0, y: width }\r\n ]), true, true);\r\n case SHAPE_LAYOUTS.lowerLayoutType5:\r\n case SHAPE_LAYOUTS.LowerDimondCorner:\r\n return new Polygon(this.createPoints([\r\n { x: width - depth, y: 0 },\r\n { x: width, y: 0 },\r\n { x: width, y: depth },\r\n { x: depth, y: depth },\r\n { x: depth, y: width },\r\n { x: 0, y: width },\r\n { x: 0, y: width - depth }\r\n ]), true, true);\r\n\r\n // UPPER\r\n case SHAPE_LAYOUTS.upperLayoutType2:\r\n case SHAPE_LAYOUTS.UpperLCorner:\r\n return new Polygon(this.createPoints([\r\n { x: 0, y: 0 },\r\n { x: width, y: 0 },\r\n { x: width, y: depth },\r\n { x: depth, y: depth },\r\n { x: depth, y: width },\r\n { x: 0, y: width }\r\n ]), true, true);\r\n case SHAPE_LAYOUTS.upperLayoutType4:\r\n case SHAPE_LAYOUTS.UpperDimondShape:\r\n return new Polygon(this.createPoints([\r\n { x: cathetus, y: 0 },\r\n { x: width, y: 0 },\r\n { x: width, y: depth },\r\n { x: depth, y: width },\r\n { x: 0, y: width },\r\n { x: 0, y: cathetus }\r\n ]), true, true);\r\n case SHAPE_LAYOUTS.upperLayoutType5:\r\n case SHAPE_LAYOUTS.UpperDimondCorner:\r\n return new Polygon(this.createPoints([\r\n { x: 0, y: 0 },\r\n { x: width, y: 0 },\r\n { x: width, y: width - depth },\r\n { x: width - depth, y: width },\r\n { x: 0, y: width }\r\n ]), true, true);\r\n default:\r\n return new Rectangle(width, depth);\r\n }\r\n };\r\n\r\n createPoints = (coords) => coords;\r\n\r\n resetUpperShapes = () => {\r\n this.upperShapes = [];\r\n };\r\n\r\n importData = (data) => {\r\n //this.resetBacksplashes();\r\n data.forEach(activeBacksplashData => {\r\n const shape = workspace.importShape(activeBacksplashData.backsplashShape);\r\n shape.deregisterEvents();\r\n const line = workspace.getLineById(activeBacksplashData.line.id);\r\n const slabAdditionalShape = new SlabAdditionalShape(line, shape.id);\r\n this.addActiveBacksplash(slabAdditionalShape);\r\n });\r\n };\r\n\r\n exportData = () => {\r\n return this.additionalShapes\r\n .filter(slab => workspace.getShapeById(slab.backsplashShapeId).partId !== SHAPE_PART_ID.seamPiece)\r\n .map(slab => ({\r\n backsplashShape: workspace.getShapeById(slab.backsplashShapeId).export(),\r\n line: slab.line.export(),\r\n }));\r\n };\r\n\r\n addActiveBacksplash = (slabAdditionalShape) => {\r\n this.additionalShapes.push(slabAdditionalShape);\r\n };\r\n\r\n findAdditionalShapeByLine = (line) => {\r\n return this.additionalShapes.find(additionalShape => additionalShape.line.id === line.id);\r\n };\r\n\r\n removeActiveBacksplashByLine = (line) => {\r\n this.additionalShapes = this.additionalShapes.filter(shape => {\r\n if (shape.line.id === line.id) {\r\n workspace.removeShapeById(shape.backsplashShapeId);\r\n return false;\r\n }\r\n return true;\r\n });\r\n };\r\n\r\n removeShapeFromList = (shapeToRemove) => {\r\n this.additionalShapes = this.additionalShapes.filter(additionalShape => additionalShape.backsplashShapeId !== shapeToRemove.id);\r\n };\r\n}\r\n\r\nexport default CabinetShapes;\r\n","import * as types from '../actions/actionTypes';\r\nexport const ACTIVE_ROOM_TYPE = {\r\n category: 'category',\r\n roomGroup: 'roomGroup',\r\n quote: 'quote',\r\n}\r\n\r\nconst initialState = {\r\n menuOpened: \"\",\r\n menuOpenedLock: false,\r\n activeButton: null,\r\n activeSubMenuButton: null,\r\n activeLevel3Button: null,\r\n activeRoom: null,\r\n activeRoomId: null,\r\n activeRoomIndex: null,\r\n activeRoomType: null,\r\n isFreeDrawMode: false,\r\n isWallsUpMode: true,\r\n isWallsLockMode: true,\r\n roomSwitcher: {\r\n isVisible: false\r\n },\r\n roomLayouts: [],\r\n contextMenu: {\r\n isOpened: false,\r\n activeMenu: \"\",\r\n pos: {},\r\n parent: null\r\n },\r\n contextMenuV2: {\r\n isOpened: false,\r\n menuItems: [],\r\n position: {}\r\n },\r\n systemMessage: {\r\n isOpened: false,\r\n title: \"\",\r\n text: \"\"\r\n },\r\n ar3dPopup: {\r\n isOpened: false,\r\n contentType: false\r\n },\r\n systemDeleteMessage: {\r\n isOpened: false,\r\n shape: null\r\n },\r\n sqftPopup: {\r\n title: \"\",\r\n content: \"\",\r\n isOpened: false,\r\n confirmCallback: new Function (),\r\n confirmText: \"\",\r\n cancelCallback: new Function (),\r\n cancelText: \"\"\r\n },\r\n changeValuePopups: [],\r\n validationPopups: [],\r\n shapeIdsWithMissingFeature: [],\r\n isShapeFeatureMissing: false,\r\n isITextEditing: false,\r\n isSlabPlaceholderOverlapsWithMultipleShapes: false,\r\n validationMessage: {},\r\n reCacheMenuCounter: 0,\r\n cabinetRelatedItems: [],\r\n};\r\n\r\nexport default function (state = initialState, action) {\r\n let changeValuePopups;\r\n let validationPopups;\r\n switch (action.type) {\r\n case types.SET_SQFT_MENU_OPENED:\r\n case types.SET_SQFT_MENU_LOCK:\r\n case types.SET_SQFT_MENU_ACTIVE_BUTTON:\r\n case types.SET_SQFT_ACTIVE_SUB_MENU_BUTTON:\r\n case types.SET_SQFT_ACTIVE_LEVEL3_BUTTON:\r\n case types.SET_SQFT_ACTIVE_ROOM:\r\n case types.SET_SQFT_ACTIVE_ROOM_ID:\r\n case types.SET_SQFT_ROOM_LAYOUTS:\r\n case types.SET_SQFT_ACTIVE_ROOM_TYPE:\r\n case types.SET_SQFT_ACTIVE_ROOM_INDEX:\r\n case types.SET_FREE_DRAW_MODE:\r\n case types.SET_WALLS_UP_MODE:\r\n case types.SET_WALLS_LOCK_MODE:\r\n case types.SET_SHAPE_IDS_WITH_MISSING_FEATURES:\r\n case types.SET_CHANGE_SHAPE_FEATURE_MISSING_MESSAGE:\r\n case types.SET_IS_ITEXT_EDITING:\r\n case types.SET_SLAB_PLACEHOLDER_OVERLAPS_WITH_MULTIPLE_SHAPES:\r\n case types.SET_RE_CACHE_MENU_COUNTER:\r\n case types.SET_CABINET_RELATED_ITEMS:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.ADD_SHAPE_ID_WITH_MISSING_FEATURES:\r\n return Object.assign({}, state, {\r\n shapeIdsWithMissingFeature: [...state.shapeIdsWithMissingFeature, action.payload]\r\n });\r\n case types.SET_SQFT_ROOM_SWITCHER_VISIBLE:\r\n return Object.assign({}, state, {\r\n roomSwitcher: {...state.roomSwitcher, ...{isVisible: action.payload.isVisible}}\r\n });\r\n case types.SET_SQFT_CONTEXT_MENU:\r\n return Object.assign({}, state, {\r\n contextMenu: {...state.contextMenu, ...action.payload.contextMenu}\r\n });\r\n case types.SET_SQFT_SYSTEM_MESSAGE:\r\n return Object.assign({}, state, {\r\n systemMessage: {...state.systemMessage, ...action.payload.systemMessage}\r\n });\r\n case types.SET_SQFT_AR3D_POPUP:\r\n return Object.assign({}, state, {\r\n ar3dPopup: {...state.ar3dPopup, ...action.payload.ar3dPopup}\r\n });\r\n case types.SET_SQFT_POPUP:\r\n return Object.assign({}, state, {\r\n sqftPopup: {...state.sqftPopup, ...action.payload.sqftPopup}\r\n });\r\n case types.SET_SQFT_CONTEXT_MENU_V2:\r\n return Object.assign({}, state, {\r\n contextMenuV2: {...state.contextMenuV2, ...action.payload.contextMenuV2}\r\n });\r\n case types.SET_SQFT_SYSTEM_DELETE_MESSAGE:\r\n return Object.assign({}, state, {\r\n systemDeleteMessage: {...state.systemDeleteMessage, ...action.payload.systemDeleteMessage}\r\n });\r\n\r\n case types.SET_CHANGE_VALUE_POPUPS:\r\n state = {...state, changeValuePopups: action.payload.changeValuePopups};\r\n break;\r\n case types.ADD_CHANGE_VALUE_POPUP:\r\n return Object.assign({}, state, {\r\n changeValuePopups: [...state.changeValuePopups, action.payload]\r\n });\r\n case types.CHANGE_VALUE_POPUP:\r\n changeValuePopups = state.changeValuePopups.map((item) => {\r\n if (item.id !== action.payload.id) { return item }\r\n\r\n return {\r\n ...item,\r\n ...action.payload\r\n }\r\n })\r\n return Object.assign({}, state, {changeValuePopups: changeValuePopups });\r\n case types.DELETE_CHANGE_VALUE_POPUP:\r\n changeValuePopups = state.changeValuePopups.filter((row) => row.id !== action.payload.id);\r\n\r\n return Object.assign({}, state, {\r\n changeValuePopups: changeValuePopups\r\n });\r\n\r\n case types.SET_VALIDATION_POPUPS:\r\n state = {...state, validationPopups: action.payload.validationPopups};\r\n break;\r\n case types.ADD_VALIDATION_POPUP:\r\n return Object.assign({}, state, {\r\n validationPopups: [...state.validationPopups, action.payload]\r\n });\r\n case types.VALIDATION_POPUP:\r\n validationPopups = state.validationPopups.map((item) => {\r\n if (item.id !== action.payload.id) { return item }\r\n\r\n return {\r\n ...item,\r\n ...action.payload\r\n }\r\n })\r\n return Object.assign({}, state, {validationPopups: validationPopups });\r\n case types.DELETE_VALIDATION_POPUP:\r\n validationPopups = state.validationPopups.filter((row) => row.id !== action.payload.id);\r\n\r\n return Object.assign({}, state, {\r\n validationPopups: validationPopups\r\n });\r\n default:\r\n return state\r\n }\r\n}\r\n","import * as types from '../actions/actionTypes';\r\nimport {hardCodeIsModerno} from \"../misc/fabricatorHardcode\";\r\n\r\nexport const DEFAULT_SLAB_IMAGE_PART = 60;\r\nexport const SLAB_IMAGE_TYPES = {\r\n placeholder: \"placeholder\",\r\n upload: \"upload\"\r\n}\r\nconst isModerno = hardCodeIsModerno();\r\n\r\nconst initialState = {\r\n isShowSlabTool: false,\r\n isSlabToolVisited: false,\r\n isMeasurementVisibleInSlabMode: false,\r\n roomsWithVisitedSlabTool: [],\r\n searchText: \"\",\r\n activeSlabId: 0,\r\n selectedImage: \"\",\r\n activeStep: 1,\r\n slabImageType: null,\r\n slabImageHeight: isModerno ? 0 : 60,\r\n slabImageWidth: isModerno ? 0 : 126,\r\n slabAspectRatio: 0,\r\n croppedSlabImages: [],\r\n pricePerArea: 0,\r\n cropperData: {\r\n x: 0,\r\n y: 0,\r\n width: 0,\r\n height: 0,\r\n rotate: 0,\r\n scaleX: 0,\r\n scaleY: 0\r\n },\r\n activeSlabUrl: \"\",\r\n isSizeValidationFailed: false,\r\n isSlabPricingEnabled: true,\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n let filteredImages;\r\n switch(action.type) {\r\n case types.SHOW_SLAB_TOOL:\r\n case types.SET_SLAB_TOOL_VISITED:\r\n case types.SET_ACTIVE_SLAB_ID:\r\n case types.SET_ACTIVE_SLAB_URL:\r\n case types.SET_SQFT_SLAB_SEARCH_TEXT:\r\n case types.SET_SQFT_SLAB_ASPECT_RATIO:\r\n case types.SET_SQFT_SLAB_IMAGE_WIDTH:\r\n case types.SET_SQFT_SLAB_IMAGE_HEIGHT:\r\n case types.SET_SQFT_SLAB_ACTIVE_STEP:\r\n case types.SET_SQFT_SLAB_CROPPER_DATA:\r\n case types.SET_PRICE_PER_AREA:\r\n case types.SET_SLAB_IMAGE_TYPE:\r\n case types.SET_IS_MEASUREMENT_VISIBLE_IN_SLAB_MODE:\r\n case types.SET_IS_SIZE_VALIDATION_FAILED:\r\n case types.SET_IS_SLAB_PRICING_ENABLED:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_SQFT_CROPPED_SLAB_IMAGES:\r\n state = {...state, croppedSlabImages: action.payload.croppedSlabImages};\r\n break;\r\n case types.ADD_SQFT_CROPPED_SLAB_IMAGE:\r\n return Object.assign({}, state, {\r\n croppedSlabImages: [...state.croppedSlabImages, action.payload]\r\n });\r\n case types.ADD_ROOM_WITH_VISITED_SLAB_TOOL:\r\n if (!state.roomsWithVisitedSlabTool.includes(action.payload)) {\r\n return Object.assign({}, state, {\r\n roomsWithVisitedSlabTool: [...state.roomsWithVisitedSlabTool, action.payload]\r\n });\r\n }\r\n return state\r\n case types.DELETE_CROPPED_SLAB_IMAGE:\r\n filteredImages = state.croppedSlabImages.filter((row) => row.id !== action.payload.id);\r\n\r\n return Object.assign({}, state, {\r\n croppedSlabImages: filteredImages\r\n });\r\n\r\n }\r\n\r\n return state;\r\n}\r\n","import axios from \"axios\";\r\n\r\nexport const AxiosInstance = axios.create({\r\n baseURL: document.kvConfig.domain || \"\",\r\n // timeout: 120000,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n }\r\n});\r\n\r\n// AxiosInstance.interceptors.response.use((response) => {\r\n// const {serverState} = store.getState();\r\n// if (!serverState.networkConnection) {\r\n// store.dispatch(setNetworkConnection(true))\r\n// }\r\n// return response;\r\n// }, (error) => {\r\n// // Do something with response error\r\n// if (error && error.toJSON && error.toJSON().message === \"Network Error\") {\r\n// store.dispatch(setNetworkConnection(false))\r\n// }\r\n// return Promise.reject(error);\r\n// });\r\n\r\nexport const leadApiGet = (url) => {\r\n return AxiosInstance.get(url)\r\n};\r\n\r\nexport const leadApiPost = (url, data, headers = null) => {\r\n return AxiosInstance.post(url, data, headers ? {headers} : null);\r\n}\r\n","export const VISIT_ROUTES = {\r\n home: \"/\",\r\n // personal: \"/personal/:activeSubStep?\",\r\n // project: \"/project/:activeSubStep?\",\r\n // contact: \"/contact\",\r\n // appointment: \"/appointment/:activeSubStep?\",\r\n wizard: \"/wizard/:wizardId?/:leadStepName?/:activeSubStep?\",\r\n contact: \"/contact\",\r\n thanks: \"/thanks\",\r\n review: \"/review\",\r\n success: \"/success\",\r\n};\r\n\r\n// export const VISIT_ROUTES = {\r\n// home: \"/:wizardId?\",\r\n// product: \"/:wizardId?/product/:activeSubStep?\",\r\n// personal: \"/:wizardId?/personal/:activeSubStep?\",\r\n// contact: \"/:wizardId?/contact\",\r\n// appointment: \"/:wizardId?/appointment/:activeSubStep?\",\r\n// review: \"/:wizardId?/review\",\r\n// success: \"/:wizardId?/success\",\r\n// };\r\n\r\nexport const VISIT_STEPS = {\r\n wizard: \"/wizard\",\r\n personal: \"/personal\",\r\n project: \"/project\",\r\n contact: \"/contact\",\r\n appointment: \"/appointment\",\r\n review: \"/review\",\r\n success: \"/success\",\r\n}\r\n\r\nexport const IS_DEV_MODE = window.location.href.indexOf('dev=1') !== -1 || document.kvConfig.devMode;\r\nexport const SKIP_CALENDAR = window.location.href.indexOf('skip=1') !== -1;\r\n","export const SET_USER_VALUE = \"SET_USER_VALUE\";\r\nexport const SET_USER_LOCATION = \"SET_USER_LOCATION\";\r\nexport const SET_USER_ERRORS = \"SET_USER_ERRORS\";\r\nexport const SET_REGISTERED_USER_DATA = \"SET_REGISTERED_USER_DATA\";\r\n\r\nexport const setUserInfo = (name, value) => ({\r\n type: SET_USER_VALUE,\r\n payload: {name, value}\r\n});\r\n\r\nexport const setUserLocation = (name, value) => ({\r\n type: SET_USER_LOCATION,\r\n payload: {name, value}\r\n});\r\n\r\nexport const setUserErrors = (name, errors = []) => ({\r\n type: SET_USER_ERRORS,\r\n payload: {name, errors}\r\n});\r\n\r\nexport const setRegisteredUserData = (registeredUserEmail, registeredUserAuthToken) => ({\r\n type: SET_REGISTERED_USER_DATA,\r\n payload: {registeredUserEmail, registeredUserAuthToken}\r\n});\r\n\r\nexport const replacePhoneToMatchMask = (phone) => {\r\n\r\n // return phone.replace(/^\\(?(\\d{3})\\)?\\s?(\\d{3})\\-?(\\d+)$/, \"($1) $2-$3\") old mask, not replacing while typing\r\n\r\n // Remove all non-digit characters\r\n let cleaned = phone.replace(/\\D/g, '');\r\n\r\n // Format as (xxx) xxx-xxxx as the user types\r\n if (cleaned.length > 0) {\r\n cleaned = `(${cleaned}`;\r\n }\r\n if (cleaned.length > 4) {\r\n cleaned = `${cleaned.slice(0, 4)}) ${cleaned.slice(4)}`;\r\n }\r\n if (cleaned.length > 9) {\r\n cleaned = `${cleaned.slice(0, 9)}-${cleaned.slice(9)}`;\r\n }\r\n\r\n // Update the input value with the formatted number\r\n return cleaned.slice(0, 14); // Maximum length is 14 including the formatting characters\r\n}\r\nexport const replaceMaskToPassPhoneOnTheBackend = (phone) => {\r\n if (!phone) {\r\n return \"\"\r\n }\r\n return phone\r\n .replace(/ /g,\"\")\r\n .replace(/-/g,\"\")\r\n .replace(/\\(/g,\"\")\r\n .replace(/\\)/g,\"\")\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {countertopGroupThumbnail} from \"../assets\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PLACEMENTS} from \"../constants\";\r\n\r\nimport Countertop from \"../subparts/countertop/countertop\";\r\nimport Faucet from \"../subparts/countertop/faucet\";\r\nimport Sink from \"../subparts/countertop/sink\";\r\nimport Stovetop from \"../subparts/countertop/stovetop\";\r\n\r\nimport Cutouts from \"../subparts/countertop/cutouts\";\r\nimport EdgeProfile from \"../subparts/countertop/edgeProfile\";\r\nimport Radius from \"../subparts/countertop/radius\";\r\n\r\nexport default class CountertopGroup extends Part {\r\n static id = 'Countertop';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Countertop';\r\n this.partThumbnail = countertopGroupThumbnail;\r\n this.translateId = \"visualizer.kitchen.countertop\";\r\n\r\n // related items\r\n this.countertop = null;\r\n this.faucet = null;\r\n this.sink = null;\r\n\r\n this.edge = null;\r\n this.cutouts = null;\r\n this.radius = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n shouldLoadInDifferentGroups = false,\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Countertop\":\r\n relatedItemName = \"countertop\";\r\n RelatedItemClass = Countertop;\r\n break;\r\n case \"Edge Profile\":\r\n shouldLoadInDifferentGroups = true;\r\n relatedItemName = \"edge\";\r\n RelatedItemClass = EdgeProfile;\r\n break;\r\n case \"Cutouts\":\r\n relatedItemName = \"cutouts\";\r\n RelatedItemClass = Cutouts;\r\n break;\r\n case \"Radius\":\r\n relatedItemName = \"radius\";\r\n RelatedItemClass = Radius;\r\n break;\r\n case \"Faucet\":\r\n if ((dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Countertop)) || !dbFeature.metaData[\"Placement\"]) {\r\n if (!dbFeature.metaData[\"Placement\"]) {\r\n shouldLoadInDifferentGroups = true;\r\n }\r\n relatedItemName = \"faucet\";\r\n RelatedItemClass = Faucet;\r\n }\r\n break;\r\n case \"Sink\":\r\n if ((dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Countertop)) || !dbFeature.metaData[\"Placement\"]) {\r\n if (!dbFeature.metaData[\"Placement\"]) {\r\n shouldLoadInDifferentGroups = true;\r\n }\r\n relatedItemName = \"sink\";\r\n RelatedItemClass = Sink;\r\n }\r\n break;\r\n case \"Stovetop\":\r\n if ((dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Countertop)) || !dbFeature.metaData[\"Placement\"]) {\r\n if (!dbFeature.metaData[\"Placement\"]) {\r\n shouldLoadInDifferentGroups = true;\r\n }\r\n relatedItemName = \"stovetop\";\r\n RelatedItemClass = Stovetop;\r\n }\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return !shouldLoadInDifferentGroups;\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Countertop', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n subParts(withHidden = true, hideWithoutFeatures = false) {\r\n return this.getRelatedItems()\r\n .filter(item => {\r\n if (hideWithoutFeatures && (item.partId === \"cutouts\" || item.partId === \"radius\")) {\r\n return false\r\n }\r\n return this.filterRelatedItem(item, withHidden)\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n}\r\n","export const GROHE_POST_MESSAGES_ACTIONS = {\r\n exit: \"EXIT\",\r\n save: \"SAVE\",\r\n addToCart: \"ADDTOCART\",\r\n signIn: \"SIGNIN\",\r\n openMiniCart: \"OPENMINICART\",\r\n}\r\n\r\nexport const GROHE_ON_OPEN_ACTION = {\r\n shareFacebook: \"facebook\",\r\n shareTwitter: \"twitter\",\r\n sharePinterest: \"pinterest\",\r\n saveQuote: \"saveQuote\",\r\n}\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {\r\n getFeatureIsLocked,\r\n getFeatureUnit,\r\n getPriceWithCurrency,\r\n toFixedFeatureCost,\r\n toFixedPrice\r\n} from \"../../../../../misc/helpers\";\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport {getCurrentLayout} from \"../../../../appLayout\";\r\nimport {isVisibleForNavigation} from \"../../../../../misc/displayLogic\";\r\nimport LookFeaturePriceLocked from \"./lookFeaturePriceLocked\";\r\nimport {pricingIsLocked} from \"../../lookNavigationFunctions\";\r\nimport {getCartItemsCount} from \"../../../grohe/groheNavigation/groheFunctions\";\r\nimport MaterialSpinner from \"../../../../ui/materialSpinner\";\r\nimport FeaturePriceInput from \"../../../../selectionWindow/selectionFeatureInfo/featurePriceInput\";\r\nimport {wizardGroupInterface} from \"../../../../../interfaces/wizardItemInterface\";\r\n\r\nconst LookFeaturePrice = (props) => {\r\n\r\n const {lookFeature, quantity, fabricatorData, intl, withUnit, isBundleChild, className, listPage, mainContentPrice,\r\n isPhoneNumberValidated, showPriceAlways, wizardGroup} = props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n if (!lookFeature) {\r\n return null;\r\n }\r\n\r\n const getQuote = fabricatorSettings.enableQuote && !isPhoneNumberValidated;\r\n\r\n let showPriceLocked = !showPriceAlways && getFeatureIsLocked(lookFeature);\r\n if (!showPriceLocked && listPage) {\r\n showPriceLocked = getQuote;\r\n }\r\n if (wizardGroup && wizardGroup.skipLockDontApply) {\r\n showPriceLocked = false;\r\n }\r\n const {showPrice} = pricingIsLocked();\r\n\r\n if (showPriceLocked) {\r\n if (!showPrice && listPage) {\r\n return null\r\n }\r\n let lockedText = ;\r\n // if (getQuote) { // we already have icon and locked, we dont need $,icon,locked\r\n // lockedText = (\r\n // \r\n // {fabricatorSettings.currencySign}\r\n // {lockedText}\r\n // \r\n // )\r\n // }\r\n return className ?
    {lockedText}
    : lockedText\r\n }\r\n\r\n if (!showPrice || !isVisibleForNavigation(lookFeature, true)) {\r\n return null\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n if (!layout.initialized) {\r\n return \r\n }\r\n if (!listPage && !layout.partIdExistInQtCategory(lookFeature.partId, true) && !isBundleChild) {\r\n return null;\r\n }\r\n\r\n const featurePrice = +toFixedFeatureCost(lookFeature, Number.isInteger(quantity) ? quantity : 1);\r\n\r\n if (!featurePrice && !lookFeature.dbFeature.priceEditable) { // if it is zero - we are hiding the price, no need to show included\r\n return null\r\n }\r\n\r\n let unit = \"\";\r\n if (withUnit) {\r\n unit = getFeatureUnit(lookFeature, intl, fabricatorData);\r\n }\r\n\r\n if (mainContentPrice && document.kvConfig.isBackend && lookFeature.dbFeature.priceEditable) {\r\n const price = toFixedPrice(featurePrice);\r\n return \r\n }\r\n\r\n const finalText = withUnit\r\n ? `${unit}: ${getPriceWithCurrency(fabricatorSettings, toFixedPrice(featurePrice), lookFeature)}`\r\n : getPriceWithCurrency(fabricatorSettings, toFixedPrice(featurePrice), lookFeature)\r\n\r\n return className ?
    {finalText}
    : finalText\r\n\r\n};\r\n\r\nLookFeaturePrice.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface),\r\n withUnit: PropTypes.bool,\r\n quantity: PropTypes.number,\r\n className: PropTypes.string,\r\n listPage: PropTypes.bool,\r\n showPriceAlways: PropTypes.bool,\r\n mainContentPrice: PropTypes.bool,\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n}\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n const {isPhoneNumberValidated} = store.userState; // to update component when user is logged in\r\n const {cartItems} = store.cartState; // to update component when user is logged in\r\n const cartItemsLength = getCartItemsCount(cartItems, ownProps.intl, true);\r\n const {qtCategoriesLoaded} = store.qtState; // to update price after categories are loaded\r\n\r\n // we need force here to check every time count is updated, it is just for update\r\n\r\n // const featureInfoCount = ownProps.lookFeature && ownProps.lookFeature.dbFeature\r\n // && ownProps.lookFeature.dbFeature.priceEditable && ownProps.mainContentPrice\r\n // ? store.selectionState.featureInfoCount\r\n // : null;\r\n\r\n const featureInfoCount = store.selectionState.featureInfoCount;\r\n\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n isPhoneNumberValidated,\r\n cartItemsLength, // we need to reload item price if quantity is changed (complex logic dependency)\r\n qtCategoriesLoadedLength: qtCategoriesLoaded.length,\r\n featureInfoCount,\r\n };\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps)(LookFeaturePrice)\r\n)\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nconst FeatureDescription = (props) => {\r\n\r\n const {feature, intl, fabricatorData, brief, className, textLength} = props;\r\n\r\n let desc = \"\";\r\n if ((fabricatorData.isLowes || fabricatorData.isCaesarStone) && intl.messages) {\r\n if (intl.locale === \"fr-FR\" && intl.messages[\"transDoc.description_FR.\" + feature.dbFeature.sharedFeatureName]) {\r\n desc = intl.formatMessage({id: \"transDoc.description_FR.\" + feature.dbFeature.sharedFeatureName})\r\n } else if (intl.locale === \"pl-PL\" && intl.messages[\"transDoc.customTranslateDescription_PL.\" + feature.dbFeature.sharedFeatureName]) {\r\n desc = intl.formatMessage({id: \"transDoc.customTranslateDescription_PL.\" + feature.dbFeature.sharedFeatureName})\r\n } else {\r\n desc = feature.dbFeature.description;\r\n }\r\n } else {\r\n desc = feature.dbFeature.description;\r\n }\r\n\r\n if (!desc) {\r\n return null\r\n }\r\n\r\n if (textLength && desc.length > textLength) {\r\n desc = desc.substring(0, textLength) + \"...\"\r\n } else if (brief && desc && desc.length > 200) {\r\n desc = desc.substring(0, 200) + \"...\"\r\n }\r\n\r\n return

    \r\n};\r\n\r\nFeatureDescription.propTypes = {\r\n feature: PropTypes.object.isRequired,\r\n className: PropTypes.string,\r\n brief: PropTypes.bool,\r\n textLength: PropTypes.number,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(FeatureDescription)\r\n)\r\n\r\n","'use strict';\r\n\r\nObject.defineProperty(exports, \"__esModule\", {\r\n value: true\r\n});\r\n\r\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\r\n\r\nexports.showLoading = showLoading;\r\nexports.hideLoading = hideLoading;\r\nexports.resetLoading = resetLoading;\r\nexports.loadingBarReducer = loadingBarReducer;\r\n\r\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\r\n\r\nvar SHOW = exports.SHOW = 'loading-bar/SHOW';\r\nvar HIDE = exports.HIDE = 'loading-bar/HIDE';\r\nvar RESET = exports.RESET = 'loading-bar/RESET';\r\n\r\nvar DEFAULT_SCOPE = exports.DEFAULT_SCOPE = 'default';\r\n\r\nfunction showLoading() {\r\n var scope = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_SCOPE;\r\n\r\n return {\r\n type: SHOW,\r\n payload: {\r\n scope: scope\r\n }\r\n };\r\n}\r\n\r\nfunction hideLoading() {\r\n var scope = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_SCOPE;\r\n\r\n return {\r\n type: HIDE,\r\n payload: {\r\n scope: scope\r\n }\r\n };\r\n}\r\n\r\nfunction resetLoading() {\r\n var scope = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_SCOPE;\r\n\r\n return {\r\n type: RESET,\r\n payload: {\r\n scope: scope\r\n }\r\n };\r\n}\r\n\r\nfunction loadingBarReducer() {\r\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\r\n var action = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\r\n\r\n var _ref = action.payload || {},\r\n _ref$scope = _ref.scope,\r\n scope = _ref$scope === undefined ? DEFAULT_SCOPE : _ref$scope;\r\n\r\n switch (action.type) {\r\n case SHOW:\r\n return _extends({}, state, _defineProperty({}, scope, (state[scope] || 0) + 1));\r\n case HIDE:\r\n return _extends({}, state, _defineProperty({}, scope, Math.max(0, (state[scope] || 1) - 1)));\r\n case RESET:\r\n return _extends({}, state, _defineProperty({}, scope, 0));\r\n default:\r\n return state;\r\n }\r\n}","import {SHAPE_PART_ID, SHAPE_TYPE} from \"../constants\";\r\nimport sqftShapeManager from \"../components/canvas/store/sqftShapeManager\";\r\nimport Polygon from \"../components/canvas/core/shapes/layouts/polygon\";\r\nimport {getAreaByShoelaceFormula} from \"./sqftHelper\";\r\nimport Wall from \"../components/canvas/core/shapes/wall\";\r\nimport workspaceControllers from \"../components/canvas/store/workspaceControllers\";\r\n\r\nexport const enableFreeDrawMode = () => {\r\n\r\n}\r\n\r\nexport const disableFreeDrawMode = () => {\r\n\r\n}\r\n\r\n/**\r\n * @param pointCords array\r\n * @param partId string\r\n * @param isClonePointRequired boolean\r\n * @param historyPosition\r\n * @param canPointsBeMoved\r\n * @param fromLayout\r\n * @param shapeParams\r\n * @param shapeCreationParams\r\n */\r\nexport const createShapeFromPoints = (\r\n pointCords,\r\n partId = SHAPE_PART_ID.seamPiece,\r\n isClonePointRequired = false,\r\n historyPosition = null,\r\n canPointsBeMoved = false,\r\n fromLayout = null,\r\n shapeParams = {},\r\n shapeCreationParams = {}\r\n) => {\r\n let polygonLines = new Polygon(pointCords, isClonePointRequired, canPointsBeMoved);\r\n let polygonArea = getAreaByShoelaceFormula(polygonLines);\r\n if (polygonArea < 0) {\r\n //create counterclockwise shape\r\n polygonLines = new Polygon(pointCords.reverse(), isClonePointRequired, canPointsBeMoved);\r\n polygonArea = getAreaByShoelaceFormula(polygonLines);\r\n }\r\n\r\n if (shapeCreationParams.minimumShapeArea && polygonArea < shapeCreationParams.minimumShapeArea) {\r\n console.log(\"polygon area is too small\");\r\n console.log(\"polygon area\", polygonArea);\r\n console.log(\"minimum polygon Area\", shapeCreationParams.minimumShapeArea);\r\n return null\r\n }\r\n if (shapeCreationParams.maximumShapeArea && polygonArea > shapeCreationParams.maximumShapeArea) {\r\n console.log(\"polygon area is too big\");\r\n console.log(\"polygon area\", polygonArea);\r\n console.log(\"maximum shape area\", shapeCreationParams.maximumShapeArea);\r\n return null\r\n }\r\n if (shapeCreationParams.maximumLineDistance) {\r\n for (const polygonLine of polygonLines) {\r\n if (polygonLine.getLineDistance() > shapeCreationParams.maximumLineDistance) {\r\n console.log(\"polygon line is too big\");\r\n console.log(\"polygon line distance\", polygonLine.getLineDistance());\r\n console.log(\"maximum line Distance\", shapeCreationParams.maximumLineDistance);\r\n return null\r\n }\r\n }\r\n }\r\n\r\n return sqftShapeManager.addShape(\r\n polygonLines, SHAPE_TYPE.polygon, historyPosition, partId, fromLayout, shapeParams\r\n );\r\n};\r\n\r\n/**\r\n *\r\n * @param points {array}\r\n * @param centerPoint {object}\r\n * @param lockedAngleStep\r\n */\r\nexport const createWallFromPointsV2 = (points, centerPoint, lockedAngleStep) => {\r\n const wall = new Wall(points, centerPoint, lockedAngleStep);\r\n workspaceControllers.walls.addResource(wall);\r\n return wall\r\n}\r\n\r\n/**\r\n *\r\n * @param points array\r\n */\r\nexport const createShapeFromCorePoints = (points) => {\r\n void points;\r\n}\r\n\r\n/**\r\n *\r\n * @param points array\r\n */\r\nexport const createPolygonFromCorePoints = (points) => {\r\n void points;\r\n //return new SQFTShapeFigure(points);\r\n}\r\n","import _ from 'lodash';\r\n\r\nimport workspace from \"../workspace\";\r\nimport {POINT_PROPERTY} from \"../../../../constants\";\r\nimport {\r\n getCountertopArea,\r\n //getExportedManualCalculateBacksplashes,\r\n getExportedManualCalculateCountertops,\r\n //getExportedManualCalculateEdges,\r\n getSlabImagesAreaGrouped,\r\n manualCalculationsCountertopArea\r\n} from \"../../../../helpers/sqftCalculations\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport store from \"./../../../../../../store\";\r\nimport sqftImageManager from \"../../store/sqftImageManager\";\r\nimport slabWorkspace from \"../slab/slabWorkspace\";\r\nimport {loaderDisable, loaderEnable} from \"../../../../../ui/loaderView\";\r\nimport html2canvas from \"html2canvas\";\r\nimport workspaceControllers, {getControllersExportData} from \"../../store/workspaceControllers\";\r\nimport {getQtCatName} from \"../../../../helpers/sqftQuotesHelper\";\r\nimport {\r\n SHAPE_PART_IDS_FROM_ADDITIONAL_SHAPES_LIST,\r\n} from \"../../../../constantsFeature\";\r\n\r\nexport const prepareSQFTData = async () => {\r\n const state = store.getState();\r\n const roomsWithVisitedSlabTool = state.sqftSlabState.roomsWithVisitedSlabTool;\r\n const showManualCalculation = state.sqftManualCalculationState.showManualCalculation;\r\n const slabImages = state.sqftSlabState.croppedSlabImages;\r\n const measureUnit = state.sqftState.measureUnit;\r\n const miteredEdges = workspace.miteredController ? workspace.miteredController.getExportedMiteredEdges() : [];\r\n let shapesList = workspace.getShapes()\r\n .filter(shp => { return shp.export &&\r\n !SHAPE_PART_IDS_FROM_ADDITIONAL_SHAPES_LIST.includes(shp.partId)\r\n })\r\n .map(shp => shp.export())\r\n .concat(miteredEdges);\r\n\r\n const totalSQFTArea = getCountertopArea();\r\n const qtCatName = getQtCatName();\r\n\r\n let workspaceCenter = _.clone(workspace.getCenter());\r\n const sqftApplianceImages = workspace.resultImages.getCanvasApplianceImages();\r\n\r\n const sqFtSlabImage = roomsWithVisitedSlabTool.includes(qtCatName) && slabImages && slabImages.length > 0 ? workspace.resultImages.getSlabResultImage(config.defaultScaleExport) : \"\";\r\n const sqFtSlabCalcImage = roomsWithVisitedSlabTool.includes(qtCatName) ? workspace.resultImages.getSlabCalcImage(config.defaultScaleExport) : \"\";\r\n const sqftCanvasImage = await getCanvasImage(showManualCalculation);\r\n const images3D = workspaceControllers.images3d.getResources();\r\n\r\n workspace.setCenter(workspaceCenter.x * 2 , workspaceCenter.y * 2);\r\n\r\n //save images local (for dev purposes)\r\n\r\n // const link = document.createElement(\"a\");\r\n // link.href = sqFtSlabImage.replace(\"image/png\", \"image/octet-stream\");\r\n // link.download = 'slabImage' + Date.now() + '.png';\r\n // document.body.appendChild(link);\r\n // link.click();\r\n // document.body.removeChild(link);\r\n\r\n return {\r\n bumpouts: workspace.getBumpouts(),\r\n canvasImage: sqftCanvasImage,\r\n sqFtSlabImage: sqFtSlabImage,\r\n sqFtSlabCalcImage: sqFtSlabCalcImage,\r\n sqftApplianceImages: sqftApplianceImages,\r\n images3D: images3D,\r\n slabImages: sqftImageManager.getExportedSlabImages(),\r\n measureUnit: measureUnit,\r\n sinks: workspace.getSink(),\r\n radii: workspace.getPointProperty(POINT_PROPERTY.arcLength),\r\n corners: workspace.getPointProperty(POINT_PROPERTY.angle),\r\n //walls: workspace.getShapeType('wall'),\r\n totalInches: totalSQFTArea.totalArea,\r\n shapeLength: totalSQFTArea.shapeLength,\r\n objIds: workspace.getObjIds(),\r\n removedFeatures: workspaceControllers.removedFeatures.getResources(),\r\n textBoxes: workspace.textBoxManager.getExportedTextBoxes(),\r\n slabAdditionalShapesList: slabWorkspace.slabAdditionalShapes.exportData(),\r\n slabImagesTotalArea: getSlabImagesAreaGrouped(),\r\n squareFeet: showManualCalculation ? manualCalculationsCountertopArea(): totalSQFTArea.totalAreaToMeasureUnit,\r\n //edges: showManualCalculation ? getExportedManualCalculateEdges() : workspace.getShapeType('edge').concat(miteredEdges),\r\n //backsplashes: showManualCalculation ? getExportedManualCalculateBacksplashes() : workspace.getShapeType('backsplash'),\r\n countertops: showManualCalculation ? getExportedManualCalculateCountertops() : shapesList,\r\n manualCalculate: showManualCalculation,\r\n controllers: getControllersExportData(),\r\n underlayment: workspace.underlaymentController ? workspace.underlaymentController.exportData() : []\r\n }\r\n};\r\n\r\nconst getCanvasImage = async (showManualCalculation) => {\r\n if (showManualCalculation) {\r\n const manualDiv = document.querySelector(\".manual-window\");\r\n if (manualDiv) {\r\n loaderEnable(\"loader.savingQuoteText\");\r\n manualDiv.classList.add(\"manual-window--screenshot\");\r\n try {\r\n const canvasElement = await html2canvas(manualDiv);\r\n manualDiv.classList.remove(\"manual-window--screenshot\");\r\n loaderDisable();\r\n if (canvasElement && canvasElement.toDataURL) {\r\n return canvasElement.toDataURL(\"image/jpeg\", 0.7) // we don't need super quality here\r\n }\r\n } catch (e) {\r\n loaderDisable();\r\n }\r\n }\r\n }\r\n return workspace.resultImages.getCanvasImageScaled(config.defaultScaleExport);\r\n};\r\n","import point from \"../point\";\r\nimport line from \"../line\";\r\n\r\nconst Polygon = (pointsCords, clonePoint = false, canPointsBeMoved = false) => {\r\n let points = [];\r\n let lines = [];\r\n\r\n for (let pointCord of pointsCords) {\r\n let newPoint = new point(pointCord.x, pointCord.y, undefined, undefined, canPointsBeMoved)\r\n if (clonePoint && pointCord instanceof point) {\r\n newPoint.import(pointCord.export());\r\n }\r\n points.push(newPoint);\r\n }\r\n for (let i in points) {\r\n if (points[+i + 1]) {\r\n lines.push(new line(points[i], points[+i + 1]))\r\n } else {\r\n lines.push(new line(points[i], points[0]))\r\n }\r\n }\r\n\r\n return lines;\r\n};\r\n\r\nexport default Polygon\r\n","import flatMap from 'lodash/flatMap';\r\n\r\nimport store from \"./../../store\";\r\nimport * as types from \"../../actions/actionTypes\";\r\nimport LayoutCommon from \"./layoutCommon\";\r\nimport {SQFT_FEATURES} from \"../sqft/constants\";\r\nimport {getSlabsFeatureGroup} from \"../../misc/helpers\";\r\nimport {setActivePreset} from \"../../actions/actionFunctions\";\r\n// import {getBvGroupFeatures} from \"../../api/server-api\";\r\n\r\nexport default class LayoutCommonNew extends LayoutCommon {\r\n\r\n isNewLayout = true;\r\n\r\n // /**\r\n // * Returns feature\r\n // * @param neededId {number}\r\n // * @param withOtherGroups {boolean}\r\n // * @returns feature {object}\r\n // */\r\n // getFeatureById(neededId, withOtherGroups = false) {\r\n // let allFeatures = this.getAllFeatures(withOtherGroups);\r\n // for (let i = 0; i < allFeatures.length; i++) {\r\n // if (allFeatures[i].dbFeature.id === neededId) {\r\n // return allFeatures[i];\r\n // }\r\n // }\r\n // return null\r\n // }\r\n\r\n // /**\r\n // * Returns feature\r\n // * @param skuNumber {string}\r\n // * @param featureGroupPartId {string}\r\n // * @returns feature {object}\r\n // */\r\n // getFeatureBySku(skuNumber, featureGroupPartId= \"\") {\r\n // if (featureGroupPartId) {\r\n // const featureGroupFound = this.getFeatureGroupByPartId(featureGroupPartId);\r\n // if (featureGroupFound) {\r\n // for (let i = 0; i < featureGroupFound.features.length; i++) {\r\n // if (featureGroupFound.features[i].dbFeature.sku === skuNumber) {\r\n // return featureGroupFound.features[i];\r\n // }\r\n // }\r\n // }\r\n // }\r\n // let allFeatures = this.getAllFeatures();\r\n // for (let i = 0; i < allFeatures.length; i++) {\r\n // if (allFeatures[i].dbFeature.sku === skuNumber) {\r\n // return allFeatures[i];\r\n // }\r\n // }\r\n // return null\r\n // }\r\n\r\n /**\r\n * @param partId {string}\r\n * @param compressedFeature {object}\r\n * @param featuresToLoad {Array} // only if layout is changed - we need to load features to changed feature group\r\n * @return featureLoaded {featureInterface}\r\n */\r\n getFeatureFromAllLayouts = (partId, compressedFeature, featuresToLoad) => {\r\n const {dbFeatureId} = compressedFeature;\r\n const parentItems = this.getFeatures(true);\r\n let childSubPart = null;\r\n let featureLoaded = null;\r\n parentItems.forEach(parentGroup => {\r\n if (childSubPart) {\r\n return\r\n }\r\n if (partId === SQFT_FEATURES.slabs) {\r\n childSubPart = getSlabsFeatureGroup(this)\r\n } else if (parentGroup) {\r\n childSubPart = parentGroup.subParts().find(subPart => subPart.part.partId === partId);\r\n }\r\n if (childSubPart && childSubPart.part.features) {\r\n featureLoaded = childSubPart.part.getFeatureById(dbFeatureId, true);\r\n if (!featureLoaded) { // if feature isn't found in the current layout, let's find it in another layouts\r\n let allFeatures = [];\r\n Object.keys(this.layoutNames).forEach((layoutType) => {\r\n if (layoutType !== \"All\") {\r\n allFeatures = [...allFeatures, ...childSubPart.part.featuresList[layoutType]]\r\n }\r\n });\r\n featureLoaded = allFeatures.find((feature) => feature.dbFeature.id === dbFeatureId);\r\n if (!featureLoaded\r\n && (document.kvConfig.visualizerType === \"Kitchen\" || document.kvConfig.visualizerType === \"kvScene\")\r\n && this.qtCategories && this.qtCategories.some(qtCat => qtCat.qtCategoryHasBeenChanged)\r\n && featuresToLoad.length\r\n ) {\r\n // console.info(\"Cart feature is not loaded, trying in change categories:\", dbFeatureId);\r\n this.qtCategories.forEach(qtCat => {\r\n const changedSubPart = qtCat.subParts.find(subPart => subPart.part.partId === partId);\r\n if (changedSubPart) {\r\n // console.info(\"Cart feature is not loaded, found subpart:\", cartItem);\r\n const needToLoadFeature = featuresToLoad.find(dbFeature => dbFeature.id === dbFeatureId);\r\n if (needToLoadFeature) {\r\n changedSubPart.part.setGroupFeatures([needToLoadFeature], 0, false)\r\n }\r\n featureLoaded = childSubPart.part.features.find((feature) => feature.dbFeature.id === dbFeatureId);\r\n // if (featureLoaded) {\r\n // console.info(\"Cart feature is not loaded, it's ok, we found it:\", dbFeatureId, featureLoaded);\r\n // }\r\n }\r\n })\r\n }\r\n if (!featureLoaded) {\r\n if ((partId === \"slabs\") && compressedFeature && compressedFeature.partId) {\r\n const featureGroup = this.getFeatureGroupByPartId(compressedFeature.partId);\r\n if (featureGroup) {\r\n featureLoaded = featureGroup.getFeatureById(dbFeatureId, true);\r\n }\r\n }\r\n }\r\n if (!featureLoaded) {\r\n console.error(\"Cart feature is not loaded:\", partId, dbFeatureId);\r\n }\r\n }\r\n // console.log('featureLoaded', featureLoaded);\r\n }\r\n });\r\n return featureLoaded\r\n }\r\n\r\n\r\n /**\r\n *\r\n * @param bvState {object}\r\n * @param isCartAndUserStatedUpdateNeeded {boolean}\r\n * @param useNames {boolean}\r\n * @param needToChangeLayout {boolean}\r\n * @param firstLoad {boolean}\r\n * @param isFake {boolean}\r\n */\r\n setActiveFeaturesFromObject(\r\n bvState,\r\n isCartAndUserStatedUpdateNeeded = false,\r\n useNames = false,\r\n needToChangeLayout = true,\r\n firstLoad = false,\r\n isFake = false\r\n ) {\r\n if (bvState) {\r\n\r\n const layout_type = +bvState.layout_type;\r\n needToChangeLayout = needToChangeLayout && (layout_type || layout_type === 0) && (layout_type !== +this.type);\r\n\r\n if (needToChangeLayout) {\r\n this.type = layout_type;\r\n }\r\n this.scene = bvState.scene || this.scene;\r\n\r\n console.log(\"bvState===>\", bvState);\r\n console.log(\"bvState firstLoad\", firstLoad);\r\n // to avoid checks below\r\n bvState.disabled_parts = bvState.disabled_parts || [];\r\n\r\n this.getFeatures()\r\n .forEach((parentGroup) => {\r\n let relatedItems = parentGroup.getRelatedItems();\r\n relatedItems.forEach((subPart) => {\r\n const partId = subPart.partId;\r\n let previouslySelectedItem = null;\r\n subPart.selectedFeaturesHistory.some(featureName => {\r\n previouslySelectedItem = subPart.getFeatureByPartName(featureName);\r\n return previouslySelectedItem\r\n });\r\n if (bvState.hasOwnProperty(partId) || previouslySelectedItem) {\r\n if (!bvState.disabled_parts.includes(partId)) {\r\n subPart.disabled = false\r\n }\r\n if (useNames) {\r\n const matchingFeature = (partId === \"backsplash\" && bvState[\"backsplash_type\"])\r\n ? subPart.getFeatureByBacksplashType(bvState[\"backsplash_type\"], bvState[\"backsplash\"])\r\n : subPart.getFeatureByPartName(bvState[partId]);\r\n if (matchingFeature) {\r\n subPart.activeFeature = matchingFeature;\r\n } else if (previouslySelectedItem) {\r\n subPart.activeFeature = previouslySelectedItem;\r\n }\r\n } else {\r\n subPart.activeFeature = subPart.getFeatureById(bvState[partId], true) || parentGroup.getDefaultFeature();\r\n }\r\n if (subPart.layerPositions && subPart.activeFeature) {\r\n // subPart.setLayerPositions(); // enabled // we have to set vanity on its layerPosition, grohe vanities have different sku so can not be found in the code below\r\n Object.keys(subPart.layerPositions).forEach(position => {\r\n const partIdPosition = partId + \"_\" + position;\r\n if (bvState.disabled_parts.includes(partIdPosition)) {\r\n subPart.layerPositions[position] = null;\r\n } else if (bvState[partIdPosition]) {\r\n subPart.layerPositions[position] = useNames\r\n ? subPart.getMatchingPositionFeature(position, subPart.activeFeature, isFake ? this : null)\r\n : subPart.getFeatureById(bvState[partIdPosition], true)\r\n } else if (!((position !== \"C\" && subPart.activeFeature.metaData.layerPosition === \"C\") || (subPart.activeFeature.metaData.layerPosition !== \"C\" && position === \"C\"))) {\r\n subPart.layerPositions[position] = subPart.getMatchingPositionFeature(position, subPart.activeFeature, isFake ? this : null)\r\n }\r\n })\r\n // } else if (subPart.hasAdditionalParts && (subPart.activeFeatureParts == null || !subPart.activeFeatureParts.length)) {\r\n // subPart.activeFeatureParts = subPart.setActiveFeatureParts();\r\n }\r\n subPart.placeholderChanged = !!subPart.activeFeature;\r\n // const {activeQuoteIndex} = store.getState().quotesState;\r\n // subPart.firstClick = !!subPart.activeFeature;\r\n // if (subPart.firstClick) {\r\n // console.log(\"subPart.firstClick\", subPart);\r\n // }\r\n }\r\n if (bvState.disabled_parts.includes(partId)) {\r\n subPart.disabled = true\r\n }\r\n if (!subPart.activeFeature) {\r\n // we might have features uploaded only for one room layout as in case of replacement tub on american_standard_master\r\n subPart.setDefault()\r\n }\r\n if (!subPart.disabled && subPart.layerPositions && Object.values(subPart.layerPositions).every(feature => !feature)) {\r\n subPart.setLayerPositions(); // mirror cases\r\n }\r\n if (subPart.activeFeature && firstLoad) {\r\n if (!subPart.activeFeature.notAvailableInVisualizer) {\r\n subPart.activeFeature.dbFeature.unlocked = true;\r\n }\r\n if (subPart.layerPositions) {\r\n Object.keys(subPart.layerPositions).forEach(position => {\r\n if (subPart.layerPositions[position]) {\r\n subPart.layerPositions[position].dbFeature.unlocked = true;\r\n }\r\n })\r\n }\r\n if (subPart.hasAdditionalParts && subPart.activeFeatureParts && subPart.activeFeatureParts.length) {\r\n subPart.activeFeatureParts.forEach(additionalFeature => {\r\n additionalFeature.dbFeature.unlocked = true;\r\n })\r\n }\r\n }\r\n })\r\n });\r\n\r\n if (needToChangeLayout) {\r\n this.changeLayout(this.getFeatures());\r\n }\r\n\r\n if (isCartAndUserStatedUpdateNeeded) {\r\n this.setCartStateAndUserStateFromBvState(bvState);\r\n }\r\n\r\n const layoutParts = this.designNavigationItems()\r\n .filter(parentGroup => parentGroup.part.categoryEnabled)\r\n .map((parentGroup) => parentGroup.part.partName);\r\n\r\n if (!this.isFakeLayout) {\r\n store.dispatch({\r\n type: types.SET_LAYOUT_DATA_PARTS,\r\n payload: {layoutParts}\r\n });\r\n }\r\n\r\n store.dispatch({\r\n type: types.UPDATE_CANVAS_COUNT\r\n });\r\n\r\n if (bvState.id) {\r\n store.dispatch(setActivePreset(bvState.id));\r\n }\r\n\r\n }\r\n }\r\n\r\n fixFeatureMetaData(dbFeature) {\r\n // if (Array.isArray(dbFeature.metaData.CropCoords) && !dbFeature.metaData.CropCoords[1] && dbFeature.metaData.CropCoords[0]) {\r\n // dbFeature.metaData.CropCoords = dbFeature.metaData.CropCoords[0].split(\",\"); // ['0, 460, 1060, 574'] -> ['0', ' 460', ' 1060', ' 574']\r\n // }\r\n if (!Array.isArray(dbFeature.metaData.RoomLayout) || !dbFeature.metaData.RoomLayout.length) {\r\n dbFeature.metaData.RoomLayout = [\"Layout1\"];\r\n } else {\r\n // console.log(\"dbFeature.metaData.RoomLayout\", dbFeature.metaData.RoomLayout);\r\n dbFeature.metaData.RoomLayout = dbFeature.metaData.RoomLayout.map((mValue) => {\r\n if (typeof mValue !== \"string\" || !mValue.includes(\"Layout\")) {\r\n mValue = \"Layout\" + mValue\r\n }\r\n return mValue\r\n })\r\n }\r\n Object.keys(dbFeature.metaData).forEach(key => {\r\n if (Array.isArray(dbFeature.metaData[key]) && (key !== \"CropCoords\")) {\r\n dbFeature.metaData[key] = flatMap(dbFeature.metaData[key], (metaValue => {\r\n if (typeof metaValue === \"string\") {\r\n if (metaValue.includes(\", \")) {\r\n return metaValue.split(\", \")\r\n } else if (metaValue.includes(\",\")) {\r\n return metaValue.split(\",\")\r\n }\r\n }\r\n return metaValue\r\n }));\r\n if (key === \"SortPosition\") {\r\n dbFeature.metaData[\"SortPositionNum\"] = +(dbFeature.metaData[key][0])\r\n }\r\n }\r\n });\r\n return dbFeature\r\n }\r\n\r\n}\r\n\r\n","import $ from 'jquery';\r\n\r\nimport values from 'lodash/values';\r\nimport find from 'lodash/find';\r\nimport orderBy from 'lodash/orderBy';\r\nimport isEqual from \"lodash/isEqual\";\r\n\r\nimport store from \"./../../store\";\r\nimport {\r\n fixDbFeatureProperties,\r\n getArrayOfIdsFromBvState,\r\n getSlabsFeatureGroup,\r\n} from \"../../misc/helpers\";\r\nimport {baseDashboardImagesPath} from \"../assets\";\r\nimport DesignNavigationItem from \"./designNavigationItem\";\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport {isFeatureEnabled, isVisibleForNavigation} from \"../../misc/displayLogic\";\r\nimport * as types from \"../../actions/actionTypes\";\r\nimport {setActiveQuoteIndex, setQuotes} from \"../../actions/roomsFunctions\";\r\nimport {\r\n restoreCart,\r\n setQtCategoriesLoaded,\r\n // toggleUseFabricatorCostPrices\r\n} from \"../../actions/actionFunctions\";\r\nimport {restoreContractValues} from \"../../actions/contractsActions\";\r\nimport {getBvFeatures} from \"../../api/server-api\";\r\nimport {dbFeatureRelatedFeaturesProperties, PartMenuType} from \"./constants\";\r\nimport {changeSqftFeaturesPopup} from \"../../actions/sqftFunctions\";\r\nimport {SQFT_FEATURES} from \"../sqft/constants\";\r\nimport {getLookId} from \"../look/lookNavigation/lookFunctions2\";\r\nimport {AVAILABLE_VISUALIZER_TYPES, IS_LIXIL_UI, IS_OFFLINE_MODE} from \"../../config\";\r\n// import {getBvGroupFeatures} from \"../../api/server-api\";\r\nimport {getCommonVisualizerType} from \"../../config\";\r\nimport {getCurrentLayout, getCurrentZIndexes} from \"../appLayout\";\r\nimport {LOOK_ROOM_TYPES} from \"../look/core/constants\";\r\nimport {getCurrentRoomType} from \"../appLayout\";\r\nimport Config from \"../../config\";\r\nimport {\r\n fixFeaturesResponse,\r\n getCartItemPartIdFix,\r\n getCompressedCartItems,\r\n getFeatureGroupsProperties, setFeatureGroupsProperties\r\n} from \"../../misc/backendFunctions\";\r\nimport {\r\n getAvailableSteps,\r\n getCompressedAllWizardValues\r\n} from \"../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {restoreAllWizardSelectedValues} from \"../../actions/wizardFunctions\";\r\nimport {replaceIncorrectSymbols} from \"../../misc/misc2\";\r\nimport {requestAfterRoomChange} from \"../look/lookNavigation/lookNavigationFunctions\";\r\nimport {updateCurrentQuote} from \"../../misc/quotesFunctions\";\r\nimport {\r\n getFeatureGroupFromWizardSteps,\r\n getUpdatedWizardId\r\n} from \"../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\nimport {updateExistingFeature} from \"./featuresFunctions\";\r\nimport {setReceiptSignature} from \"../../actions/printFunctions\";\r\n\r\nexport default class LayoutCommon {\r\n initialized = false;\r\n selectedLayoutFeatures = {};\r\n disabledClickablePartIds = [];\r\n allDbFeatures = []; // is used for creating fake layouts\r\n\r\n /**\r\n * An hash-table of parts, so we can find easily needed part by its ID\r\n * @type {Object.}\r\n */\r\n parts = {};\r\n constructor() {}\r\n\r\n hasNavItemsLength(...props) {\r\n const subPart = props[0];\r\n if ((document.kvConfig.visualizerType === \"kvScene\") && (this.type === 3) && (subPart.part.partId === \"center_island_edge\")) {\r\n return false\r\n }\r\n if (!subPart || !this.isNewLayout || (this.type === 2 && (subPart.part.partId === \"oven\"))\r\n || (subPart.part.partId === \"shower_door\")) { // not sure if we can enable it on old kitchen and bathroom\r\n // added oven because it depends on the stove and should be recalculated each time on layout 2\r\n // added shower door as we need to calculate for current showersize\r\n return this.designNavigationItems(...props).length > 0\r\n }\r\n const propName = IS_LIXIL_UI\r\n ? \"all\"\r\n : props[4] ? \"qt\" : \"vis\"; // forQuotingTool or forVisualizer\r\n if (IS_LIXIL_UI) {\r\n props[4] = \"all\"\r\n }\r\n if (!subPart.part._navItemsCount) {\r\n subPart.part._navItemsCount = {}\r\n }\r\n if (!subPart.part._navItemsCount[this.type]) {\r\n subPart.part._navItemsCount[this.type] = {}\r\n }\r\n if (subPart.part._navItemsCount[this.type][propName] > 0) {\r\n return true\r\n }\r\n if (!subPart.part.allFeaturesReceived\r\n || !Number.isInteger(subPart.part._navItemsCount[this.type][propName])\r\n || !subPart.part._navItemsCount.checkedAfterReceived\r\n || (subPart.part.nextFeaturesPageToLoadArray && subPart.part.partId === \"vanity_countertop\")) {\r\n // added vanity_countertop because of the matching feature omggg\r\n subPart.part._navItemsCount[this.type][propName] = this.designNavigationItems(...props).length\r\n }\r\n if (subPart.part.allFeaturesReceived && !subPart.part._navItemsCount.checkedAfterReceived) {\r\n // stop calling navItems func after all features received and it is calculated\r\n subPart.part._navItemsCount.checkedAfterReceived = true;\r\n }\r\n return subPart.part._navItemsCount[this.type][propName] > 0\r\n }\r\n\r\n /**\r\n * Returns the designNavigationItems for the navigation bar\r\n * @param parentItem {DesignNavigationItem} if null is supplied will return the major designNavigationItems,\r\n * otherwise the children of the given parent item\r\n * @param filters {[navigationFilterValueInterface]}\r\n * @param searchText {string}\r\n * @param forFeature {object|boolean} // for new kitchen and bathroom it is forFeature, for old - withPlaceholders\r\n * @param withQuotingToolFeatures {boolean|string}\r\n * @param filterGroups {array}\r\n * @param restOptions {object} // firstOpenedFeature = null, firstOpenedConditions = null, returnAllFeatures = false, forActiveQTCategory = \"\"\r\n * @returns {Array.}\r\n */\r\n designNavigationItems(\r\n parentItem = null,\r\n filters = [],\r\n searchText = \"\",\r\n forFeature = null,\r\n withQuotingToolFeatures = false, // could be false(visualizer only), true(quotingtool only), or \"all\" - all features\r\n filterGroups = [],\r\n restOptions= {}\r\n ) {\r\n const {forActiveQTCategory, returnAllFeatures} = restOptions;\r\n //console.log('parentItem', parentItem);\r\n if (parentItem == null) {\r\n let partsToShow = this.enabledParts();\r\n if (!this.type) { // disable window on the small room layout\r\n partsToShow = partsToShow.filter(parentGroup => parentGroup.partName !== \"Window\");\r\n }\r\n if (document.kvConfig.visualizerType === \"KV\" || document.kvConfig.visualizerType === \"Kitchen\") {\r\n // disable center island\r\n const layoutAbbreviation = this.getCurrentLayoutAbbreviation();\r\n if (!layoutAbbreviation.includes(\"I\")) {\r\n partsToShow = partsToShow.filter(parentGroup => parentGroup.partName !== \"CenterIsland\");\r\n }\r\n }\r\n return orderBy(partsToShow, ['sortOrder']).map(parentGroup => parentGroup.navigationItem());\r\n }\r\n\r\n const thirdParam = this.isNewLayout ? forFeature || parentItem.part.activeFeature : forFeature // withPlaceholders\r\n\r\n const nItems = parentItem.part.navigationSubItems(\r\n filters,\r\n searchText,\r\n thirdParam,\r\n filterGroups,\r\n restOptions\r\n )\r\n // console.log(\"nItems\", nItems);\r\n const navItems = nItems\r\n .filter(feature => {\r\n if (!feature || !feature.part) {\r\n return false\r\n }\r\n if (!this.isNewLayout && !thirdParam && feature.part.partName\r\n && (feature.part.partName.includesCI('placeholder') || feature.part.partName.includesCI('Demo Model'))) {\r\n return false // exclude placeholders;\r\n }\r\n return isVisibleForNavigation(feature.part, withQuotingToolFeatures, forActiveQTCategory)\r\n });\r\n\r\n return withQuotingToolFeatures || returnAllFeatures\r\n ? this.getNotAvailableInVisualizerFeatures(navItems, parentItem.part, filters, searchText, forActiveQTCategory)\r\n : navItems.filter(item => !item.part.notAvailableInVisualizer && isFeatureEnabled(item.part, \"visualizer\"))\r\n }\r\n\r\n setGroupsItemsCount(bvGroups) {\r\n const features = this.getFeatures(true);\r\n const groupKeys = {};\r\n Object.keys(bvGroups).map(key => {\r\n groupKeys[key.toLowerCase()] = key;\r\n });\r\n // console.log(groupKeys);\r\n features.forEach(parentGroup => {\r\n if (parentGroup.menuType === PartMenuType.Simple) {\r\n const dbName = (parentGroup.dbName || parentGroup.partName).toLowerCase();\r\n parentGroup.counts = (groupKeys[dbName] && bvGroups[groupKeys[dbName]])\r\n ? bvGroups[groupKeys[dbName]].counts\r\n : null;\r\n parentGroup.totalFeaturesCount = (groupKeys[dbName] && bvGroups[groupKeys[dbName]])\r\n ? bvGroups[groupKeys[dbName]].totalFeaturesCount\r\n : null\r\n if (IS_OFFLINE_MODE) {\r\n parentGroup.allFeaturesReceived = true;\r\n parentGroup.realFeaturesReceived = true;\r\n }\r\n } else {\r\n parentGroup.relatedItems.forEach((relatedItem) => {\r\n const dbName = (relatedItem.dbName || relatedItem.partName).toLowerCase();\r\n if (relatedItem.partId !== \"wall_configuration\") {\r\n relatedItem.counts = (groupKeys[dbName] && bvGroups[groupKeys[dbName]])\r\n ? bvGroups[groupKeys[dbName]].counts\r\n : null;\r\n }\r\n relatedItem.totalFeaturesCount = (groupKeys[dbName] && bvGroups[groupKeys[dbName]])\r\n ? bvGroups[groupKeys[dbName]].totalFeaturesCount\r\n : null;\r\n if (!relatedItem.counts && !relatedItem.partId.includes(\"decor\")) {\r\n console.log(\"no relatedItem.counts\", relatedItem)\r\n }\r\n if (IS_OFFLINE_MODE) {\r\n relatedItem.allFeaturesReceived = true;\r\n relatedItem.realFeaturesReceived = true;\r\n }\r\n })\r\n }\r\n })\r\n }\r\n\r\n getNotAvailableInVisualizerFeatures = (filteredAvailableFeatures, subPart, filters, searchText, forActiveQTCategory = \"\") => {\r\n if (subPart.getParent && subPart.getParent().partName === \"Other\") { // not in visualizer features, they don't need another check\r\n return filteredAvailableFeatures\r\n }\r\n const notInVisualizerFeaturesThatLeft = subPart.features.filter(feature => {\r\n if (feature.partName && feature.partName.includes(\"laceholder\")) {\r\n return false\r\n }\r\n const featureSplittedName = feature.getSplittedFeatureName();\r\n return feature.notAvailableInVisualizer && isVisibleForNavigation(feature, true, forActiveQTCategory)\r\n && !filteredAvailableFeatures.some(countertop => {\r\n return countertop.part.getSplittedFeatureName() === featureSplittedName\r\n })\r\n })\r\n\r\n let allNotAvailableFeatures = subPart.getFeaturesBySearchText(subPart.getFilteredFeaturesByFilters(filters, notInVisualizerFeaturesThatLeft), searchText);\r\n allNotAvailableFeatures = subPart.returnUniqueNavFeatures\r\n ? subPart.returnUniqueNavFeatures(allNotAvailableFeatures)\r\n : allNotAvailableFeatures.map(_ => new DesignNavigationItem(_.featureName, _));\r\n\r\n return [\r\n ...filteredAvailableFeatures,\r\n ...allNotAvailableFeatures\r\n ]\r\n }\r\n\r\n /**\r\n * returns enabled parts\r\n */\r\n enabledParts(withShadow) {\r\n return this.getFeatures(withShadow).filter(parentGroup => parentGroup.categoryEnabled);\r\n }\r\n\r\n async selectLayout(type, oldType, currentState = null, scene = this.scene, callBack, isFake = false) {\r\n const firstLoad = false; // change if needed\r\n const features = this.getFeatures(true); // true here cause we need backgrounds also to set default!\r\n const currentType = oldType || this.type; // 1) remember previous selection\r\n\r\n // 2) save the current state using feature names, then restore it after the layout has changed\r\n currentState = currentState || this.getActiveFeaturesAsObject(true, false, true);\r\n\r\n if (getCurrentRoomType(this) === LOOK_ROOM_TYPES.as || Config.isVisualizerManagement()) {\r\n currentState.disabled_parts = [];\r\n }\r\n\r\n // 3) save selected features to recover them after layout change back (if they were not found after current set)\r\n this.selectedLayoutFeatures[currentType] = currentState;\r\n\r\n this.type = type; // 4) apply new Layout\r\n this.scene = currentType !== type ? \"1\" : scene; // 4) apply new scene // set first scene if layout is changed\r\n currentState.scene = this.scene; // 4) apply new scene\r\n currentState.layout_type = type; // 4) apply new layout_type\r\n\r\n features.forEach(parentGroup => {\r\n parentGroup.setDefault(this); // setting default after\r\n });\r\n\r\n this.setActiveFeaturesFromObject(currentState, false, true, false, firstLoad, isFake); // 6) set the layers from previous layout\r\n this.changeLayout(this.getFeatures()); // 7) set specific rules for each part\r\n if (!isFake) {\r\n $(window).trigger(ActionTypes.CHANGE_LAYOUT); // 8) refresh canvas\r\n this.updateLocalStorage();\r\n }\r\n if (callBack) {\r\n callBack()\r\n }\r\n console.log(\"this fake\", this);\r\n return Promise.resolve()\r\n }\r\n\r\n setItemsFromBvState = async (bvState,\r\n isCartAndUserStatedUpdateNeeded= false,\r\n additionalSet = (bvState) => bvState,\r\n firstLoad = false,\r\n forVisualizer\r\n ) => {\r\n const neededDbFeatures = getArrayOfIdsFromBvState(bvState).filter(dbFeatureId => {\r\n return !this.allDbFeatures.some(feature => feature.id === dbFeatureId)\r\n });\r\n const response = neededDbFeatures.length\r\n ? await getBvFeatures(neededDbFeatures, null, false, forVisualizer)\r\n : {data: []}\r\n\r\n // console.log('getBvFeatures response->', responseFeatures);\r\n\r\n // this code is needed because we need to loadNewFeatures for already setted layout type\r\n bvState = bvState || {};\r\n const layout_type = +bvState.layout_type;\r\n const needToChangeLayout = (layout_type || layout_type === 0) && (layout_type !== +this.type);\r\n if (needToChangeLayout) {\r\n this.type = layout_type;\r\n }\r\n this.loadNewFeatures(response.data);\r\n if (typeof additionalSet === \"function\") {\r\n bvState = additionalSet(bvState);\r\n }\r\n this.setActiveFeaturesFromObject(bvState, isCartAndUserStatedUpdateNeeded, false, true, firstLoad);\r\n if (this.isNewLayout && firstLoad) {\r\n this.createCustomConfigurations();\r\n }\r\n await requestAfterRoomChange(this);\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS);\r\n return response\r\n };\r\n\r\n changeLayout(features) {\r\n features.forEach(parentGroup => {\r\n parentGroup.changeLayout(this.type);\r\n parentGroup.relatedItems.forEach(ri => ri.changeLayout(this.type));\r\n });\r\n }\r\n\r\n getFeatures(withShadow = false) {\r\n return withShadow ? values(this.parts) : values(this.parts).filter(part => {\r\n return [\"Global Shadow\", \"Globals\", \"Other\", \"Background\", \"Backgrounds\"].every(groupName => part.partName !== groupName)\r\n });\r\n }\r\n\r\n fixFeatureBeforeLoad(dbFeature) {\r\n dbFeature = fixDbFeatureProperties(dbFeature);\r\n if (Array.isArray(dbFeature.metaData.RoomLayout)) {\r\n dbFeature = this.fixFeatureMetaData(dbFeature)\r\n }\r\n return dbFeature\r\n }\r\n\r\n loadNewFeatures(dbFeatures = [], forParentGroup = null, applyCustomConfigurations = true, forNextBvState = null) {\r\n //features could be also loaded directly to the part, check part.js -> setGroupFeatures method\r\n\r\n //dbFeatures can be an object! {features:[], relatedFeatures: []}\r\n const dbFeaturesArray = fixFeaturesResponse(dbFeatures);\r\n\r\n const parentGroups = this.getFeatures(true);\r\n let relatedFeatures = [];\r\n\r\n for (let i = 0; i < dbFeaturesArray.length; i++) {\r\n let dbFeature = dbFeaturesArray[i];\r\n if (!dbFeature) {\r\n continue;\r\n }\r\n dbFeatureRelatedFeaturesProperties.forEach(property => {\r\n if (Array.isArray(dbFeature[property]) && dbFeature[property].length) {\r\n dbFeature[property].forEach(relatedFeature => {\r\n if (relatedFeatures.some(relFeature => relFeature.id === relatedFeature.id)) {\r\n return\r\n }\r\n relatedFeatures.push(relatedFeature)\r\n });\r\n // console.log(\"dbFeature.relatedFeatures\", dbFeature.relatedFeatures);\r\n }\r\n })\r\n this.loadDbFeature(dbFeature, parentGroups, forParentGroup)\r\n }\r\n\r\n if (relatedFeatures.length) {\r\n for (let i = 0; i < relatedFeatures.length; i++) {\r\n this.loadDbFeature(relatedFeatures[i], parentGroups)\r\n }\r\n }\r\n\r\n if (document.kvConfig.visualizerType === \"bvLook\" && applyCustomConfigurations) {\r\n const isAsBathroomState = forNextBvState && forNextBvState.visualizerType === \"bvLook\" && forNextBvState.layout_type >= 10;\r\n this.createCustomConfigurations(isAsBathroomState);\r\n }\r\n\r\n return true\r\n }\r\n\r\n fixFeatureMetaData(dbFeature) {\r\n // it is needed only for bvScene - it has it's own method\r\n // dbFeature.metaData.RoomLayout = dbFeature.metaData.RoomLayout.map((mValue) => {\r\n // Object.values(LayoutType).map(val => val + \"\").forEach(stringNum => {\r\n // if (mValue === stringNum) {\r\n // mValue = \"Layout\" + mValue\r\n // }\r\n // })\r\n // return mValue\r\n // })\r\n return dbFeature\r\n }\r\n\r\n loadDbFeature(dbFeature, parentGroups, forParentGroup = null) {\r\n if (!dbFeature || (dbFeature.employeesOnly && !document.kvConfig.isBackend)) {\r\n return;\r\n }\r\n for (let i = 0; i < this.allDbFeatures.length; i++) {\r\n if (this.allDbFeatures[i].id === dbFeature.id) {\r\n // console.log(\"featureFound\", featureFound);\r\n updateExistingFeature(dbFeature, this.allDbFeatures[i], this);\r\n return;\r\n }\r\n }\r\n dbFeature = this.fixFeatureBeforeLoad(dbFeature);\r\n let loaded = false;\r\n if (forParentGroup && !(document.kvConfig.visualizerType === \"bvLook\" && forParentGroup.partName === \"Towel\") // they should be in separate groups\r\n && (forParentGroup.dbName === dbFeature.groupName || forParentGroup.partName === dbFeature.groupName)) {\r\n loaded = forParentGroup.load(dbFeature);\r\n }\r\n if (!loaded) {\r\n for (let i = 0; i < parentGroups.length; i++) {\r\n const parentGroup = parentGroups[i];\r\n loaded = parentGroup.load(dbFeature);\r\n if (loaded) {\r\n break;\r\n }\r\n }\r\n if (!loaded && this.parts[\"Other\"]) {\r\n this.parts[\"Other\"].load(dbFeature);\r\n }\r\n }\r\n // dbFeature.isRelatedDbFeature ? this.allDbFeatures.unshift(dbFeature) : this.allDbFeatures.push(dbFeature);\r\n this.allDbFeatures.push(dbFeature);\r\n }\r\n\r\n createCustomConfigurations(isAsBathroomState = null) {\r\n // after load callBack for each part(to set specific rules)\r\n this.getFeatures().forEach(parentGroup => {\r\n parentGroup.setSpecificRules ? parentGroup.setSpecificRules(isAsBathroomState) : null;\r\n });\r\n }\r\n\r\n setDefaultFeatures() {\r\n this.getFeatures(true).forEach(parentGroup => {\r\n parentGroup.setDefault(this);\r\n });\r\n }\r\n\r\n /**\r\n * Returns all features by text\r\n */\r\n\r\n getAllFeaturesByText(searchText) {\r\n let allFeatures = [];\r\n this.getFeatures().forEach((parentGroup) => {\r\n let subParts = parentGroup.subParts();\r\n subParts.forEach((subPart) => {\r\n allFeatures = [...allFeatures, ...subPart.part.features.filter(feature => feature.partName && feature.partName.toLowerCase().includes(searchText.toLowerCase()))]\r\n })\r\n });\r\n // console.log('allFeatures', allFeatures);\r\n return allFeatures\r\n }\r\n\r\n /**\r\n * Returns all features\r\n * @param withOtherGroups {boolean}\r\n */\r\n\r\n getAllFeatures(withOtherGroups = false) {\r\n let allFeatures = [];\r\n this.getFeatures(withOtherGroups).forEach((parentGroup) => {\r\n let subParts = parentGroup.subParts();\r\n subParts.forEach((subPart) => {\r\n allFeatures = [...allFeatures, ...subPart.part.features]\r\n })\r\n });\r\n // console.log('allFeatures', allFeatures);\r\n return allFeatures\r\n }\r\n\r\n /**\r\n * Returns feature\r\n * @param neededId {number}\r\n * @param withOtherGroups {boolean}\r\n * @returns feature {object}\r\n */\r\n getFeatureById(neededId, withOtherGroups = false) {\r\n let feature = null;\r\n this.getFeatures(withOtherGroups).forEach((parentGroup) => {\r\n if (!feature) {\r\n let subParts = parentGroup.subParts();\r\n subParts.forEach((subPart) => {\r\n if (!feature) {\r\n feature = subPart.part.getFeatureById(neededId, true);\r\n }\r\n })\r\n }\r\n });\r\n return feature\r\n }\r\n\r\n /**\r\n * Returns feature\r\n * @param skuNumber {string}\r\n * @param featureGroupPartId {string}\r\n * @param allLayouts {boolean}\r\n * @param withSharedFeatureName {boolean}\r\n * @returns feature {object}\r\n */\r\n getFeatureBySku(skuNumber, featureGroupPartId= \"\", allLayouts = false, withSharedFeatureName = false) {\r\n const propToSearch = withSharedFeatureName ? \"sharedFeatureName\" : \"sku\";\r\n if (featureGroupPartId) {\r\n const featureGroupFound = this.getFeatureGroupByPartId(featureGroupPartId);\r\n if (featureGroupFound) {\r\n if (featureGroupFound && featureGroupFound.activeFeature && featureGroupFound.activeFeature.dbFeature[propToSearch] === skuNumber) {\r\n return featureGroupFound.activeFeature\r\n }\r\n const searchFrom = featureGroupFound.getFeaturesForNavigationFrom\r\n ? featureGroupFound.getFeaturesForNavigationFrom({returnAllFeatures: allLayouts})\r\n : featureGroupFound.features;\r\n for (let i = 0; i < searchFrom.length; i++) {\r\n if (searchFrom[i].dbFeature[propToSearch] === skuNumber) {\r\n return searchFrom[i];\r\n }\r\n }\r\n }\r\n }\r\n const allParents = this.getFeatures();\r\n for (let i = 0; i < allParents.length; i++) {\r\n const subParts = allParents[i].subParts();\r\n for (let j = 0; j < subParts.length; j++) {\r\n const featureGroup = subParts[j].part;\r\n if (featureGroup.activeFeature) {\r\n if (featureGroup.activeFeature.dbFeature[propToSearch] === skuNumber) {\r\n return featureGroup.activeFeature\r\n }\r\n const features = [...featureGroup.features, ...featureGroup.featuresParts];\r\n const sameSkuFeatures = features.filter(feature => feature.dbFeature[propToSearch] === skuNumber);\r\n if (!sameSkuFeatures.length) {\r\n continue;\r\n }\r\n if (featureGroup.activeFeature.metaData[\"Side\"]) {\r\n const sameSide = sameSkuFeatures.find(feature => {\r\n return isEqual(feature.metaData[\"Side\"], featureGroup.activeFeature.metaData[\"Side\"])\r\n });\r\n if (sameSide) {\r\n return sameSide\r\n }\r\n }\r\n return sameSkuFeatures[0]\r\n } else {\r\n for (let k = 0; k < featureGroup.features.length; k++) {\r\n if (featureGroup.features[k].dbFeature[propToSearch] === skuNumber) {\r\n return featureGroup.features[k];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return null\r\n }\r\n\r\n /**\r\n * Returns active installations\r\n */\r\n getActiveInstallations() {\r\n const {instState} = store.getState();\r\n return Object.assign({}, instState, {instOpened: false});\r\n }\r\n\r\n addCartAndUserStatesToLocalStorage(bvState) {\r\n const {cartState, userState, sqftState, bathroomVisualizerState, wizardState, fabricatorState} = store.getState();\r\n\r\n bvState.cartState = Object.assign({}, cartState, {\r\n recentlyViewedItems: [],\r\n cartItems: getCompressedCartItems(cartState.cartItems),\r\n displayLogicCartItems: getCompressedCartItems(cartState.displayLogicCartItems),\r\n });\r\n\r\n const lookId = getLookId(bathroomVisualizerState.activePreset, bathroomVisualizerState.bvPresets);\r\n bvState.userState = userState;\r\n bvState.id = bathroomVisualizerState.activePreset;\r\n bvState.lookId = lookId;\r\n bvState.useSqftCartPopup = sqftState ? sqftState.sqftFeaturesPopup.enabled : false;\r\n bvState.useFabricatorCostPrices = fabricatorState.settings.useFabricatorCostPrices;\r\n if (wizardState.wizardIsActive) {\r\n bvState.allWizardsValues = getCompressedAllWizardValues(wizardState.allWizardsValues);\r\n }\r\n bvState = getFeatureGroupsProperties(bvState, this);\r\n return bvState\r\n }\r\n\r\n /**\r\n * Returns activeFeatures object\r\n */\r\n\r\n getStonesActiveFeatures() {\r\n return this.getActiveFeatures(true).filter(activeFeature => activeFeature.cartFeature && activeFeature.cartFeature.isStoneFeature)\r\n }\r\n\r\n addDisabledPartsToLocalStorage(bvState) {\r\n const disabledPartIds = this.getDisabledFeatures();\r\n if (disabledPartIds.length) {\r\n bvState.disabled_parts = disabledPartIds;\r\n }\r\n return bvState\r\n }\r\n\r\n /**\r\n * @param useNames {boolean}\r\n * @param returnAllData {boolean}\r\n * @param returnAllFeatures {boolean}\r\n */\r\n getActiveFeaturesAsObject(useNames = false, returnAllData = true, returnAllFeatures = false) {\r\n let bvState = {};\r\n let activeFeatures = this.getActiveFeatures(returnAllFeatures, false, true);\r\n // console.log('activeFeatures', activeFeatures);\r\n activeFeatures.forEach((activeFeature) => {\r\n if (!activeFeature.cartFeature) {\r\n return\r\n }\r\n bvState[activeFeature.partId] = useNames\r\n ? activeFeature.cartFeature.getMatchingFeatureName()\r\n : activeFeature.cartFeature.dbFeature.id;\r\n });\r\n\r\n bvState.visualizerType = this.visualizerType; // to apply correct visualizer on quote open after save\r\n bvState.toolVersion = document.kvConfig.toolVersion; // to apply correct visualizer on quote open after save\r\n bvState.navigationType = document.kvConfig.navigationType; // to open in dashboard correct UI;\r\n\r\n bvState = this.addSpecificPropertiesToLocalStorage(bvState, useNames, returnAllFeatures);\r\n bvState = this.addDisabledPartsToLocalStorage(bvState);\r\n bvState.bvStateVersion = 2; //todo to test\r\n\r\n if (returnAllData) {\r\n bvState.installations = this.getActiveInstallations();\r\n bvState = this.addCartAndUserStatesToLocalStorage(bvState);\r\n }\r\n\r\n return bvState\r\n }\r\n\r\n /**\r\n * @param dbFeatureId {number}\r\n * @param featureGroup {featureGroupInterface}\r\n * @param featuresToLoad {array}\r\n * @return {featureInterface}\r\n */\r\n getLoadedFeatureById = (dbFeatureId, featureGroup, featuresToLoad = []) => {\r\n let featureLoaded = featureGroup.features.find((feature) => feature.dbFeature.id === dbFeatureId);\r\n if (!featureLoaded && featureGroup.featuresParts) {\r\n featureLoaded = featureGroup.featuresParts.find((feature) => feature.dbFeature.id === dbFeatureId);\r\n }\r\n if (!featureLoaded) { // if feature isn't found in the current layout, let's find it in another layouts\r\n let allFeatures = [];\r\n Object.keys(this.layoutNames).forEach((layoutType) => {\r\n if (layoutType !== \"All\") {\r\n allFeatures = [...allFeatures, ...featureGroup.featuresList[layoutType]]\r\n }\r\n });\r\n featureLoaded = allFeatures.find((feature) => feature.dbFeature.id === dbFeatureId);\r\n if (!featureLoaded\r\n && (document.kvConfig.visualizerType === \"Kitchen\" || document.kvConfig.visualizerType === \"kvScene\")\r\n && this.qtCategories && this.qtCategories.some(qtCat => qtCat.qtCategoryHasBeenChanged)\r\n && featuresToLoad.length\r\n ) {\r\n // console.info(\"Cart feature is not loaded, trying in change categories:\", dbFeatureId);\r\n this.qtCategories.forEach(qtCat => {\r\n const changedSubPart = qtCat.subParts.find(subPart => {\r\n return subPart.part.partId === featureGroup.partId\r\n });\r\n if (changedSubPart) {\r\n // console.info(\"Cart feature is not loaded, found subpart:\", ci);\r\n const needToLoadFeature = featuresToLoad.find(dbFeature => dbFeature.id === dbFeatureId);\r\n if (needToLoadFeature) {\r\n changedSubPart.part.setGroupFeatures([needToLoadFeature], 0, false)\r\n }\r\n featureLoaded = featureGroup.features.find((feature) => {\r\n return feature.dbFeature.id === dbFeatureId\r\n });\r\n // if (featureLoaded) {\r\n // console.info(\"Cart feature is not loaded, it's ok, we found it:\", dbFeatureId, featureLoaded);\r\n // }\r\n }\r\n })\r\n }\r\n // console.log('featureLoaded', featureLoaded);\r\n if (!featureLoaded) {\r\n console.error(\"Cart feature is not loaded:\", dbFeatureId);\r\n }\r\n }\r\n return featureLoaded\r\n }\r\n\r\n /**\r\n * Get Cart Items From BvState\r\n * @param cartItems {Array}\r\n * @param featuresToLoad {Array} // only if layout is changed - we need to load features to changed feature group\r\n * @param checkAllLayouts {boolean}\r\n * @return {Array}\r\n */\r\n getCartItemsFromBvState(cartItems = [], featuresToLoad = [], checkAllLayouts = false) {\r\n // const slabGroup = getSimilarFeatureGroup(SQFT_FEATURES.slabs, SQFT_FEATURES.slabs);\r\n // parentItems.push(slabGroup);\r\n\r\n const setCustomPrices = (feature, fromCartItem) => {\r\n if (feature && feature.dbFeature && fromCartItem && fromCartItem.cartFeature && fromCartItem.cartFeature.hasOwnProperty(\"customCost\")) {\r\n feature.dbFeature.priceWasChanged = true;\r\n feature.dbFeature.cost = fromCartItem.cartFeature.customCost;\r\n feature.dbFeature.fabricatorCost = fromCartItem.cartFeature.customCost;\r\n feature.dbFeature.price = fromCartItem.cartFeature.customPrice;\r\n }\r\n }\r\n\r\n return cartItems\r\n .map(ci => {\r\n\r\n const layout = checkAllLayouts && ci.fromVisualizerType ? getCurrentLayout(ci.fromVisualizerType) : this;\r\n if (layout.isNewLayout) {\r\n const partId = getCartItemPartIdFix(ci.partId);\r\n let cartFeature = layout.getFeatureFromAllLayouts(ci.partId, ci.cartFeature, featuresToLoad);\r\n setCustomPrices(cartFeature, ci);\r\n let newCartItem = Object.assign({}, ci, {\r\n partId,\r\n currentQuote: ci.currentQuote || 0,\r\n cartFeature: cartFeature\r\n });\r\n if (ci.relatedProductParent) {\r\n newCartItem.relatedProductParent = layout.getFeatureFromAllLayouts(ci.relatedProductParent.partId, ci.relatedProductParent, featuresToLoad);\r\n }\r\n if (ci.bundleParentId) {\r\n newCartItem.bundleParentId = ci.bundleParentId;\r\n }\r\n if (Number.isInteger(newCartItem.fromWizardId)) {\r\n newCartItem.fromWizardId = getUpdatedWizardId(newCartItem.fromVisualizerType, newCartItem.fromWizardId)\r\n }\r\n if (cartFeature && cartFeature.dbFeature) { //if we couldn't find feature then we will try to restore it from old layout\r\n return newCartItem\r\n }\r\n }\r\n\r\n const parentItems = layout.getFeatures(true);\r\n const dbFeatureId = ci.cartFeature.dbFeatureId || ci.fabFeatId || (ci.cartFeature.dbFeature ? ci.cartFeature.dbFeature.id : null); //old logic support\r\n if (!dbFeatureId) {\r\n console.log(\"NO DB FEATURE ID\", ci);\r\n }\r\n const ciFeature = ci.cartFeature; // we have to remember what has come from backend to be able to restore custom price\r\n ci.cartFeature = ci.cartFeature || {};\r\n ci.partId = getCartItemPartIdFix(ci.partId);\r\n ci.currentQuote = ci.currentQuote || 0;\r\n let childSubPart = null;\r\n parentItems.forEach(parentGroup => {\r\n if (childSubPart || !parentGroup) {\r\n return\r\n }\r\n if (ci.partId === SQFT_FEATURES.slabs) {\r\n childSubPart = getSlabsFeatureGroup(layout);\r\n childSubPart = childSubPart.part ? childSubPart.part : childSubPart\r\n } else {\r\n //changed subParts() to relatedItems because on this task QCDES-2593\r\n childSubPart = parentGroup.relatedItems.find(relItem => relItem.partId === ci.partId);\r\n }\r\n if (childSubPart && childSubPart.features) {\r\n ci.cartFeature = layout.getLoadedFeatureById(dbFeatureId, childSubPart, featuresToLoad);\r\n }\r\n });\r\n setCustomPrices(ci.cartFeature, {cartFeature: ciFeature});\r\n if (Number.isInteger(ci.fromWizardId)) {\r\n ci.fromWizardId = getUpdatedWizardId(ci.fromVisualizerType, ci.fromWizardId)\r\n }\r\n if (!ci.cartFeature || !ci.cartFeature.dbFeature) {\r\n console.error(\"cartFeature not loaded!\", ci);\r\n }\r\n return ci\r\n })\r\n .filter(ci => ci.cartFeature && ci.cartFeature.dbFeature); //prevent error's that are caused by missing feature\r\n }\r\n\r\n bvStateHasLockedItems(bvState) {\r\n return this.getFeatures().some((parentGroup) => {\r\n let partDataHasLockedItems = false;\r\n if (parentGroup.menuType === 0 && parentGroup.partName !== \"Toilet\") {\r\n const partId = parentGroup.partId;\r\n if (bvState.hasOwnProperty(partId)) {\r\n const feature = parentGroup.getFeatureById(bvState[partId]);\r\n if (feature && !feature.dbFeature.unlocked) {\r\n // console.log('found!', feature);\r\n partDataHasLockedItems = true;\r\n }\r\n }\r\n } else {\r\n let subParts = parentGroup.relatedItems;\r\n subParts.forEach((subPart) => {\r\n const partId = subPart.partId;\r\n if (bvState.hasOwnProperty(partId)) {\r\n const feature = subPart.getFeatureById(bvState[partId]);\r\n if (feature && !feature.dbFeature.unlocked) {\r\n // console.log('found!', feature, index);\r\n partDataHasLockedItems = true;\r\n }\r\n // if (partId === \"shower_body\") {\r\n // }\r\n }\r\n })\r\n }\r\n return partDataHasLockedItems\r\n });\r\n }\r\n\r\n /**\r\n * @param qtCategories {array}\r\n * @return void // creates array of featureGroups features and loads them. skips already loaded\r\n */\r\n loadFeatureGroupFeatures = (qtCategories) => {\r\n let featureGroupFeatures = [];\r\n let needToLoadFeatureGroupsFeatures = [];\r\n // qtCategories.forEach(qtCategory => {\r\n // qtCategory.featureGroups.forEach(featureGroup => {\r\n // if (featureGroup.features && featureGroup.features.length) {\r\n // featureGroup.features.forEach(dbFeature => {\r\n // if (!dbFeature.metaData) {\r\n // console.log(\"no metadata found\", dbFeature);\r\n // }\r\n // })\r\n // }\r\n // });\r\n // });\r\n const parentParts = this.getFeatures();\r\n qtCategories\r\n .filter(qtCategory => {\r\n return qtCategory.enabled && qtCategory.featureGroups.some(featureGroup => featureGroup.enabled)\r\n })\r\n .forEach(qtCategory => {\r\n qtCategory.featureGroups\r\n .filter(featureGroup => {\r\n const groupName = featureGroup.groupName.toLowerCase();\r\n for (let i = 0; i < parentParts.length; i++) {\r\n const parentPart = parentParts[i];\r\n const subPartItems = parentPart.subParts();\r\n const item = subPartItems.find(subPartItem => {\r\n const dbName = (subPartItem.part.dbName || subPartItem.part.partName).toLowerCase();\r\n return groupName === dbName\r\n });\r\n if (item) {\r\n const navItems = this.designNavigationItems(item, {}, \"\", false, true);\r\n if (!navItems.length && !needToLoadFeatureGroupsFeatures.some(sPart => sPart.part.partId === item.part.partId)) {\r\n needToLoadFeatureGroupsFeatures.push(item);\r\n }\r\n // console.log(\"features already exist:\", groupName);\r\n return false\r\n }\r\n }\r\n return true\r\n })\r\n .forEach(featureGroup => {\r\n if (featureGroup.features && featureGroup.features.length) {\r\n featureGroupFeatures = [...featureGroupFeatures, ...featureGroup.features]\r\n }\r\n });\r\n });\r\n this.loadNewFeatures(featureGroupFeatures, null, false);\r\n return needToLoadFeatureGroupsFeatures\r\n };\r\n\r\n addSubPartProperties(subPart, featureGroup, qtCategory, isComplex = false) {\r\n subPart.part.qtCategoryName = qtCategory.name;\r\n subPart.part.featureGroupVisible = featureGroup.visible;\r\n subPart.part.featureGroupEnabled = featureGroup.enabled;\r\n subPart.part.displayType = featureGroup.displayType || 3;\r\n subPart.part.featureGroupEnabled = featureGroup.enabled;\r\n subPart.part.unitText = featureGroup.unitText;\r\n subPart.hasFeatures = featureGroup.hasFeatures;\r\n if (!isComplex) {\r\n subPart.part.customGroupDisplayName = featureGroup.customDisplayName;\r\n subPart.part.description = featureGroup.description;\r\n subPart.part.customDescription = featureGroup.customDescription;\r\n subPart.part.customImageUrl = featureGroup.customImageUrl ? baseDashboardImagesPath + featureGroup.customImageUrl : \"\";\r\n if ((this.visualizerType === AVAILABLE_VISUALIZER_TYPES.kvScene)) {\r\n if (subPart.part.partId === \"center_island_sink\") {\r\n const anotherFg = this.getFeatureGroupByPartId(\"sink\");\r\n if (anotherFg) {\r\n anotherFg.customGroupDisplayName = subPart.part.customGroupDisplayName;\r\n anotherFg.description = subPart.part.description;\r\n anotherFg.customDescription = subPart.part.customDescription;\r\n anotherFg.customImageUrl = subPart.part.customImageUrl;\r\n }\r\n } else if (subPart.part.partId === \"center_island_faucet\") {\r\n const anotherFg = this.getFeatureGroupByPartId(\"faucet\");\r\n if (anotherFg) {\r\n anotherFg.customGroupDisplayName = subPart.part.customGroupDisplayName;\r\n anotherFg.description = subPart.part.description;\r\n anotherFg.customDescription = subPart.part.customDescription;\r\n anotherFg.customImageUrl = subPart.part.customImageUrl;\r\n }\r\n }\r\n }\r\n }\r\n /*** HERE WE SET SAME PROPERTIES FOR SPECIFIC QT Category ***/\r\n let qtCatProperties = {\r\n qtCategoryId: qtCategory.id,\r\n qtCategoryName: qtCategory.name,\r\n featureGroupVisible: featureGroup.visible,\r\n featureGroupEnabled: featureGroup.enabled,\r\n // hasFeatures: featureGroup.hasFeatures, // NOT SURE WHERE WE NEED THAT\r\n }\r\n if (!isComplex) {\r\n qtCatProperties.customGroupDisplayName = featureGroup.customDisplayName;\r\n qtCatProperties.description = featureGroup.description;\r\n qtCatProperties.customDescription = featureGroup.customDescription;\r\n qtCatProperties.customImageUrl = featureGroup.customImageUrl ? baseDashboardImagesPath + featureGroup.customImageUrl : \"\";\r\n }\r\n if (!subPart.part.qtCatProperties) {\r\n subPart.part.qtCatProperties = {};\r\n }\r\n subPart.part.qtCatProperties[qtCategory.name] = qtCatProperties;\r\n }\r\n\r\n get qtCategories() {\r\n //NOTA BENE !!! kitchen layout has it's own get qtCategories() method\r\n return this.qtCategoriesList\r\n }\r\n\r\n setQtCategoriesSubparts(qtCategories) {\r\n const parentParts = [...this.getFeatures(), this.parts[\"Other\"]];\r\n // console.log('parentParts', parentParts);\r\n let hasFeaturePropertyName = getCommonVisualizerType(this.visualizerType);\r\n this.qtCategoriesList = qtCategories\r\n .map(qtCategory => { //todo remove this after we push staging backend\r\n if (Array.isArray(qtCategory.featureGroups)) {\r\n qtCategory.featureGroups = qtCategory.featureGroups.map((featureGroup) => {\r\n if (this.isNewLayout) { // ignoreHasFeaturesProperty\r\n featureGroup.hasFeatures = {\r\n bathroom: true,\r\n kitchen: true,\r\n fireplace: true,\r\n laundryroom: true,\r\n }\r\n } else if (!featureGroup.hasFeatures) {\r\n featureGroup.hasFeatures = {\r\n bathroom: featureGroup.hasBVFeatures,\r\n kitchen: featureGroup.hasKVFeatures,\r\n fireplace: true,\r\n laundryroom: true,\r\n }\r\n }\r\n if (featureGroup.hasFeatures[hasFeaturePropertyName] && Array.isArray(featureGroup.features)\r\n && (featureGroup.features.length > 0 && featureGroup.features.length < 50)\r\n && !featureGroup.features.some(dbFeature => isFeatureEnabled({dbFeature}, \"quotingTool\", \"\", hasFeaturePropertyName))) {\r\n // this is a fix we need to do on the backend! if features.length is more than 50 and they all are disabled\r\n // for QuotingTool - hasFeatures.bathroom should be false!\r\n featureGroup.hasFeatures[hasFeaturePropertyName] = false\r\n }\r\n return featureGroup\r\n })\r\n }\r\n return qtCategory\r\n })\r\n .filter(qtCategory => {\r\n return qtCategory.enabled // 1) remove disabled qtCategories\r\n && Array.isArray(qtCategory.featureGroups) && qtCategory.featureGroups.some((featureGroup) => {\r\n return featureGroup.hasFeatures && featureGroup.hasFeatures[hasFeaturePropertyName] // 1) remove qtCategories without visualizerTypeFeatures\r\n })\r\n })\r\n .sort((a, b) => a.order !== b.order ? a.order < b.order ? -1 : 1 : 0) // sort by order\r\n .map((qtCategory) => {\r\n let subParts = [];\r\n qtCategory.featureGroups\r\n .filter(featureGroup => {\r\n const featureGroupName = featureGroup.groupName.toLowerCase();\r\n return featureGroupName !== \"walls\"\r\n }) // remove walls featureGroup // clone.quotesflooring.com/visualizer#/ issue\r\n .sort((a, b) => a.order !== b.order ? a.order < b.order ? -1 : 1 : 0) // sort by order\r\n .forEach(featureGroup => {\r\n let subPart = null;\r\n const featureGroupName = featureGroup.groupName.toLowerCase();\r\n // if (featureGroupName === \"walls\") {\r\n // const wallsParent = parentParts.find(parentPart => parentPart.partName === \"Walls\");\r\n // if (wallsParent) {\r\n // subParts = [...subParts, ...wallsParent.subParts().map(wallsSubPart => {\r\n // this.addSubPartProperties(wallsSubPart, featureGroup, qtCategory, false);\r\n // return wallsSubPart\r\n // })];\r\n // }\r\n // } else {\r\n //\r\n // }\r\n for (let i = 0; i < parentParts.length; i++) {\r\n const parentPart = parentParts[i];\r\n const subPartItems = parentPart.relatedItems.map(_ => new DesignNavigationItem(_.partName, _));\r\n const item = subPartItems.find(subPartItem => {\r\n if (featureGroupName === \"shower pan\" && document.kvConfig.visualizerType === \"bvScene\") {\r\n const dbName = (subPartItem.part.dbName || \"\").toLowerCase();\r\n const dbName2 = (subPartItem.part.partName || \"\").toLowerCase();\r\n return featureGroupName === dbName || featureGroupName === dbName2\r\n } else if (featureGroupName === \"vanity\" && document.kvConfig.visualizerType === \"bvLook\") {\r\n return subPartItem.part.partId === 'vanity_cabinet'\r\n }\r\n const dbName = (subPartItem.part.dbName || subPartItem.part.partName).toLowerCase();\r\n // if (featureGroupName === dbName && (this.visualizerType === AVAILABLE_VISUALIZER_TYPES.kvScene)) {\r\n // if (dbName === \"sink\" && (subPartItem.part.partId === \"center_island_sink\")) {\r\n // return false // we should show back countertop sink instead of sink on the new Kitchen\r\n // } else if (dbName === \"faucet\" && (subPartItem.part.partId === \"center_island_faucet\")) {\r\n // return false // we should show back countertop faucet instead of faucet on the new Kitchen\r\n // }\r\n // }\r\n return featureGroupName === dbName\r\n });\r\n if (item) {\r\n subPart = item;\r\n this.addSubPartProperties(subPart, featureGroup, qtCategory, false);\r\n break;\r\n }\r\n }\r\n if (!subPart) { // add it to Other group\r\n subPart = this.addNonVisualizerSubPart(featureGroup.groupName);\r\n this.addSubPartProperties(subPart, featureGroup, qtCategory, false);\r\n }\r\n subParts.push(subPart)\r\n });\r\n\r\n const self = this;\r\n\r\n const defaultSubParts = subParts.filter(subPart => {\r\n return subPart && subPart.part.featureGroupEnabled\r\n && (subPart.part.featureGroupVisible || (!subPart.part.featureGroupVisible && document.kvConfig.isBackend))\r\n && subPart.hasFeatures && subPart.hasFeatures[hasFeaturePropertyName]\r\n });\r\n\r\n return {\r\n id: qtCategory.id,\r\n name: qtCategory.name,\r\n order: qtCategory.order,\r\n bgImageUrl: qtCategory.bgImageUrl,\r\n defaultSubParts, // is used for center island replacing\r\n _subParts: defaultSubParts, // remove featureGroups that are !enabled && !visible (eye ball) && has features\r\n get subParts() {\r\n return this._subParts.filter((subPart) => {\r\n const restOptions = window.location.hash.includes(\"#/materials\") ? {forActiveQTCategory: qtCategory.name} : {};\r\n return self.hasNavItemsLength(subPart, {}, \"\", null, true, [], restOptions)\r\n });\r\n },\r\n set subParts(newSubParts) {\r\n this._subParts = newSubParts\r\n }\r\n }\r\n })\r\n .filter(qtCategory => qtCategory.defaultSubParts.length); // this filter is added in case someone added wrong featureGroup\r\n\r\n if (!this.qtCategoriesList.length) {\r\n this.qtCategoriesList = null;\r\n }\r\n\r\n if (this.qtCategoriesList) {\r\n // here we set for every subPart if it is available in the QuotingTool(exist in some qtCategory)\r\n for (let i = 0; i < parentParts.length; i++) {\r\n const parentPart = parentParts[i];\r\n const subPartItems = parentPart.subParts();\r\n subPartItems.forEach(subPartItem => {\r\n subPartItem.part.existInQtCategory = this.qtCategoriesList.some(qtCategory => {\r\n return qtCategory.subParts.some(qtCategorySubPartNavItem => {\r\n return qtCategorySubPartNavItem.part.partId === subPartItem.part.partId\r\n })\r\n });\r\n // console.log(\"subPartItem.part.existInQtCategory\", subPartItem.part.partId, subPartItem.part.existInQtCategory);\r\n });\r\n }\r\n }\r\n\r\n store.dispatch(setQtCategoriesLoaded(this.visualizerType))\r\n\r\n }\r\n\r\n /**\r\n * Returns the actual value of the filter by its group and id\r\n * @param groupId {number}\r\n * @param filterValueId {number}\r\n */\r\n static filterValue(groupId, filterValueId) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n if (!filterGroups.length)\r\n return null;\r\n const group = find(filterGroups, {id: groupId});\r\n if (!group)\r\n return null;\r\n const valueObj = find(group.values, {id: filterValueId});\r\n return valueObj ? valueObj.value.trim() : null;\r\n }\r\n\r\n /**\r\n * Returns the actual id of the filter by its group and name(filterValue)\r\n * @param groupId {number}\r\n * @param filterValue {string}\r\n */\r\n static getfilterValueIdByValue(groupId, filterValue) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n if (!filterGroups.length)\r\n return null;\r\n const group = find(filterGroups, {id: groupId});\r\n if (!group)\r\n return null;\r\n const valueObj = find(group.values, {value: filterValue});\r\n return valueObj ? valueObj.id : null;\r\n }\r\n\r\n /**\r\n * Returns the child subPart according to passed partId\r\n * @param partId {string}\r\n */\r\n getSubPartByPartId(partId) {\r\n const parentItems = this.getFeatures(true);\r\n for (let i = 0; i < parentItems.length; i++) {\r\n const subParts = parentItems[i].subParts();\r\n const neededSubPart = subParts.find(subPart => subPart.part.partId === partId);\r\n if (neededSubPart) {\r\n return neededSubPart\r\n }\r\n }\r\n return null\r\n }\r\n\r\n /**\r\n * stores to localStorage object, for example {vanity_cabinet:12,shower_floor:74}\r\n */\r\n async updateLocalStorage() {\r\n if (IS_LIXIL_UI && !document.kvConfig.isWordpressPlugin) {\r\n return false // we are not restoring the state from the locale storage on lixil ui, so why do we keep it there\r\n }\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n const quotes = await updateCurrentQuote(null, undefined, true);\r\n if (!document.kvConfig.jobId) {\r\n try {\r\n window.localStorage.setItem(this.localStorageKey, JSON.stringify({\r\n ...quotes[activeQuoteIndex].data,\r\n quotes,\r\n activeQuoteIndex\r\n }));\r\n // console.log(\"updated LocalStorage\", window.localStorage);\r\n } catch (ex) { console.log(\"localStorage exception\", ex); }\r\n }\r\n }\r\n\r\n setCartStateAndUserStateFromBvState(bvState, featuresToLoad = []) {\r\n const {isLixil, settings} = store.getState().fabricatorState;\r\n\r\n setFeatureGroupsProperties(bvState, this);\r\n\r\n if (bvState.cartState && Array.isArray(bvState.cartState.cartItems)) {\r\n bvState.cartState.cartItems = this.getCartItemsFromBvState(bvState.cartState.cartItems, featuresToLoad, settings.allowVisualizerSwitching);\r\n if (Array.isArray(bvState.cartState.displayLogicCartItems) && bvState.cartState.displayLogicCartItems.length) {\r\n bvState.cartState.displayLogicCartItems = this.getCartItemsFromBvState(bvState.cartState.displayLogicCartItems, featuresToLoad, settings.allowVisualizerSwitching)\r\n .filter(ci => ci.cartFeature && ci.cartFeature.dbFeature && ci.cartFeature.dbFeature.displayLogic);\r\n }\r\n if (bvState.cartState.cartItems.length) {\r\n store.dispatch(restoreCart(bvState.cartState));\r\n }\r\n if (Array.isArray(bvState.cartState.allWizardsValues) && bvState.cartState.allWizardsValues.length) {\r\n store.dispatch(restoreAllWizardSelectedValues(bvState.cartState.allWizardsValues)); // after cart state\r\n }\r\n }\r\n if (bvState.userState && (!IS_LIXIL_UI || !isLixil || bvState.userState.userInfo.email)) { // if no email passed - we don't recover anything (guest checkout issue)\r\n store.dispatch({\r\n type: types.RESTORE_USER_STATE,\r\n payload: bvState.userState\r\n });\r\n }\r\n if (bvState.installations) {\r\n store.dispatch({\r\n type: types.SET_INST_LIST,\r\n payload: bvState.installations\r\n });\r\n }\r\n if (bvState.quotes) {\r\n store.dispatch(setQuotes(bvState.quotes));\r\n store.dispatch(setActiveQuoteIndex(bvState.activeQuoteIndex || 0));\r\n }\r\n if (!bvState.useSqftCartPopup && bvState.cartState && !bvState.cartState.cartItems.some(cartItem => cartItem.sqftId)) {\r\n store.dispatch(changeSqftFeaturesPopup({\r\n enabled: false\r\n }));\r\n }\r\n if (((typeof bvState.contractSigningValues === \"object\") && Object.keys(bvState.contractSigningValues).length)\r\n || ((typeof bvState.contractsValues === \"object\") && Object.keys(bvState.contractsValues).length)) {\r\n store.dispatch(restoreContractValues(\r\n bvState.contractSigningValues,\r\n bvState.savedInvoiceNumberOfPages,\r\n bvState.needToUpdateContract,\r\n bvState.contractsValues,\r\n ));\r\n }\r\n if (bvState.receiptSignature) {\r\n store.dispatch(setReceiptSignature(bvState.receiptSignature));\r\n }\r\n // if (bvState.useFabricatorCostPrices) { // per Alan, even if we saved with the cost price - we should see the retail prices on edit\r\n // store.dispatch(toggleUseFabricatorCostPrices(true));\r\n // }\r\n }\r\n\r\n resetEverything() {\r\n this.initialized = false;\r\n this.type = this.defaultType;\r\n const features = this.getFeatures();\r\n const currentState = store.getState();\r\n const {activeQuoteIndex} = currentState.quotesState;\r\n features.forEach(parentGroup => {\r\n if (parentGroup.relatedItems && parentGroup.relatedItems.length) {\r\n parentGroup.relatedItems.forEach((subPart) => {\r\n subPart.activeFeature = null;\r\n subPart.placeholderChanged = false;\r\n subPart.firstClick[activeQuoteIndex] = false;\r\n subPart.disabled = subPart.defaultDisabled;\r\n if (Array.isArray(subPart.activeFeatureParts) && subPart.activeFeatureParts.length) {\r\n subPart.activeFeatureParts = subPart.setActiveFeatureParts();\r\n }\r\n });\r\n }\r\n parentGroup.activeFeature = null;\r\n parentGroup.placeholderChanged = false;\r\n if (!parentGroup.firstClick) {\r\n parentGroup.firstClick = {};\r\n }\r\n parentGroup.firstClick[activeQuoteIndex] = false;\r\n parentGroup.setDefault(this);\r\n });\r\n this.changeLayout(features);\r\n const bvPresets = currentState.bathroomVisualizerState.bvPresets\r\n const loadByTheDefault = bvPresets && bvPresets.find(preset => preset.loadByTheDefault);\r\n if (loadByTheDefault) {\r\n this.setActiveFeaturesFromObject(loadByTheDefault);\r\n }\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Returns all of the layers, based on current configuration\r\n * @param placeholdersNeeded {boolean}\r\n * @param forceReturn {boolean}\r\n */\r\n getLayers(placeholdersNeeded, forceReturn= false) {\r\n if (!this.initialized && !forceReturn) {\r\n return [];\r\n }\r\n\r\n const features = this.enabledParts(true);\r\n let res = [];\r\n\r\n // console.log('features', features);\r\n\r\n features.forEach(parentGroup => {\r\n const layers = parentGroup.setLayers(this, placeholdersNeeded); // setLayers first! then set z-index\r\n // console.log('layers', layers);\r\n\r\n parentGroup.setZIndex(this.zIndexes[this.getCurrentLayoutName()]); // set zIndexes\r\n\r\n if (layers && layers.length) {\r\n res = res.concat(layers);\r\n }\r\n });\r\n\r\n if (this.addCustomLayers) {\r\n res = this.addCustomLayers(res);\r\n }\r\n\r\n const {canvasDimensions} = store.getState().bathroomVisualizerState;\r\n\r\n const zSort = this.isNewLayout ? \"desc\" : \"asc\";\r\n\r\n res = orderBy(res, ['zIndex'], [zSort]).map(layer => {\r\n // console.log('layer', layer);\r\n let layerToReturn = {\r\n zIndex: layer.zIndex,\r\n image: layer.bgImg(!!layer.cropCoords),\r\n coords: layer.coords || null,\r\n partId: layer.partId || \"\",\r\n layerPosition: layer.layerPosition || \"\",\r\n cropCoords: layer.cropCoords || null,\r\n }\r\n if (this.isNewLayout && layer.zIndex < 50000) {\r\n const zIndexesObject = getCurrentZIndexes(this.visualizerType);\r\n layerToReturn.layerDimensions = zIndexesObject.getLayerDimensions(layer, this.getCurrentLayoutName(), canvasDimensions)\r\n }\r\n return layerToReturn\r\n });\r\n\r\n return res;\r\n }\r\n\r\n /**\r\n * Returns {array} activeFeatures objects\r\n */\r\n getActiveFeatures(returnAllFeatures, withLayerPositions = false, withDisabled = false) {\r\n let activeFeatures = [];\r\n const receiveAllFeatures = returnAllFeatures || !!(this.qtCategories && this.qtCategories.length);\r\n this.getFeatures(receiveAllFeatures).forEach((parentGroup) => {\r\n // let subParts = parentGroup.subParts().filter(subPart => !subPart.part.disabled); // we need to store every item!\r\n\r\n if (parentGroup.menuType === 0) { // old logic for BV visualizer\r\n if (!parentGroup.disabled && parentGroup.placeholderChanged && parentGroup.activeFeature) {\r\n activeFeatures.push({\r\n selectionGroup: parentGroup.partName,\r\n partId: parentGroup.partId,\r\n quantity: 0,\r\n cartFeature: parentGroup.activeFeature,\r\n featureGroup: parentGroup\r\n });\r\n }\r\n }\r\n\r\n let subItems = parentGroup.relatedItems;\r\n const excluded = [\"fridge_shadow\"];\r\n if (!returnAllFeatures) {\r\n subItems = subItems.filter(subItem => {\r\n if (document.kvConfig.visualizerType === \"Bathroom\" && subItem.partId === \"shower_body\" && subItem.features.length) { // shower_body should always be!\r\n return true\r\n }\r\n return !excluded.includes(subItem.partId) && subItem.activeFeature && subItem.activeFeature.partName\r\n && !subItem.activeFeature.partName.includes(\"laceholder\")\r\n });\r\n }\r\n subItems.forEach((subItem) => {\r\n if (withLayerPositions && subItem.layerPositions) {\r\n Object.keys(subItem.layerPositions).forEach(position => {\r\n if (subItem.layerPositions[position] || withDisabled) {\r\n activeFeatures.push({\r\n selectionGroup: parentGroup.partName,\r\n partId: subItem.partId,\r\n quantity: 0,\r\n cartFeature: subItem.layerPositions[position] || null,\r\n featureGroup: subItem,\r\n layerPosition: position,\r\n });\r\n }\r\n })\r\n } else if (subItem.activeFeature && (withDisabled || !subItem.disabled)) {\r\n activeFeatures.push({\r\n selectionGroup: parentGroup.partName,\r\n partId: subItem.partId,\r\n quantity: 0,\r\n cartFeature: subItem.activeFeature || null,\r\n featureGroup: subItem\r\n });\r\n }\r\n })\r\n });\r\n // console.log('activeFeatures', activeFeatures);\r\n const qtCategories = this.qtCategories;\r\n if (!returnAllFeatures && qtCategories && qtCategories.length) {\r\n const subPartsObject = {};\r\n activeFeatures = activeFeatures.filter(activeFeature => {\r\n return qtCategories.some((qtCategory, qtCategoryIndex) => {\r\n if (!subPartsObject[qtCategoryIndex]) {\r\n subPartsObject[qtCategoryIndex] = qtCategory.subParts; // caching here, cause subParts requires to call getNavItems\r\n }\r\n return subPartsObject[qtCategoryIndex].some(subPart => {\r\n return subPart.part.partId === activeFeature.partId\r\n })\r\n })\r\n })\r\n }\r\n return activeFeatures\r\n }\r\n\r\n getActiveNames() {\r\n const allFeatures = this.getActiveFeatures(true);\r\n const excludedGroups = [\"Background\", \"Globals\", \"Other\", \"Others\"];\r\n const resultFeatures = allFeatures\r\n .filter(featureObject => {\r\n return featureObject.cartFeature && excludedGroups.every(excludedGroupName => featureObject.selectionGroup !== excludedGroupName)\r\n })\r\n .map(featureObject => {\r\n return {\r\n featureId: featureObject.cartFeature.dbFeature.id,\r\n parentName: featureObject.selectionGroup,\r\n groupName: featureObject.cartFeature.dbFeature.groupName,\r\n featureName: featureObject.cartFeature.getFeatureName()\r\n }\r\n })\r\n // console.log(\"resultFeatures\", resultFeatures);\r\n return resultFeatures\r\n }\r\n\r\n /**\r\n *\r\n * @param bvState {object}\r\n * @param setCartAndUserState {boolean}\r\n * @param useNames {boolean}\r\n * @param needToChangeLayout {boolean}\r\n * @param firstLoad {boolean}\r\n */\r\n setActiveFeaturesFromObject(bvState, setCartAndUserState = false, useNames = false, needToChangeLayout = true, firstLoad = false) {\r\n if (bvState) {\r\n\r\n const layout_type = +bvState.layout_type;\r\n needToChangeLayout = needToChangeLayout && (layout_type || layout_type === 0) && (layout_type !== +this.type);\r\n\r\n if (needToChangeLayout) {\r\n this.type = layout_type;\r\n }\r\n\r\n\r\n console.log(\"bvState===>\", bvState);\r\n\r\n // to avoid checks below\r\n bvState.disabled_parts = bvState.disabled_parts || [];\r\n\r\n this.getFeatures()\r\n .forEach((parentGroup) => {\r\n if (parentGroup.menuType === 0) {\r\n const partId = parentGroup.partId;\r\n const hasPreviouslySavedItem = this.selectedLayoutFeatures[layout_type]\r\n && this.selectedLayoutFeatures[layout_type][partId];\r\n if (bvState.hasOwnProperty(partId) || hasPreviouslySavedItem) {\r\n if (useNames) {\r\n parentGroup.activeFeature = parentGroup.getFeatureByPartName(bvState[partId]);\r\n if (!parentGroup.activeFeature && hasPreviouslySavedItem) {\r\n parentGroup.activeFeature = parentGroup.getFeatureByPartName(hasPreviouslySavedItem);\r\n }\r\n } else {\r\n parentGroup.activeFeature = parentGroup.getFeatureById(bvState[partId])\r\n || parentGroup.getDefaultFeature();\r\n }\r\n parentGroup.placeholderChanged = !!parentGroup.activeFeature;\r\n // const {activeQuoteIndex} = store.getState().quotesState;\r\n // parentGroup.firstClick = !!parentGroup.activeFeature;\r\n }\r\n if (parentGroup.activeFeature && firstLoad && !parentGroup.activeFeature.notAvailableInVisualizer) { // Leave non in vis features locked\r\n parentGroup.activeFeature.dbFeature.unlocked = true;\r\n }\r\n if (bvState.disabled_parts.includes(partId)) {\r\n parentGroup.disabled = true\r\n }\r\n } else {\r\n let relatedItems = parentGroup.getRelatedItems();\r\n relatedItems.forEach((subPart) => {\r\n const partId = subPart.partId;\r\n let previouslySelectedItem = null;\r\n subPart.selectedFeaturesHistory.some(featureName => {\r\n previouslySelectedItem = subPart.getFeatureByPartName(featureName);\r\n return previouslySelectedItem\r\n });\r\n if (bvState.hasOwnProperty(partId) || previouslySelectedItem) {\r\n if (!bvState.disabled_parts.includes(partId)) {\r\n subPart.disabled = false\r\n }\r\n if (useNames) {\r\n const matchingFeature = subPart.getFeatureByPartName(bvState[partId]);\r\n if (matchingFeature) {\r\n subPart.activeFeature = matchingFeature;\r\n } else if (previouslySelectedItem) {\r\n subPart.activeFeature = previouslySelectedItem;\r\n }\r\n } else {\r\n subPart.activeFeature = subPart.getFeatureById(bvState[partId]) || parentGroup.getDefaultFeature();\r\n }\r\n if (subPart.layerPositions && subPart.activeFeature) {\r\n // subPart.setLayerPositions()\r\n Object.keys(subPart.layerPositions).forEach(position => {\r\n const partIdPosition = partId + \"_\" + position;\r\n if (bvState[partIdPosition]) {\r\n subPart.layerPositions[position] = useNames\r\n ? subPart.getMatchingPositionFeature(position)\r\n : subPart.getFeatureById(bvState[partIdPosition], true)\r\n }\r\n })\r\n }\r\n subPart.placeholderChanged = !!subPart.activeFeature;\r\n // const {activeQuoteIndex} = store.getState().quotesState;\r\n // subPart.firstClick = !!subPart.activeFeature;\r\n // if (subPart.firstClick) {\r\n // console.log(\"subPart.firstClick\", subPart);\r\n // }\r\n }\r\n if (subPart.activeFeature && firstLoad && !subPart.activeFeature.notAvailableInVisualizer) {\r\n subPart.activeFeature.dbFeature.unlocked = true;\r\n if (subPart.selectedFeaturesHistory) {\r\n subPart.selectedFeaturesHistory.push(subPart.activeFeature.partName)\r\n }\r\n }\r\n if (bvState.disabled_parts.includes(partId)) {\r\n subPart.disabled = true\r\n }\r\n })\r\n }\r\n });\r\n\r\n if (needToChangeLayout) {\r\n this.changeLayout(this.getFeatures());\r\n }\r\n\r\n if (setCartAndUserState) {\r\n this.setCartStateAndUserStateFromBvState(bvState);\r\n }\r\n\r\n const layoutParts = this.designNavigationItems()\r\n .filter(parentGroup => parentGroup.part.categoryEnabled)\r\n .map((parentGroup) => parentGroup.part.partName);\r\n\r\n if (!this.isFakeLayout) {\r\n store.dispatch({\r\n type: types.SET_LAYOUT_DATA_PARTS,\r\n payload: {layoutParts}\r\n });\r\n }\r\n\r\n }\r\n }\r\n\r\n /**\r\n * Sets bv features from url\r\n */\r\n parseUrl(bvState) {\r\n if (bvState.disabled_parts) {\r\n bvState.disabled_parts = bvState.disabled_parts.split(\",\");\r\n }\r\n console.log('restoring bvState from url...', bvState);\r\n return bvState\r\n }\r\n\r\n /**\r\n *\r\n * @param bvState {object}\r\n * @param useNames {boolean}\r\n * @param returnAllFeatures {boolean}\r\n * @returns bvState {object}\r\n */\r\n addSpecificPropertiesToLocalStorage(bvState, useNames = false, returnAllFeatures = false) {\r\n bvState.layout_type = this.type;\r\n bvState.scene = this.scene;\r\n if (this.isNewLayout) {\r\n bvState.bvStateVersion = 2;\r\n }\r\n this.getFeatures(returnAllFeatures).forEach((parentGroup) => {\r\n let relatedItems = parentGroup.getRelatedItems();\r\n relatedItems.forEach((subPart) => {\r\n if (subPart.layerPositions) {\r\n Object.keys(subPart.layerPositions).forEach(position => {\r\n if (subPart.layerPositions[position]) {\r\n bvState[subPart.partId + \"_\" + position] = useNames\r\n ? subPart.layerPositions[position].getSplittedFeatureName()\r\n : subPart.layerPositions[position].dbFeature.id\r\n }\r\n })\r\n }\r\n // this is used for adding these features to array of needed features form the backend on preset apply\r\n if (subPart.activeFeatureParts && subPart.activeFeatureParts.length) {\r\n subPart.activeFeatureParts.forEach((feature, featureIndex) => {\r\n bvState[subPart.partId + \"_part_\" + featureIndex] = useNames\r\n ? feature.getSplittedFeatureName()\r\n : feature.dbFeature.id\r\n })\r\n }\r\n if (subPart.partId === \"backsplash\" && subPart.getCurrentActiveFeatureType) {\r\n bvState[\"backsplash_type\"] = subPart.getCurrentActiveFeatureType();\r\n }\r\n })\r\n })\r\n // console.log('bvState', bvState);\r\n return bvState\r\n }\r\n\r\n getDisabledFeatures() {\r\n const disabledPartIds = [];\r\n this.getFeatures().forEach((parentGroup) => {\r\n if (parentGroup.menuType === 0) {\r\n if (parentGroup.disabled) {\r\n if (document.kvConfig.visualizerType === \"Bathroom\" && parentGroup.partName !== \"Toilet\") {\r\n disabledPartIds.push(parentGroup.partId);\r\n } else {\r\n disabledPartIds.push(parentGroup.partId);\r\n }\r\n }\r\n } else {\r\n parentGroup.relatedItems.forEach((subPart) => {\r\n if (subPart.disabled) {\r\n disabledPartIds.push(subPart.partId);\r\n } else if (subPart.layerPositions) {\r\n Object.keys(subPart.layerPositions).forEach(position => {\r\n if (!subPart.layerPositions[position]) {\r\n disabledPartIds.push(subPart.partId + \"_\" + position);\r\n }\r\n })\r\n }\r\n })\r\n }\r\n });\r\n // console.log('disabledPartIds', disabledPartIds);\r\n return disabledPartIds\r\n }\r\n\r\n /**\r\n * @param partId {string}\r\n * @returns featureGroup {object}\r\n */\r\n getFeatureGroupByPartId(partId) {\r\n if (!partId) {\r\n return null\r\n }\r\n let featureGroup = null;\r\n this.getFeatures(true).forEach(parentGroup => {\r\n if (featureGroup) {\r\n return\r\n }\r\n let relatedItems = parentGroup.relatedItems;\r\n relatedItems.forEach((relatedItem) => {\r\n if (featureGroup) {\r\n return\r\n }\r\n if (partId === relatedItem.partId) {\r\n featureGroup = relatedItem\r\n }\r\n })\r\n });\r\n return featureGroup\r\n }\r\n\r\n /**\r\n * @param groupName {string}\r\n * @returns featureGroup {object}\r\n */\r\n getFeatureGroupByGroupName(groupName) {\r\n if (!groupName) {\r\n return null\r\n }\r\n const strippedGroupName = replaceIncorrectSymbols(groupName || \"\").toLowerCase();\r\n let featureGroup = null;\r\n this.getFeatures(true).forEach(parentGroup => {\r\n if (featureGroup) {\r\n return\r\n }\r\n parentGroup.relatedItems.forEach((relatedItem) => {\r\n const strippedCurrentName = replaceIncorrectSymbols(relatedItem.dbName || relatedItem.partName || \"\").toLowerCase();\r\n if (strippedGroupName === strippedCurrentName\r\n || (strippedGroupName === \"vanity\" && strippedCurrentName === \"vanitie\")\r\n || (strippedGroupName === \"corner shelf\" && relatedItem.dbName === \"Small Corner Shelf\" && relatedItem.partName === \"Corner Shelf\")\r\n || (strippedGroupName === \"shower pan\"\r\n && ((relatedItem.dbName === \"Shower Pans\" && relatedItem.partName === \"Shower Pan\") || relatedItem.partName === \"ShowerPan\"))\r\n ) {\r\n featureGroup = relatedItem\r\n }\r\n })\r\n });\r\n return featureGroup\r\n }\r\n\r\n /**\r\n * @param partId {string}\r\n * @param inGeneral {boolean} // this prevents asking .subParts with asks navigation items which is redundant calculations\r\n * @returns {boolean}\r\n */\r\n partIdExistInQtCategory(partId, inGeneral = false) {\r\n if ((getCurrentRoomType(this) === LOOK_ROOM_TYPES.as) && partId === \"shower_door\" && (this.type === 3 || this.type === 6)) {\r\n return false\r\n }\r\n if (inGeneral) {\r\n return this.qtCategoriesList && this.qtCategoriesList.some(qtCat => {\r\n return qtCat.defaultSubParts && qtCat.defaultSubParts.some(sPart => sPart.part && sPart.part.partId === partId)\r\n })\r\n }\r\n return this.qtCategories && this.qtCategories.some(qtCat => {\r\n return qtCat.subParts && qtCat.subParts.some(sPart => sPart.part && sPart.part.partId === partId)\r\n })\r\n }\r\n\r\n /**\r\n * @param partId {string}\r\n * @param qtCategoryToSearch {string | null}\r\n * @param searchPartOfId {boolean | null}\r\n * @returns designNavigationItems {object}\r\n */\r\n getSubPartFromQtCategories(partId, qtCategoryToSearch = null, searchPartOfId = false) {\r\n\r\n const {wizardIsActive, wizardActiveItem, wizardSelectedValues} = store.getState().wizardState;\r\n if (wizardIsActive && wizardActiveItem) {\r\n const wizardSteps = getAvailableSteps(wizardActiveItem, wizardSelectedValues, true);\r\n return getFeatureGroupFromWizardSteps(wizardSteps, partId);\r\n }\r\n\r\n let countertopExist = null;\r\n let qtCategories = this.qtCategories;\r\n if (qtCategories) {\r\n if (qtCategoryToSearch) {\r\n qtCategories = qtCategories.filter(qtCategory => {\r\n return qtCategory.name.trim().toLowerCase() === qtCategoryToSearch.trim().toLowerCase()\r\n })\r\n //search in all qtCategories if wasn't found by qtCategoryToSearch\r\n if (qtCategories.length === 0) {\r\n qtCategories = this.qtCategories\r\n }\r\n }\r\n qtCategories.forEach(qtCategory => {\r\n if (!countertopExist) {\r\n const subParts = qtCategory.subParts;\r\n let neededSubPart;\r\n if (searchPartOfId) {\r\n neededSubPart = subParts.find(subPart => subPart.part.partId.includes(partId));\r\n } else {\r\n neededSubPart = subParts.find(subPart => subPart.part.partId === partId);\r\n }\r\n if (neededSubPart) {\r\n countertopExist = neededSubPart;\r\n }\r\n }\r\n });\r\n }\r\n return countertopExist\r\n }\r\n\r\n}\r\n\r\n","import EventManager from \"../../store/sqftEventManager\";\r\nimport CabinetShapes from \"./cabinetShapes\";\r\nimport store from \"../../../../../../store\";\r\nimport { setSQFTContextMenuV2 } from \"../../../../../../actions/sqftMenuFunctions\";\r\nimport workspace from \"../workspace\";\r\nimport { renderMeasurementsAroundSnappedShapes } from \"../slab/sqftSlabDraw\";\r\nimport CabinetShapesLayout from \"./cabinetShapesLayout\";\r\nimport { getMousePositionOnField } from \"../../../../helpers/sqftHelper\";\r\nimport { SHAPE_PART_ID } from \"../../../../constants\";\r\nimport { getCurrentLayout } from \"../../../../../appLayout\";\r\n\r\nclass CabinetWorkspace {\r\n constructor() {\r\n this.eventManager = EventManager;\r\n this.objectName = { name: 'CabinetWorkspace' };\r\n this.state = {};\r\n this.cabinetShapes = new CabinetShapes();\r\n this.cabinetShapesLayout = new CabinetShapesLayout();\r\n this.measurementPoints = [];\r\n this.__crownMoldingParams = {\r\n distance: 10\r\n };\r\n\r\n this.initCabinetEvents();\r\n }\r\n\r\n initCabinetEvents() {\r\n EventManager.addEvent(EventManager.events.CONTEXTMENU, this.onRightClick, this, EventManager.priorities.OVERLAY);\r\n EventManager.addEvent(EventManager.events.DROP, this.handleDrop, this, EventManager.priorities.OVERLAY);\r\n EventManager.addEvent(EventManager.events.DRAG_OVER, this.handleDrag, this, EventManager.priorities.OVERLAY);\r\n EventManager.addEvent(EventManager.events.RENDER, this.render, this, EventManager.priorities.OVERLAY);\r\n }\r\n\r\n render(ctx) {\r\n renderMeasurementsAroundSnappedShapes(ctx);\r\n }\r\n\r\n deregisterEvents() {\r\n EventManager.removeEvent(this);\r\n }\r\n\r\n onRightClick(mousePos, e) {\r\n store.dispatch(setSQFTContextMenuV2({\r\n isOpened: true,\r\n title: workspace.intl.formatMessage({ id: \"sqft.contextmenu.properties.title\" }),\r\n menuItems: [\r\n {\r\n title: 'Change Cabinet Style',\r\n callback: new Function()\r\n },\r\n {\r\n title: 'Generate Countertop',\r\n callback: new Function()\r\n },\r\n {\r\n title: 'Generate Backsplash',\r\n callback: new Function()\r\n },\r\n ],\r\n position: { left: mousePos.x, top: mousePos.y }\r\n }));\r\n document.addEventListener('click', this.closeContextMenu);\r\n void e;\r\n }\r\n\r\n closeContextMenu(e) {\r\n const navClick = e.target.closest('[class*=\"contextmenu2\"]');\r\n if (!navClick && !window.touchMove) {\r\n store.dispatch(setSQFTContextMenuV2({\r\n isOpened: false,\r\n title: '',\r\n menuItems: [],\r\n position: {}\r\n }));\r\n }\r\n }\r\n\r\n handleDrop(mousePos, e) {\r\n e.preventDefault();\r\n const featureId = JSON.parse(e.dataTransfer.getData('featureId'));\r\n const parentFeatureId = JSON.parse(e.dataTransfer.getData('parentFeatureId'));\r\n const partId = JSON.parse(e.dataTransfer.getData('partId'));\r\n\r\n if ([SHAPE_PART_ID.upper_cabinet_boxes, SHAPE_PART_ID.lower_cabinet_boxes, SHAPE_PART_ID.tall_cabinet_boxes,\r\n SHAPE_PART_ID.top_cabinet, SHAPE_PART_ID.bottom_cabinet, SHAPE_PART_ID.tall_cabinet\r\n ].includes(partId)) {\r\n\r\n const layout = getCurrentLayout();\r\n const feature = layout.getFeatureById(featureId, true);\r\n const parentFeature = layout.getFeatureById(parentFeatureId, true);\r\n let shapeId = null;\r\n const mousePosOnField = getMousePositionOnField(mousePos.x, mousePos.y);\r\n shapeId = this.cabinetShapes.addShape(feature, parentFeature, mousePosOnField);\r\n\r\n const shape = workspace.getShapeById(shapeId);\r\n shape.shapeAutoShuffle.handlePlaceShapeOnTheLine();\r\n }\r\n }\r\n\r\n handleDrag(mousePos, e) {\r\n e.preventDefault();\r\n // update hovered lines for rendering auto shuffle possibilities\r\n const hoveredLines = workspace.getHoveredLines();\r\n void hoveredLines;\r\n }\r\n}\r\n\r\nexport default new CabinetWorkspace();\r\n","import {baseNewImagesPath} from \"../../assets\";\r\n\r\nexport const applianceThumbnail = `${baseNewImagesPath}images/kv-icons/kv-filter-icons-stove.svg`;\r\nexport const centerIslandThumbnail = `${baseNewImagesPath}images/kv-icons/center_island_countertop.svg`;\r\nexport const countertopGroupThumbnail = `${baseNewImagesPath}images/kv-icons/vanity-countertop.svg`;\r\nexport const wallsThumbnail = `${baseNewImagesPath}images/bv_icons_new/Icons_Wall.svg`;\r\n\r\n/*layouts*/\r\nexport const LayoutThumbnails = {\r\n Layout1: `${baseNewImagesPath}images/kv-layout-thumbnails/SI.png`,\r\n Layout2: `${baseNewImagesPath}images/kv-layout-thumbnails/SNI.png`,\r\n Layout3: \"Layout3\",\r\n Layout4: \"Layout4\",\r\n Layout5: \"Layout5\",\r\n Layout6: \"Layout6\",\r\n Layout7: \"Layout7\",\r\n Layout8: \"Layout8\",\r\n Layout9: \"Layout9\",\r\n Layout10: \"Layout10\",\r\n Layout11: \"Layout11\",\r\n Layout12: \"Layout12\",\r\n Layout13: \"Layout13\",\r\n Layout14: \"Layout14\",\r\n Layout15: \"Layout15\",\r\n Layout16: \"Layout16\",\r\n Layout17: \"Layout17\",\r\n Layout18: \"Layout18\",\r\n};\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {countertopGroupThumbnail} from \"../assets\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport Sink from \"../subparts/countertop/sink\";\r\nimport Faucet from \"../subparts/countertop/faucet\";\r\nimport Countertop from \"../subparts/countertop/countertop\";\r\nimport EdgeProfile from \"../subparts/countertop/edgeProfile\";\r\nimport Cutouts from \"../subparts/countertop/cutouts\";\r\nimport Radius from \"../subparts/countertop/radius\";\r\nimport {PLACEMENTS} from \"../../../kvComponent/core/constants\";\r\n\r\nexport default class CountertopGroup extends Part {\r\n static id = 'Countertop';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Countertop';\r\n this.partThumbnail = countertopGroupThumbnail;\r\n this.translateId = \"visualizer.kitchen.countertop\";\r\n\r\n // related items\r\n this.sink = null;\r\n this.faucet = null;\r\n this.countertop = null;\r\n this.edgeProfile = null;\r\n this.relatedGroupNames = [\"Faucet\", \"Sink\", \"Countertop\", \"Edge Profile\", \"Cutouts\", \"Radius\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n shouldLoadInDifferentGroups = false,\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Sink\":\r\n case \"Farnhousesink\":\r\n if (loadFeature && dbFeature.metaData && dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) {\r\n break;\r\n }\r\n shouldLoadInDifferentGroups = true;\r\n relatedItemName = \"sink\";\r\n RelatedItemClass = Sink;\r\n break;\r\n case \"Faucet\":\r\n if (loadFeature && dbFeature.metaData && dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) {\r\n break;\r\n }\r\n shouldLoadInDifferentGroups = true;\r\n relatedItemName = \"faucet\";\r\n RelatedItemClass = Faucet;\r\n break;\r\n case \"Countertop\":\r\n relatedItemName = \"countertop\";\r\n RelatedItemClass = Countertop;\r\n break;\r\n case \"Edge Profile\":\r\n case \"Edge\":\r\n shouldLoadInDifferentGroups = true;\r\n relatedItemName = \"edgeProfile\";\r\n RelatedItemClass = EdgeProfile;\r\n break;\r\n case \"Cutouts\":\r\n case \"cutouts\":\r\n relatedItemName = \"cutouts\";\r\n RelatedItemClass = Cutouts;\r\n break;\r\n case \"Radius\":\r\n relatedItemName = \"radius\";\r\n RelatedItemClass = Radius;\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature, shouldLoadInDifferentGroups)\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n subParts(withHidden = true, hideWithoutFeatures = false) {\r\n return this.getRelatedItems()\r\n .filter(item => {\r\n if (hideWithoutFeatures && (item.partId === \"cutouts\" || item.partId === \"radius\")) {\r\n return false\r\n }\r\n return this.filterRelatedItem(item, withHidden)\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n setSpecificRules() {\r\n if (this.edgeProfile) {\r\n this.edgeProfile.setEdgeNotInVisualizer()\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport store from \"../../../../../store\";\r\nimport {toggleNotCompatibleView} from \"../../../../../actions/selectionFunctions\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class TubCommon extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n disabledClick() {}\r\n\r\n applyFeatureIfNotCompatible() {\r\n const showerTubComboParent = this.getParent().getParent();\r\n showerTubComboParent.setShowerTubCombo();\r\n showerTubComboParent.setActiveTub(this.partId);\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked);\r\n\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n\r\n const showerTubComboParent = this.getParent().getParent();\r\n const currentBottomTub = showerTubComboParent.bottomTub;\r\n\r\n const showNotCompatibleViewConditions = !window.location.hash.includes(\"visualizer\") &&\r\n (!showerTubComboParent.showerTubComboIsActive || (\r\n (this.partId === \"walk_in_tub\" && currentBottomTub !== \"walk_in_tub\") || (this.partId !== \"walk_in_tub\" && currentBottomTub === \"walk_in_tub\")\r\n ));\r\n\r\n if (showNotCompatibleViewConditions) {\r\n store.dispatch(toggleNotCompatibleView(true));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n this.featureClicked();\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerSize = this.getParent().showerSize();\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }];\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.getParent().bottomTub !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {LayoutAbbreviation} from \"../../constants\";\r\nimport {getMetadataByDimensions, iIncludes} from \"../../../../../misc/utils\";\r\n\r\nexport default class ExternallWall extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.visible = true;\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.selectedByUser = false;\r\n this.allWallsApplied = false;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const featuresToDisplay = super.getFeaturesBySearchText(this.getAvailableFeatures(filters), searchText);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n getAvailableFeatures(filters) {\r\n const conditions = this.getArrayOfConditions();\r\n // console.log('condtitions', condtitions);\r\n const filteredAvailableFeatures = super.getFilteredFeaturesByFilters(filters);\r\n return super.navigationSubItemsWithFilterMultipleConditions(conditions, filteredAvailableFeatures);\r\n }\r\n\r\n setLayers(layout) {\r\n // this.wallName === \"ExtrusionWallLeft\" && console.log('this.getArrayOfConditions()', this.getArrayOfConditions());\r\n const shower = layout.parts[Shower.id];\r\n const wallParent = this.getParent();\r\n const conditions = this.getArrayOfConditions();\r\n // const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n if (this.activeFeature) {\r\n if (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature) {\r\n super.setLayers(layout)\r\n } else if (shower.isComplete()) {\r\n if (this.wallName === \"ExtrusionWallLeft\" || !shower.showerBody.activeFeature.partName.includes(\"Complete\")) {\r\n super.hideLayers();\r\n return;\r\n } else if (this.activeFeature && !this.activeFeature.matchesMetaForArrayOfConditions(conditions)) {\r\n this.setDefault(layout) // set new default layer\r\n }\r\n } else if (!this.activeFeature.matchesMetaForArrayOfConditions(conditions)) {\r\n this.setDefault(layout) // set new default layer\r\n }\r\n if (this.wallName === \"ExtrusionWallLeft\") {\r\n const activeShower = wallParent.getActiveShowerGroup();\r\n const showerDimensions = activeShower.showerDimensions();\r\n if (showerDimensions === \"Pony\") {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (!shower.isComplete()) {\r\n this.setShadowFeature();\r\n }\r\n }\r\n }\r\n if (this.shadowFeature) {\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n const matchesByBindings = this.shadowFeature.dbFeature.s3Bindings.some(binding => {\r\n return binding.layout === LayoutAbbreviation.All || binding.layout === layoutAbr\r\n });\r\n if (!this.shadowFeature.matchesMetaForArrayOfConditions(this.getShadowConditions()) || !matchesByBindings) {\r\n this.setShadowFeature();\r\n }\r\n }\r\n super.setLayers(layout)\r\n }\r\n\r\n setDefault(layout) {\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n const shower = layout.parts[Shower.id];\r\n if (!shower) {\r\n console.log('Ex Wall - no Shower');\r\n return null;\r\n }\r\n if (layoutAbr === LayoutAbbreviation.Large) {\r\n if ((shower.isComplete() && this.wallName === \"ExtrusionWallLeft\")\r\n || !shower.showerBody || !shower.showerBody.activeFeature\r\n || (shower.isComplete() && !shower.showerBody.activeFeature.partName.includes(\"Complete\"))) {\r\n return null;\r\n }\r\n }\r\n const filteredFeatures = this.getAvailableFeatures();\r\n // console.log('Ex Wall - setDefault', filteredFeatures);\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, null, null, true)) {\r\n let hardCodedName = '';\r\n switch (layoutAbr) {\r\n case LayoutAbbreviation.Small:\r\n hardCodedName = 'Rafter';\r\n break;\r\n case LayoutAbbreviation.Large:\r\n hardCodedName = 'Sahara Autumn Porcelain Tile';\r\n break;\r\n }\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return iIncludes(feature.dbFeature.displayName, hardCodedName);\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return iIncludes(feature.dbFeature.displayName, \" - placeholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault;\r\n this.setShadowFeature();\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n\r\n const shower = zIndexes.Shower;\r\n const wallParent = this.getParent();\r\n\r\n if (zIndexes && this.wallName === \"ExtrusionWallLeft\") {\r\n // console.warn(`${this.wallName}: no wall, because we have a complete shower.`);\r\n if (wallParent.layout.parts[Shower.id].isComplete()) {\r\n return false;\r\n } else if (this.activeFeature) {\r\n const activeShowerGroup = wallParent.getActiveShowerGroup();\r\n const showerDimensions = getMetadataByDimensions(activeShowerGroup.showerDimensions());\r\n const zIndex = showerDimensions === \"Half\"\r\n ? shower.Custom60in[this.wallName + \"HalfWall\"]\r\n : shower.Custom60in[this.wallName];\r\n const zIndexShadow = showerDimensions === \"Half\"\r\n ? shower.Custom60in[this.wallName + \"ShadowHalfWall\"]\r\n : shower.Custom60in[this.wallName + \"Shadow\"];\r\n this.activeFeature.layer.zIndex = zIndex;\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.shadowFeature) {\r\n this.shadowFeature.layer.zIndex = zIndexShadow;\r\n }\r\n }\r\n } else {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = shower.Custom60in[this.wallName];\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = shower.Custom60in[this.wallName];\r\n }\r\n if (zIndexes && this.shadowFeature) {\r\n this.shadowFeature.layer.zIndex = shower.Custom60in[this.wallName + \"Shadow\"];\r\n }\r\n }\r\n }\r\n\r\n clickFromAllWalls(ignoreLocked) {\r\n if (!this.getParent().selectedByUser) {\r\n this.handleClick(ignoreLocked, 'all_walls')\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom) {\r\n const parent = this.getParent();\r\n if (!parent.getParent().allWallsApplied && clickFrom !== 'all_walls') {\r\n parent.selectedByUser = true;\r\n }\r\n if (clickFrom !== 'context' && clickFrom !== 'all_walls') {\r\n const wallParent = this.getParent().getParent();\r\n const ponyWallFeature = wallParent.ponyWall && wallParent.ponyWall.features.find(feature => {\r\n return feature.partName === this.partName\r\n });\r\n if (ponyWallFeature) {\r\n ponyWallFeature.handleClick(ignoreLocked, 'context');\r\n }\r\n }\r\n super.handleClick(ignoreLocked);\r\n\r\n // if (parent.wallName === \"ExtrusionWallLeft\") {\r\n // const wallB = parent.getParent().layout.parts[\"Walls\"].part[\"wallB\"];\r\n // if (wallB.placeholderChanged && wallB.activeFeature.partName === this.partName) {\r\n // parent.selectedByUser = false;\r\n // }\r\n // } else {\r\n // const wallC = parent.getParent().layout.parts[\"Walls\"].part[\"wallC\"];\r\n // if (wallC.placeholderChanged && wallC.activeFeature.partName === this.partName) {\r\n // parent.selectedByUser = false;\r\n // }\r\n // }\r\n }\r\n\r\n // unCheckAllWalls(clickFrom) {\r\n // if (clickFrom === 'showerWall') {\r\n // this.allWallsApplied = false;\r\n // }\r\n // const tempSelectedByUser = this.selectedByUser;\r\n // if (this.activeFeatureBeforeAllWalls) {\r\n // this.activeFeatureBeforeAllWalls.handleClick();\r\n // this.activeFeatureBeforeAllWalls = null;\r\n // }\r\n // this.selectedByUser = tempSelectedByUser;\r\n // if (this.rememberToRecoverPlaceholder) {\r\n // this.placeholderChanged = false;\r\n // this.rememberToRecoverPlaceholder = false;\r\n // }\r\n // }\r\n}\r\n","import {LayoutType} from \"./constants\";\r\nimport {UseFullSizeImages} from \"../../../config\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nlet layouts = {};\r\nObject.keys(LayoutType).forEach(layoutName => {\r\n layouts[layoutName] = {\r\n center_island_sink: 3100,\r\n center_island_faucet: 3200,\r\n oven: 4900,\r\n dishwasher: 5000,\r\n fridge: 5100,\r\n hood: 5200,\r\n microwave: 5300,\r\n range: 5400,\r\n decor: 11111,\r\n sink: 18000,\r\n faucet: 19000,\r\n center_island_countertop: 59000,\r\n center_island_cabinet: 60000,\r\n countertop: 61000,\r\n bottom_cabinet: 62000,\r\n top_cabinet: 63000,\r\n backsplash: 64000,\r\n center_wall: 65000,\r\n front_wall: 66000,\r\n left_wall: 67000,\r\n right_wall: 68000,\r\n kitchen_floor: 69000,\r\n background_bg: 70000,\r\n };\r\n});\r\n\r\nconst getLayerDimensions = (layer, currentLayout, canvasDimensions) => {\r\n const fullImagesFactor = UseFullSizeImages ? 177.77 : 100;\r\n const sizeFactor = fullImagesFactor / 100;\r\n const {coords} = layer;\r\n\r\n if (!coords) {\r\n return null\r\n }\r\n\r\n const COORDS_MAX = 1;\r\n // const isWallMobile = window.innerWidth <= 1024 && layer.partId.includes(\"wall\");\r\n\r\n const x1Percentage = (coords.min_x * 100) / COORDS_MAX;\r\n const x2Percentage = (coords.max_x * 100) / COORDS_MAX;\r\n const y1Percentage = (coords.min_y * 100) / COORDS_MAX;\r\n const y2Percentage = (coords.max_y * 100) / COORDS_MAX;\r\n let x1 = sizeFactor*((canvasDimensions.width * x1Percentage) / 100);\r\n let x2 = sizeFactor*((canvasDimensions.width * x2Percentage) / 100);\r\n let y1 = sizeFactor*((canvasDimensions.height * y1Percentage) / 100);\r\n let y2 = sizeFactor*((canvasDimensions.height * y2Percentage) / 100);\r\n // if (!isWallMobile) { // make layer bigger (to add some semi-transparent pixels)\r\n // x1 = x1 - 100;\r\n // x2 = x2 + 100;\r\n // y1 = y1 - 100;\r\n // y2 = y2 + 100;\r\n // }\r\n return {\r\n polygonArray: [[x1, y1], [x2, y1], [x2, y2], [x1, y2]],\r\n width: (x2 - x1),\r\n height:(y2 - y1)\r\n };\r\n};\r\n\r\nconst getMenuByHoveredLayer = (currentLayout, layer) => {\r\n const layout = getCurrentLayout();\r\n switch (layer.partId) {\r\n case \"sink\":\r\n case \"faucet\":\r\n case \"countertop\":\r\n case \"edge_profile\":\r\n return {\r\n contextMenuPartId: \"countertop_group_custom\"\r\n };\r\n case \"center_island_sink\":\r\n case \"center_island_faucet\":\r\n case \"center_island_edge\":\r\n case \"center_island_countertop\":\r\n case \"center_island_stovetop\":\r\n return {\r\n contextMenuPartId: \"center_island_custom\"\r\n };\r\n default: {\r\n const featureGroup = layout.getFeatureGroupByPartId(layer.partId);\r\n if (!featureGroup) {\r\n return \"\"\r\n }\r\n return {\r\n parent: featureGroup.getParent().partName,\r\n child: featureGroup.partName\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport default {\r\n layouts,\r\n getMenuByHoveredLayer,\r\n getLayerDimensions\r\n}\r\n\r\n\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport store from \"../../../../../store\";\r\nimport {toggleNotCompatibleView} from \"../../../../../actions/selectionFunctions\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class TubCommon extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n }\r\n\r\n disabledClick() {}\r\n\r\n applyFeatureIfNotCompatible() {\r\n const showerTubComboParent = this.getParent().getParent();\r\n showerTubComboParent.setShowerTubCombo();\r\n showerTubComboParent.setActiveTub(this.partId);\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom, clickLogic = null) {\r\n super.handleClick(ignoreLocked);\r\n\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n\r\n const showerTubComboParent = this.getParent().getParent();\r\n const currentBottomTub = showerTubComboParent.bottomTub;\r\n\r\n const showNotCompatibleViewConditions = !window.location.hash.includes(\"visualizer\") &&\r\n (!showerTubComboParent.showerTubComboIsActive || (\r\n (this.partId === \"walk_in_tub\" && currentBottomTub !== \"walk_in_tub\") || (this.partId !== \"walk_in_tub\" && currentBottomTub === \"walk_in_tub\")\r\n ));\r\n\r\n if (showNotCompatibleViewConditions && !(clickLogic && clickLogic.skipNotCompatible)) {\r\n store.dispatch(toggleNotCompatibleView(true));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n this.featureClicked();\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.getParent().bottomTub !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n}\r\n","import {LayoutType} from \"./constants\";\r\nimport {UseFullSizeImages} from \"../../../config\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nlet layouts = {};\r\nObject.keys(LayoutType).forEach(layoutName => {\r\n layouts[layoutName] = {\r\n center_island_sink: 3100,\r\n background_bg: 70000,\r\n };\r\n});\r\n\r\nconst getLayerDimensions = (layer, currentLayout, canvasDimensions) => {\r\n const fullImagesFactor = UseFullSizeImages ? 177.77 : 100;\r\n const sizeFactor = fullImagesFactor / 100;\r\n const {coords} = layer;\r\n\r\n if (!coords) {\r\n return null\r\n }\r\n\r\n const COORDS_MAX = 1;\r\n\r\n const x1Percentage = (coords.min_x * 100) / COORDS_MAX;\r\n const x2Percentage = (coords.max_x * 100) / COORDS_MAX;\r\n const y1Percentage = (coords.min_y * 100) / COORDS_MAX;\r\n const y2Percentage = (coords.max_y * 100) / COORDS_MAX;\r\n let x1 = sizeFactor*((canvasDimensions.width * x1Percentage) / 100);\r\n let x2 = sizeFactor*((canvasDimensions.width * x2Percentage) / 100);\r\n let y1 = sizeFactor*((canvasDimensions.height * y1Percentage) / 100);\r\n let y2 = sizeFactor*((canvasDimensions.height * y2Percentage) / 100);\r\n return {\r\n polygonArray: [[x1, y1], [x2, y1], [x2, y2], [x1, y2]],\r\n width: (x2 - x1),\r\n height:(y2 - y1)\r\n };\r\n};\r\n\r\nconst getMenuByHoveredLayer = (layer) => {\r\n const layout = getCurrentLayout();\r\n const featureGroup = layout.getFeatureGroupByPartId(layer.partId);\r\n if (featureGroup) {\r\n return {\r\n parent: featureGroup.getParent().partName,\r\n child: featureGroup.partName\r\n }\r\n }\r\n return \"\"\r\n};\r\n\r\nexport default {\r\n layouts,\r\n getMenuByHoveredLayer,\r\n getLayerDimensions\r\n}\r\n\r\n\r\n","import cloneDeep from \"lodash/cloneDeep\";\r\n\r\nimport * as types from '../actions/actionTypes';\r\nimport {getCurrencyPosition, getCurrencySign} from \"../misc/helpers\";\r\nimport {MEASURE_UNITS} from \"../bvcomponents/sqft/constants\";\r\nimport {getCommonVisualizerType, IS_LIXIL_SERVERS} from \"../config\";\r\nimport * as fabricatorHardcode from \"../misc/fabricatorHardcode\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../config\";\r\n\r\nconst checkMeasureUnit = (mUnit) => {\r\n return (mUnit === \"metric\" || mUnit === MEASURE_UNITS.Metric) ? MEASURE_UNITS.Metric : MEASURE_UNITS.Imperial\r\n};\r\n\r\nconst initialState = {\r\n received: false,\r\n fabricatorSubscriptions: [],\r\n settings: { // current active\r\n currency: \"USD\",\r\n currencySign: \"$\",\r\n currencyPosition: \"left\",\r\n measureUnit: null, // Imperial(default) || Metric\r\n useCategorySwitching: false,\r\n useShipperHQ: false,\r\n useFabricatorCostPrices: false,\r\n hideYourListButton: false,\r\n useMarkUpFeaturesRequests: false,\r\n },\r\n kitchenSettings: {},\r\n bathroomSettings: {},\r\n fabricatorTaxes: null,\r\n ...fabricatorHardcode.fabricatorsHardcodeObject,\r\n hidePricesFromUser: Array.isArray(document.dashboardUserPermissions) && document.dashboardUserPermissions.some(permission => {\r\n return permission.ProtectedAreaId === 9000 && permission.AccessRights === 0\r\n }),\r\n wasCreatedFromFabricator: \"\",\r\n useIMEAPI: false,\r\n useIMEAPI_PartnerId: 0,\r\n receiptSettings: {}, // \"{signIsRequired, showThumbnailsAndDescriptions, hideSignatureField, doNotFillNameAndDate}\"\r\n};\r\n\r\nconst getDashboardModeSettings = (settings) => {\r\n const dashboardProps = [\"twoFA\", \"leadCapture\", \"leadCaptureProduct\", \"clickLeadCapture\", \"enableQuote\",\r\n \"enableScheduling\", \"leadCaptureShoppingCart\", \"leadCaptureOnQuote\", \"clickLeadCaptureOnQuote\",\r\n \"showVisualizerTutorial\", \"showSqftTutorial\", \"showSlabMode\", \"useShipping\", \"sureTax\", \"hideSku\", \"showSalePrices\"];\r\n dashboardProps.forEach(property => {\r\n if (settings && settings[property] && !settings[property + \"Dashboard\"] && document.kvConfig.isBackend) {\r\n settings[property] = false // disable property in the dashboard mode if it is disabled\r\n } else if (settings && !settings[property] && settings[property + \"Dashboard\"] && document.kvConfig.isBackend) {\r\n settings[property] = true // enable simple property in dashboard mode (to simplify code)\r\n }\r\n })\r\n return settings\r\n}\r\n\r\nexport const parseFabricatorSettingsOLD = (payload) => { //todo remove this after we push staging backend\r\n const actionPayload = cloneDeep(payload); // this is needed to other reducers! Object assign doesn't deeply cloning\r\n let bathroomSettings = actionPayload.settings || {};\r\n let kitchenSettings = actionPayload.settings || {};\r\n let fireplaceSettings = actionPayload.settings || {};\r\n let laundryRoomSettings = actionPayload.settings || {};\r\n if (kitchenSettings.kitchenToggles) {\r\n Object.keys(kitchenSettings.kitchenToggles).forEach((oldKey) => {\r\n const ignoreProperties = [\"showSqftTutorial\", \"showSlabMode\"];\r\n if (!ignoreProperties.some(prop => oldKey.includes(prop))) {\r\n const newKey = oldKey.split(\"Kitchen\")[0]\r\n delete Object.assign(kitchenSettings.kitchenToggles, {[newKey]: kitchenSettings.kitchenToggles[oldKey] })[oldKey];\r\n }\r\n })\r\n kitchenSettings.kitchenToggles.checkout = kitchenSettings.kitchenToggles.checkout || kitchenSettings.kitchenToggles.checkOut; // fix for incorrect property name\r\n kitchenSettings = Object.assign({}, actionPayload.settings, kitchenSettings.kitchenToggles);\r\n delete kitchenSettings.checkOut; // we don't need to keep it not to use it in future\r\n delete kitchenSettings.kitchenToggles; // we don't need to keep it not to use it in future\r\n kitchenSettings = getDashboardModeSettings(kitchenSettings);\r\n }\r\n bathroomSettings = getDashboardModeSettings(bathroomSettings);\r\n delete bathroomSettings.kitchenToggles; // we don't need to keep it not to use it in future\r\n return {\r\n settings: (document.kvConfig.visualizerType === \"Kitchen\" || document.kvConfig.visualizerType === \"kvScene\") ? kitchenSettings : bathroomSettings, // current active\r\n kitchenSettings,\r\n bathroomSettings,\r\n fireplaceSettings,\r\n laundryRoomSettings,\r\n }\r\n}\r\n\r\nconst generalProperties = [\"deposit\", \"depositDisclaimer\", \"depositMessage\", \"docuSignAuth\", \"enableDeposit\",\r\n \"enableDisclaimer\", \"enableDocuSign\", \"hasPaymentGateway\", \"language\", \"masterContractFields\", \"masterContractFullUrl\",\r\n \"measurement\", \"useContractSigning\"];\r\n\r\nexport const parseFabricatorSettings = (payload) => {\r\n if (IS_LIXIL_SERVERS) {\r\n //todo remove this after we push backend on Lixil\r\n return parseFabricatorSettingsOLD(payload);\r\n }\r\n let settingsObject = {\r\n settings: {},\r\n kitchenSettings: {},\r\n bathroomSettings: {},\r\n fireplaceSettings: {},\r\n laundryRoomSettings: {},\r\n };\r\n if (!payload.settings.toolSettings) {\r\n return settingsObject\r\n }\r\n const actionPayload = cloneDeep(payload); // this is needed to other reducers! Object assign doesn't deeply cloning\r\n Object.keys(actionPayload.settings.toolSettings).forEach(visType => {\r\n settingsObject[visType + \"Settings\"] = Object.assign(\r\n {},\r\n getDashboardModeSettings(actionPayload.settings.toolSettings[visType]),\r\n {\r\n checkout: actionPayload.settings.toolSettings[visType].checkout ||actionPayload.settings.toolSettings[visType].checkOut // fix for incorrect property name\r\n });\r\n delete settingsObject[visType + \"Settings\"].checkOut; // we don't need to keep it not to use it in future\r\n generalProperties.forEach(property => { // here we set the same property into each room fabricator settings\r\n // to prevent all components changing to take data from fabricatorData instead of fabricatorData.settings\r\n settingsObject[visType + \"Settings\"][property] = actionPayload.settings[property];\r\n })\r\n });\r\n const currentSettingsProperty = getCommonVisualizerType() + \"Settings\";\r\n settingsObject.settings = settingsObject[currentSettingsProperty]; // current settings\r\n return settingsObject\r\n}\r\n\r\nconst getFinalSettings = (settings, stateSettings, fabricatorResponse) => {\r\n\r\n if (IS_PRODUCT_JOURNEY && window.location.href.includes(\"colonial_\")) {\r\n settings[\"leadCaptureShoppingCart\"] = false;\r\n settings[\"enableQuote\"] = false;\r\n }\r\n\r\n const isCaesarStone = fabricatorHardcode.hardCodeIsCaesarStone();\r\n const isDeStefano = fabricatorHardcode.hardCodeIsDeStefano();\r\n return Object.assign({}, stateSettings, {\r\n ...settings,\r\n leadCapture: IS_PRODUCT_JOURNEY ? settings.leadCaptureProduct : settings.leadCapture,\r\n measureUnit: checkMeasureUnit(settings.measurement),\r\n currencySign: getCurrencySign(settings.currency, (fabricatorResponse && fabricatorResponse.settings) ? fabricatorResponse.settings : settings),\r\n currencyPosition: getCurrencyPosition(settings.currency),\r\n priceWorksheetEnabled: true,\r\n enableSharing: isCaesarStone ? false : settings.enableSharing,\r\n showLanguageSelect: isCaesarStone || isDeStefano ? false : settings.showLanguageSelect,\r\n useCategorySwitching: true,\r\n allowVisualizerSwitching: fabricatorResponse.useVisualizerSwitching || window.location.href.includes(\"allowRooms\"),\r\n callForPricing: settings.callForPricing || fabricatorHardcode.hardCodeIsAgent() || fabricatorHardcode.hardCodeIsTorrco(),\r\n enableASInventorySync: (fabricatorResponse && fabricatorResponse.settings) ? fabricatorResponse.settings.enableASInventorySync : false,\r\n enableASProductSync: (fabricatorResponse && fabricatorResponse.settings) ? fabricatorResponse.settings.enableASProductSync : false,\r\n enableGInventorySync: (fabricatorResponse && fabricatorResponse.settings) ? fabricatorResponse.settings.enableGInventorySync : false,\r\n enableGProductSync: (fabricatorResponse && fabricatorResponse.settings) ? fabricatorResponse.settings.enableGProductSync : false,\r\n useTrumbleApi: (fabricatorResponse && fabricatorResponse.settings) ? fabricatorResponse.settings.useTrumbleApi : false,\r\n useShipperHQ: (fabricatorResponse && fabricatorResponse.settings) ? fabricatorResponse.settings.useShipperHQ : false,\r\n useDifferentCurrencies: (fabricatorResponse && fabricatorResponse.settings) ? fabricatorResponse.settings.useDifferentCurrencies : false,\r\n hideYourListButton: fabricatorResponse ? fabricatorResponse.hideYourListButton : false,\r\n useMarkUpFeaturesRequests: fabricatorResponse ? fabricatorResponse.useMarkUpFeaturesRequests : false,\r\n useFabricatorCostPrices: false,\r\n });\r\n}\r\n\r\nexport default function (state = initialState, action) {\r\n\r\n switch (action.type) {\r\n\r\n case types.SET_FABRICATOR_DATA: {\r\n const {settings, kitchenSettings, bathroomSettings, fireplaceSettings, laundryRoomSettings} = parseFabricatorSettings(action.payload);\r\n document.kvConfig.visualizerOnly = settings.visualizerOnly;\r\n if (document.kvConfig.isBackend && document.kvConfig.visualizerOnly) {\r\n document.kvConfig.visualizerOnly = !(settings.checkout && settings.showPricing) // if they are enabled - enable all pages\r\n }\r\n const finalSettings = getFinalSettings(settings, state.settings, action.payload);\r\n const finalKvSettings = getFinalSettings(kitchenSettings, state.settings, action.payload);\r\n const finalBvSettings = getFinalSettings(bathroomSettings, state.settings, action.payload);\r\n const finalFPSettings = getFinalSettings(fireplaceSettings, state.settings, action.payload);\r\n const finalLRSettings = getFinalSettings(laundryRoomSettings, state.settings, action.payload);\r\n\r\n console.log(\"finalSettings: \", finalSettings);\r\n // console.log(\"finalKvSettings\", finalKvSettings);\r\n // console.log(\"finalBvSettings\", finalBvSettings);\r\n return Object.assign({}, state, {\r\n received: true,\r\n ...action.payload,\r\n city: action.payload.city ? action.payload.city.trim() : \"\",\r\n ...fabricatorHardcode.fabricatorsHardcodeObject,\r\n settings: finalSettings,\r\n kitchenSettings: finalKvSettings,\r\n bathroomSettings: finalBvSettings,\r\n fireplaceSettings: finalFPSettings,\r\n laundryRoomSettings: finalLRSettings,\r\n wasCreatedFromFabricator: action.payload.wasCreatedFromFabricator,\r\n useIMEAPI: action.payload.useIMEAPI,\r\n useIMEAPI_PartnerId: action.payload.useIMEAPI_PartnerId,\r\n receiptSettings: action.payload.receiptSettings ? JSON.parse(action.payload.receiptSettings) : {\r\n showThumbnailsAndDescriptions: fabricatorHardcode.hardCodeIsFabricator(\"customfitbath\", 259554)\r\n || fabricatorHardcode.hardCodeIsAmericanStandard()\r\n },\r\n });\r\n }\r\n case types.SET_FABRICATOR_SUBSCRIPTIONS:\r\n return Object.assign({}, state, {\r\n ...action.payload,\r\n });\r\n case types.SET_FABRICATOR_TAXES:\r\n return Object.assign({}, state, {\r\n fabricatorTaxes: action.payload.fabricatorTaxes || [],\r\n });\r\n case types.SET_SQFT_MEASURE_UNIT: {\r\n return Object.assign({}, state, {\r\n settings: Object.assign({}, state.settings, {\r\n measureUnit: action.payload.measureUnit,\r\n }),\r\n kitchenSettings: Object.assign({}, state.settings, {\r\n measureUnit: action.payload.measureUnit,\r\n })\r\n });\r\n }\r\n case types.UPDATE_FABRICATOR_SETTINGS: {\r\n const currentSettingsProperty = getCommonVisualizerType() + \"Settings\";\r\n const nextSettings = state[currentSettingsProperty]; // current settings\r\n // console.log(\"nextSettings\", nextSettings);\r\n return Object.assign({}, state, {\r\n settings: Object.assign({}, state.settings, nextSettings)\r\n });\r\n }\r\n case types.TOGGLE_HIDE_ITEMS_PRICES: {\r\n return Object.assign({}, state, {\r\n hideCheckoutBreakdownCost: !state.hideCheckoutBreakdownCost\r\n });\r\n }\r\n case types.TOGGLE_USE_FABRICATOR_COST_PRICES: {\r\n const nextSettings = {useFabricatorCostPrices: action.payload.useFabricatorCostPrices}\r\n return Object.assign({}, state, {\r\n settings: Object.assign({}, state.settings, nextSettings)\r\n });\r\n }\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nexport const INITIAL_FLOW_BUTTON_TYPES = {\r\n Quote: \"Quote\",\r\n Design: \"Design\",\r\n};\r\n\r\nconst initialState = {\r\n initialFlowFinished: false, // is set only once to true (to load visualizer)\r\n initialFlowAdditionalRooms: [],\r\n initialFlowType: null,\r\n initialFlowRoom: null,\r\n initialFlowRoomLayout: null,\r\n initialFlowStep: 0,\r\n visualizerNotAvailable: false\r\n};\r\n\r\nexport default function(state = initialState, action){\r\n switch (action.type) {\r\n case types.SET_INITIAL_FLOW_FINISHED:\r\n case types.SET_INITIAL_FLOW_BUTTON:\r\n case types.SET_INITIAL_FLOW_ROOM:\r\n case types.SET_INITIAL_FLOW_ROOM_LAYOUT:\r\n case types.SET_INITIAL_FLOW_STEP:\r\n case types.SET_INITIAL_FLOW_ADDITIONAL_ROOMS:\r\n case types.SET_INITIAL_FLOW_VISUALIZER_NOT_AVAILABLE:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n }\r\n return state;\r\n}\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport NavigationRequests from \"./navigation/navigationRequests\";\r\nimport {IS_LIXIL_UI} from \"../../config\";\r\nimport MaterialSpinner from \"../ui/materialSpinner\";\r\nimport {COUNTERTOP_GROUP} from \"../kvComponent/core/constants\";\r\n\r\nclass AllFeaturesChecker extends NavigationRequests {\r\n\r\n static propTypes = {\r\n subPart: PropTypes.object.isRequired,\r\n callBack: PropTypes.func,\r\n loaderOnly: PropTypes.bool,\r\n withFiltersRequest: PropTypes.bool,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this._filtersRequestsMade = [];\r\n }\r\n\r\n componentDidMount() {\r\n const {subPart, callBack, withFiltersRequest, filterGroups} = this.props;\r\n if (withFiltersRequest && !this._filtersRequestsMade.includes(subPart.part.partId) && COUNTERTOP_GROUP.includes(subPart.part.partId)\r\n && !subPart.part.filtersReceived) {\r\n this._filtersRequestsMade.push(subPart.part.partId);\r\n this.checkIfAllFiltersReceived(subPart.part, filterGroups)\r\n .then(() => {\r\n if (callBack) {\r\n callBack()\r\n }\r\n });\r\n }\r\n this.checkIfAllFeaturesReceived(subPart, \"\", callBack);\r\n }\r\n\r\n render() {\r\n const {loaderOnly} = this.props;\r\n if (loaderOnly) {\r\n return IS_LIXIL_UI\r\n ? \r\n :

    \r\n }\r\n\r\n return (\r\n
  • \r\n
    \r\n
  • \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n cartItems: store.cartState.cartItems,\r\n filterGroups: store.filterState.filterGroups,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(AllFeaturesChecker);\r\n","import {createContext, useContext} from \"react\";\r\n\r\nexport const initialShopContextValues = {\r\n shopNavItems: [],\r\n shopAllNavItems: [],\r\n shopNavItemsLoaded: false,\r\n shopActiveCategory: \"\",\r\n shopActiveFeature: \"\",\r\n shopLastActiveFeature: \"\",\r\n};\r\n\r\nconst shopAction = \"CHANGE_SHOP_CONTEXT\";\r\n\r\nconst ShopContext = createContext({});\r\n\r\nexport const useShopContext = () => {\r\n return useContext(ShopContext);\r\n}\r\n\r\nexport const shopContextAction = (payload) => {\r\n return {\r\n type: shopAction,\r\n payload\r\n }\r\n}\r\n\r\nexport const shopContextReducer = (state = initialShopContextValues, action) => {\r\n switch (action.type) {\r\n case shopAction:\r\n return {...state, ...action.payload};\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default ShopContext;\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport COLOR_THEMES from \"../../../colorThemes\";\r\n\r\n\r\nconst UiIcon = (props) => {\r\n\r\n const {activeTheme, icon, color} = props;\r\n\r\n switch (icon) {\r\n case \"checkmark\":\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n default:\r\n return null\r\n }\r\n}\r\n\r\nUiIcon.propTypes = {\r\n icon: PropTypes.string.isRequired,\r\n color: PropTypes.string\r\n}\r\n\r\nconst mapStateToProps = store => {\r\n const {activeTheme} = store.serverState;\r\n return {\r\n activeTheme\r\n }\r\n};\r\n\r\nexport default connect(mapStateToProps)(UiIcon)\r\n","import * as types from '../actions/actionTypes';\r\nimport {MANUAL_CALCULATION_ROW_TYPES} from \"../bvcomponents/sqft/constants\";\r\nimport sqftConfig from \"../bvcomponents/sqft/components/canvas/store/sqftConfig\";\r\n\r\nexport const DEFAULT_MANUAL_CALC_ROW = {\r\n id: \"\",\r\n length: sqftConfig.getMeasureUnitPostfix(),\r\n height: sqftConfig.getMeasureUnitPostfix(),\r\n width: sqftConfig.getMeasureUnitPostfix(),\r\n selectedFeature: \"\",\r\n isShowTypesList: false,\r\n};\r\n\r\nexport const getEdgesPlaceholder = () => {\r\n return sqftConfig.measureUnit === \"Imperial\"\r\n ? sqftConfig.edgeHeightImperial //+ sqftConfig.getMeasureUnitPostfix()\r\n : sqftConfig.edgeHeightMetric //+ sqftConfig.getMeasureUnitPostfix()\r\n}\r\n\r\nexport const getDefaultManualCalcRowEdge = () => Object.assign({}, DEFAULT_MANUAL_CALC_ROW, { height: getEdgesPlaceholder() })\r\n\r\nexport const getInitialManualCalcRows = () => {\r\n return {\r\n [MANUAL_CALCULATION_ROW_TYPES.countertopRows]: new Array(6).fill(null)\r\n .map((value, index) => ({...DEFAULT_MANUAL_CALC_ROW, id: index + 1})),\r\n [MANUAL_CALCULATION_ROW_TYPES.edgeRows]: new Array(6).fill(null)\r\n .map((value, index) => ({...getDefaultManualCalcRowEdge(), id: index + 1})),\r\n [MANUAL_CALCULATION_ROW_TYPES.backsplashRows]: new Array(6).fill(null)\r\n .map((value, index) => ({...DEFAULT_MANUAL_CALC_ROW, id: index + 1})),\r\n }\r\n}\r\n\r\nconst initialState = {\r\n showManualCalculation: false,\r\n switcherPosition: {\r\n rect: {x:0, y:0}\r\n },\r\n ...getInitialManualCalcRows()\r\n};\r\n\r\nexport default function (state = initialState, action) {\r\n let filteredRows,\r\n newRow,\r\n lastRow,\r\n lastRowId;\r\n\r\n switch (action.type) {\r\n case types.TOGGLE_SHOW_MANUAL_CALCULATION:\r\n case types.SET_SWITCHER_POSITION:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.UPDATE_MANUAL_CALCULATION_ROWS:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.ADD_MANUAL_CALCULATION_ROW:\r\n lastRow = state[action.payload.type][state[action.payload.type].length - 1];\r\n lastRowId = lastRow ? lastRow.id : 0;\r\n switch (action.payload.type) {\r\n case MANUAL_CALCULATION_ROW_TYPES.edgeRows:\r\n newRow = {...getDefaultManualCalcRowEdge(), id: lastRowId + 1};\r\n break;\r\n default:\r\n newRow = {...DEFAULT_MANUAL_CALC_ROW, id: lastRowId + 1};\r\n }\r\n\r\n return {\r\n ...state,\r\n [action.payload.type] : [...state[action.payload.type], newRow]\r\n };\r\n case types.DELETE_MANUAL_CALCULATION_ROW:\r\n filteredRows = state[action.payload.type].filter((row) => row.id !== action.payload.id);\r\n\r\n return Object.assign({}, state, {\r\n [action.payload.type]: filteredRows\r\n });\r\n case types.UPDATE_MANUAL_CALCULATION_ROW: {\r\n const newList = state[action.payload.type].map((item) => {\r\n if (item.id === action.payload.row.id) {\r\n\r\n return Object.assign({}, item, {\r\n ...action.payload.updatedRowValue\r\n });\r\n }\r\n\r\n return item;\r\n });\r\n return Object.assign({}, state, {\r\n [action.payload.type]: newList\r\n });\r\n }\r\n\r\n default:\r\n return state\r\n }\r\n}\r\n","import $ from 'jquery';\r\nimport PropTypes from \"prop-types\";\r\nimport 'jquery-ui/ui/core';\r\nimport 'jquery-ui/ui/widgets/draggable';\r\nimport React, {Fragment} from \"react\";\r\nimport uuid from \"uuid\";\r\n\r\nimport ActionTypes from \"./../../../misc/actionTypes\";\r\nimport KeyboardKey from \"./keyboardKey\";\r\nimport Config from \"./../../../config\"; // kioskStandAlone\r\nimport Analytics from './../../../analytics';\r\n\r\n\r\nexport default class OnScreenKeyboard extends React.Component {\r\n\r\n static propTypes = {\r\n rightSide: PropTypes.bool,\r\n inputId: PropTypes.string.isRequired,\r\n getValue: PropTypes.func,\r\n setValue: PropTypes.func.isRequired,\r\n onClose: PropTypes.func,\r\n onShow: PropTypes.func,\r\n type: PropTypes.string.isRequired,\r\n prependTo: PropTypes.string,\r\n appendTo: PropTypes.string,\r\n top: PropTypes.string,\r\n left: PropTypes.string,\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n this.keyboardFrame = null;\r\n this.state = {\r\n value: '',\r\n hidden: true,\r\n selectionStart: 0,\r\n selectionEnd: 0,\r\n type: this.props.type || \"standard\",\r\n oskInputId: uuid.v4(),\r\n isUpperCase: false,\r\n osk: document.kvConfig.osk,\r\n parentNode: null\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.tryBindToParent();\r\n this.setState({parentNode: $(this.keyboardFrame).parent()}, () => {\r\n if(this.props.prependTo)\r\n $(this.keyboardFrame).detach().prependTo(this.props.prependTo);\r\n else if(this.props.appendTo)\r\n $(this.keyboardFrame).detach().appendTo(this.props.appendTo);\r\n });\r\n\r\n const $keyboardFrame = $(this.keyboardFrame);\r\n const lightbox = $keyboardFrame.parents('.lightbox-options-wrapper');\r\n if (lightbox) {\r\n lightbox.on('scroll', this.setKBPosition.bind(this, $keyboardFrame, lightbox));\r\n this.setKBPosition($keyboardFrame, lightbox);\r\n }\r\n\r\n $(document).on(ActionTypes.SHOW_NUMERIC_KBD, this.handleShowKeyboard);\r\n $(document).on(ActionTypes.OVERLAY_CLICK, this.handleShowKeyboard);\r\n $(document).on('click', this.handleOutsideClick);\r\n }\r\n\r\n componentDidUpdate() {\r\n this.tryBindToParent();\r\n const fields = this.getFields();\r\n if (!this.state.hidden) {\r\n const selStart = this.state.selectionStart,\r\n selEnd = this.state.selectionEnd;\r\n if (fields.input) {\r\n fields.input.value = this.passwordify(this.state.value);\r\n fields.$input.focus();\r\n fields.input.setSelectionRange(selStart, selEnd);\r\n }\r\n }\r\n }\r\n\r\n componentWillReceiveProps(nextProps) { // we need to update this state when parent passes new value\r\n nextProps.value && nextProps.value !== this.state.value && this.setState({\r\n value: nextProps.value\r\n });\r\n }\r\n\r\n componentWillUnmount = () => {\r\n $(this.keyboardFrame).detach().appendTo(this.state.parentNode);\r\n $('.lightbox-options-wrapper').off('scroll');\r\n $(document).off(ActionTypes.SHOW_NUMERIC_KBD, this.handleShowKeyboard);\r\n $(document).off(ActionTypes.OVERLAY_CLICK, this.handleShowKeyboard);\r\n $(document).off('click', this.handleOutsideClick);\r\n };\r\n\r\n getFields = () => {\r\n const $parent = $('#' + (this.props.inputId ? this.props.inputId : this.props.parentId)),\r\n $parentInput = (this.props.inputId ? $('#' + this.props.inputId) : $parent.find('input[type=text]:not(\".osk-input\")')),\r\n parentInput = $parent[0],\r\n $input = $('#' + this.state.oskInputId),\r\n input = $input[0];\r\n return {\r\n $input: $input,\r\n input: input,\r\n $parent: $parent,\r\n $parentInput: $parentInput,\r\n parentInput: parentInput\r\n };\r\n };\r\n\r\n tryBindToParent = () => {\r\n if (!this.state.osk) {\r\n return;\r\n }\r\n\r\n let fields = this.getFields();\r\n if (!fields || !fields.parentInput || fields.parentInput === undefined) {\r\n console.log('could not bind, fields is null');\r\n return;\r\n }\r\n\r\n //console.log('bound to parent', this.props.inputId, fields.$parentInput, fields.parentInput);\r\n $(fields.parentInput).off('focus').on('focus', this.show);\r\n $(fields.parentInput).off('click').on('click', function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n });\r\n };\r\n\r\n setKBPosition = (self, lightbox) => {\r\n if (lightbox.is(\":visible\")) {\r\n const parent = self.parent();\r\n const offset = parent.offset();\r\n self.css({\r\n top: offset.top + 60,\r\n left: offset.left + 50,\r\n position: 'fixed'\r\n });\r\n }\r\n };\r\n\r\n handleShowKeyboard = (e, data) => {\r\n if (this.state.hidden) {\r\n return;\r\n }\r\n\r\n if (!data || data.sender !== this.state.oskInputId) {\r\n this.hide();\r\n }\r\n };\r\n\r\n show = (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n const fields = this.getFields(),\r\n val = fields.$parentInput.val();\r\n //console.log('Show', fields);\r\n\r\n $(document).trigger(ActionTypes.SHOW_NUMERIC_KBD, {sender: this.state.oskInputId});\r\n $('.keyboard-main-frame, .keyboard-main-frame-extended').draggable({handle: '.keyboard-header-bar'});\r\n this.setState({value: val, hidden: false, selectionStart: val.length, selectionEnd: val.length, blockOutsideClick: true});\r\n window.setTimeout(() => {\r\n this.setState({blockOutsideClick: false});\r\n }, 500);\r\n if(this.props.onShow) {\r\n console.log('onShowShowing');\r\n this.props.onShow();\r\n }\r\n };\r\n\r\n\r\n handleOutsideClick = (e) => {\r\n if(this.state.blockOutsideClick) {\r\n return;\r\n }\r\n if($(e.target).parents('.keyboard-container').length <= 0) {\r\n this.hide();\r\n }\r\n };\r\n\r\n hide = () => {\r\n this.setState({hidden: true});\r\n setTimeout(() => {\r\n document.inputFocused = false;\r\n }, 20);\r\n if(this.props.onClose) {\r\n this.props.onClose(this.state.value);\r\n }\r\n };\r\n passwordify = (value) => {\r\n if (this.props.password) {\r\n for (let i = 0; i < value.length - 1; i++) {\r\n value = value.substring(0, i) + '*' + value.substring(i + 1);\r\n }\r\n }\r\n return value;\r\n };\r\n\r\n changeValue = (e) => {\r\n this.setState({value: e.target.value});\r\n };\r\n\r\n runKeyStroke = (key) => {\r\n document.inputFocused = true;\r\n if (key && key.length > 0) {\r\n const fields = this.getFields();\r\n let val = (this.props.getValue ? this.props.getValue() : this.state.value),\r\n start = val,\r\n end = \"\",\r\n input = fields.parentInput,\r\n $input = fields.$input,\r\n $parentInput = fields.$parentInput,\r\n selStart = (this.props.getValue ? val.length : input.selectionStart),\r\n selEnd = (this.props.getValue ? val.length : input.selectionEnd);\r\n //const ss = input.selectionStart, se = input.selectionEnd;\r\n // if (ss && ss !== selStart) {\r\n // selStart = ss;\r\n // }\r\n // if (se && se !== selEnd) {\r\n // selEnd = se;\r\n // }\r\n //console.log('>>', selStart, selEnd, key);\r\n if (selStart < val.length) {\r\n start = val.substring(0, selStart);\r\n end = val.substring(selEnd);\r\n }\r\n let inc = key.length;\r\n switch (key.toLowerCase()) {\r\n case \"backspace\":\r\n inc = -1;\r\n if (selStart < val.length) {\r\n if (selStart === selEnd) {\r\n start = start.substring(0, start.length - 1);\r\n } else {\r\n inc = 0;\r\n selEnd = selStart;\r\n }\r\n val = start + end;\r\n } else if (val.length > 0) {\r\n val = val.substring(0, val.length - 1);\r\n }\r\n break;\r\n case '|<':\r\n case '|>':\r\n if (key === '|<') {\r\n inc = -1;\r\n } else {\r\n if (selStart < selEnd) {\r\n inc = 0;\r\n selStart = selEnd;\r\n } else {\r\n inc = 1;\r\n }\r\n }\r\n break;\r\n case \"space bar\":\r\n case \"space\":\r\n val = start + \" \" + end;\r\n break;\r\n case \"caps\":\r\n case \"shift\":\r\n this.setState({isUpperCase: !this.state.isUpperCase});\r\n break;\r\n default:\r\n if (!this.state.isUpperCase) {\r\n key = key.toLowerCase();\r\n } else {\r\n key = key.toUpperCase();\r\n }\r\n val = start + key + end;\r\n selStart = start.length;\r\n selEnd = selStart;\r\n break;\r\n }\r\n //console.log('\\t>> ', selStart, selEnd, val, val.length, inc);\r\n if (selStart + inc > val.length) {\r\n selStart = val.length;\r\n selEnd = val.length;\r\n } else {\r\n selStart += inc;\r\n if (selEnd + inc > val.length) {\r\n selEnd = val.length;\r\n } else {\r\n selEnd += inc;\r\n }\r\n }\r\n if (selStart < 0) {\r\n selStart = 0;\r\n }\r\n if (selEnd < selStart) {\r\n selEnd = selStart;\r\n }\r\n\r\n this.setState({value: val, select: false}, () => {\r\n input.setSelectionRange(selStart, selEnd);\r\n if($input.length > 0)\r\n $input.focus();\r\n else\r\n $parentInput.focus();\r\n });\r\n // if ($input) {\r\n // console.log('\\t\\t>>', selStart, selEnd);\r\n // input.setSelectionRange(selStart, selEnd);\r\n // $input.val(val);\r\n // $input.focus();\r\n // }\r\n\r\n this.setParentValue(val);\r\n }\r\n };\r\n setParentValue = (value) => {\r\n Analytics.sendDataEnteredEvent('osk-update-parent-textbox');\r\n //console.log('setValue', value, this.props);\r\n if (this.props.setValue) {\r\n if (this.props.prop) {\r\n this.props.setValue(this.props.prop, value);\r\n } else {\r\n this.props.setValue(value);\r\n }\r\n }\r\n };\r\n\r\n done = () => {\r\n this.setParentValue(this.state.value);\r\n this.hide();\r\n };\r\n\r\n mouseUp = () => {\r\n const fields = this.getFields();\r\n this.setState({\r\n selectionStart: fields.input.selectionStart,\r\n selectionEnd: fields.input.selectionEnd\r\n });\r\n };\r\n\r\n render() {\r\n const visible = {\r\n display: this.state.hidden ? \"none\" : \"block\",\r\n //transition: \"all 0.5s ease-in-out\",\r\n top: this.props.top,\r\n left: this.props.left\r\n };\r\n if (this.props.type === \"numeric\") {\r\n return this.renderNumericKeyboard(visible);\r\n }\r\n\r\n const arrowKeys = {\r\n left: (Config.kioskStandAlone || location.port === '9007' || document.kvConfig.kioskMode ? '.' : '/Content/Views/quickquote-v3') + '/images/buttons/KeyboardLeftArrow.svg',\r\n right: (Config.kioskStandAlone || location.port === '9007' || document.kvConfig.kioskMode ? '.' : '/Content/Views/quickquote-v3') + '/images/buttons/KeyboardRightArrow.svg'\r\n };\r\n\r\n const mainFrameClass = \"keyboard-container \" + (this.props.type === 'email' ? 'keyboard-main-frame-extended' : 'keyboard-main-frame');\r\n\r\n return (\r\n
    this.keyboardFrame = node} onClick={(e) => e.stopPropagation()}>\r\n
    \r\n
    Drag to Move
    \r\n {this.state.hidden ? null : (\r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \" image={arrowKeys.right}\r\n runKeyStroke={this.runKeyStroke}/>\r\n
    \r\n {this.renderEmailPanel()}\r\n
    \r\n )}\r\n
    \r\n );\r\n }\r\n\r\n renderEmailPanel = () => {\r\n if (this.props.type !== 'email') {\r\n return null;\r\n }\r\n\r\n return (\r\n
    \r\n @gmail.com\r\n @yahoo.com\r\n @hotmail.com\r\n @aol.com\r\n @msn.com\r\n @me.com\r\n @icloud.com\r\n .com\r\n .net\r\n
    \r\n );\r\n };\r\n\r\n renderNumericKeyboard = (visible) => {\r\n //
    \r\n return (\r\n\r\n
    this.keyboardFrame = node}>\r\n {this.state.hidden ? null : (\r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n
    \r\n\r\n );\r\n //
    \r\n }\r\n}\r\n","import React, {useEffect, useRef, useState} from \"react\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport IntlTelInput from \"react-intl-tel-input\";\r\n\r\nimport Config, {IS_QKB_UI} from './../../../config';\r\nimport Misc from \"../../../misc/misc\";\r\nimport {changeUserInfo, changeUserInfoErrors} from \"../../../actions/actionFunctions\";\r\nimport {useIsMounted} from \"../../../misc/helperHooks\";\r\nimport {getPreferredCountries} from \"../../common/twoFactorAuthView\";\r\nimport UserFieldErrors from \"../../popups/userPopup/userFieldsErrors\";\r\nimport OnScreenKeyboard from \"../../common/OnScreenKeyboard/keyboard\";\r\n\r\nconst replaceDialCode = (dialCode, inputValue) => {\r\n const dialWithPlus = \"+\" + dialCode;\r\n if (dialWithPlus.length > 1) {\r\n const charLength = dialWithPlus.length;\r\n if (dialWithPlus === inputValue.slice(0,charLength)) {\r\n inputValue = inputValue.slice(charLength);\r\n }\r\n }\r\n inputValue = inputValue.split(\" \").join(\"\").split(\"-\").join(\"\");\r\n return inputValue\r\n}\r\n\r\nconst LookUserPhoneInput = (props) => {\r\n\r\n const {property, userInfo, changeUserInfo, intl, userInfoErrors, changeUserInfoErrors, placeholder, isUserPopup,\r\n isActive, inputsValidated, fabricatorData} = props;\r\n // const isLowes = fabricatorData.isLowes;\r\n\r\n const inputRef = useRef();\r\n const [defaultValue, ] = useState(userInfo[property]);\r\n const [blurred, setBlurred] = useState(false);\r\n const [focused, setFocused] = useState(false);\r\n const [wasChanged, setWasChanged] = useState(false);\r\n const isMounted = useIsMounted();\r\n const utilsScript = Config.getScriptPath() + \"/libphonenumber.js\";\r\n\r\n // const handleInputBlur = (isValid, value, _this.selectedCountryData, fullNumber, _this.getExtension(value), e) => { // all input tel props params\r\n const handleInputBlur = (isValid, inputValue, ...rest) => {\r\n\r\n let restartInput = false;\r\n setFocused(false);\r\n\r\n const event = rest[3];\r\n if (event && event.relatedTarget && event.relatedTarget.className.includes(\"keyboard-container\")) { // blur from osk keyboard\r\n return\r\n }\r\n\r\n if (!blurred) {\r\n setBlurred(true);\r\n }\r\n const replacedValue = replaceDialCode(userInfo.country.dialCode, inputValue);\r\n if (replacedValue !== inputValue) {\r\n inputValue = replacedValue;\r\n restartInput = true;\r\n }\r\n\r\n const fullNumber = `+${userInfo.country.dialCode} ${inputValue}`;\r\n const errors = getValidationErrors(fullNumber, userInfo.country.iso2.toUpperCase());\r\n // if (!errors.length && !isValid) {\r\n // errors.push(\"assignPopup.errors.phoneIncorrect\")\r\n // }\r\n if (errors.length) {\r\n changeUserInfoErrors({\r\n [property]: errors\r\n })\r\n } else if (!errors.length && userInfoErrors[property]) {\r\n changeUserInfoErrors({\r\n [property]: errors\r\n })\r\n }\r\n // removed this formatting due to incorrect validation ex.(+447862073603)\r\n const formattedPhone = errors[property]\r\n ? Misc.getPhoneFormatted(inputValue, userInfo.country.iso2.toUpperCase())\r\n : inputValue;\r\n console.log(\"handleInputBlur formattedPhone\", formattedPhone);\r\n changeUserInfo({\r\n [property]: formattedPhone\r\n });\r\n if (restartInput && inputRef && inputRef.current && inputRef.current.setInitialState) {\r\n setTimeout(() => {\r\n inputRef.current.setFlag(userInfo.country.iso2, true);\r\n inputRef.current.setNumber(fullNumber);\r\n // inputRef.current.setInitialState();\r\n }, 0)\r\n }\r\n // console.log(\"blur number\", isValid, inputValue);\r\n };\r\n\r\n useEffect(() => {\r\n if (IS_QKB_UI) {\r\n if (isMounted() && isActive) {\r\n handleInputBlur(true, userInfo[property]);\r\n }\r\n } else if (!inputsValidated) {\r\n handleInputBlur(true, userInfo[property]);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [inputsValidated]);\r\n\r\n const getValidationErrors = (currentValue, region) => {\r\n if (fabricatorData.isCaesarStone) {\r\n return []\r\n }\r\n region = region || \"US\";\r\n const errors = [];\r\n if (!currentValue) {\r\n errors.push(\"assignPopup.errors.phoneRequired\");\r\n return errors\r\n }\r\n if (!Misc.isPhoneNumber(currentValue, region)) {\r\n errors.push(\"assignPopup.errors.phoneIncorrect\");\r\n }\r\n return errors\r\n }\r\n\r\n const handleInputFocus = () => {\r\n setFocused(true);\r\n }\r\n\r\n /**\r\n * 5 arguments passed to this callback\r\n * @param a {boolean} // isValid\r\n * @param b {string} // newNumber\r\n * @param c {Object} // countryData\r\n * @param phoneNumber {string} // fullNumber\r\n * @param forceCarrot {boolean} // isExtension\r\n */\r\n const handleChangeNumber = (a, b, c, phoneNumber, forceCarrot = false) => {\r\n phoneNumber = phoneNumber.replace(/[^0-9\\-\\(\\)\\s]/gi, \"\");\r\n /*let prefix = `+${c.dialCode}`;\r\n phoneNumber = phoneNumber.replace(prefix, '');\r\n if(country !== \"auto\" && country.dialCode) {\r\n prefix = `+${country.dialCode}`;\r\n }\r\n if (startsWith(phoneNumber, prefix + ' ') || trim(phoneNumber).length == 0) {\r\n let hasPrefix = phoneNumber.substring(0, prefix.length) == prefix;\r\n if (hasPrefix) phoneNumber = trim(phoneNumber.substring(prefix.length));\r\n phoneNumber = `${prefix} ${phoneNumber}`;\r\n }*/\r\n if (forceCarrot) {\r\n const forceCarrotFunc = () => {\r\n let p = document.getElementById('phone');\r\n p.selectionStart = phoneNumber.length;\r\n p.selectionEnd = phoneNumber.length;\r\n }\r\n window.setTimeout(forceCarrotFunc, 10);\r\n }\r\n if (!c) {\r\n return\r\n }\r\n if ((userInfo.phoneNumber !== phoneNumber) && (userInfo.country.iso2 !== c.iso2) && isMounted()) {\r\n // console.log(\"handleChangeNumber formattedPhone\", c);\r\n // console.log(\"userInfo.phoneNumber\", userInfo.phoneNumber);\r\n // console.log(\"phoneNumber\", phoneNumber);\r\n changeUserInfo({country: c});\r\n }\r\n if (userInfoErrors[property] || blurred || !focused || !wasChanged) {\r\n const errors = getValidationErrors(`+${c.dialCode} ${b}`, c.iso2.toUpperCase());\r\n if (!errors.length || blurred) {\r\n changeUserInfoErrors({\r\n [property]: errors\r\n })\r\n }\r\n }\r\n if (!focused || !wasChanged) { // autofill\r\n const replacedValue = replaceDialCode(c.dialCode, b);\r\n if (replacedValue !== b) {\r\n b = replacedValue;\r\n const fullNumber = `+${c.dialCode} ${b}`;\r\n inputRef.current.setNumber(fullNumber);\r\n }\r\n changeUserInfo({\r\n [property]: b\r\n });\r\n console.log(\"change number when it is not focused\", b, phoneNumber);\r\n }\r\n if (!wasChanged) {\r\n setWasChanged(true);\r\n }\r\n };\r\n\r\n const handleChangeFlag = (currentNumber, selectedCountryData) => {\r\n /*const matches = currentNumber.match(/(\\+\\d{1,4}\\s)/gi);\r\n currentNumber = currentNumber.replace(/\\+\\d{1,4}\\s/gi, '');\r\n\r\n const numberSplitted = currentNumber.split(\"+\"+selectedCountryData.dialCode);\r\n const number = numberSplitted[numberSplitted.length - 1] || \"\";\r\n\r\n currentNumber = (matches && matches.length > 1)\r\n ? `${matches[1]}${currentNumber}`\r\n : `+${selectedCountryData.dialCode} ${number}`;*/\r\n\r\n if (!isActive) {\r\n return // return here because when user came from log in - it was updating userinfo country and was setting empty currentNumber\r\n }\r\n\r\n let newUserInfo = {};\r\n if (currentNumber !== userInfo.phoneNumber) {\r\n newUserInfo.phoneNumber = currentNumber\r\n }\r\n if (selectedCountryData && selectedCountryData.iso2) {\r\n newUserInfo.country = selectedCountryData\r\n }\r\n if (Object.keys(newUserInfo).length) {\r\n // console.log(\"handleChangeFlag!!\", newUserInfo);\r\n changeUserInfo(newUserInfo);\r\n }\r\n if ((userInfoErrors[property] || blurred) && (selectedCountryData && selectedCountryData.iso2)) {\r\n const fullNumber = `+${selectedCountryData.dialCode} ${currentNumber}`;\r\n const errors = getValidationErrors(fullNumber, selectedCountryData.iso2.toUpperCase());\r\n if (!errors.length) {\r\n changeUserInfoErrors({\r\n [property]: errors\r\n })\r\n }\r\n }\r\n };\r\n\r\n const errorsExist = Array.isArray(userInfoErrors[property]) && userInfoErrors[property].length;\r\n\r\n const renderScreenKeyboard = () => {\r\n if (!document.kvConfig.osk) {\r\n return null\r\n }\r\n const keyboardNumberClick = (value) => {\r\n // console.log(\"keyboardNumberChange\", value);\r\n // console.log(\"inputRef\", inputRef);\r\n if (value && value.includes(\".\")) { // phone number can't include dots\r\n return\r\n }\r\n changeUserInfo({ // 1) set redux value\r\n [property]: value\r\n });\r\n // handleChangeNumber(true, value, userInfo.country, value, true); // 2) change flag? not sure if we need this on number click\r\n if (inputRef && inputRef.current) { // 3) set input value by passing fake event\r\n inputRef.current.handleInputChange({\r\n target: {\r\n selectionStart: value.length,\r\n target: inputRef.current.tel,\r\n value,\r\n }\r\n });\r\n }\r\n }\r\n return userInfo.phoneNumber}\r\n setValue={keyboardNumberClick}\r\n onClose={(v) => {\r\n if (!blurred) {\r\n handleInputBlur(true, v)\r\n }\r\n }}\r\n left=\"100%\"\r\n top=\"-57px\"\r\n type=\"numeric\"/>\r\n }\r\n\r\n const IntlInputComponent = (\r\n \r\n )\r\n\r\n if (IS_QKB_UI) {\r\n return (\r\n
    \r\n {IntlInputComponent}\r\n {fabricatorData.isCaesarStone || (isUserPopup && !errorsExist) ? null : *}\r\n \r\n {renderScreenKeyboard()}\r\n
    \r\n )\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n {IntlInputComponent}\r\n
    \r\n \r\n *\r\n \r\n
    \r\n
    \r\n {errorsExist ? (\r\n

    \r\n \r\n

    \r\n ) : null}\r\n {renderScreenKeyboard()}\r\n
    \r\n )\r\n};\r\n\r\nLookUserPhoneInput.propTypes = {\r\n property: PropTypes.string.isRequired,\r\n inputsValidated: PropTypes.bool.isRequired,\r\n shrink: PropTypes.bool,\r\n restartPhoneInput: PropTypes.func,\r\n placeholder: PropTypes.string,\r\n isUserPopup: PropTypes.bool,\r\n isActive: PropTypes.bool,\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {userInfo, userInfoErrors} = store.userState;\r\n return {\r\n userInfo,\r\n userInfoErrors,\r\n fabricatorData: store.fabricatorState\r\n // assignQuotePopupSearchText: store.assignQuoteState.assignQuotePopupSearchText\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n changeUserInfo,\r\n changeUserInfoErrors\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookUserPhoneInput)\r\n)\r\n","import React, {Fragment} from 'react';\r\n\r\nimport {DISCOUNT_MAIN_TYPES, DISCOUNT_MODES, DISCOUNT_TYPES} from \"./discounstInterface\";\r\nimport {\r\n getPriceWithCurrency,\r\n getQuotePriceWithDiscounts, getQuotePriceWithTaxes,\r\n getTotalPrice,\r\n sortByOrder,\r\n toFixedPrice\r\n} from \"../../misc/helpers\";\r\nimport {\r\n getCustomDepositAmount,\r\n getDiscountsForSection,\r\n getSubTotalPrice,\r\n shouldDisplayDiscount\r\n} from \"./discountFunctions\";\r\nimport TextInput from \"../ui/textInput\";\r\n\r\nexport default class DiscountCommon extends React.Component {\r\n\r\n handleDiscountSelectClick = () => {\r\n if (this.isDiscountDisabled()) {\r\n return false\r\n }\r\n const currentDiscount = this.props.discount;\r\n currentDiscount.selected = !currentDiscount.selected;\r\n this.updateDiscount(currentDiscount);\r\n };\r\n\r\n setDiscountProperty = (property, value) => {\r\n const currentDiscount = this.props.discount;\r\n currentDiscount[property] = value;\r\n this.updateDiscount(currentDiscount);\r\n };\r\n\r\n updateDiscount = (currentDiscount) => {\r\n this.props.setDiscountSections(this.props.discountSections.map((discountSection) => {\r\n if (discountSection.order === this.props.discountSection.order) {\r\n discountSection.discounts.map(discount => {\r\n if (currentDiscount.order === discount.order) {\r\n return currentDiscount\r\n }\r\n return discount\r\n });\r\n if (currentDiscount.selected && currentDiscount.mode === DISCOUNT_MODES.or && !currentDiscount.isSubTotal) {\r\n discountSection.discounts = discountSection.discounts.map(discount => {\r\n if ((currentDiscount.order !== discount.order) && (discount.mode === DISCOUNT_MODES.or) && !discount.isSubTotal) {\r\n discount.selected = false\r\n }\r\n return discount\r\n });\r\n }\r\n }\r\n return discountSection\r\n }));\r\n };\r\n\r\n getGrandTotal = (withoutDiscount = null) => {\r\n const totalPrice = getTotalPrice(null, false);\r\n return getQuotePriceWithDiscounts(totalPrice, withoutDiscount ? [withoutDiscount] : []);\r\n }\r\n\r\n isDiscountDisabled = (forDiscount = this.props.discount) => {\r\n const {discountSection, customAddedDiscounts} = this.props;\r\n const discount = forDiscount;\r\n if (discount.selected) {\r\n return false\r\n }\r\n const grandTotal = this.getGrandTotal();\r\n const discountAmount = discount.type === DISCOUNT_TYPES.price ? discount.amount : grandTotal * discount.amount / 100;\r\n let disabled = (grandTotal - discountAmount) < 0;\r\n if (disabled && discount.mode === DISCOUNT_MODES.or) {\r\n const allDiscounts = sortByOrder(getDiscountsForSection(discountSection, customAddedDiscounts));\r\n if (allDiscounts.some(currentDiscount => {\r\n return (currentDiscount.order !== discount.order) // take othere discounts from this section\r\n && (currentDiscount.mode === DISCOUNT_MODES.or) // with OR mode\r\n && shouldDisplayDiscount(currentDiscount) // already selected\r\n && (this.getGrandTotal(currentDiscount) - discountAmount) > 0\r\n // price without this discount minus current discount amount still more than 0\r\n })) {\r\n disabled = false\r\n }\r\n }\r\n return disabled\r\n }\r\n\r\n getDiscountPercentageAmount = () => {\r\n const grandTotal = getSubTotalPrice(this.props.discountSections, this.props.discountSection, this.props.discount, true, this.props.customAddedDiscounts);\r\n const priceTaken = grandTotal * this.props.discount.amount / 100 // for ex. 25% from 2700 = 625\r\n return toFixedPrice(Math.trunc(priceTaken * 100) / 100);\r\n };\r\n\r\n setAmountValue = (value) => {\r\n // console.log(\"value\", value);\r\n if ((this.props.discount.discountType === DISCOUNT_MAIN_TYPES.deposit) && (this.props.discount.type === DISCOUNT_TYPES.percent)) {\r\n this.setDiscountProperty(\"type\", DISCOUNT_TYPES.price);\r\n }\r\n this.setDiscountProperty(\"amount\", +value)\r\n };\r\n\r\n getMaxDiscountValue = () => {\r\n return (this.props.discount.type === DISCOUNT_TYPES.percent) ? 100 : this.getGrandTotal(this.props.discount)\r\n }\r\n\r\n getDiscountAmount = () => {\r\n const {discount, fabricatorSettings} = this.props;\r\n return discount.type === DISCOUNT_TYPES.price\r\n ? \"-\" + getPriceWithCurrency(fabricatorSettings, discount.amount)\r\n : \"-\" + getPriceWithCurrency(fabricatorSettings, this.getDiscountPercentageAmount())\r\n }\r\n\r\n getInputValue = () => {\r\n const {discount, fabricatorSettings, discountSections} = this.props;\r\n if (!discount.amount) {\r\n return \"0\"\r\n }\r\n if (discount.discountType === DISCOUNT_MAIN_TYPES.deposit) {\r\n if (discount.type === DISCOUNT_TYPES.price) {\r\n return getPriceWithCurrency(fabricatorSettings, toFixedPrice(discount.amount))\r\n }\r\n const totalPrice = getTotalPrice();\r\n const grandTotal = getQuotePriceWithTaxes(totalPrice);\r\n const customDepositAmount = getCustomDepositAmount(discountSections, grandTotal);\r\n return getPriceWithCurrency(fabricatorSettings, customDepositAmount);\r\n }\r\n // return \"-\" + (discount.type === DISCOUNT_TYPES.price) // we can't have percentages free fill discounts\r\n // ? fabricatorSettings.currencySign + discount.amount\r\n // : discount.amount + \"%\"\r\n return \"-\" + getPriceWithCurrency(fabricatorSettings, toFixedPrice(discount.amount))\r\n }\r\n\r\n renderAmountInput = () => {\r\n const {discount, fabricatorData} = this.props;\r\n const isDiscount = discount.discountType === DISCOUNT_MAIN_TYPES.deposit;\r\n return discount.selected || isDiscount ? (\r\n \r\n {/**/}\r\n {/* -{discount.type === DISCOUNT_TYPES.percent ? \"%\" : fabricatorData.settings.currencySign}*/}\r\n {/**/}\r\n \r\n {/*{discount.type === DISCOUNT_TYPES.percent*/}\r\n {/* ? {this.getDiscountAmount()}*/}\r\n {/* : null}*/}\r\n \r\n ) : null\r\n }\r\n\r\n}\r\n","export const getFeatureUnit = (cartFeature, fabricatorData, printContext, locale, quantity) => {\r\n const dbFeature = cartFeature.dbFeature;\r\n if ((fabricatorData.isLowes || fabricatorData.isCaesarStone) && locale === \"fr-FR\" && printContext.messages[\"transDoc.units_FR.\" + dbFeature.sharedFeatureName]) {\r\n if ((printContext.messages[\"transDoc.units_FR.\" + dbFeature.sharedFeatureName] === \"pieds carrés\") && dbFeature.unit === \"Each\") {\r\n return \"unité\"\r\n }\r\n return printContext.messages[\"transDoc.units_FR.\" + dbFeature.sharedFeatureName]\r\n }\r\n if (dbFeature.unit) {\r\n let lowercasedUnit = dbFeature.unit.toLowerCase();\r\n return lowercasedUnit === \"each\" || lowercasedUnit === \"unit\"\r\n ? quantity === 1\r\n ? printContext.messages[\"quotingTool.featureInfo.defaultQuantity\"]\r\n : printContext.messages[\"quotingTool.featureInfo.defaultQuantityMultiple\"]\r\n : dbFeature.unit\r\n }\r\n if (cartFeature.isStoneFeature) {\r\n return printContext.messages[\"shoppingCart.fetureInCartDefaultQuantitySQFT\"]\r\n }\r\n return printContext.messages[\"shoppingCart.fetureInCartDefaultQuantity\"]\r\n};\r\n\r\nexport const getCartItemName = (cartFeature, fabricatorData, printContext, locale) => {\r\n const dbFeature = cartFeature.dbFeature;\r\n if (fabricatorData.isLowes || fabricatorData.isCaesarStone) {\r\n if (locale === \"fr-FR\" && printContext.messages[\"transDoc.customDisplayName_FR.\"+ dbFeature.sharedFeatureName]) {\r\n return printContext.messages[\"transDoc.customDisplayName_FR.\"+ dbFeature.sharedFeatureName]\r\n } else if (locale === \"pl-PL\" && printContext.messages[\"transDoc.customTranslateName_PL.\"+ dbFeature.sharedFeatureName]) {\r\n return printContext.messages[\"transDoc.customTranslateName_PL.\"+ dbFeature.sharedFeatureName]\r\n }\r\n }\r\n\r\n if ((dbFeature.sharedFeatureName === \"additionalCartItem.minimumCharge\")) {\r\n if (fabricatorData.isCaesarStone) {\r\n return `${printContext.messages[dbFeature.sharedFeatureName]} (${cartFeature.fromFeatureName})`\r\n }\r\n return printContext.messages[dbFeature.sharedFeatureName]\r\n }\r\n\r\n if (!cartFeature.getFeatureName) {\r\n return cartFeature._customDisplayName || cartFeature.customDisplayName || \"\"\r\n }\r\n\r\n return cartFeature.getFeatureName()\r\n};\r\n","import {getFilterGroupValue, getFilterGroupValues} from \"../../../misc/utils\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {getTotalPrice, toFixedFeatureCost, toFixedPrice} from \"../../../misc/helpers\";\r\nimport {isProd} from \"../../../misc/fabricatorHardcode\";\r\n\r\nexport const SIMILAR_FILTER_GROUP_NAME = \"Collection\";\r\n\r\n/**\r\n * @param cartItem {object}\r\n * @param filterGroups {array}\r\n * @returns {array} // [featureCollectionInterface] or null\r\n */\r\nexport const getFeaturesCollectionsList = (cartItem, filterGroups) => {\r\n\r\n if (!cartItem || !cartItem.cartFeature || !cartItem.partId.includes(\"countertop\") || isProd() || !filterGroups.length) {\r\n return null\r\n }\r\n\r\n const parent = cartItem.cartFeature.getParent ? cartItem.cartFeature.getParent() : null;\r\n if (!parent) {\r\n return null\r\n }\r\n\r\n const filterGroup = filterGroups.find(fGroup => fGroup.name === SIMILAR_FILTER_GROUP_NAME);\r\n if (!filterGroup) {\r\n return null\r\n }\r\n\r\n const cartFeatureFilters = getFilterGroupValues(cartItem.cartFeature, filterGroup) || [];\r\n\r\n let featuresCollectionsList = [];\r\n\r\n const layout = getCurrentLayout();\r\n const navFeatures = layout.designNavigationItems({part: parent}, {}, \"\", false, true);\r\n for (let i = 0; i < navFeatures.length; i++) {\r\n const navFeature = navFeatures[i];\r\n const featureFilters = getFilterGroupValues(navFeature.part, filterGroup);\r\n if (Array.isArray(featureFilters)) {\r\n featureFilters.forEach(filterValueId => {\r\n if (!cartFeatureFilters.some(cartFeatureFilter => cartFeatureFilter === filterValueId)) {\r\n let collectionObject = featuresCollectionsList.find(colObject => colObject.id === filterValueId);\r\n if (collectionObject) {\r\n collectionObject.features.push(navFeature.part)\r\n } else {\r\n collectionObject = {id: filterValueId, features: [navFeature.part]};\r\n featuresCollectionsList.push(collectionObject);\r\n }\r\n }\r\n })\r\n }\r\n }\r\n\r\n featuresCollectionsList = featuresCollectionsList.sort((a, b) => a.id - b.id); // sort by collection id\r\n console.log(\"featuresCollectionsList\", featuresCollectionsList);\r\n\r\n return featuresCollectionsList\r\n\r\n}\r\n\r\n/**\r\n * @param cartItem {cartItemInterface}\r\n * @param addedCountertops {[cartItemInterface]}\r\n * @param featureCollection {object}\r\n * @param totalCountertopsQuantity {number}\r\n * @param quoteIndex {number}\r\n * @param filterGroups {array}\r\n * @returns {similarItemObjectInterface} // or null\r\n */\r\nexport const getSimilarItemInfoObject = (\r\n cartItem,\r\n addedCountertops,\r\n featureCollection,\r\n totalCountertopsQuantity,\r\n quoteIndex,\r\n filterGroups,\r\n) => {\r\n let feature = null;\r\n const fromCartItemName = cartItem.cartFeature.getSplittedFeatureName();\r\n // console.log(\"fromCartItemName\", fromCartItemName);\r\n if (fromCartItemName) {\r\n // if (\r\n // (fromCartItemName.includes(\"2cm\") && addedCountertops.some(cItem => cItem.cartFeature && cItem.cartFeature.getSplittedFeatureName().includes(\"3cm\")))\r\n // || (fromCartItemName.includes(\"3cm\") && addedCountertops.some(cItem => cItem.cartFeature && cItem.cartFeature.getSplittedFeatureName().includes(\"2cm\")))\r\n // ) {\r\n // feature = featureCollection.features.find(currentFeature => [\"2cm\", \"3cm\"].some(inName => currentFeature.getSplittedFeatureName().includes(inName)))\r\n // } else\r\n if (fromCartItemName.includes(\"2cm\")) {\r\n feature = featureCollection.features.find(currentFeature => currentFeature.getSplittedFeatureName().includes(\"2cm\"))\r\n } else if (fromCartItemName.includes(\"3cm\")) {\r\n feature = featureCollection.features.find(currentFeature => currentFeature.getSplittedFeatureName().includes(\"3cm\"))\r\n }\r\n }\r\n if (!feature) {\r\n feature = featureCollection.features[0]; // take first collection feature\r\n }\r\n\r\n const totalPrice = +toFixedFeatureCost(feature, totalCountertopsQuantity, \"\");\r\n\r\n const countertopTotalPrice = +toFixedFeatureCost(cartItem.cartFeature, totalCountertopsQuantity, \"\");\r\n\r\n let subTotalPrice = getTotalPrice(quoteIndex, false).materialPrice;\r\n subTotalPrice = toFixedPrice(subTotalPrice - countertopTotalPrice + totalPrice);\r\n\r\n const filterGroup = filterGroups.find(fGroup => fGroup.name === SIMILAR_FILTER_GROUP_NAME);\r\n const filterGroupValue = getFilterGroupValue(featureCollection.id, filterGroup);\r\n if (!filterGroupValue || !filterGroupValue.displayText) {\r\n return null\r\n }\r\n const filterValueName = filterGroupValue.displayText.replace(\" \" + SIMILAR_FILTER_GROUP_NAME, \"\");\r\n\r\n return {\r\n filterValueName,\r\n feature,\r\n subTotalPrice,\r\n }\r\n}\r\n","import vert from '!raw-loader!./vertex.glsl';\r\nimport frag from '!raw-loader!./fragment.glsl';\r\n\r\nfunction loadTexture(gl, oc) {\r\n const texture = gl.createTexture();\r\n gl.bindTexture(gl.TEXTURE_2D, texture);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, oc); // This is the important line!\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\r\n gl.bindTexture(gl.TEXTURE_2D, null);\r\n return texture;\r\n}\r\n\r\nfunction setArrays(gl, prog) {\r\n let vertex_buffer = gl.createBuffer();\r\n const vertices = [-1.0, -1.0, 1.0, -1.0, -1.0, 1.0,\r\n 1.0, 1.0, 1.0, -1.0, -1.0, 1.0,\r\n ];\r\n gl.bindBuffer(gl.ARRAY_BUFFER, vertex_buffer);\r\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);\r\n let coord = gl.getAttribLocation(prog, \"coords\");\r\n gl.vertexAttribPointer(coord, 2, gl.FLOAT, false, 0, 0);\r\n gl.enableVertexAttribArray(coord);\r\n return [coord, vertex_buffer];\r\n}\r\n\r\nfunction prepareWebGL(gl, width, height) {\r\n let vertSh = gl.createShader(gl.VERTEX_SHADER);\r\n gl.shaderSource(vertSh, vert);\r\n gl.compileShader(vertSh);\r\n let fragSh = gl.createShader(gl.FRAGMENT_SHADER);\r\n gl.shaderSource(fragSh, frag);\r\n gl.compileShader(fragSh);\r\n let prog = gl.createProgram();\r\n gl.attachShader(prog, vertSh);\r\n gl.attachShader(prog, fragSh);\r\n gl.linkProgram(prog);\r\n gl.useProgram(prog);\r\n gl.viewport(0,0, width, height);\r\n return prog;\r\n}\r\n\r\nlet webglCanvas = document.createElement(\"canvas\");\r\n\r\nconst enhanceCanvas = (canvasElement, useNewCanvas = false) => {\r\n\r\n let wgl = useNewCanvas ? document.createElement('canvas') : webglCanvas;\r\n\r\n if (!wgl.gl || useNewCanvas) {\r\n wgl.width = canvasElement.width;\r\n wgl.height = canvasElement.height;\r\n wgl.gl = wgl.getContext(\"webgl\");\r\n wgl.prog = prepareWebGL(wgl.gl, canvasElement.width, canvasElement.height);\r\n setArrays(wgl.gl, wgl.prog);\r\n const uSampler = wgl.gl.getUniformLocation(wgl.prog, 'uSampler');\r\n wgl.gl.uniform1i(uSampler, 0);\r\n }\r\n\r\n let gl = wgl.gl;\r\n const texture = loadTexture(gl, canvasElement);\r\n let ctx = canvasElement.getContext('2d');\r\n\r\n // render\r\n gl.activeTexture(gl.TEXTURE0);\r\n gl.bindTexture(gl.TEXTURE_2D, texture);\r\n gl.clearColor(0.0, 0.0, 0.0, 1.0);\r\n gl.clear(gl.COLOR_BUFFER_BIT);\r\n gl.drawArrays(gl.TRIANGLES, 0, 6);\r\n ctx.drawImage(wgl, 0, 0, wgl.width, wgl.height, 0, 0, canvasElement.width, canvasElement.height);\r\n // render end\r\n\r\n}\r\n\r\nexport default enhanceCanvas\r\n","/**\r\n * Moves an element to a new position with a specified speed and returns a Promise that resolves when the animation is complete.\r\n * @param {HTMLElement} element - The element to move.\r\n * @param {number} newX - The new X-coordinate of the element.\r\n * @param {number} newY - The new Y-coordinate of the element.\r\n * @param {number} speed - The speed in pixels per second.\r\n * @returns {Promise} A Promise that resolves when the animation is complete.\r\n */\r\nimport {distanceToInches, parseImperialFractionToDecimal} from \"./sqftHelper\";\r\nimport EventManager from \"../components/canvas/store/sqftEventManager\";\r\nimport sqftConfig from \"../components/canvas/store/sqftConfig\";\r\nimport {MEASURE_UNITS} from \"../constants\";\r\n\r\nexport const moveElement = (element, newX, newY, speed) => {\r\n return new Promise(resolve => {\r\n // Get the current coordinates of the element\r\n const oldX = element.offsetLeft;\r\n const oldY = element.offsetTop;\r\n\r\n // Calculate the distance between the old and new coordinates\r\n const distanceX = newX - oldX;\r\n const distanceY = newY - oldY;\r\n\r\n // Calculate the duration of the animation based on the speed\r\n const duration = Math.sqrt(distanceX ** 2 + distanceY ** 2) / speed;\r\n\r\n // Set the element to the initial position\r\n element.style.position = \"absolute\";\r\n element.style.left = oldX + \"px\";\r\n element.style.top = oldY + \"px\";\r\n\r\n // Animate the element to the new position\r\n const startTime = performance.now();\r\n function animate(currentTime) {\r\n const elapsedTime = currentTime - startTime;\r\n const progress = Math.min(elapsedTime / duration, 1);\r\n const x = oldX + distanceX * progress;\r\n const y = oldY + distanceY * progress;\r\n element.style.left = x + \"px\";\r\n element.style.top = y + \"px\";\r\n if (progress < 1) {\r\n requestAnimationFrame(animate);\r\n } else {\r\n resolve(); // Animation complete, resolve the Promise\r\n }\r\n }\r\n requestAnimationFrame(animate);\r\n });\r\n}\r\n\r\nexport const delay = (time) => {\r\n return new Promise(resolve => setTimeout(resolve, time));\r\n}\r\n\r\nexport function createAdjustableInput({\r\n position = { x: 0, y: 0 },\r\n initialValue = \"\",\r\n min = 1,\r\n max = 1000,\r\n orientation = \"horizontal\",\r\n onChange = () => {},\r\n onClose = () => {},\r\n step = 1,\r\n longPressInterval = 50,\r\n longPressDelay = 200,\r\n }) {\r\n const objectName = { name: 'lineInput' }; // Unique identifier for EventManager\r\n let isClosed = false; // Flag to prevent duplicate close calls\r\n\r\n const inputWrapper = document.createElement(\"div\"); // Wrapper for input and buttons\r\n inputWrapper.className = \"line-input\";\r\n inputWrapper.style.position = \"absolute\";\r\n inputWrapper.style.left = `${position.x}px`;\r\n inputWrapper.style.top = `${position.y}px`;\r\n\r\n // Set orientation class\r\n if (orientation === \"horizontal\") {\r\n inputWrapper.classList.add(\"line-input-horizontal\");\r\n } else if (orientation === \"vertical\") {\r\n inputWrapper.classList.add(\"line-input-vertical\");\r\n }\r\n\r\n // Create input field\r\n const input = document.createElement(\"input\");\r\n input.type = \"text\";\r\n input.className = \"line-input-field\";\r\n input.setAttribute(\"min\", min.toString());\r\n input.setAttribute(\"max\", max.toString());\r\n input.value = initialValue;\r\n\r\n // Adjust input value within [min, max] bounds and trigger onChange\r\n const adjustInputValue = (step) => {\r\n let currentValue = parseImperialFractionToDecimal(input.value);\r\n currentValue += step;\r\n currentValue = Math.max(min, Math.min(currentValue, max)); // Ensure within bounds\r\n input.value = currentValue;\r\n onChange(currentValue);\r\n input.dispatchEvent(new Event(\"change\")); // Trigger change event for UI updates\r\n\r\n if (sqftConfig.measureUnit === MEASURE_UNITS.Imperial) {\r\n input.value = distanceToInches(currentValue).replace(\"\\\"\", \"\");\r\n } else {\r\n input.value = currentValue;\r\n }\r\n };\r\n\r\n let longPressTimeout;\r\n let delayTimeout;\r\n const startLongPress = (step) => {\r\n adjustInputValue(step);\r\n delayTimeout = setTimeout(() => {\r\n longPressTimeout = setInterval(() => adjustInputValue(step), longPressInterval);\r\n }, longPressDelay);\r\n };\r\n const stopLongPress = () => {\r\n clearInterval(longPressTimeout);\r\n clearTimeout(delayTimeout);\r\n input.focus();\r\n };\r\n\r\n // Create increment button with long press functionality\r\n const incrementButton = document.createElement(\"button\");\r\n incrementButton.className = \"increment-button\";\r\n incrementButton.textContent = \"▲\";\r\n incrementButton.onmousedown = () => startLongPress(step);\r\n incrementButton.onmouseup = stopLongPress;\r\n incrementButton.onmouseleave = stopLongPress;\r\n\r\n // Create decrement button with long press functionality\r\n const decrementButton = document.createElement(\"button\");\r\n decrementButton.className = \"decrement-button\";\r\n decrementButton.textContent = \"▼\";\r\n decrementButton.onmousedown = () => startLongPress(-step);\r\n decrementButton.onmouseup = stopLongPress;\r\n decrementButton.onmouseleave = stopLongPress;\r\n\r\n // Append elements to wrapper\r\n inputWrapper.appendChild(input);\r\n inputWrapper.appendChild(incrementButton);\r\n inputWrapper.appendChild(decrementButton);\r\n\r\n // Use onchange instead of input for final validation after user finishes typing\r\n input.onchange = (event) => {\r\n let value = parseImperialFractionToDecimal(event.target.value);\r\n value = Math.max(min, Math.min(value, max)); // Ensure within bounds\r\n input.value = value;\r\n onChange(value);\r\n };\r\n\r\n // Close input when pressing Enter or if blurred outside of increment/decrement buttons\r\n const closeInput = () => {\r\n if (isClosed) return; // Prevent duplicate calls\r\n isClosed = true;\r\n\r\n onClose();\r\n inputWrapper.remove();\r\n EventManager.removeEvent(objectName);\r\n document.removeEventListener(\"mousedown\", handleOutsideClick);\r\n };\r\n\r\n input.addEventListener(\"keydown\", (event) => {\r\n if (event.key === \"Enter\") {\r\n input.blur(); // Explicitly trigger blur to ensure onchange fires\r\n closeInput();\r\n }\r\n });\r\n\r\n const handleOutsideClick = (event) => {\r\n if (!inputWrapper.contains(event.target)) {\r\n closeInput();\r\n }\r\n };\r\n\r\n // Add event to close input on MOUSE_DOWN outside, unless the input is focused\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n closeInput,\r\n objectName,\r\n EventManager.priorities.OVERALL\r\n );\r\n document.addEventListener(\"mousedown\", handleOutsideClick);\r\n\r\n return inputWrapper;\r\n}\r\n","import config from \"../../../../store/sqftConfig\";\r\nimport {isIE} from \"../../../../../../helpers/sqftHelper\";\r\n\r\nexport default class DrawImage {\r\n\r\n static renderImage = (svgImageId, ctx, x, y, width, height, isCentered = true, isScale = true) => {\r\n let scale = config.scale;\r\n let svg = document.getElementById(svgImageId);\r\n if (!svg) {\r\n console.error(\"svg with id not found\", svgImageId);\r\n return\r\n }\r\n let img = new Image(),\r\n xml = new XMLSerializer().serializeToString(svg), // get svg data\r\n svg64 = btoa(xml); // make it base64\r\n let posX = x;\r\n let posY = y;\r\n let svgImageDataURI = \"\";\r\n\r\n img.src = 'data:image/svg+xml;base64,' + svg64; // set it as the source of the img element\r\n if (isScale) {\r\n width = width / config.scale * config.defaultScale;\r\n height = height / config.scale * config.defaultScale;\r\n }\r\n if (isCentered) {\r\n posX -= width / 2 ;\r\n posY -= height / 2;\r\n }\r\n\r\n if (isIE()) {\r\n svgImageDataURI = atob(this.getSrc(img).replace(/data:image\\/svg\\+xml;base64,/, ''));\r\n }\r\n if (!isIE()) {\r\n ctx.drawImage(img, posX, posY , width * scale, height * scale);\r\n } else if(svgImageDataURI) {\r\n ctx.drawSvg(svgImageDataURI, posX, posY + 1, 0, 0);\r\n }\r\n };\r\n\r\n // static isIE() {\r\n // return(/Trident/i).test(window.navigator.appVersion);\r\n // }\r\n\r\n static getSrc(htmlImg) {\r\n if(htmlImg) {\r\n let src = htmlImg.getAttribute('src');\r\n if(src) {\r\n return src;\r\n }\r\n src = htmlImg.getAttribute(\"style\");\r\n if(src) {\r\n return src.replace(/background-image: url\\(\"\\/api\\/SqFtCalc\\/GetImage\\?url=/g, \"\").replace(/\"\\);/g, \"\");\r\n }\r\n }\r\n return \"\";\r\n }\r\n}\r\n","import {getClosestPoint, getIntersectCords, getMousePositionOnField} from \"../../../../../../helpers/sqftHelper\";\r\nimport store from \"../../../../../../../../store\";\r\n\r\nexport const getHorizontalLineIntersectionPoints = (mousePos, shape, lines = shape.getLines()) => {\r\n const mousePosOnFiled = getMousePositionOnField(mousePos.x, mousePos.y);\r\n const serverState = store.getState().serverState;\r\n const pos = shape.getPosition();\r\n\r\n const mousePosOnShape = {x: mousePosOnFiled.x - pos.x, y: mousePosOnFiled.y - pos.y};\r\n let verticalLinePoint1 = {x: -serverState.windowWidth, y: Math.round10(mousePosOnShape.y, -1)};\r\n let verticalLinePoint2 = {x: serverState.windowWidth, y: Math.round10(mousePosOnShape.y, -1)};\r\n let [intersectionXPointAndLine1, intersectionXPointAndLine2] = getClosestIntersectionPoints(\r\n lines, verticalLinePoint1, verticalLinePoint2, mousePosOnShape\r\n );\r\n\r\n if (intersectionXPointAndLine1 && intersectionXPointAndLine2) {\r\n intersectionXPointAndLine1.intersectionCords = {x: Math.round10(intersectionXPointAndLine1.intersectionCords.x, -1), y: Math.round10(mousePosOnFiled.y - pos.y, -1)};\r\n intersectionXPointAndLine2.intersectionCords = {x: Math.round10(intersectionXPointAndLine2.intersectionCords.x, -1), y: Math.round10(mousePosOnFiled.y - pos.y, -1)};\r\n\r\n return [intersectionXPointAndLine1, intersectionXPointAndLine2]\r\n }\r\n\r\n return []\r\n}\r\n\r\nexport const getVerticalLineIntersectionPoints = (mousePos, shape, lines = shape.getLines()) => {\r\n const mousePosOnFiled = getMousePositionOnField(mousePos.x, mousePos.y);\r\n const serverState = store.getState().serverState;\r\n const pos = shape.getPosition();\r\n\r\n const mousePosOnShape = {x: mousePosOnFiled.x - pos.x, y: mousePosOnFiled.y - pos.y};\r\n //let verticalLinePoint1 = {x: -serverState.windowWidth, y: mousePosOnShape.y};\r\n //let verticalLinePoint2 = {x: serverState.windowWidth, y: mousePosOnShape.y};\r\n\r\n let verticalLinePoint1 = {x: Math.round10(mousePosOnFiled.x - pos.x, -1), y: -serverState.windowHeight};\r\n let verticalLinePoint2 = {x: Math.round10(mousePosOnFiled.x - pos.x, -1), y: serverState.windowHeight};\r\n // let verticalLinePoint1 = {x: Math.ceil10(mousePosOnFiled.x - pos.x, 2), y: -serverState.windowHeight};\r\n // let verticalLinePoint2 = {x: Math.ceil10(mousePosOnFiled.x - pos.x, 2), y: serverState.windowHeight};\r\n\r\n let [intersectionPointAndLine1, intersectionPointAndLine2] = getClosestIntersectionPoints(\r\n lines, verticalLinePoint1, verticalLinePoint2, mousePosOnShape\r\n );\r\n\r\n if (intersectionPointAndLine1 && intersectionPointAndLine2) {\r\n intersectionPointAndLine1.intersectionCords = {x: Math.round10(mousePosOnFiled.x - pos.x, -1), y: Math.round10(intersectionPointAndLine1.intersectionCords.y, -1)};\r\n intersectionPointAndLine2.intersectionCords = {x: Math.round10(mousePosOnFiled.x - pos.x, -1), y: Math.round10(intersectionPointAndLine2.intersectionCords.y, -1)};\r\n // let intersectionPoint1 = {x: Math.ceil10(mousePosOnFiled.x - pos.x, 2), y: intersectionXPoint1.y};\r\n // let intersectionPoint2 = {x: Math.ceil10(mousePosOnFiled.x - pos.x, 2), y: intersectionXPoint2.y};\r\n\r\n return [intersectionPointAndLine1, intersectionPointAndLine2]\r\n }\r\n\r\n return []\r\n}\r\n\r\n/**\r\n * Return only two closest points from the array of intersectionPointsAndLines\r\n * @param {*} lines\r\n * @param {*} intersectionPoint1\r\n * @param {*} intersectionPoint2\r\n * @param {*} closestPont\r\n * @return {array} [{intersectionPoint, line}]\r\n */\r\nexport const getClosestIntersectionPoints = (lines, intersectionPoint1, intersectionPoint2, closestPont) => {\r\n let intersectionPointsAndLines = getIntersectionPointsAndLines(lines, intersectionPoint1, intersectionPoint2)\r\n if (intersectionPointsAndLines.length >= 1) {\r\n let intersectionPoints = intersectionPointsAndLines.map(pointAndLine => pointAndLine.intersectionCords);\r\n let closestPont1 = getClosestPoint(closestPont, intersectionPoints);\r\n let intersectionPointsAndLinesWithout1Point = intersectionPointsAndLines.filter(pointAndLine => pointAndLine.intersectionCords !== closestPont1);\r\n intersectionPoints = intersectionPointsAndLinesWithout1Point.map(pointAndLine => pointAndLine.intersectionCords);\r\n\r\n let closestPont2 = getClosestPoint(closestPont, intersectionPoints);\r\n\r\n return intersectionPointsAndLines.filter(pointAndLine => {\r\n return pointAndLine.intersectionCords === closestPont1 || pointAndLine.intersectionCords === closestPont2\r\n });\r\n }\r\n\r\n return intersectionPointsAndLines\r\n}\r\n\r\n/**\r\n * Return all intersectionsPointsAndLines between lines and two coords\r\n * @param {*} lines\r\n * @param {*} intersectionPoint1\r\n * @param {*} intersectionPoint2\r\n * @return {array} [{intersectionPoint, line}]\r\n */\r\nexport const getIntersectionPointsAndLines = (lines, intersectionPoint1, intersectionPoint2) => {\r\n let intersectionPoints = [];\r\n\r\n lines.forEach((line) => {\r\n let intersectionCords = getIntersectCords(\r\n Math.round10(line.from.x, -1), Math.round10(line.from.y, -1),\r\n Math.round10(line.to.x, -1), Math.round10(line.to.y, -1),\r\n Math.round10(intersectionPoint1.x, -1), Math.round10(intersectionPoint1.y, -1),\r\n Math.round10(intersectionPoint2.x, -1), Math.round10(intersectionPoint2.y, -1),\r\n false\r\n );\r\n if (intersectionCords) {\r\n intersectionPoints.push({intersectionCords, line});\r\n }\r\n });\r\n\r\n return intersectionPoints\r\n}\r\n\r\n/**\r\n *\r\n * @param circleX {int}\r\n * @param circleY {int}\r\n * @param circleRadius {int}\r\n * @param lineX1 {int}\r\n * @param lineY1 {int}\r\n * @param lineX2 {int}\r\n * @param lineY2 {int}\r\n * @return {null|{y1: *, x1: *, y2: *, x2: *}|{x: *, y: *}}\r\n */\r\nexport const getCircleLineIntersection = (circleX, circleY, circleRadius, lineX1, lineY1, lineX2, lineY2) => {\r\n const dx = lineX2 - lineX1;\r\n const dy = lineY2 - lineY1;\r\n const a = dx * dx + dy * dy;\r\n const b = 2 * (dx * (lineX1 - circleX) + dy * (lineY1 - circleY));\r\n const c = circleX * circleX + circleY * circleY + lineX1 * lineX1 + lineY1 * lineY1\r\n - 2 * (circleX * lineX1 + circleY * lineY1) - circleRadius * circleRadius;\r\n const delta = b * b - 4 * a * c;\r\n\r\n if (delta < 0) {\r\n return null; // no intersection\r\n } else if (delta === 0) {\r\n // the line is tangent to the circle\r\n const t = -b / (2 * a);\r\n const intersectionX = lineX1 + t * dx;\r\n const intersectionY = lineY1 + t * dy;\r\n return { x: intersectionX, y: intersectionY };\r\n } else {\r\n // the line intersects the circle at two points\r\n const t1 = (-b + Math.sqrt(delta)) / (2 * a);\r\n const t2 = (-b - Math.sqrt(delta)) / (2 * a);\r\n const intersection1X = lineX1 + t1 * dx;\r\n const intersection1Y = lineY1 + t1 * dy;\r\n const intersection2X = lineX1 + t2 * dx;\r\n const intersection2Y = lineY1 + t2 * dy;\r\n return { x1: intersection1X, y1: intersection1Y, x2: intersection2X, y2: intersection2Y };\r\n }\r\n}\r\n","import {\r\n getMidPoint,\r\n getPointOnTheLine,\r\n} from \"../../../helpers/sqftHelper\";\r\nimport COLOR_THEMES from \"../../../../../colorThemes\";\r\nimport sqftConfig from \"../store/sqftConfig\";\r\n\r\nexport default class RenderCabinets {\r\n\r\n /**\r\n * @param points {[{x:int, y:int}]}\r\n * @param distance {int}\r\n * @return {[DiagonalPointsForTheSquareInterface]}\r\n */\r\n static getDiagonalPointsForTheSquare = (points, distance) => {\r\n let returnPoints = [];\r\n for (const pointIndex in points) {\r\n if (points.hasOwnProperty(pointIndex)) {\r\n const len = points.length;\r\n const current = points[+pointIndex];\r\n const previous = points[(+pointIndex + len - 1) % len];\r\n const next = points[(+pointIndex + 1) % len];\r\n\r\n const linePoint1 = getPointOnTheLine(current, previous, distance);\r\n const linePoint2 = getPointOnTheLine(current, next, distance);\r\n const diagonalPoint = getMidPoint(linePoint1, linePoint2);\r\n\r\n returnPoints.push({\r\n currentPoint: current,\r\n diagonalPoint: diagonalPoint\r\n });\r\n }\r\n }\r\n\r\n return returnPoints\r\n }\r\n\r\n /**\r\n * @param points {[{x:int, y:int}]}\r\n * @param distance {int}\r\n * @param linePointsIds {[]}\r\n * @return {[DiagonalPointsForTheSquareInterface]}\r\n */\r\n static getDiagonalPointsForTheLine = (points, distance, linePointsIds) => {\r\n const diagonalSquarePoint = RenderCabinets.getDiagonalPointsForTheSquare(points, distance);\r\n\r\n return diagonalSquarePoint.filter(squarePoint => {\r\n return linePointsIds.some(linePointId => {\r\n return linePointId === squarePoint.currentPoint.id\r\n });\r\n })\r\n }\r\n\r\n static renderCrownMolding = (ctx, crownMoldingPoints) => {\r\n //render diagonal lines\r\n ctx.beginPath();\r\n ctx.moveTo(crownMoldingPoints[0].diagonalPoint.x, crownMoldingPoints[0].diagonalPoint.y);\r\n for (const crownMoldingPoint of crownMoldingPoints) {\r\n ctx.lineWidth = 2;\r\n ctx.lineTo(crownMoldingPoint.diagonalPoint.x, crownMoldingPoint.diagonalPoint.y);\r\n }\r\n ctx.lineTo(crownMoldingPoints[0].diagonalPoint.x, crownMoldingPoints[0].diagonalPoint.y);\r\n ctx.stroke();\r\n ctx.closePath();\r\n\r\n //render border\r\n for (const crownMoldingPoint of crownMoldingPoints) {\r\n ctx.beginPath();\r\n ctx.lineWidth = 2;\r\n ctx.moveTo(crownMoldingPoint.currentPoint.x, crownMoldingPoint.currentPoint.y);\r\n ctx.lineTo(crownMoldingPoint.diagonalPoint.x, crownMoldingPoint.diagonalPoint.y);\r\n ctx.closePath();\r\n ctx.stroke();\r\n }\r\n }\r\n\r\n static renderEndCap = (ctx, line) => {\r\n //render thick line\r\n const fromPointField = line.from.getPointField();\r\n const toPointField = line.to.getPointField();\r\n ctx.beginPath();\r\n ctx.moveTo(fromPointField.x, fromPointField.y);\r\n ctx.lineWidth = 6;\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary_hover;\r\n ctx.lineTo(toPointField.x, toPointField.y);\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n}\r\n","import uuid from \"uuid\";\r\nimport $ from \"jquery\";\r\n\r\nimport COLOR_THEMES from \"../../../store/colorThemes\";\r\nimport Config from \"../../../store/sqftConfig\";\r\nimport {\r\n getAngleBetweenTwoPoints,\r\n getMidPoint, getMinInArray, getParallelPoints,\r\n getPointDistance, getPointField, getSectionPartPoint, isDisabledInPopupWithParents,\r\n measureDistanceToInches, numToLetter,\r\n orientation\r\n} from \"../../../../../helpers/sqftHelper\";\r\nimport point from \"../point\";\r\nimport EventManager from \"../../../store/sqftEventManager\";\r\nimport workspace from \"../../workspace\";\r\n//import TranslatesProvider from \"../../../../../translatesProvider\";\r\nimport MiteredSegment from \"../shapeParts/mitered/miteredSegment\";\r\nimport NumberText from \"../../workspace/text/numberText\";\r\nimport DrawImage from \"../../workspace/textBox/draw/drawImage\";\r\nimport store from \"../../../../../../../store\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport {\r\n isDisabledInPopupShouldBeHidden, MITERED_OVERLAY_TYPE,\r\n SIDEBAR_BUTTONS_MENU,\r\n SIDEBAR_NAVIGATION_BUTTONS\r\n} from \"../../../../../constants\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\nimport sqftSlabManager from \"../../../store/sqftSlabManager\";\r\nimport {getQtCatName} from \"../../../../../helpers/sqftQuotesHelper\";\r\n\r\nexport default class MiteredOverlay {\r\n id;\r\n sectionIndex;\r\n line;\r\n self = this;\r\n qtCatName = null;\r\n featureId = null;\r\n type = null; //mitered || underlayment\r\n state = {\r\n mousePos: {},\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n isHoveringPoint: false,\r\n hoveredPoint: null,\r\n isHoveredOverText: false,\r\n hoveredText: {\r\n area:[],\r\n midPoint: {x: 0, y: 0},\r\n pointsDistance: 0,\r\n points: {point1: null, point2: null},\r\n orientation: 0\r\n },\r\n midPoint: {\r\n x: 0,\r\n y: 0,\r\n },\r\n height: 1.5,\r\n heightMetric: 40,\r\n thickness: 4,\r\n thicknessMetric: 40,\r\n maxSegmentPriority: 0\r\n };\r\n design = {\r\n //initialSize: 30,\r\n minMiteredSize: 1,\r\n measurementMargin: 30, //11,\r\n dragPointMargin: 28,\r\n rulerMargin: 33,\r\n heightMargin: 60,\r\n sectionIndexMargin: 95,\r\n sectionArrowWidth: 30,\r\n letterMargin: 18,\r\n thicknessMargin: -18,\r\n movePointOffset: 15,\r\n lineTextColor: COLOR_THEMES[Config.activeTheme].primary,\r\n fontColor: COLOR_THEMES[Config.activeTheme].primary,\r\n deleteFillStyle: \"#e77f8d\", //\"rgba(253,2,33, 0.5)\",\r\n fontFamily: 'playbold',\r\n fontHeight: 16\r\n };\r\n miteredPoints = []; // array of points\r\n _segments = []; // array of MiteredSegments\r\n miteredTextParameters = []; //array of objects\r\n heightNumberText = {}; //array of objects\r\n\r\n constructor(line, sectionIndex, type) {\r\n this.line = line;\r\n this.sectionIndex = sectionIndex;\r\n this.type = type;\r\n this.id = uuid();\r\n this.qtCatName = getQtCatName();\r\n }\r\n\r\n setMiteredPoints = (value) => { this.miteredPoints = value; }\r\n getSegments = () => { return this._segments; }\r\n getParent = () => { return this.line; }\r\n setSegments = (value) => { this._segments = value; }\r\n setFeatureId = (value) => { this.featureId = value; }\r\n\r\n movePointInOrStop = (point1, axis, diff, biggestLineCord, smallestLineCord, stopPointLeft, stopPointRight, moveStopPoints) => {\r\n //stop on other move points\r\n let smallestPointStopped = null;\r\n let biggestPointStopped = null;\r\n if (point1[axis] - diff < stopPointLeft[axis]) {\r\n smallestLineCord = stopPointLeft[axis] + this.design.minMiteredSize;\r\n smallestPointStopped = stopPointLeft;\r\n if(moveStopPoints) {\r\n let lengthDiff = point1[axis] - stopPointLeft[axis] - diff;\r\n this.movePoint(-lengthDiff, point1[axis] - diff, stopPointLeft, true);\r\n this.moveMeasurements(stopPointLeft);\r\n smallestLineCord = stopPointLeft[axis];\r\n }\r\n } else if (point1[axis] - diff > stopPointRight[axis]) {\r\n biggestLineCord = stopPointRight[axis] - this.design.minMiteredSize;\r\n biggestPointStopped = stopPointRight;\r\n if(moveStopPoints) {\r\n let lengthDiff = point1[axis] - stopPointRight[axis] - diff;\r\n this.movePoint(-lengthDiff, lengthDiff, stopPointRight, true);\r\n this.moveMeasurements(stopPointRight);\r\n biggestLineCord = stopPointRight[axis];\r\n }\r\n }\r\n\r\n // keep inside line\r\n if (point1[axis] - diff >= biggestLineCord) {\r\n point1[axis] = biggestLineCord;\r\n } else if (point1[axis] - diff <= smallestLineCord) {\r\n point1[axis] = smallestLineCord;\r\n } else {\r\n point1[axis] -= diff;\r\n }\r\n\r\n return [smallestPointStopped, biggestPointStopped]\r\n };\r\n\r\n getMousePosPointDiff = (diff, point, mousePos, sameOrientation = false) => {\r\n if(Config.measureUnit === \"Metric\") {\r\n let offset = 0;\r\n switch(this.line.getOrientation()) {\r\n case orientation.HORIZONTAL:\r\n offset = sameOrientation ? mousePos.x - point.getPointField().x : mousePos.y - point.getPointField().y;\r\n break;\r\n case orientation.VERTICAL:\r\n offset = sameOrientation? mousePos.y - point.getPointField().y : mousePos.x - point.getPointField().x;\r\n break;\r\n case orientation.NORTHWEST:\r\n case orientation.SOUTHEAST:\r\n break;\r\n case orientation.NORTHEAST:\r\n case orientation.SOUTHWEST:\r\n break;\r\n }\r\n if(!(-this.design.movePointOffset / 2 > offset || offset > 3 * this.design.movePointOffset)) {\r\n diff = diff / Config.millimetersMultiplier;\r\n }\r\n }\r\n\r\n return diff\r\n };\r\n\r\n getPoints = () => { return this.miteredPoints; };\r\n getMiteredTextParameter = () => { return this.miteredTextParameters; };\r\n isMiteredPointMoving = () => { return this.state.mouseDown};\r\n\r\n destroy = (protect) => {\r\n if(!protect) {\r\n EventManager.removeEvent(this);\r\n this.miteredPoints.forEach((point) => point.destroy());\r\n this._segments.forEach((segment) => {\r\n segment.length.destroy();\r\n if (segment.thickness) {\r\n segment.thickness.destroy();\r\n }\r\n });\r\n this.heightNumberText.destroy();\r\n\r\n if (this.type === MITERED_OVERLAY_TYPE.mitered) {\r\n workspace.miteredController.deleteSection(this);\r\n } else if (this.type === MITERED_OVERLAY_TYPE.underlayment) {\r\n workspace.underlaymentController.deleteSection(this);\r\n }\r\n }\r\n };\r\n\r\n init = (importData = null) => {\r\n if (this.line.overlay) {\r\n this.line.overlay.destroy();\r\n }\r\n if(!importData) {\r\n this.preparePoints(false);\r\n }\r\n this.prepareMeasurements(importData);\r\n this.prepareHeight(importData);\r\n this.initEvents();\r\n\r\n //points\r\n this.miteredPoints.forEach((point, index) => {\r\n if (index === 0 || index === this.miteredPoints.length - 1) {\r\n this.initPoint(point, 'blank');\r\n } else {\r\n this.initPoint(point, 'white-circle');\r\n }\r\n });\r\n\r\n // todo fix bumpout rotation and remove this\r\n $('.button--angle').addClass('button--disabled');\r\n /////////////////////////////////////////\r\n };\r\n initEvents = () => {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render,\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n //todo priority\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n this.onMouseMove,\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n this.onMouseDown,\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n this.onMouseUp,\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_LEAVE,\r\n this.onMouseLeave,\r\n this,\r\n EventManager.priorities.OVERALL\r\n );\r\n };\r\n deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n this.heightNumberText.deregisterEvents();\r\n for (let segment of this._segments ) {\r\n segment.length.deregisterEvents();\r\n if (segment.thickness) {\r\n segment.thickness.deregisterEvents();\r\n }\r\n }\r\n };\r\n reInitEvents = () => {\r\n this.initEvents();\r\n this.heightNumberText.reInitEvents();\r\n for (let segment of this._segments ) {\r\n segment.length.reInitEvents();\r\n if (segment.thickness) {\r\n segment.thickness.reInitEvents();\r\n }\r\n }\r\n };\r\n\r\n getMiteredTotalArea = () => {\r\n let totalArea = 0,\r\n lineLength = Config.measureUnit === \"Metric\" ? this.line.getLineLengthMm() : this.line.getLineLength(),\r\n height = Config.measureUnit === \"Metric\" ? this.state.heightMetric : this.state.height;\r\n //segmentsLength = 0,\r\n //minThicknessToCount = Config.measureUnit === \"Metric\" ? 40 : 1;\r\n\r\n // for (let segment of this._segments) {\r\n // if (segment instanceof MiteredSegment) {\r\n // if(segment.thickness.value >= minThicknessToCount ) {\r\n // let segmentLength = Config.measureUnit === \"Metric\"\r\n // ? inchesToMm(segment.length.value)\r\n // : this.line.addDecimalToLength(measureDistanceToInches(segment.length.value));\r\n //\r\n // segmentsLength += +segment.thickness.value + +segmentLength\r\n // }\r\n // }\r\n // }\r\n\r\n //totalArea = height * (lineLength + segmentsLength);\r\n totalArea = height * (lineLength);\r\n\r\n return totalArea;\r\n };\r\n\r\n export = () => {\r\n return {\r\n miteredPoints : this.miteredPoints.map((point) => {\r\n return point.export();\r\n }),\r\n state: this.state,\r\n _segments: this._segments.map((segment) => {\r\n return segment.exportSegment()\r\n }),\r\n }\r\n };\r\n\r\n import = (line, importMitered) => {\r\n for (const importPoint of importMitered.miteredPoints) {\r\n const preparePoint = new point();\r\n preparePoint.import(importPoint);\r\n\r\n this.miteredPoints.push(preparePoint);\r\n }\r\n this.state = importMitered.state;\r\n this.state = importMitered.state;\r\n };\r\n\r\n preparePoints = (shouldAddTwoPointsInTheMiddle = false) => {\r\n let point33 = getSectionPartPoint(this.line.from, this.line.to, 2),\r\n point66 = getSectionPartPoint(this.line.from, this.line.to, 1/2);\r\n let [fromPointWithIndent, toPointWithIndent] = this.line.getLinePointsWithoutCorners();\r\n const miteredPoints = [\r\n new point(fromPointWithIndent.x, fromPointWithIndent.y),\r\n ...(shouldAddTwoPointsInTheMiddle ? [new point(point33.x, point33.y), new point(point66.x, point66.y)] : []),\r\n new point(toPointWithIndent.x, toPointWithIndent.y)\r\n ];\r\n\r\n this.setMiteredPoints(miteredPoints);\r\n };\r\n\r\n prepareMeasurements = (importData = null) => {\r\n this.miteredPoints.forEach((point, index) => {\r\n let next = index + 1;\r\n if(this.miteredPoints[next]) {\r\n this.addMeasurementBetweenPoints(point, this.miteredPoints[next], importData ? importData._segments[index] : null);\r\n }\r\n });\r\n };\r\n\r\n prepareHeight = (importData = null) => {\r\n const midPoint = getMidPoint(this.line.from, this.line.to),\r\n lineDirection = this.line.getLineDirection(),\r\n fontHeight = this.design.fontHeight;\r\n\r\n let xMarginHeight = 0,\r\n yMarginHeight = -this.design.heightMargin - fontHeight,\r\n angle = getAngleBetweenTwoPoints(this.line.from, this.line.to);\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n if (lineDirection.newDirection === \"west\") {\r\n angle += 180\r\n yMarginHeight = this.design.heightMargin + fontHeight;\r\n }\r\n break;\r\n }\r\n case \"vertical\": {\r\n break;\r\n }\r\n // todo rotation\r\n case \"NORTHWEST\": { break;}\r\n case \"NORTHEAST\": { break;}\r\n case \"SOUTHWEST\": { break;}\r\n case \"SOUTHEAST\": { break;}\r\n default:\r\n break;\r\n }\r\n\r\n let posHeight = {\r\n // betweenPoints: {\r\n // pointFrom: this.line.from,\r\n // pointTo: this.line.to\r\n // },\r\n x: midPoint.x,\r\n y: midPoint.y,\r\n xOffset: xMarginHeight,\r\n yOffset: yMarginHeight,\r\n orientation: this.line.getLineDirectionV2(),\r\n angle: angle\r\n };\r\n let design = {\r\n valuePrefix: workspace.intl.formatMessage({id: \"sqft.navigation.mitered.height\"}) + \": \",\r\n };\r\n\r\n let heightValue = importData\r\n ? importData._segments[0]\r\n ? importData._segments[0].height\r\n : null\r\n : Config.measureUnit === \"Metric\" ? this.state.heightMetric : this.state.height;\r\n\r\n this.heightNumberText = new NumberText(heightValue, posHeight, design, this, this.setSegmentHeightFromNumberValue);\r\n };\r\n\r\n updateMinMaxPoints = () => {\r\n let [fromPointWithIndent, toPointWithIndent] = this.line.getLinePointsWithoutCorners();\r\n // Minimum and maximum values for limiting points\r\n const minX = Math.min(fromPointWithIndent.x, toPointWithIndent.x);\r\n const minY = Math.min(fromPointWithIndent.y, toPointWithIndent.y);\r\n const maxX = Math.max(fromPointWithIndent.x, toPointWithIndent.x);\r\n const maxY = Math.max(fromPointWithIndent.y, toPointWithIndent.y);\r\n\r\n // Limiting points within specified boundaries\r\n for (const miteredPoint of this.miteredPoints) {\r\n miteredPoint.x = Math.max(minX, Math.min(maxX, miteredPoint.x));\r\n miteredPoint.y = Math.max(minY, Math.min(maxY, miteredPoint.y));\r\n }\r\n\r\n // Move the nearest points to the specified minimum and maximum values\r\n let startPoint = this.miteredPoints[0],\r\n endPoint = this.miteredPoints[this.miteredPoints.length - 1];\r\n\r\n startPoint.x = fromPointWithIndent.x;\r\n startPoint.y = fromPointWithIndent.y;\r\n endPoint.x = toPointWithIndent.x;\r\n endPoint.y = toPointWithIndent.y;\r\n\r\n this.updateSegmentsLength();\r\n this.updateSegmentThicknessPos();\r\n }\r\n\r\n addMeasurementBetweenPoints = (point1, point2, importSegment = null) => {\r\n let angle = getAngleBetweenTwoPoints(this.line.from, this.line.to);\r\n const midPoint = getMidPoint(point1, point2),\r\n lineDirection = this.line.getLineDirection(),\r\n fontHeight = this.design.fontHeight,\r\n // distance = Config.measureUnit === \"Metric\"\r\n // ? distanceToMillimeters(getPointDistance(point1, point2))\r\n // : getPointDistance(point1, point2)\r\n\r\n distance = getPointDistance(point1, point2),\r\n point1Index = this.miteredPoints.indexOf(point1),\r\n point2Index = this.miteredPoints.indexOf(point2);\r\n\r\n void point2Index;\r\n let yOffset = -this.design.measurementMargin - fontHeight,\r\n xOffset = 0;\r\n // thicknessXOffsetValue = 0,\r\n // xMarginLine = 0,\r\n // yMarginLine = 0,\r\n // thicknessYOffsetValue = 0;\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n if (lineDirection.newDirection === \"west\") {\r\n angle += 180\r\n yOffset = this.design.heightMargin - fontHeight;\r\n }\r\n //yOffset = lineDirection.newDirection === \"west\" ? this.design.measurementMargin + fontHeight : -this.design.measurementMargin -fontHeight;\r\n\r\n // yMarginLine = (lineDirection.newDirection === \"west\" ? this.design.thicknessMargin : -this.design.thicknessMargin);\r\n //\r\n // thicknessXOffsetValue = (lineDirection.newDirection === \"east\" ? 15 : 15);\r\n // thicknessYOffsetValue = (lineDirection.newDirection === \"east\" ? 16 : -14);\r\n break;\r\n }\r\n case \"vertical\": {\r\n //xOffset = (lineDirection.newDirection === \"south\" ? this.design.measurementMargin + 10 : -this.design.measurementMargin - 10);\r\n\r\n // xMarginLine = (lineDirection.newDirection === \"south\" ? this.design.thicknessMargin: -this.design.thicknessMargin);\r\n //\r\n // thicknessXOffsetValue = (lineDirection.newDirection === \"north\" ? 35 : -16);\r\n // thicknessYOffsetValue = (lineDirection.newDirection === \"north\" ? 5 : 6);\r\n break;\r\n }\r\n //TODO rotation\r\n case \"NORTHWEST\": { break; }\r\n case \"NORTHEAST\": { break; }\r\n case \"SOUTHWEST\": { break; }\r\n case \"SOUTHEAST\": { break; }\r\n default: break;\r\n }\r\n\r\n let pos = {\r\n x: midPoint.x,\r\n y: midPoint.y,\r\n xOffset: xOffset,\r\n yOffset: yOffset,\r\n orientation: this.line.getLineDirectionV2(),\r\n angle: angle,\r\n };\r\n\r\n // let posThickness = {\r\n // x: midPoint.x,\r\n // y: midPoint.y,\r\n // xOffset: thicknessXOffsetValue + xMarginLine,\r\n // yOffset: thicknessYOffsetValue + yMarginLine,\r\n // orientation: this.line.getLineDirectionV2()\r\n // };\r\n\r\n let design = {\r\n isLength: true\r\n };\r\n\r\n let lengthText = new NumberText(distance, pos, design, this, this.setSegmentLengthFromNumberValue);\r\n let height = importSegment\r\n ? importSegment.height && importSegment.height\r\n : Config.measureUnit === \"Metric\" ? this.state.heightMetric : this.state.height;\r\n // let thicknessValue = importSegment && importSegment.thickness\r\n // ? importSegment.thickness\r\n // : Config.measureUnit === \"Metric\" ? this.state.thicknessMetric : this.state.thickness;\r\n //let thickness = new NumberText(thicknessValue, posThickness, {}, this, this.setSegmentThicknessFromNumberValue);\r\n let segment = new MiteredSegment(lengthText, height, null);\r\n // todo logic combining miteredPoints and segments\r\n this._segments.splice(point1Index, 0, segment);\r\n };\r\n\r\n getPointDistance(point, pos) {\r\n let pointField = point.getPointField();\r\n\r\n return Math.sqrt(Math.pow(pointField.x - pos.x, 2) + Math.pow(pointField.y - pos.y, 2))\r\n }\r\n\r\n getMaxLength = () => {\r\n return Config.measureUnit === \"Metric\"\r\n ? measureDistanceToInches(this.line.getLineLength()).millimeters // ? distanceToMillimeters(inchesToMm(segment.length.value))\r\n : this.line.getLineLength();\r\n }\r\n\r\n getPointBetweenCords = (mousePos) => {\r\n const closest = this.miteredPoints.reduce((a, b) => {\r\n return this.getPointDistance(a, mousePos) < this.getPointDistance(b, mousePos) ? a : b\r\n });\r\n const closestIndex = this.miteredPoints.indexOf(closest);\r\n let secondPoint = null;\r\n let isPrev = false;\r\n let lineDirection = this.line.getLineDirection();\r\n\r\n if(!this.miteredPoints[closestIndex + 1]) {\r\n secondPoint = this.miteredPoints[closestIndex - 1];\r\n isPrev = true;\r\n } else if(!this.miteredPoints[closestIndex - 1]) {\r\n secondPoint = this.miteredPoints[closestIndex + 1];\r\n isPrev = false;\r\n } else {\r\n let prevPoint = this.miteredPoints[closestIndex - 1];\r\n let nextPoint = this.miteredPoints[closestIndex + 1];\r\n let closestPointField = closest.getPointField();\r\n\r\n // todo logic\r\n //isPrev = this.getPointDistance(prevPoint, mousePos) < this.getPointDistance(nextPoint, mousePos);\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n isPrev = lineDirection.newDirection === \"east\" ? mousePos.x < closestPointField.x : mousePos.x > closestPointField.x;\r\n break;\r\n }\r\n case \"vertical\": {\r\n isPrev = lineDirection.newDirection === \"north\" ? mousePos.y > closestPointField.y : mousePos.y < closestPointField.y;\r\n break;\r\n }\r\n //TODO rotation\r\n case \"NORTHWEST\": { break; }\r\n case \"NORTHEAST\": { break; }\r\n case \"SOUTHWEST\": { break; }\r\n case \"SOUTHEAST\": { break; }\r\n default: break;\r\n }\r\n\r\n secondPoint = isPrev ? prevPoint : nextPoint;\r\n }\r\n\r\n return [closest, secondPoint, isPrev];\r\n };\r\n\r\n addPointBetweenPoints = (closest, secondPoint, isPrev) => {\r\n const midPoint = getMidPoint(closest, secondPoint);\r\n const newPoint = new point(midPoint.x, midPoint.y);\r\n this.initPoint(newPoint);\r\n const closestIndex = this.miteredPoints.indexOf(closest);\r\n\r\n this.miteredPoints.splice(isPrev ? closestIndex : closestIndex + 1, 0, newPoint);\r\n\r\n return newPoint;\r\n };\r\n\r\n getSegmentBetweenPoints = (point1, point2) => {\r\n const point1Index = this.miteredPoints.indexOf(point1);\r\n const point2Index = this.miteredPoints.indexOf(point2);\r\n\r\n return this._segments[point2Index > point1Index ? point1Index : point2Index];\r\n };\r\n\r\n getSegmentPointsBySegment = (segment) => {\r\n const segmentIndex = this._segments.indexOf(segment);\r\n\r\n return [this.miteredPoints[segmentIndex], this.miteredPoints[segmentIndex + 1]];\r\n };\r\n\r\n removeMeasurementBetweenPoints = (closest, secondPoint, isPrev) => {\r\n const closestIndex = this.miteredPoints.indexOf(closest);\r\n const removeIndex = isPrev ? closestIndex - 2: closestIndex + 2;\r\n\r\n this._segments[removeIndex].length.destroy();\r\n if (this._segments[removeIndex].thickness) {\r\n this._segments[removeIndex].thickness.destroy();\r\n }\r\n this._segments.splice(removeIndex, 1);\r\n };\r\n\r\n deletePoint = (point) => {\r\n const pointIndex = this.miteredPoints.indexOf(point);\r\n\r\n //add new segment\r\n this.addMeasurementBetweenPoints(this.miteredPoints[pointIndex -1], this.miteredPoints[pointIndex +1]);\r\n\r\n //remove previous and next segment\r\n this._segments[pointIndex ].length.destroy();\r\n this._segments[pointIndex +1].length.destroy();\r\n if (this._segments[pointIndex].thickness) {\r\n this._segments[pointIndex].thickness.destroy();\r\n }\r\n if (this._segments[pointIndex + 1].thickness) {\r\n this._segments[pointIndex + 1].thickness.destroy();\r\n }\r\n this._segments.splice(pointIndex, 1);\r\n this._segments.splice(pointIndex, 1);\r\n\r\n //remove point\r\n this.miteredPoints.splice(pointIndex, 1);\r\n\r\n point.destroy();\r\n };\r\n\r\n resetHoveredPoint = () => {\r\n this.state.hoveredPoint = null;\r\n this.state.mouseDown = false;\r\n };\r\n\r\n\r\n moveMeasurements = (point) => {\r\n const pointIndex = this.miteredPoints.indexOf(point);\r\n\r\n // let length = Config.measureUnit === \"Metric\"\r\n // ? inchesToMm(getPointDistance(point, this.miteredPoints[pointIndex + 1 ]))\r\n // : getPointDistance(point, this.miteredPoints[pointIndex + 1 ]);\r\n //\r\n // let length2 = Config.measureUnit === \"Metric\"\r\n // ? inchesToMm(getPointDistance(point, this.miteredPoints[pointIndex - 1 ]))\r\n // : getPointDistance(point, this.miteredPoints[pointIndex - 1 ]);\r\n\r\n //move left and right measurements if they exist\r\n if (this.miteredPoints[pointIndex - 1 ]) {\r\n const midPoint2 = getMidPoint(point, this.miteredPoints[pointIndex - 1 ]);\r\n let length2 = getPointDistance(point, this.miteredPoints[pointIndex - 1 ]);\r\n this._segments[pointIndex - 1].length.pos.x = midPoint2.x;\r\n this._segments[pointIndex - 1].length.pos.y = midPoint2.y;\r\n this._segments[pointIndex - 1].length.value = length2;\r\n if (this._segments[pointIndex - 1].thickness) {\r\n this._segments[pointIndex - 1].thickness.pos.x = midPoint2.x;\r\n this._segments[pointIndex - 1].thickness.pos.y = midPoint2.y;\r\n }\r\n }\r\n if (this.miteredPoints[pointIndex + 1 ]) {\r\n const midPoint = getMidPoint(point, this.miteredPoints[pointIndex + 1 ]);\r\n let length = getPointDistance(point, this.miteredPoints[pointIndex + 1 ]);\r\n this._segments[pointIndex].length.pos.x = midPoint.x;\r\n this._segments[pointIndex].length.pos.y = midPoint.y;\r\n this._segments[pointIndex].length.value = length;\r\n if (this._segments[pointIndex].thickness) {\r\n this._segments[pointIndex].thickness.pos.x = midPoint.x;\r\n this._segments[pointIndex].thickness.pos.y = midPoint.y;\r\n }\r\n }\r\n };\r\n\r\n initPoint = (point, layout = 'white-circle') => {\r\n point.init(this);\r\n point.layout = layout;\r\n };\r\n\r\n getOffset = () => {\r\n return this.line.getOffset();\r\n };\r\n\r\n moveMitered = (xDiff = 0, yDiff = 0) => {\r\n for (let miteredPoint of this.miteredPoints ) {\r\n miteredPoint.x -= xDiff;\r\n miteredPoint.y -= yDiff;\r\n }\r\n this.heightNumberText.pos.x -= xDiff;\r\n this.heightNumberText.pos.y -= yDiff;\r\n for (let segment of this._segments ) {\r\n segment.length.pos.x -= xDiff;\r\n segment.length.pos.y -= yDiff;\r\n if (segment.thickness) {\r\n segment.thickness.pos.x -= xDiff;\r\n segment.thickness.pos.y -= yDiff;\r\n }\r\n }\r\n };\r\n\r\n setNewLineWidth = () => {\r\n this.updateCornerPoints();\r\n this.updateSectionHeightPos();\r\n this.updateSegmentsLength();\r\n this.updateSegmentThicknessPos();\r\n };\r\n\r\n updateCornerPoints = () => {\r\n this.miteredPoints[0].x = this.line.from.x\r\n this.miteredPoints[0].y = this.line.from.y\r\n this.miteredPoints[this.miteredPoints.length - 1].x = this.line.to.x\r\n this.miteredPoints[this.miteredPoints.length - 1].y = this.line.to.y\r\n };\r\n\r\n updateSectionHeightPos = () => {\r\n const midPoint = getMidPoint(this.line.from, this.line.to);\r\n this.heightNumberText.pos.x = midPoint.x;\r\n this.heightNumberText.pos.y = midPoint.y;\r\n };\r\n\r\n updateSegmentsLength = () => {\r\n for (let segmentIndex in this._segments ) {\r\n if (this._segments.hasOwnProperty(segmentIndex)) {\r\n const midPoint = getMidPoint(this.miteredPoints[+segmentIndex], this.miteredPoints[+segmentIndex + 1]);\r\n let length = getPointDistance(this.miteredPoints[+segmentIndex], this.miteredPoints[+segmentIndex + 1]);\r\n this._segments[+segmentIndex].length.pos.x = midPoint.x;\r\n this._segments[+segmentIndex].length.pos.y = midPoint.y;\r\n this._segments[+segmentIndex].length.value = length;\r\n this.setSegmentLength(length, this._segments[segmentIndex], this);\r\n }\r\n }\r\n };\r\n\r\n updateSegmentThicknessPos = () => {\r\n for (let segmentIndex in this._segments ) {\r\n if (this._segments.hasOwnProperty(segmentIndex) && this.miteredPoints[+segmentIndex + 1]) {\r\n const midPoint = getMidPoint(this.miteredPoints[+segmentIndex], this.miteredPoints[+segmentIndex + 1]);\r\n if (this._segments[+segmentIndex].thickness) {\r\n this._segments[+segmentIndex].thickness.pos.x = midPoint.x;\r\n this._segments[+segmentIndex].thickness.pos.y = midPoint.y;\r\n }\r\n }\r\n }\r\n };\r\n\r\n setSegmentLengthFromNumberValue = (value, numberText) => {\r\n value = Math.round10(+value / Config.getMeasureMultiplier(), -3);\r\n let miteredSection = numberText.parent;\r\n let miteredSegments = miteredSection.getSegments();\r\n let miteredSegment = miteredSegments.find(seg => seg.length === numberText);\r\n\r\n this.setSegmentLength(value, miteredSegment, miteredSection);\r\n };\r\n\r\n setSegmentLength = (value, segment, miteredSection) => {\r\n //update segment and maxSegment priority\r\n segment.setPriority(++this.state.maxSegmentPriority);\r\n this.resizeMiteredSegment(value, segment);\r\n\r\n // we need to recreate slab shape so we delete existing it\r\n sqftSlabManager.deleteSlabBacksplashByLine(this.line);\r\n if (this.type === MITERED_OVERLAY_TYPE.mitered) {\r\n workspace.miteredController.updateSection(miteredSection);\r\n } else if (this.type === MITERED_OVERLAY_TYPE.underlayment) {\r\n workspace.underlaymentController.updateSection(miteredSection);\r\n }\r\n };\r\n\r\n setSegmentHeightFromNumberValue = (value, numberText) => {\r\n const newValue = +value\r\n let miteredSection = numberText.parent;\r\n this.setSegmentHeight(newValue, miteredSection);\r\n };\r\n\r\n setSegmentHeight = (newValue, miteredSection) => {\r\n let segments = miteredSection.getSegments();\r\n sqftConfig.measureUnit === \"Metric\"\r\n ? miteredSection.state.heightMetric = newValue\r\n : miteredSection.state.height = newValue;\r\n\r\n miteredSection.heightNumberText.value = newValue;\r\n segments.map((segment) => {\r\n segment.height = newValue\r\n });\r\n\r\n // we need to recreate slab shape so we delete existing it\r\n sqftSlabManager.deleteSlabBacksplashByLine(this.line);\r\n if (this.type === MITERED_OVERLAY_TYPE.mitered) {\r\n workspace.miteredController.updateSection(miteredSection);\r\n } else if (this.type === MITERED_OVERLAY_TYPE.underlayment) {\r\n workspace.underlaymentController.updateSection(miteredSection);\r\n }\r\n }\r\n\r\n setSegmentThicknessFromNumberValue = (value, numberText) => {\r\n const newValue = +value\r\n let miteredSection = numberText.parent;\r\n let miteredSegments = miteredSection.getSegments();\r\n let miteredSegment = miteredSegments.find(seg => seg.thickness === numberText);\r\n\r\n this.setSegmentThickness(newValue, miteredSegment, miteredSection);\r\n if (this.type === MITERED_OVERLAY_TYPE.mitered) {\r\n workspace.miteredController.updateSection(miteredSection);\r\n } else if (this.type === MITERED_OVERLAY_TYPE.underlayment) {\r\n workspace.underlaymentController.updateSection(miteredSection);\r\n }\r\n };\r\n\r\n setSegmentThickness = (newValue, miteredSegment, miteredSection) => {\r\n sqftConfig.measureUnit === \"Metric\"\r\n ? miteredSection.state.thicknessMetric = newValue\r\n : miteredSection.state.thickness = newValue;\r\n miteredSegment.thickness.value = newValue;\r\n\r\n if (this.type === MITERED_OVERLAY_TYPE.mitered) {\r\n workspace.miteredController.updateSection(miteredSection);\r\n } else if (this.type === MITERED_OVERLAY_TYPE.underlayment) {\r\n workspace.underlaymentController.updateSection(miteredSection);\r\n }\r\n }\r\n\r\n getSegmentByNumberText = (numberText) => {\r\n let segmentIndex = this._segments.map(seg => seg.length).indexOf(numberText);\r\n\r\n return this._segments[segmentIndex];\r\n };\r\n\r\n getResizedSegmentsWithoutPriority = (segment) => {\r\n let segmentIndex = this._segments.indexOf(segment);\r\n let closestLeft = this._segments[segmentIndex -1 ]\r\n ? this._segments[segmentIndex -1 ].priority === 0\r\n : null;\r\n let closestRight = this._segments[segmentIndex +1 ]\r\n ? this._segments[segmentIndex +1 ].priority === 0\r\n : null;\r\n\r\n return {closestLeft, closestRight};\r\n };\r\n\r\n getResizedSegmentsFreeSpace = (segment) => {\r\n let segmentIndex = this._segments.indexOf(segment);\r\n let closestLeft = this._segments[segmentIndex -1 ];\r\n let closestRight = this._segments[segmentIndex +1 ];\r\n\r\n return {closestLeft, closestRight};\r\n };\r\n\r\n getResizedSegmentsByPriority = (segment) => {\r\n let segmentIndex = this._segments.indexOf(segment);\r\n let minPrevSegment = null;\r\n let minNextSegment = null;\r\n if(this._segments[segmentIndex -1 ]) {\r\n let prevSegments = this._segments.slice(0, segmentIndex);\r\n minPrevSegment = getMinInArray(prevSegments, 'priority');\r\n }\r\n if(this._segments[segmentIndex +1 ]) {\r\n let nextSegments = this._segments.slice(segmentIndex + 1);\r\n minNextSegment = getMinInArray(nextSegments.reverse(), 'priority'); // reverse array to get closest element\r\n }\r\n\r\n return {minPrevSegment, minNextSegment};\r\n };\r\n\r\n movePointWithMouse = (mousePos, point1) => {\r\n let scale = workspace.getScale();\r\n let xDiff = (this.state.mouseDownPosition.x - mousePos.x) / scale;\r\n let yDiff = (this.state.mouseDownPosition.y - mousePos.y) / scale;\r\n\r\n //debugger\r\n yDiff = this.getMousePosPointDiff(yDiff, point1, mousePos, true);\r\n xDiff = this.getMousePosPointDiff(xDiff, point1, mousePos, true);\r\n\r\n this.movePoint(xDiff, yDiff, point1);\r\n this.moveMeasurements(point1);\r\n\r\n this.state.mouseDownPosition.y = mousePos.y;\r\n this.state.mouseDownPosition.x = mousePos.x;\r\n };\r\n\r\n // first resize free space then segments without and with priority\r\n resizeMiteredSegment = (value, segment) => {\r\n if (!this.resizeMiteredSegmentFreeSpace(value, segment)){\r\n if (!this.resizeMiteredSegmentWithoutPriority(value, segment)) {\r\n this.resizeMiteredSegmentWithPriority(value, segment);\r\n }\r\n }\r\n };\r\n\r\n resizeMiteredSegmentWithPriority = (value, segment) => {\r\n let yDiff = 0,\r\n xDiff = 0,\r\n lineDirection = this.line.getLineDirection(),\r\n {minPrevSegment, minNextSegment} = this.getResizedSegmentsByPriority(segment),\r\n segmentIndex = this._segments.indexOf(segment),\r\n minNextSegmentIndex = this._segments.indexOf(minNextSegment),\r\n minPrevSegmentIndex = this._segments.indexOf(minPrevSegment),\r\n\r\n [segmentPoint1, segmentPoint2] = this.getSegmentPointsBySegment(segment),\r\n pointDistance = getPointDistance(segmentPoint1, segmentPoint2);\r\n\r\n // move only to one side with lowest priority\r\n if (minPrevSegment ? minPrevSegment.priority : 0 > minNextSegment ? minNextSegment.priority : 0) {\r\n minPrevSegment = null\r\n } else if(minPrevSegment ? minPrevSegment.priority : 0 < minNextSegment ? minNextSegment.priority : 0) {\r\n minNextSegment = null\r\n }\r\n\r\n let moveAllNextPoints = (xDiff, yDiff) => {\r\n let index = segmentIndex;\r\n while(minNextSegmentIndex > index) {\r\n let [segmentBetweenPoint1, segmentBetweenPoint2] = this.getSegmentPointsBySegment(this._segments[index]);\r\n this.movePoint(xDiff, yDiff, segmentBetweenPoint2, true);\r\n this.moveMeasurements(segmentBetweenPoint2);\r\n index++\r\n\r\n void segmentBetweenPoint1;\r\n }\r\n };\r\n\r\n let moveAllPrevPoints = (xDiff, yDiff) => {\r\n let index = segmentIndex;\r\n while(minPrevSegmentIndex < index) {\r\n let [segmentBetweenPoint1, segmentBetweenPoint2] = this.getSegmentPointsBySegment(this._segments[index]);\r\n this.movePoint(xDiff, yDiff, segmentBetweenPoint1, true);\r\n this.moveMeasurements(segmentBetweenPoint1);\r\n index--\r\n\r\n void segmentBetweenPoint2;\r\n }\r\n };\r\n switch(this.line.getOrientation()) {\r\n case orientation.HORIZONTAL:\r\n if (minPrevSegment && minNextSegment) {\r\n xDiff = lineDirection.newDirection === \"east\" ? value - pointDistance: -value + pointDistance;\r\n moveAllPrevPoints(xDiff / 2);\r\n\r\n xDiff = lineDirection.newDirection === \"east\" ? -value + pointDistance: value - pointDistance;\r\n moveAllNextPoints(xDiff / 2);\r\n } else if(minPrevSegment && !minNextSegment) {\r\n xDiff = lineDirection.newDirection === \"east\" ? value - pointDistance: -value + pointDistance;\r\n moveAllPrevPoints(xDiff);\r\n } else if(!minPrevSegment && minNextSegment) {\r\n xDiff = lineDirection.newDirection === \"east\" ? -value + pointDistance: value - pointDistance;\r\n moveAllNextPoints(xDiff);\r\n }\r\n\r\n break;\r\n case orientation.VERTICAL:\r\n if (minPrevSegment && minNextSegment) {\r\n yDiff = lineDirection.newDirection === \"east\" ? value - pointDistance : -value + pointDistance;\r\n moveAllPrevPoints(xDiff, yDiff / 2);\r\n\r\n yDiff = lineDirection.newDirection === \"east\" ? -value + pointDistance: value - pointDistance;\r\n moveAllNextPoints(xDiff, yDiff / 2);\r\n } else if(minPrevSegment && !minNextSegment) {\r\n yDiff = lineDirection.newDirection === \"east\" ? value - pointDistance : -value + pointDistance;\r\n moveAllPrevPoints(xDiff, yDiff);\r\n } else if(!minPrevSegment && minNextSegment) {\r\n yDiff = lineDirection.newDirection === \"east\" ? -value + pointDistance: value - pointDistance;\r\n moveAllNextPoints(xDiff, yDiff);\r\n }\r\n break;\r\n case orientation.NORTHWEST:\r\n case orientation.SOUTHEAST:\r\n break;\r\n case orientation.NORTHEAST:\r\n case orientation.SOUTHWEST:\r\n break;\r\n }\r\n };\r\n\r\n resizeMiteredSegmentWithoutPriority = (value, segment) => {\r\n let {closestLeft, closestRight} = this.getResizedSegmentsWithoutPriority(segment);\r\n //resize segments only if they are without priority\r\n if(!closestLeft && !closestRight) {\r\n return false\r\n }\r\n\r\n let yDiff = 0,\r\n xDiff = 0,\r\n lineDirection = this.line.getLineDirection(),\r\n [segmentPoint1, segmentPoint2] = this.getSegmentPointsBySegment(segment),\r\n pointDistance = getPointDistance(segmentPoint1, segmentPoint2);\r\n\r\n switch(this.line.getOrientation()) {\r\n case orientation.HORIZONTAL:\r\n if(closestLeft && closestRight) {\r\n xDiff = lineDirection.newDirection === \"east\" ? value - pointDistance: -value + pointDistance;\r\n this.movePoint(xDiff / 2, yDiff, segmentPoint1, true);\r\n this.moveMeasurements(segmentPoint1);\r\n\r\n xDiff = lineDirection.newDirection === \"east\" ? -value + pointDistance: value - pointDistance;\r\n this.movePoint(xDiff / 2, yDiff, segmentPoint2, true);\r\n this.moveMeasurements(segmentPoint2);\r\n\r\n } else if(closestLeft && !closestRight) {\r\n xDiff = lineDirection.newDirection === \"east\" ? value - pointDistance: -value + pointDistance;\r\n this.movePoint(xDiff, yDiff, segmentPoint1, true);\r\n this.moveMeasurements(segmentPoint1);\r\n\r\n } else if(!closestLeft && closestRight) {\r\n xDiff = lineDirection.newDirection === \"east\" ? -value + pointDistance: value - pointDistance;\r\n this.movePoint(xDiff, yDiff, segmentPoint2, true);\r\n this.moveMeasurements(segmentPoint2);\r\n }\r\n\r\n break;\r\n case orientation.VERTICAL:\r\n if(closestLeft && closestRight) {\r\n yDiff = lineDirection.newDirection === \"north\" ? -value + pointDistance: value - pointDistance;\r\n this.movePoint(xDiff / 2, yDiff, segmentPoint1, true);\r\n this.moveMeasurements(segmentPoint1);\r\n\r\n yDiff = lineDirection.newDirection === \"north\" ? value - pointDistance : -value + pointDistance;\r\n this.movePoint(xDiff / 2, yDiff, segmentPoint2, true);\r\n this.moveMeasurements(segmentPoint2);\r\n\r\n } else if(closestLeft && !closestRight) {\r\n yDiff = lineDirection.newDirection === \"north\" ? -value + pointDistance: value - pointDistance;\r\n this.movePoint(xDiff, yDiff, segmentPoint1, true);\r\n this.moveMeasurements(segmentPoint1);\r\n\r\n } else if(!closestLeft && closestRight) {\r\n yDiff = lineDirection.newDirection === \"north\" ? value - pointDistance : -value + pointDistance;\r\n this.movePoint(xDiff, yDiff, segmentPoint2, true);\r\n this.moveMeasurements(segmentPoint2);\r\n }\r\n break;\r\n case orientation.NORTHWEST:\r\n case orientation.SOUTHEAST:\r\n break;\r\n case orientation.NORTHEAST:\r\n case orientation.SOUTHWEST:\r\n break;\r\n }\r\n\r\n return true\r\n };\r\n\r\n resizeMiteredSegmentFreeSpace = (value, segment) => {\r\n let {closestLeft, closestRight} = this.getResizedSegmentsFreeSpace(segment);\r\n //if segments exist skip resizing\r\n if (!closestLeft || !closestRight) {\r\n let yDiff = 0,\r\n xDiff = 0,\r\n lineDirection = this.line.getLineDirection(),\r\n [segmentPoint1, segmentPoint2] = this.getSegmentPointsBySegment(segment),\r\n [smallestLinePoint, biggestLinePoint] = this.line.getLinePointsWithoutCorners(),\r\n pointDistance = getPointDistance(segmentPoint1, segmentPoint2);\r\n\r\n // todo move skip into function\r\n switch(this.line.getOrientation()) {\r\n case orientation.HORIZONTAL:\r\n if(!closestLeft && closestRight) {\r\n xDiff = lineDirection.newDirection === \"east\" ? value - pointDistance: -value + pointDistance;\r\n // skip if there is no whitespace\r\n if(lineDirection.newDirection === \"east\" ){\r\n if(segmentPoint1.x - xDiff <= smallestLinePoint.x || segmentPoint1.x === smallestLinePoint.x){\r\n return false\r\n } else if(Math.round(segmentPoint1.x) === smallestLinePoint.x){\r\n segmentPoint1.x = smallestLinePoint.x;\r\n return false\r\n }\r\n } else {\r\n if(segmentPoint1.x - xDiff >= biggestLinePoint.x || segmentPoint1.x === biggestLinePoint.x){\r\n return false\r\n } else if(Math.round(segmentPoint1.x) === biggestLinePoint.x){\r\n segmentPoint1.x = biggestLinePoint.x;\r\n return false\r\n }\r\n }\r\n this.movePoint(xDiff, yDiff, segmentPoint1, true);\r\n this.moveMeasurements(segmentPoint1);\r\n\r\n } else if(closestLeft && !closestRight) {\r\n xDiff = lineDirection.newDirection === \"east\" ? -value + pointDistance: value - pointDistance;\r\n if(lineDirection.newDirection === \"east\" ){\r\n if(segmentPoint2.x - xDiff >= biggestLinePoint.x){\r\n return false\r\n } else if(Math.round(segmentPoint2.x) === biggestLinePoint.x){\r\n segmentPoint2.x = biggestLinePoint.x;\r\n return false\r\n }\r\n } else {\r\n if(segmentPoint2.x - xDiff <= smallestLinePoint.x){\r\n return false\r\n } else if(Math.round(segmentPoint2.x) === smallestLinePoint.x){\r\n segmentPoint2.x = smallestLinePoint.x;\r\n return false\r\n }\r\n }\r\n this.movePoint(xDiff, yDiff, segmentPoint2, true);\r\n this.moveMeasurements(segmentPoint2);\r\n }\r\n\r\n break;\r\n case orientation.VERTICAL:\r\n if(!closestLeft && closestRight) {\r\n yDiff = lineDirection.newDirection === \"north\" ? -value + pointDistance: value - pointDistance;\r\n // skip if there is no whitespace\r\n if(lineDirection.newDirection === \"north\" ){\r\n if(segmentPoint1.y - yDiff >= biggestLinePoint.y){\r\n return false\r\n } else if(Math.round(segmentPoint1.y) === biggestLinePoint.y){\r\n segmentPoint1.y = biggestLinePoint.y;\r\n return false\r\n }\r\n } else {\r\n if(segmentPoint1.y - yDiff <= smallestLinePoint.y){\r\n return false\r\n } else if(Math.round(segmentPoint1.y) === smallestLinePoint.y){\r\n segmentPoint1.y = smallestLinePoint.y;\r\n return false\r\n }\r\n }\r\n this.movePoint(xDiff, yDiff, segmentPoint1, true);\r\n this.moveMeasurements(segmentPoint1);\r\n\r\n } else if(closestLeft && !closestRight) {\r\n yDiff = lineDirection.newDirection === \"north\" ? value - pointDistance : -value + pointDistance;\r\n // skip if there is no whitespace and fix round position\r\n if(lineDirection.newDirection === \"north\" ){\r\n if(segmentPoint2.y - yDiff <= smallestLinePoint.y){\r\n return false\r\n } else if(Math.round(segmentPoint2.y) === smallestLinePoint.y){\r\n segmentPoint2.y = smallestLinePoint.y;\r\n return false\r\n }\r\n } else {\r\n if(segmentPoint2.y - yDiff >= biggestLinePoint.y){\r\n return false\r\n } else if(Math.round(segmentPoint2.y) === biggestLinePoint.y){\r\n segmentPoint2.y = biggestLinePoint.y;\r\n return false\r\n }\r\n }\r\n this.movePoint(xDiff, yDiff, segmentPoint2, true);\r\n this.moveMeasurements(segmentPoint2);\r\n }\r\n break;\r\n case orientation.NORTHWEST:\r\n case orientation.SOUTHEAST:\r\n break;\r\n case orientation.NORTHEAST:\r\n case orientation.SOUTHWEST:\r\n break;\r\n }\r\n }\r\n\r\n return false\r\n };\r\n\r\n /**\r\n * @deprecated\r\n */\r\n getLeftRightStopPoint = (point1) => {\r\n let o = this.line.getOrientation(),\r\n lineDirection = this.line.getLineDirection(),\r\n toCornerLength = this.line.to.getArcLength() || this.line.get45CornerLegDistance(),\r\n prevLine = this.line.getParent().getPrevLine(this.line),\r\n fromCornerLength = prevLine.to.getArcLength() || prevLine.get45CornerLegDistance(),\r\n toCornerMargin = 0,\r\n fromCornerMargin = 0,\r\n axis = null,\r\n index = this.miteredPoints.indexOf(point1),\r\n stopPointLeft = null,\r\n stopPointRight = null,\r\n biggestLinePoint = null,\r\n smallestLinePoint = null;\r\n\r\n if (o === orientation.VERTICAL) {\r\n toCornerMargin = lineDirection.newDirection === \"north\" ? -fromCornerLength : -toCornerLength;\r\n fromCornerMargin = lineDirection.newDirection === \"north\" ? +toCornerLength : +fromCornerLength;\r\n biggestLinePoint = this.line.getBiggestYPoint().y + toCornerMargin;\r\n smallestLinePoint = this.line.getSmallestYPoint().y + fromCornerMargin;\r\n axis = y;\r\n } else if(o === orientation.HORIZONTAL) {\r\n toCornerMargin = lineDirection.newDirection === \"east\" ? -toCornerLength : -fromCornerLength;\r\n fromCornerMargin = lineDirection.newDirection === \"east\" ? +fromCornerLength : +toCornerLength;\r\n biggestLinePoint = this.line.getBiggestXPoint().x + toCornerMargin;\r\n smallestLinePoint = this.line.getSmallestXPoint().x + fromCornerMargin;\r\n axis = x;\r\n } else {\r\n //todo\r\n }\r\n\r\n void axis; void biggestLinePoint; void smallestLinePoint;\r\n void index; void stopPointLeft; void stopPointRight;\r\n };\r\n\r\n movePoint = (xDiff, yDiff, point1, moveStopPoints = false) => {\r\n let o = this.line.getOrientation(),\r\n lineDirection = this.line.getLineDirection(),\r\n // toCornerLength = this.line.to.getArcLength() || this.line.get45CornerLegDistance(),\r\n // prevLine = this.line.getParent().getPrevLine(this.line),\r\n // fromCornerLength = prevLine.to.getArcLength() || prevLine.get45CornerLegDistance(),\r\n pointIndex = this.miteredPoints.indexOf(point1),\r\n //toCornerMargin = 0,\r\n //fromCornerMargin = 0,\r\n stopPointLeft = null,\r\n stopPointRight = null,\r\n smallestPointStopped = null,\r\n biggestPointStopped = null,\r\n biggestLinePoint = null,\r\n smallestLinePoint = null\r\n ;\r\n\r\n //do'nt move first and las point\r\n if (pointIndex === 0 || pointIndex === this.miteredPoints.length - 1) {\r\n return []\r\n }\r\n\r\n if (o === orientation.VERTICAL) {\r\n //line biggest and smallest points\r\n biggestLinePoint = Object.assign({}, this.line.getBiggestYPoint().pos);\r\n smallestLinePoint = Object.assign({}, this.line.getSmallestYPoint().pos);\r\n // stop point on overline move\r\n if (lineDirection.newDirection === \"north\" ) {\r\n //toCornerMargin = -fromCornerLength;\r\n //fromCornerMargin = +toCornerLength;\r\n //biggestLinePoint.y += toCornerMargin;\r\n //smallestLinePoint.y += fromCornerMargin;\r\n stopPointLeft = this.miteredPoints[pointIndex + 1] ? this.miteredPoints[pointIndex + 1] : smallestLinePoint;\r\n stopPointRight = this.miteredPoints[pointIndex - 1] ? this.miteredPoints[pointIndex - 1] : biggestLinePoint;\r\n } else {\r\n //toCornerMargin = -toCornerLength;\r\n //fromCornerMargin = +fromCornerLength;\r\n //biggestLinePoint.y += toCornerMargin;\r\n //smallestLinePoint.y += fromCornerMargin;\r\n stopPointLeft = this.miteredPoints[pointIndex - 1] ? this.miteredPoints[pointIndex - 1] : smallestLinePoint;\r\n stopPointRight = this.miteredPoints[pointIndex + 1] ? this.miteredPoints[pointIndex + 1] : biggestLinePoint;\r\n }\r\n\r\n [smallestPointStopped, biggestPointStopped] = this.movePointInOrStop(\r\n point1, 'y', yDiff,\r\n biggestLinePoint.y,\r\n smallestLinePoint.y,\r\n stopPointLeft,\r\n stopPointRight,\r\n moveStopPoints\r\n );\r\n } else if (o === orientation.HORIZONTAL) {\r\n //line biggest and smallest points\r\n biggestLinePoint = Object.assign({}, this.line.getBiggestXPoint().pos);\r\n smallestLinePoint = Object.assign({}, this.line.getSmallestXPoint().pos);\r\n // stop point on overline move if it is not mitered then it should'nt go overline\r\n if (lineDirection.newDirection === \"east\" ) {\r\n //toCornerMargin = -toCornerLength;\r\n //fromCornerMargin = +fromCornerLength;\r\n //biggestLinePoint.x += toCornerMargin;\r\n //smallestLinePoint.x += fromCornerMargin;\r\n stopPointLeft = this.miteredPoints[pointIndex - 1] ? this.miteredPoints[pointIndex - 1] : smallestLinePoint;\r\n stopPointRight = this.miteredPoints[pointIndex + 1] ? this.miteredPoints[pointIndex + 1] : biggestLinePoint;\r\n } else {\r\n //toCornerMargin = -fromCornerLength;\r\n //fromCornerMargin = +toCornerLength;\r\n //biggestLinePoint.x += toCornerMargin;\r\n //smallestLinePoint.x += fromCornerMargin;\r\n stopPointLeft = this.miteredPoints[pointIndex + 1] ? this.miteredPoints[pointIndex + 1] : smallestLinePoint;\r\n stopPointRight = this.miteredPoints[pointIndex - 1] ? this.miteredPoints[pointIndex - 1] : biggestLinePoint;\r\n }\r\n // stop point on overline move\r\n [smallestPointStopped, biggestPointStopped] = this.movePointInOrStop(\r\n point1, 'x', xDiff,\r\n biggestLinePoint.x,\r\n smallestLinePoint.x,\r\n stopPointLeft,\r\n stopPointRight,\r\n moveStopPoints\r\n );\r\n } else {\r\n //todo rotation\r\n // const nextLine = parent.getNextLine(self);\r\n // const prevLine = parent.getPrevLine(self);\r\n // moveDiagonalLine(self, nextLine, prevLine, this.state.movePointDistance, yDiff, o);\r\n // this.state.mouseDownPosition = mousePos;\r\n }\r\n\r\n return [smallestPointStopped, biggestPointStopped]\r\n // self.from = lockPointToCanvas(self.from); // removed locking because of this issue http://jira.mozidev.com/browse/QC-802\r\n // self.to = lockPointToCanvas(self.to);\r\n };\r\n\r\n render = (ctx) => {\r\n if (isDisabledInPopupShouldBeHidden() && isDisabledInPopupWithParents(this)) {\r\n return\r\n }\r\n this.renderTopBlueLine(ctx);\r\n this.renderRuler(ctx);\r\n this.renderLetter(ctx);\r\n //this.renderThickness(ctx);\r\n this.renderHeight(ctx);\r\n this.renderSectionIndex(ctx);\r\n // this.renderMeasurements(ctx);\r\n };\r\n\r\n //blue line between middle points\r\n renderTopBlueLine = (ctx) => {\r\n let renderFrom = this.line.calculateRenderPosition(this.miteredPoints[0]),\r\n renderTo = this.line.calculateRenderPosition(this.miteredPoints[this.miteredPoints.length - 1]);\r\n\r\n ctx.beginPath();\r\n ctx.moveTo(renderFrom.x, renderFrom.y);\r\n ctx.lineTo(renderTo.x, renderTo.y);\r\n ctx.lineWidth = 8;\r\n if(EventManager.getCursor().indexOf(\"delete\") >= 0 && this.line.isHovering() && !this.state.isHoveringPoint) {\r\n ctx.strokeStyle = this.design.deleteFillStyle;\r\n } else {\r\n ctx.strokeStyle = this.design.lineTextColor;\r\n }\r\n ctx.stroke();\r\n ctx.closePath();\r\n };\r\n\r\n renderRuler = (ctx) => {\r\n const pointsToRender = this.miteredPoints.map((point) => {\r\n return this.line.calculateRenderPosition(point);\r\n });\r\n\r\n ctx.beginPath();\r\n pointsToRender.forEach((point, index) => {\r\n let next = index + 1;\r\n if (pointsToRender[next]) {\r\n const [parallelPointFrom, parallelPointTo] = getParallelPoints(point, pointsToRender[next], -this.design.rulerMargin);\r\n this.drawArrow( ctx,\r\n parallelPointFrom.x,\r\n parallelPointFrom.y,\r\n parallelPointTo.x,\r\n parallelPointTo.y\r\n );\r\n }\r\n });\r\n\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = this.design.lineTextColor;\r\n ctx.stroke();\r\n ctx.closePath();\r\n };\r\n\r\n // text is rendered from number text\r\n renderHeight = (ctx) => {\r\n let [fromPointWithIndent, toPointWithIndent] = this.line.getLinePointsWithoutCorners(),\r\n renderFrom = getPointField(fromPointWithIndent.x, fromPointWithIndent.y, this),\r\n renderTo = getPointField(toPointWithIndent.x, toPointWithIndent.y, this);\r\n\r\n ctx.beginPath();\r\n\r\n const [parallelPointFrom, parallelPointTo] = getParallelPoints(renderFrom, renderTo, -this.design.heightMargin);\r\n this.drawFlatArrow( ctx,\r\n parallelPointFrom.x,\r\n parallelPointFrom.y,\r\n parallelPointTo.x,\r\n parallelPointTo.y\r\n );\r\n\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = this.design.lineTextColor;\r\n ctx.stroke();\r\n ctx.closePath();\r\n };\r\n\r\n renderLetter = (ctx) => {\r\n let fontHeight = this.design.fontHeight,\r\n font = fontHeight + \"px \" + this.design.fontFamily;\r\n\r\n ctx.beginPath();\r\n ctx.font = font;\r\n ctx.textAlign = \"center\";\r\n ctx.fillStyle = this.design.fontColor;\r\n\r\n const pointsToRender = this.miteredPoints.map((point) => {\r\n return this.line.calculateRenderPosition(point);\r\n });\r\n\r\n pointsToRender.forEach((point, index) => {\r\n let next = index + 1;\r\n if (pointsToRender[next]) {\r\n const [parallelPointFrom, parallelPointTo] = getParallelPoints(point, pointsToRender[next], -this.design.letterMargin);\r\n let letter = numToLetter(next);\r\n let midPoint = getMidPoint(parallelPointFrom, parallelPointTo);\r\n let mText = ctx.measureText(letter);\r\n ctx.wrapText(letter, midPoint.x, midPoint.y, mText, fontHeight);\r\n }\r\n });\r\n\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = this.design.lineTextColor;\r\n ctx.stroke();\r\n ctx.closePath();\r\n };\r\n\r\n renderThickness = (ctx) => {\r\n let lineDirection = this.line.getLineDirection(),\r\n fontHeight = this.design.fontHeight,\r\n font = fontHeight + \"px \" + this.design.fontFamily,\r\n xMarginLine = 0,\r\n yMarginLine = 0,\r\n xMarginImage = 0,\r\n yMarginImage = 0,\r\n xMarginValue = 0,\r\n yMarginValue = 0,\r\n pointField = {};\r\n void xMarginValue;\r\n void yMarginValue;\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n yMarginLine = (lineDirection.newDirection === \"west\" ? this.design.thicknessMargin : -this.design.thicknessMargin);\r\n\r\n xMarginImage = (lineDirection.newDirection === \"east\" ? -20 : -20);\r\n yMarginImage = (lineDirection.newDirection === \"east\" ? 0 : -30);\r\n\r\n xMarginValue = (lineDirection.newDirection === \"east\" ? 15 : 15);\r\n yMarginValue = (lineDirection.newDirection === \"east\" ? 16 : -14);\r\n\r\n break;\r\n }\r\n case \"vertical\": {\r\n xMarginLine = (lineDirection.newDirection === \"south\" ? this.design.thicknessMargin: -this.design.thicknessMargin);\r\n\r\n xMarginImage = (lineDirection.newDirection === \"north\" ? 0 : -50);\r\n yMarginImage = (lineDirection.newDirection === \"north\" ? -10 : -10);\r\n\r\n xMarginValue = (lineDirection.newDirection === \"north\" ? 35 : -16);\r\n yMarginValue = (lineDirection.newDirection === \"north\" ? 5 : 6);\r\n break;\r\n }\r\n // todo rotation\r\n case \"NORTHWEST\": { break;}\r\n case \"NORTHEAST\": { break;}\r\n case \"SOUTHWEST\": { break;}\r\n case \"SOUTHEAST\": { break;}\r\n default:\r\n break;\r\n }\r\n\r\n ctx.beginPath();\r\n ctx.font = font;\r\n ctx.textAlign = \"center\";\r\n ctx.fillStyle = this.design.fontColor;\r\n\r\n this.miteredPoints.forEach((point, index) => {\r\n let next = index + 1;\r\n if(this.miteredPoints[next]) {\r\n let midPoint = getMidPoint(\r\n this.line.calculateRenderPosition(point),\r\n this.line.calculateRenderPosition(this.miteredPoints[next])\r\n );\r\n let segment = this.getSegmentBetweenPoints(point, this.miteredPoints[next]);\r\n let thicknessValue = segment.thickness.value;\r\n let mText = ctx.measureText(thicknessValue.toString());\r\n\r\n void mText;\r\n //debugger\r\n pointField.x = midPoint.x + xMarginLine;\r\n pointField.y = midPoint.y + yMarginLine;\r\n\r\n // blue line\r\n ctx.moveTo(pointField.x, pointField.y);\r\n ctx.lineTo(pointField.x - xMarginLine, pointField.y - yMarginLine);\r\n\r\n // thickness image\r\n DrawImage.renderImage('thickness', ctx,\r\n pointField.x + xMarginImage,\r\n pointField.y + yMarginImage,\r\n 8,\r\n 8,\r\n true,\r\n true\r\n );\r\n\r\n // thickness value rendered from NumberText\r\n // ctx.wrapText(\r\n // thicknessValue.toString(),\r\n // pointField.x + xMarginValue,\r\n // pointField.y + yMarginValue,\r\n // mText,\r\n // fontHeight\r\n // );\r\n }\r\n });\r\n\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = this.design.lineTextColor;\r\n ctx.stroke();\r\n ctx.closePath();\r\n };\r\n\r\n renderSectionIndexOld = (ctx) => {\r\n let lineDirection = this.line.getLineDirection(),\r\n renderTo = this.line.calculateRenderPosition(this.line.to),\r\n renderFrom = this.line.calculateRenderPosition(this.line.from),\r\n fontHeight = this.design.fontHeight - 3,\r\n font = fontHeight + \"px \" + this.design.fontFamily,\r\n xMargin = 0,\r\n yMargin = 0,\r\n xOffset = 15,\r\n yOffset = 15,\r\n xWidth = 0,\r\n yWidth = 0,\r\n xMarginValue = 0,\r\n yMarginValue = 0,\r\n renderPos;\r\n\r\n const scale = Config.scale;\r\n let text = ('0' + this.sectionIndex).slice(-2);\r\n let mText = ctx.measureText(text);\r\n\r\n void xMargin;\r\n void yMargin;\r\n void scale;\r\n ctx.beginPath();\r\n ctx.font = font;\r\n ctx.textAlign = \"center\";\r\n ctx.fillStyle = this.design.fontColor;\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n //measurement arrow offset\r\n yWidth = -this.design.sectionArrowWidth / 2;\r\n yMargin = (lineDirection.newDirection === \"east\" ? -this.design.sectionArrowWidth : this.design.sectionArrowWidth);\r\n yOffset = 0;\r\n\r\n // text and value\r\n xMarginValue = (lineDirection.newDirection === \"east\" ? -this.design.sectionIndexMargin: -this.design.sectionIndexMargin);\r\n renderPos = (lineDirection.newDirection === \"east\" ? renderFrom: renderTo);\r\n\r\n //render double circle\r\n RenderFigures.renderDoubleCircle(ctx, {x: renderPos.x + xMarginValue, y: renderPos.y + yMarginValue }, 12, 2);\r\n\r\n //render value\r\n ctx.save();\r\n ctx.translate(renderPos.x + xMarginValue, renderPos.y + yMarginValue);\r\n ctx.rotate(-Math.PI / 2);\r\n ctx.fillStyle = \"#fff\";\r\n ctx.wrapText(text, 2, 4, mText, fontHeight); // (text, x, y - additional offset\r\n ctx.restore();\r\n break;\r\n }\r\n case \"vertical\": {\r\n //measurement arrow offset\r\n xWidth = -this.design.sectionArrowWidth / 2;\r\n xMargin = (lineDirection.newDirection === \"north\" ? -this.design.sectionIndexMargin: this.design.sectionIndexMargin);\r\n xOffset = 0;\r\n\r\n // text and value\r\n yMarginValue = (lineDirection.newDirection === \"north\" ? -this.design.sectionIndexMargin : -this.design.sectionIndexMargin);\r\n renderPos = (lineDirection.newDirection === \"north\" ? renderTo: renderFrom);\r\n\r\n //render double circle\r\n RenderFigures.renderDoubleCircle(ctx,\r\n {x: renderPos.x + xMarginValue, y: renderPos.y + yMarginValue },\r\n 12,\r\n 2\r\n );\r\n\r\n //render value\r\n ctx.fillStyle = \"#fff\";\r\n // (text, +1, +4 - additional number offset\r\n ctx.wrapText(text, renderPos.x + xMarginValue + 1, renderPos.y + yMarginValue + 4, mText, fontHeight);\r\n break;\r\n }\r\n // todo rotation\r\n case \"NORTHWEST\": { break;}\r\n case \"NORTHEAST\": { break;}\r\n case \"SOUTHWEST\": { break;}\r\n case \"SOUTHEAST\": { break;}\r\n default:\r\n break;\r\n }\r\n\r\n //render measurement arrow\r\n this.drawFlatArrow( ctx,\r\n renderPos.x + xMarginValue - xWidth + xOffset,\r\n renderPos.y + yMarginValue - yWidth + yOffset,\r\n renderPos.x + xMarginValue + xWidth + xOffset,\r\n renderPos.y + yMarginValue + yWidth + yOffset\r\n );\r\n\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = this.design.lineTextColor;\r\n ctx.stroke();\r\n ctx.closePath();\r\n };\r\n\r\n renderSectionIndex = (ctx) => {\r\n let lineDirection = this.line.getLineDirection(),\r\n midPoint = getMidPoint(this.line.to, this.line.from),\r\n fontHeight = this.design.fontHeight - 3,\r\n font = fontHeight + \"px \" + this.design.fontFamily,\r\n xMarginValue = 0,\r\n yMarginValue = 0,\r\n renderPos = this.line.calculateRenderPosition({\r\n pos: {x: midPoint.x, y: midPoint.y}\r\n });\r\n\r\n const scale = Config.scale;\r\n void scale;\r\n\r\n let text = ('0' + this.sectionIndex).slice(-2);\r\n let mText = ctx.measureText(text);\r\n\r\n ctx.beginPath();\r\n ctx.font = font;\r\n ctx.textAlign = \"center\";\r\n ctx.fillStyle = this.design.fontColor;\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n // text and value\r\n yMarginValue = (lineDirection.newDirection === \"east\" ? -this.design.sectionIndexMargin: this.design.sectionIndexMargin);\r\n\r\n //render double circle\r\n RenderFigures.renderDoubleCircle(ctx, {x: renderPos.x + xMarginValue, y: renderPos.y + yMarginValue }, 12, 2);\r\n\r\n //render value\r\n ctx.fillStyle = \"#fff\";\r\n // (text, +1, +4 - additional number offset\r\n ctx.wrapText(text, renderPos.x + xMarginValue + 1, renderPos.y + yMarginValue + 4, mText, fontHeight);\r\n break;\r\n }\r\n case \"vertical\": {\r\n // text and value\r\n xMarginValue = (lineDirection.newDirection === \"north\" ? -this.design.sectionIndexMargin : this.design.sectionIndexMargin + fontHeight);\r\n\r\n //render double circle\r\n RenderFigures.renderDoubleCircle(ctx, {x: renderPos.x + xMarginValue, y: renderPos.y + yMarginValue }, 12, 2);\r\n\r\n //render value\r\n ctx.save();\r\n ctx.translate(renderPos.x + xMarginValue, renderPos.y + yMarginValue);\r\n ctx.rotate(-Math.PI / 2);\r\n ctx.fillStyle = \"#fff\";\r\n ctx.wrapText(text, 2, 4, mText, fontHeight); // (text, x, y - additional offset\r\n ctx.restore();\r\n break;\r\n }\r\n // todo rotation\r\n case \"NORTHWEST\": { break;}\r\n case \"NORTHEAST\": { break;}\r\n case \"SOUTHWEST\": { break;}\r\n case \"SOUTHEAST\": { break;}\r\n default:\r\n break;\r\n }\r\n\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = this.design.lineTextColor;\r\n ctx.stroke();\r\n ctx.closePath();\r\n };\r\n\r\n drawArrow = (context, fromX, fromY, toX, toY) => {\r\n let headLen = 10, // length of head in pixels\r\n dx = toX - fromX,\r\n dy = toY - fromY,\r\n angle = Math.atan2(dy, dx);\r\n\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(toX, toY);\r\n context.lineTo(toX - headLen * Math.cos(angle - Math.PI / 6), toY - headLen * Math.sin(angle - Math.PI / 6));\r\n context.moveTo(toX, toY);\r\n context.lineTo(toX - headLen * Math.cos(angle + Math.PI / 6), toY - headLen * Math.sin(angle + Math.PI / 6));\r\n\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(fromX + headLen * Math.cos(angle - Math.PI / 6), fromY + headLen * Math.sin(angle - Math.PI / 6));\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(fromX + headLen * Math.cos(angle + Math.PI / 6), fromY + headLen * Math.sin(angle + Math.PI / 6));\r\n };\r\n\r\n drawFlatArrow = (context, fromX, fromY, toX, toY) => {\r\n let headLen = 5, // length of head in pixels\r\n dx = toX - fromX,\r\n dy = toY - fromY,\r\n angle = Math.atan2(dy, dx);\r\n\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(toX, toY);\r\n context.lineTo(toX - headLen * Math.cos(angle - Math.PI / 2), toY - headLen * Math.sin(angle - Math.PI / 2));\r\n context.moveTo(toX, toY);\r\n context.lineTo(toX - headLen * Math.cos(angle + Math.PI / 2), toY - headLen * Math.sin(angle + Math.PI / 2));\r\n\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(fromX + headLen * Math.cos(angle - Math.PI / 2), fromY + headLen * Math.sin(angle - Math.PI / 2));\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(fromX + headLen * Math.cos(angle + Math.PI / 2), fromY + headLen * Math.sin(angle + Math.PI / 2));\r\n };\r\n\r\n onMouseMove = (mousePos, e) => {\r\n void e;\r\n for (const point of this.miteredPoints) {\r\n if(this.isMouseOverPoint(mousePos, point)) {\r\n if (this.state.mouseDown) {\r\n this.movePointWithMouse(mousePos, point);\r\n if (this.type === MITERED_OVERLAY_TYPE.mitered) {\r\n workspace.miteredController.updateSection(this);\r\n } else if (this.type === MITERED_OVERLAY_TYPE.underlayment) {\r\n workspace.underlaymentController.updateSection(this);\r\n }\r\n }\r\n\r\n return this.state.mouseDown;\r\n }\r\n }\r\n };\r\n\r\n isMouseOverPoint = (mousePos, point) => {\r\n this.state.isHoveringPoint = !!point.isOverPointField();\r\n // console.log(\"point\", point.id);\r\n // console.log(\"this.state.hoveredPoint\", this.state.hoveredPoint.id);\r\n // console.log(\"mousePos\", this.state.isHoveringPoint);\r\n return this.state.isHoveringPoint || this.state.mouseDown && this.state.hoveredPoint && point.id === this.state.hoveredPoint.id;\r\n };\r\n\r\n onMouseUp = (mousePos, e) => {\r\n void mousePos;\r\n void e;\r\n if(this.state.mouseDown) {\r\n this.state.mouseDown = false;\r\n this.state.mouseDownPosition = null;\r\n }\r\n };\r\n\r\n onMouseDown = (mousePos, e) => {\r\n void e;\r\n const reduxState = store.getState();\r\n const menuOpened = reduxState.sqftMenuState.menuOpened;\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n\r\n if (activeButton === SIDEBAR_NAVIGATION_BUTTONS.edge\r\n || activeButton === SIDEBAR_BUTTONS_MENU.delete\r\n ) {\r\n //do nothing if we want to remove or add edge\r\n } else if (this.state.isHoveringPoint) {\r\n this.state.mouseDown = true;\r\n // this.state.movePointDistance = getPointDistance(this.from, this.to);\r\n //todo move point\r\n this.state.mouseDownPosition = mousePos;\r\n for (const point in this.miteredPoints) {\r\n if (this.miteredPoints[point].isOverPointField(mousePos)) {\r\n this.state.hoveredPoint = this.miteredPoints[point]\r\n }\r\n }\r\n\r\n return true;\r\n } else if (this.line.isHovering() && menuOpened === SIDEBAR_NAVIGATION_BUTTONS.mitered) {\r\n //console.log('line is hovering');\r\n let [closest, secondPoint, isPrev] = this.getPointBetweenCords(mousePos);\r\n let newPoint = this.addPointBetweenPoints(closest, secondPoint, isPrev);\r\n if (isPrev) {\r\n this.addMeasurementBetweenPoints(newPoint, secondPoint);\r\n this.addMeasurementBetweenPoints(closest, newPoint);\r\n } else {\r\n this.addMeasurementBetweenPoints(closest, newPoint);\r\n this.addMeasurementBetweenPoints(newPoint, secondPoint);\r\n }\r\n this.removeMeasurementBetweenPoints(closest, secondPoint, isPrev);\r\n\r\n workspace.miteredController.updateSection(this);\r\n return true;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n onMouseLeave = () => {\r\n this.state.isHoveringPoint = false;\r\n this.state.mouseDown = false;\r\n this.state.hoveredPoint = null;\r\n }\r\n}\r\n","import workspace from \"../../core/workspace\";\r\nimport store from \"./../../../../../../store\";\r\nimport SlabWorkspace from \"./slabWorkspace\";\r\nimport {getPointField} from \"../../../../helpers/sqftHelper\";\r\nimport sqftShape from \"../shapes/sqftShape\";\r\nimport {isDisabledInPopupShouldBeHidden, SHAPE_PART_ID, SQFT_MODE} from \"../../../../constants\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport workspaceControllers from \"../../store/workspaceControllers\";\r\nimport RenderFigures from \"../../helpers/renderFigures\";\r\nimport RenderParts from \"../../helpers/renderParts\";\r\n\r\nexport const renderSlabRightPart = (ctx, isFullRender = false) => {\r\n let slabState = store.getState().sqftSlabState;\r\n let croppedImages = slabState.croppedSlabImages;\r\n let scale = workspace.getScale();\r\n let slabWorkspacePos = SlabWorkspace.getCenter();\r\n let shapes = workspace.getShapes();\r\n\r\n //this will render shapes without rotation\r\n shapes.forEach((shape) => {\r\n if (!(shape instanceof sqftShape)\r\n || shape.rotatedDegreesSlab !== 0\r\n || (isDisabledInPopupShouldBeHidden() && shape.isDisabledInPopup)\r\n || shape.partId === SHAPE_PART_ID.slabPlaceHolder\r\n ) {\r\n return\r\n }\r\n let pos = shape.getRegularPosition();\r\n //let posSlab = shape.shapeSlab.__absolutePos ? shape.getSlabAbsolutePosition() : shape.getSlabPosition();\r\n let posSlab = shape.shapeSlab.getPosition();\r\n let shapeRegularPointField = getPointField(pos.x, pos.y, workspace);\r\n let shapeSlabPointField = getPointField(posSlab.x, posSlab.y, SlabWorkspace);\r\n\r\n let staticOffset = {\r\n x: shapeRegularPointField.x - slabWorkspacePos.x + ctx.canvas.width / 2,\r\n y: shapeRegularPointField.y - slabWorkspacePos.y\r\n };\r\n ctx.save();\r\n !isFullRender ? clearSlabLeftPart(ctx) : null;\r\n\r\n //render borders only for core shapes\r\n ctx.beginPath();\r\n if (shape.partId === SHAPE_PART_ID.seamPiece) {\r\n shape.shapeSlab.renderLinesWithoutStroke(ctx, staticOffset, SQFT_MODE.regular);\r\n ctx.lineWidth = 0;\r\n ctx.strokeStyle = 'rgba(0,0,0,0.0)';\r\n } else {\r\n shape.shapeSlab.renderLinesWithoutStroke(ctx, staticOffset, SQFT_MODE.regular);\r\n //if (isFullRender) {\r\n // console.log(\"scale\", scale);\r\n // console.log(\"ctx.canvas.width / 2\", ctx.canvas.width / 2);\r\n // console.log(\"pos\", pos);\r\n // console.log(\"slabWorkspacePos2\", slabWorkspacePos);\r\n // console.log(\"offset = workspace.getOffset();\", workspace.getOffset());\r\n // console.log(\"shapeRegularPointField\", shapeRegularPointField);\r\n // console.log(\"staticOffset\", staticOffset);\r\n //}\r\n }\r\n ctx.closePath();\r\n ctx.stroke();\r\n\r\n //do not clip shapes with seam (clip only children)\r\n if (shape.isWithShapePieces()) {\r\n ctx.restore();\r\n return\r\n }\r\n ctx.clip();\r\n for (let slabIndex in croppedImages) {\r\n let movableImage = croppedImages[slabIndex];\r\n const movableImagePosition = movableImage.getPosition();\r\n let movableImagePointField = getPointField(movableImagePosition.x, movableImagePosition.y, SlabWorkspace);\r\n let movableImageSize = movableImage.getSize();\r\n\r\n // ctx.translate(\r\n // staticOffset.x + (movableImagePointField.x - shapeSlabPointField.x),\r\n // staticOffset.y + (movableImagePointField.y - shapeSlabPointField.y)\r\n // );\r\n // console.log(\"movableImagePosition\", movableImagePosition);\r\n // console.log(\"movableImage pos\", movableImage.pos);\r\n // console.log(\"posSlab\", posSlab);\r\n // console.log(\"pos\", pos);\r\n // console.log(\"shapeRegularPointField\", shapeRegularPointField);\r\n // console.log(\"movableImagePointField\", movableImagePointField);\r\n // console.log(\"shapeSlabPointField\", shapeSlabPointField);\r\n\r\n // debugger // eslint-disable-line no-debugger\r\n // ctx.rotate(90 * Math.PI / 180);\r\n\r\n ctx.drawImage(\r\n movableImage.getImage(),\r\n //shape.pos.x * scale, shape.pos.y * scale,\r\n ctx.canvas.width / 2 + (movableImagePointField.x - shapeSlabPointField.x + shapeRegularPointField.x) - slabWorkspacePos.x,\r\n (movableImagePointField.y - shapeSlabPointField.y + shapeRegularPointField.y) - slabWorkspacePos.y,\r\n movableImageSize.width * scale,\r\n movableImageSize.height * scale\r\n );\r\n }\r\n ctx.restore();\r\n });\r\n\r\n //this will render shapes with rotation ( it is translate point field to shape center and rotate it with images)\r\n shapes.forEach((shape) => {\r\n if (!(shape instanceof sqftShape)\r\n || shape.rotatedDegreesSlab === 0\r\n || (isDisabledInPopupShouldBeHidden() && shape.isDisabledInPopup)\r\n || shape.partId === SHAPE_PART_ID.slabPlaceHolder\r\n ) {\r\n return\r\n }\r\n let pos = shape.getRegularPosition();\r\n let posSlab = shape.shapeSlab.getPosition();\r\n let shapeRegularPointField = getPointField(pos.x, pos.y, workspace);\r\n let shapeSlabPointField = getPointField(posSlab.x, posSlab.y, SlabWorkspace);\r\n\r\n let staticOffset = {\r\n x: shapeRegularPointField.x - slabWorkspacePos.x + ctx.canvas.width / 2,\r\n y: shapeRegularPointField.y - slabWorkspacePos.y\r\n };\r\n\r\n let shapeCenter = shape.getCenter();\r\n //todo check if this can be used instead of shapeCenter()\r\n //let shapeCenterSlab = ShapeHelper.getCenterPoint(points, true);\r\n //void shapeCenterSlab;\r\n\r\n let shapeCenterOffset = {x: 0, y: 0};\r\n shapeCenterOffset.x = shapeCenter.x * scale\r\n shapeCenterOffset.y = shapeCenter.y * scale\r\n\r\n //console.log(\"pos\", pos);\r\n //console.log(\"shapeRegularPointField\", shapeRegularPointField);\r\n //console.log(\"shapeSlabPointField\", shapeSlabPointField);\r\n //console.log(\"shapeCenter\", shapeCenter);\r\n //console.log(\"staticOffset\", staticOffset);\r\n //console.log(\"shapeCenterOffset\", shapeCenterOffset);\r\n ctx.save();\r\n !isFullRender ? clearSlabLeftPart(ctx) : null;\r\n ctx.translate(staticOffset.x + shapeCenterOffset.x, staticOffset.y + shapeCenterOffset.y);\r\n ctx.rotate(shape.rotatedDegreesSlab * Math.PI / 180);\r\n //render borders only for core shapes\r\n ctx.beginPath();\r\n if (shape.partId === SHAPE_PART_ID.seamPiece) {\r\n shape.shapeSlab.renderLinesWithoutStroke(ctx, {x: -shapeCenterOffset.x, y: -shapeCenterOffset.y}, SQFT_MODE.slab);\r\n ctx.lineWidth = 0;\r\n ctx.strokeStyle = 'rgba(0,0,0,0.0)';\r\n //ctx.lineWidth = 3; //test mode\r\n //ctx.strokeStyle = 'rgba(0,0,0)'; //test mode\r\n } else {\r\n shape.shapeSlab.renderLinesWithoutStroke(ctx, {x: -shapeCenterOffset.x, y: -shapeCenterOffset.y}, SQFT_MODE.slab);\r\n }\r\n ctx.closePath();\r\n ctx.stroke();\r\n\r\n //do not clip shapes with seam (clip only children)\r\n if (shape.isWithShapePieces()) {\r\n ctx.restore();\r\n return\r\n }\r\n ctx.clip();\r\n for (let slabIndex in croppedImages) {\r\n let movableImage = croppedImages[slabIndex];\r\n const movableImagePosition = movableImage.getPosition();\r\n let movableImagePointField = getPointField(movableImagePosition.x, movableImagePosition.y, SlabWorkspace);\r\n let movableImageSize = movableImage.getSize();\r\n\r\n ctx.drawImage(\r\n movableImage.getImage(),\r\n -shapeCenterOffset.x + (movableImagePointField.x - shapeSlabPointField.x),\r\n -shapeCenterOffset.y + (movableImagePointField.y - shapeSlabPointField.y),\r\n movableImageSize.width * scale,\r\n movableImageSize.height * scale\r\n // ctx.canvas.width / 2 + (movableImagePointField.x - shapeSlabPointField.x + shapeRegularPointField.x) - slabWorkspacePos.x,\r\n // (movableImagePointField.y - shapeSlabPointField.y + shapeRegularPointField.y) - slabWorkspacePos.y,\r\n // movableImage.pos.x * scale,\r\n // movableImage.pos.y * scale,\r\n );\r\n }\r\n ctx.restore();\r\n renderDevMode(ctx, shape);\r\n });\r\n};\r\n\r\nconst clearSlabLeftPart = (ctx) => {\r\n ctx.beginPath();\r\n ctx.rect(ctx.canvas.width / 2, 0, ctx.canvas.width, ctx.canvas.height);\r\n ctx.closePath();\r\n ctx.stroke();\r\n ctx.clip();\r\n}\r\n\r\nexport const renderSlabWorkspace = (ctx) => {\r\n drawSlabRightPart(ctx);\r\n drawSlabMidDivider(ctx);\r\n};\r\n\r\nconst drawSlabMidDivider = (ctx) => {\r\n ctx.beginPath();\r\n ctx.strokeStyle = '#d5d5d5';\r\n ctx.lineWidth = 1;\r\n ctx.moveTo(SlabWorkspace.getRightPartWidth(ctx), 0);\r\n ctx.lineTo(SlabWorkspace.getRightPartWidth(ctx), ctx.canvas.height);\r\n ctx.stroke();\r\n};\r\n\r\nconst drawSlabRightPart = (ctx) => {\r\n ctx.fillStyle = '#ffffff';\r\n ctx.rect(SlabWorkspace.getRightPartWidth(ctx), 0, ctx.canvas.width, ctx.canvas.height);\r\n ctx.fill();\r\n};\r\n\r\nconst renderDevMode = (ctx, shape) => {\r\n if (config.isDevMode()) {\r\n // render pos\r\n ctx.save();\r\n ctx.beginPath();\r\n let pf = getPointField(shape.pos.x, shape.pos.y);\r\n ctx.arc(pf.x, pf.y, 5, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n ctx.closePath();\r\n\r\n //render shape center\r\n ctx.beginPath();\r\n let shapeCenter = shape.getCenter();\r\n const pos = getPointField(shapeCenter.x, shapeCenter.y, this);\r\n ctx.arc(pos.x, pos.y, 12, 0, 2 * Math.PI);\r\n\r\n ctx.stroke();\r\n ctx.closePath();\r\n ctx.restore();\r\n }\r\n}\r\n\r\nexport const renderMeasurementsAroundSnappedShapes = (ctx) => {\r\n for (const snappedShapeGroup of workspaceControllers.snappedShapeGroups.getResources()) {\r\n const shapes = workspaceControllers.snappedShapeGroups.getSnappedShapes(snappedShapeGroup);\r\n if (shapes.length > 1) { //we will render only shape group if it has two shapes\r\n const measurementPoints = workspaceControllers.snappedShapeGroups.getMeasurementPoints(snappedShapeGroup);\r\n renderMeasurementArrows(ctx, measurementPoints);\r\n renderMeasurementLength(ctx, measurementPoints);\r\n //console.log(\"measurementPoints\", measurementPoints);\r\n\r\n //this is for the test purposes\r\n // const measurementPoints2 = sqftShapeManager.getShapesContourPointsPointField(shapes);\r\n // console.log(\"measurementPoints2\", measurementPoints2);\r\n // renderMeasurementArrows(ctx, measurementPoints2);\r\n // renderMeasurementLength(ctx, measurementPoints2);\r\n }\r\n }\r\n}\r\n\r\nexport const renderMeasurementArrows = (ctx, measurementPoints) => {\r\n RenderFigures.drawArrowsAroundPoints(ctx, measurementPoints);\r\n}\r\n\r\nexport const renderMeasurementLength = (ctx, measurementPoints) => {\r\n RenderParts.drawMeasurementAroundPoints(ctx, measurementPoints);\r\n}\r\n","class SlabAdditionalShape {\r\n line;\r\n backsplashShapeId;\r\n\r\n constructor(line, backsplashShapeId) {\r\n this.line = line;\r\n this.backsplashShapeId = backsplashShapeId;\r\n }\r\n}\r\n\r\nexport default SlabAdditionalShape;\r\n","import store from \"../../../../../store\";\r\nimport {changeResource, deleteAllResources} from \"../../../../../actions/sqftResourceFunctions\";\r\nimport {deleteAllMiteredSections} from \"../../../../../actions/sqftMiteredFunctions\";\r\nimport workspace from \"../core/workspace\";\r\nimport {RESOURCE_TYPE} from \"../../../constants\";\r\n\r\nconst sqftResourcesManager = {\r\n deleteAllResources: () => {\r\n store.dispatch(deleteAllResources());\r\n },\r\n deleteAllMiteredSections: () => {\r\n const reduxState = store.getState();\r\n const miteredSections = reduxState.sqftMiteredState.miteredSections;\r\n if (miteredSections.length) {\r\n store.dispatch(deleteAllMiteredSections());\r\n }\r\n },\r\n getAttachedToLineResource: (line) => {\r\n return workspace.getAttachedTo(line)\r\n },\r\n updateAttachedToLineResource: (attachedToResource) => {\r\n store.dispatch(changeResource(RESOURCE_TYPE.attachedToLine, attachedToResource));\r\n },\r\n getLineByAttachedItemId: (id) => {\r\n const state = store.getState();\r\n const attachedToLineResources = state.sqftResourceState.attachedToLine;\r\n const attachedItem = attachedToLineResources.find(attachedToLine => attachedToLine.id === id);\r\n if (attachedItem) {\r\n return workspace.getLineById(attachedItem.attachedToId);\r\n }\r\n },\r\n deleteAttachedItemById: (id) => {\r\n const line = sqftResourcesManager.getLineByAttachedItemId(id);\r\n\r\n if (line) {\r\n line.deleteAttachedItem();\r\n }\r\n }\r\n}\r\n\r\nexport default sqftResourcesManager\r\n","import point from \"../point\";\r\nimport line from \"../line\";\r\nimport config from \"../../../store/sqftConfig\";\r\n\r\nconst RECTANGLE_WIDTH = 150;\r\nconst RECTANGLE_HEIGHT = 26;\r\nconst RECTANGLE_HEIGHT_METRIC = 23.62;\r\n\r\nexport default function(rectangleWidth = RECTANGLE_WIDTH, rectangleHeight = 0) {\r\n let points;\r\n if (rectangleHeight === 0) {\r\n rectangleHeight = config.measureUnit === \"Imperial\" ? RECTANGLE_HEIGHT : RECTANGLE_HEIGHT_METRIC;\r\n }\r\n\r\n points = [\r\n new point(0, 0, \"lefttop\"),\r\n new point(rectangleWidth, 0, \"righttop\"),\r\n new point(rectangleWidth, rectangleHeight, \"rightbottom\"),\r\n new point(0, rectangleHeight, \"leftbottom\")\r\n ];\r\n\r\n return [\r\n new line(points[0], points[1]),\r\n new line(points[1], points[2]),\r\n new line(points[2], points[3]),\r\n new line(points[3], points[0])\r\n ];\r\n}\r\n","import {sqftPost} from \"./sqftApi\";\r\nimport sqftConfig from \"../components/canvas/store/sqftConfig\";\r\n\r\nconst HARDCODED_DOMAIN = sqftConfig.threeD.useStagingDomain ? \"https://quotekandb.com\" : null;\r\n\r\nexport default class SqftJsonApi {\r\n static postCabinetSet(data, options = {}) {\r\n return sqftPost(\"/api/AR/Composer\", data, {...options, domain: HARDCODED_DOMAIN});\r\n }\r\n\r\n static getCountertops(data, options = {}) {\r\n return sqftPost(\"/api/AR/Composer/countertop\", data,{...options, domain: HARDCODED_DOMAIN});\r\n }\r\n\r\n static getResizedCabinet(data, options = {}) {\r\n return sqftPost(\"/api/AR/Composer/cabinet_resize\", data,{...options, domain: HARDCODED_DOMAIN});\r\n }\r\n\r\n static getResizedCornerCabinet(data, options = {}) {\r\n return sqftPost(\"/api/AR/Composer/corner_cabinet_resize\", data,{...options, domain: HARDCODED_DOMAIN});\r\n }\r\n\r\n static getWall(data, options = {}) {\r\n return sqftPost(\"/api/AR/Composer/wall\", data,{...options, domain: HARDCODED_DOMAIN});\r\n }\r\n\r\n static saveFiles(data, options = {}) {\r\n return sqftPost(\"/api/AR/Store\", data,{...options, domain: HARDCODED_DOMAIN});\r\n }\r\n\r\n static getCrownMolding(data, options = {}) {\r\n return sqftPost(\"/api/AR/Composer/crown_molding\", data,{...options, domain: HARDCODED_DOMAIN});\r\n }\r\n}\r\n","import workspace from \"../../workspace\";\r\n\r\nclass ShapeAbsolute {\r\n __shape;\r\n __intersectionPoints = [];\r\n __minLengthToIntersectionPoints;\r\n __absolutePos = null;\r\n __snappedWithShape = null;\r\n __snappedShapeGroup = null;\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n }\r\n setParentId(parentId) {\r\n this.__shape.shapeParent = parentId\r\n }\r\n setRotationDegreesSlab(rotationDegrees) {\r\n this.__shape.rotatedDegreesSlab = rotationDegrees\r\n }\r\n setAbsolutePos = (pos) => {\r\n this.__absolutePos = pos;\r\n };\r\n getAbsolutePosition = () => {\r\n return this.__absolutePos;\r\n };\r\n getIntersectionPoints = () => { return this.__intersectionPoints; };\r\n setIntersectionsPoints = (points) => { this.__intersectionPoints = points; };\r\n\r\n setSnappedWithShape = (shape) => { this.__snappedWithShape = shape}\r\n getSnappedWithShape = () => { return this.__snappedWithShape }\r\n\r\n setSnappedShapeGroup = (shapeGroup) => { this.__snappedShapeGroup = shapeGroup}\r\n getSnappedShapeGroup = () => { return this.__snappedShapeGroup }\r\n\r\n setMinLengthToIntersectionPoints = (length) => {\r\n this.__minLengthToIntersectionPoints = length;\r\n };\r\n\r\n import = (data) => {\r\n if (data.snappedWithShape && data.snappedWithShape.id) {\r\n const snappedWithShape = workspace.getShapeById(data.snappedWithShape.id);\r\n this.setSnappedWithShape(snappedWithShape);\r\n }\r\n\r\n this.setAbsolutePos(data ? data.absolutePosition : null);\r\n this.setIntersectionsPoints(data ? data.intersectionPoints : null);\r\n this.setSnappedShapeGroup(data ? data.snappedShapeGroup : null);\r\n }\r\n export = () => {\r\n const snappedWithShape = this.getSnappedWithShape();\r\n\r\n return {\r\n absolutePosition: this.getAbsolutePosition(),\r\n intersectionPoints: this.getIntersectionPoints(),\r\n snappedWithShape: snappedWithShape ? snappedWithShape.id : null,\r\n snappedShapeGroup: this.getSnappedShapeGroup(),\r\n }\r\n }\r\n}\r\n\r\nexport default ShapeAbsolute\r\n","import {getPointBetweenPoints, getPointDistance, orientation} from \"../helpers/sqftHelper\";\r\n\r\nconst setLinePoints = (movingLine, newFrom, newTo) => {\r\n movingLine.from.x = newFrom.x;\r\n movingLine.from.y = newFrom.y;\r\n movingLine.to.x = newTo.x;\r\n movingLine.to.y = newTo.y;\r\n};\r\n\r\n/**\r\n * Given a three lines detects moving points and sets correct new points X and Y values.\r\n * @param {Object} movingLine current moving line\r\n * @param {Object} nextLine\r\n * @param {Object} prevLine\r\n * @param {number} baseLineDistance -state value, that is overwritten on each mouseDown event\r\n * @param {number} yDiff Y difference of mouse move\r\n * @param {number} lineOrientation movingLine orientation\r\n */\r\nexport default function (\r\n movingLine,\r\n nextLine,\r\n prevLine,\r\n baseLineDistance,\r\n yDiff,\r\n lineOrientation\r\n) {\r\n let newFrom = {}, newTo = {}, diff;\r\n\r\n // 1) move line\r\n switch(lineOrientation) {\r\n case orientation.SOUTHEAST:\r\n case orientation.NORTHEAST:\r\n diff = -yDiff;\r\n break;\r\n case orientation.SOUTHWEST:\r\n case orientation.NORTHWEST:\r\n diff = yDiff;\r\n break;\r\n }\r\n newFrom = getPointBetweenPoints(movingLine.from, prevLine.from, diff);\r\n newTo = getPointBetweenPoints(movingLine.to, nextLine.to, diff);\r\n setLinePoints(movingLine, newFrom, newTo);\r\n const pointDistance2 = getPointDistance(newFrom, newTo);\r\n\r\n // 2) fix points corrections\r\n if (baseLineDistance !== pointDistance2) {\r\n switch(lineOrientation) {\r\n case orientation.SOUTHWEST:\r\n if (pointDistance2 < baseLineDistance) {\r\n const delta = (baseLineDistance - pointDistance2) / 4; //for ex. 26 - 25.4 = 0.6\r\n newFrom = {x: movingLine.from.x + delta, y: movingLine.from.y - delta};\r\n newTo = {x: movingLine.to.x - delta, y: movingLine.to.y + delta};\r\n } else {\r\n const delta = (pointDistance2 - baseLineDistance) / 4; //for ex. 26 - 25.4 = 0.6\r\n newFrom = {x: movingLine.from.x - delta, y: movingLine.from.y + delta};\r\n newTo = {x: movingLine.to.x + delta, y: movingLine.to.y - delta};\r\n }\r\n break;\r\n case orientation.SOUTHEAST:\r\n if (pointDistance2 < baseLineDistance) {\r\n const delta = (baseLineDistance - pointDistance2) / 4; //for ex. 26 - 25.4 = 0.6\r\n newFrom = {x: movingLine.from.x - delta, y: movingLine.from.y - delta};\r\n newTo = {x: movingLine.to.x + delta, y: movingLine.to.y + delta};\r\n } else {\r\n const delta = (pointDistance2 - baseLineDistance) / 4; //for ex. 26 - 25.4 = 0.6\r\n newFrom = {x: movingLine.from.x + delta, y: movingLine.from.y + delta};\r\n newTo = {x: movingLine.to.x - delta, y: movingLine.to.y - delta};\r\n }\r\n break;\r\n case orientation.NORTHEAST:\r\n if (pointDistance2 < baseLineDistance) {\r\n const delta = (baseLineDistance - pointDistance2) / 4; //for ex. 26 - 25.4 = 0.6\r\n newFrom = {x: movingLine.from.x - delta, y: movingLine.from.y + delta};\r\n newTo = {x: movingLine.to.x + delta, y: movingLine.to.y - delta};\r\n } else {\r\n const delta = (pointDistance2 - baseLineDistance) / 4; //for ex. 26 - 25.4 = 0.6\r\n newFrom = {x: movingLine.from.x + delta, y: movingLine.from.y - delta};\r\n newTo = {x: movingLine.to.x - delta, y: movingLine.to.y + delta};\r\n }\r\n break;\r\n case orientation.NORTHWEST:\r\n if (pointDistance2 < baseLineDistance) {\r\n const delta = (baseLineDistance - pointDistance2) / 4; //for ex. 26 - 25.4 = 0.6\r\n newFrom = {x: movingLine.from.x + delta, y: movingLine.from.y + delta};\r\n newTo = {x: movingLine.to.x - delta, y: movingLine.to.y - delta};\r\n } else {\r\n const delta = (pointDistance2 - baseLineDistance) / 4; //for ex. 26 - 25.4 = 0.6\r\n newFrom = {x: movingLine.from.x - delta, y: movingLine.from.y - delta};\r\n newTo = {x: movingLine.to.x + delta, y: movingLine.to.y + delta};\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n setLinePoints(movingLine, newFrom, newTo);\r\n }\r\n}\r\n","import {getPointOnTheLine} from \"../../../../../helpers/sqftHelper\";\r\n\r\nexport const mathRound = (value) => Math.round(value * 100) / 100;\r\n\r\nfunction horizontalEastLineExpand(prevLine, nextLine, diff) {\r\n prevLine.from.x = mathRound(prevLine.from.x - diff/2);\r\n prevLine.to.x = mathRound(prevLine.to.x - diff/2);\r\n nextLine.from.x = mathRound(nextLine.from.x + diff/2);\r\n nextLine.to.x = mathRound(nextLine.to.x + diff/2);\r\n if(prevLine.isWithBumpout()) {\r\n prevLine.bumpoutOverlay.moveBumpout(diff / 2, 0);\r\n }\r\n if(nextLine.isWithBumpout()) {\r\n nextLine.bumpoutOverlay.moveBumpout(-diff / 2, 0);\r\n }\r\n if(prevLine.isWithMitered()) {\r\n prevLine.miteredOverlay.moveMitered(diff / 2, 0);\r\n }\r\n if(nextLine.isWithMitered()) {\r\n nextLine.miteredOverlay.moveMitered(-diff / 2, 0);\r\n }\r\n}\r\nfunction horizontalWestLineExpand(prevLine, nextLine, diff) {\r\n prevLine.from.x = mathRound(prevLine.from.x + diff/2);\r\n prevLine.to.x = mathRound(prevLine.to.x + diff/2);\r\n nextLine.from.x = mathRound(nextLine.from.x - diff/2);\r\n nextLine.to.x = mathRound(nextLine.to.x - diff/2);\r\n if(prevLine.isWithBumpout()) {\r\n prevLine.bumpoutOverlay.moveBumpout(-diff / 2, 0);\r\n }\r\n if(nextLine.isWithBumpout()) {\r\n nextLine.bumpoutOverlay.moveBumpout(diff / 2, 0);\r\n }\r\n if(prevLine.isWithBumpout()) {\r\n prevLine.miteredOverlay.moveMitered(-diff / 2, 0);\r\n }\r\n if(nextLine.isWithBumpout()) {\r\n nextLine.miteredOverlay.moveMitered(diff / 2, 0);\r\n }\r\n}\r\nfunction verticalSouthLineExpand(prevLine, nextLine, diff) {\r\n prevLine.from.y = mathRound(prevLine.from.y - diff/2);\r\n prevLine.to.y = mathRound(prevLine.to.y - diff/2);\r\n nextLine.from.y = mathRound(nextLine.from.y + diff/2);\r\n nextLine.to.y = mathRound(nextLine.to.y + diff/2);\r\n if(prevLine.isWithBumpout()) {\r\n prevLine.bumpoutOverlay.moveBumpout(0, diff / 2);\r\n }\r\n if(nextLine.isWithBumpout()) {\r\n nextLine.bumpoutOverlay.moveBumpout(0,-diff / 2);\r\n }\r\n}\r\nfunction verticalNorthLineExpand(prevLine, nextLine, diff) {\r\n prevLine.from.y = mathRound(prevLine.from.y + diff/2);\r\n prevLine.to.y = mathRound(prevLine.to.y + diff/2);\r\n nextLine.from.y = mathRound(nextLine.from.y - diff/2);\r\n nextLine.to.y = mathRound(nextLine.to.y - diff/2);\r\n if(prevLine.isWithBumpout()) {\r\n prevLine.bumpoutOverlay.moveBumpout(0,-diff / 2);\r\n }\r\n if(nextLine.isWithBumpout()) {\r\n nextLine.bumpoutOverlay.moveBumpout(0,diff / 2);\r\n }\r\n}\r\nexport default function(line, diff, isWallsLockMode) {\r\n // console.log(\"line\", line, diff);\r\n const lineDirection = line.getLineDirection();\r\n const shape = line.getParent();\r\n const prevLine = shape.getPrevLine(line);\r\n const nextLine = shape.getNextLine(line);\r\n switch (shape.shapeType) {\r\n case \"square\":\r\n if (lineDirection.orientation === \"horizontal\") {\r\n if (lineDirection.newDirection === \"east\") {\r\n horizontalEastLineExpand(prevLine, nextLine, diff);\r\n } else if (lineDirection.newDirection === \"west\") {\r\n horizontalWestLineExpand(prevLine, nextLine, diff);\r\n }\r\n } else if (lineDirection.orientation === \"vertical\") {\r\n if (lineDirection.newDirection === \"south\") {\r\n verticalSouthLineExpand(prevLine, nextLine, diff);\r\n } else if (lineDirection.newDirection === \"north\") {\r\n verticalNorthLineExpand(prevLine, nextLine, diff);\r\n }\r\n }\r\n break;\r\n case \"wideangle\": {\r\n const rotatedDegrees = line.getParent().rotatedDegrees;\r\n if (lineDirection.orientation === \"horizontal\") {\r\n if (lineDirection.newDirection === \"east\") {\r\n if (rotatedDegrees === 180 || rotatedDegrees === 270) {\r\n prevLine.from.x = mathRound(prevLine.from.x - diff);\r\n prevLine.to.x = mathRound(prevLine.to.x - diff);\r\n } else {\r\n nextLine.from.x = mathRound(nextLine.from.x + diff);\r\n nextLine.to.x = mathRound(nextLine.to.x + diff);\r\n }\r\n } else if (lineDirection.newDirection === \"west\") {\r\n const nextLineDirection = nextLine.getLineDirection();\r\n if (nextLineDirection.newDirection === \"north\") {\r\n if (rotatedDegrees === 90) {\r\n prevLine.from.x = mathRound(prevLine.from.x + diff);\r\n prevLine.to.x = mathRound(prevLine.to.x + diff);\r\n } else if (rotatedDegrees === 180 || rotatedDegrees === 270) {\r\n nextLine.from.x = mathRound(nextLine.from.x - diff);\r\n nextLine.to.x = mathRound(nextLine.to.x - diff);\r\n } else {\r\n horizontalWestLineExpand(prevLine, nextLine, diff);\r\n }\r\n } else {\r\n prevLine.from.x = mathRound(prevLine.from.x + diff);\r\n prevLine.to.x = mathRound(prevLine.to.x + diff);\r\n }\r\n }\r\n } else if (lineDirection.orientation === \"vertical\") {\r\n if (lineDirection.newDirection === \"south\") {\r\n const prevLineDirection = prevLine.getLineDirection();\r\n if (prevLineDirection.newDirection === \"west\") {\r\n nextLine.from.y = mathRound(nextLine.from.y + diff);\r\n nextLine.to.y = mathRound(nextLine.to.y + diff);\r\n } else {\r\n if (rotatedDegrees === 90 || rotatedDegrees === 180) {\r\n prevLine.from.y = mathRound(prevLine.from.y - diff);\r\n prevLine.to.y = mathRound(prevLine.to.y - diff);\r\n } else if (rotatedDegrees === 270) {\r\n nextLine.from.y = mathRound(nextLine.from.y + diff);\r\n nextLine.to.y = mathRound(nextLine.to.y + diff);\r\n } else {\r\n verticalSouthLineExpand(prevLine, nextLine, diff);\r\n }\r\n }\r\n } else if (lineDirection.newDirection === \"north\") {\r\n if (rotatedDegrees === 90 || rotatedDegrees === 180) {\r\n nextLine.from.y = mathRound(nextLine.from.y - diff);\r\n nextLine.to.y = mathRound(nextLine.to.y - diff);\r\n } else {\r\n prevLine.from.y = mathRound(prevLine.from.y + diff);\r\n prevLine.to.y = mathRound(prevLine.to.y + diff);\r\n }\r\n }\r\n } else {\r\n const pointOnTheLineFrom = getPointOnTheLine(line.from, line.to, diff / 2);\r\n const pointOnTheLineTo = getPointOnTheLine(line.to, line.from, diff / 2);\r\n line.to.x = pointOnTheLineTo.x;\r\n line.to.y = pointOnTheLineTo.y;\r\n line.from.x = pointOnTheLineFrom.x;\r\n line.from.y = pointOnTheLineFrom.y;\r\n }\r\n break;\r\n }\r\n case \"horseshoe\": {\r\n const rotatedDegrees = line.getParent().rotatedDegrees;\r\n const prevLineDirection = prevLine.getLineDirection();\r\n const nextLineDirection = nextLine.getLineDirection();\r\n\r\n console.log(\"-------------------------------\");\r\n console.log(\"line\", line);\r\n console.log(\"diff\", diff);\r\n console.log(\"shape.shapeType\", shape.shapeType);\r\n console.log(\"lineDirection.orientation\", lineDirection.orientation);\r\n console.log(\"lineDirection.newDirection\", lineDirection.newDirection);\r\n console.log(\"prevLineDirection.newDirection\", prevLineDirection.newDirection);\r\n console.log(\"nextLineDirection.newDirection\", nextLineDirection.newDirection);\r\n console.log(\"rotatedDegrees\", rotatedDegrees);\r\n if (lineDirection.orientation === \"horizontal\") {\r\n if (lineDirection.newDirection === \"east\") {\r\n if (prevLineDirection.newDirection === \"north\") {\r\n if (rotatedDegrees === 90) {\r\n nextLine.from.x = mathRound(nextLine.from.x + diff);\r\n nextLine.to.x = mathRound(nextLine.to.x + diff);\r\n } else if (rotatedDegrees === 180) {\r\n horizontalEastLineExpand(prevLine, nextLine, diff);\r\n } else if (rotatedDegrees === 270) {\r\n prevLine.from.x = mathRound(prevLine.from.x - diff);\r\n prevLine.to.x = mathRound(prevLine.to.x - diff);\r\n } else {\r\n horizontalEastLineExpand(prevLine, nextLine, diff);\r\n horizontalWestLineExpand(...line.getPairedLines(), diff);\r\n }\r\n } else if (rotatedDegrees === 90) {\r\n nextLine.from.x = mathRound(nextLine.from.x + diff);\r\n nextLine.to.x = mathRound(nextLine.to.x + diff);\r\n } else {\r\n horizontalEastLineExpand(prevLine, nextLine, diff);\r\n horizontalWestLineExpand(...line.getPairedLines(), diff);\r\n }\r\n } else if (lineDirection.newDirection === \"west\") {\r\n if (prevLineDirection.newDirection === \"south\") {\r\n if (rotatedDegrees === 90) {\r\n prevLine.from.x = mathRound(prevLine.from.x + diff);\r\n prevLine.to.x = mathRound(prevLine.to.x + diff);\r\n } else if (rotatedDegrees === 180) {\r\n horizontalWestLineExpand(prevLine, nextLine, diff);\r\n horizontalEastLineExpand(...line.getPairedLines(), diff);\r\n } else if (rotatedDegrees === 270) {\r\n nextLine.from.x = mathRound(nextLine.from.x - diff);\r\n nextLine.to.x = mathRound(nextLine.to.x - diff);\r\n } else {\r\n horizontalWestLineExpand(prevLine, nextLine, diff);\r\n }\r\n } else if (rotatedDegrees === 270) {\r\n nextLine.from.x = mathRound(nextLine.from.x - diff);\r\n nextLine.to.x = mathRound(nextLine.to.x - diff);\r\n } else {\r\n horizontalWestLineExpand(prevLine, nextLine, diff);\r\n horizontalEastLineExpand(...line.getPairedLines(), diff);\r\n }\r\n }\r\n } else if (lineDirection.orientation === \"vertical\") {\r\n if (lineDirection.newDirection === \"south\") {\r\n if (rotatedDegrees === 180) {\r\n prevLine.from.y = mathRound(prevLine.from.y - diff);\r\n prevLine.to.y = mathRound(prevLine.to.y - diff);\r\n } else {\r\n if (nextLineDirection.newDirection === \"west\") {\r\n if (rotatedDegrees === 270) {\r\n verticalSouthLineExpand(prevLine, nextLine, diff);\r\n verticalNorthLineExpand(...line.getPairedLines(), diff);\r\n } else {\r\n nextLine.from.y = mathRound(nextLine.from.y + diff);\r\n nextLine.to.y = mathRound(nextLine.to.y + diff);\r\n }\r\n } else {\r\n verticalSouthLineExpand(prevLine, nextLine, diff);\r\n verticalNorthLineExpand(...line.getPairedLines(), diff);\r\n }\r\n }\r\n } else if (lineDirection.newDirection === \"north\") {\r\n if (prevLineDirection.newDirection === \"west\") {\r\n if (rotatedDegrees === 90) {\r\n verticalNorthLineExpand(prevLine, nextLine, diff);\r\n verticalSouthLineExpand(...line.getPairedLines(), diff);\r\n } else if (rotatedDegrees === 180) {\r\n nextLine.from.y = mathRound(nextLine.from.y - diff);\r\n nextLine.to.y = mathRound(nextLine.to.y - diff);\r\n } else {\r\n prevLine.from.y = mathRound(prevLine.from.y + diff);\r\n prevLine.to.y = mathRound(prevLine.to.y + diff);\r\n }\r\n } else if (rotatedDegrees === 180) {\r\n nextLine.from.y = mathRound(nextLine.from.y - diff);\r\n nextLine.to.y = mathRound(nextLine.to.y - diff);\r\n } else {\r\n verticalNorthLineExpand(prevLine, nextLine, diff);\r\n verticalSouthLineExpand(...line.getPairedLines(), diff);\r\n }\r\n }\r\n } else {\r\n const pointOnTheLineFrom = getPointOnTheLine(line.from, line.to, diff / 2);\r\n const pointOnTheLineTo = getPointOnTheLine(line.to, line.from, diff / 2);\r\n line.to.x = pointOnTheLineTo.x;\r\n line.to.y = pointOnTheLineTo.y;\r\n line.from.x = pointOnTheLineFrom.x;\r\n line.from.y = pointOnTheLineFrom.y;\r\n }\r\n break;\r\n }\r\n default: {\r\n if (isWallsLockMode) {\r\n const prevPrevLine = shape.getPrevLine(prevLine);\r\n const nextNextLine = shape.getNextLine(nextLine);\r\n const prevPrevLineDirection = prevPrevLine.getLineDirection();\r\n const nextNextLineDirection = nextNextLine.getLineDirection();\r\n\r\n const pointOnTheLineFrom = getPointOnTheLine(line.from, line.to, diff / 2);\r\n const pointOnTheLineTo = getPointOnTheLine(line.to, line.from, diff / 2);\r\n const deltaX = pointOnTheLineFrom.x - line.from.x;\r\n const deltaY = pointOnTheLineFrom.y - line.from.y;\r\n\r\n //move line point\r\n line.to.x = pointOnTheLineTo.x;\r\n line.to.y = pointOnTheLineTo.y;\r\n line.from.x = pointOnTheLineFrom.x;\r\n line.from.y = pointOnTheLineFrom.y;\r\n\r\n //move prevLine point\r\n prevLine.from.x += deltaX;\r\n prevLine.from.y += deltaY;\r\n // return prevLine coordinate back to its axis if the line was\r\n if (prevPrevLineDirection.orientation === \"horizontal\") {\r\n prevLine.from.y -= deltaY;\r\n }\r\n if (prevPrevLineDirection.orientation === \"vertical\") {\r\n prevLine.from.x -= deltaX;\r\n }\r\n\r\n // move nextLine point\r\n nextLine.to.x -= deltaX;\r\n nextLine.to.y -= deltaY;\r\n // return nextLine coordinate back to its axis if the line was\r\n if (nextNextLineDirection.orientation === \"horizontal\") {\r\n nextLine.to.y += deltaY;\r\n }\r\n if (nextNextLineDirection.orientation === \"vertical\") {\r\n nextLine.to.x += deltaX;\r\n }\r\n\r\n } else {\r\n const pointOnTheLineFrom = getPointOnTheLine(line.from, line.to, diff / 2);\r\n const pointOnTheLineTo = getPointOnTheLine(line.to, line.from, diff / 2);\r\n line.to.x = pointOnTheLineTo.x;\r\n line.to.y = pointOnTheLineTo.y;\r\n line.from.x = pointOnTheLineFrom.x;\r\n line.from.y = pointOnTheLineFrom.y;\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport const getMaxResizeWidth = (line) => {\r\n const shape = line.getParent();\r\n switch (shape.shapeType) {\r\n case \"square\":\r\n case \"wideangle\":\r\n default:\r\n break;\r\n case \"horseshoe\":\r\n // const prevLineDirection = prevLine.getLineDirection();\r\n // const nextLineDirection = nextLine.getLineDirection();\r\n // const rotatedDegrees = line.getParent().rotatedDegrees;\r\n // if (lineDirection.orientation === \"horizontal\") {\r\n // if (lineDirection.newDirection === \"east\") {\r\n // if (prevLineDirection.orientation === \"vertical\" && prevLineDirection.newDirection === \"south\"\r\n // && nextLineDirection.orientation === \"vertical\" && nextLineDirection.newDirection === \"north\"\r\n // //&& rotatedDegrees !== 180\r\n // ) {\r\n // const maxRightX = shape.getNextLine(nextLine).to.x;\r\n // const maxLeftX = shape.getPrevLine(prevLine).from.x;\r\n // return maxRightX - maxLeftX - 2; // 1 per each line, line can't be 0\r\n // }\r\n // } else if (lineDirection.newDirection === \"west\") {\r\n // if (prevLineDirection.orientation === \"vertical\" && prevLineDirection.newDirection === \"north\"\r\n // && nextLineDirection.orientation === \"vertical\" && nextLineDirection.newDirection === \"south\"\r\n // //&& rotatedDegrees !== 0\r\n // ) {\r\n // const maxRightX = shape.getPrevLine(prevLine).from.x;\r\n // const maxLeftX = shape.getNextLine(nextLine).to.x;\r\n // return maxRightX - maxLeftX - 2; // 1 per each line, line can't be 0\r\n // }\r\n // }\r\n // } else if (lineDirection.orientation === \"vertical\") {\r\n // if (lineDirection.newDirection === \"south\") {\r\n // if (prevLineDirection.orientation === \"horizontal\" && prevLineDirection.newDirection === \"west\"\r\n // && nextLineDirection.orientation === \"horizontal\" && nextLineDirection.newDirection === \"east\"\r\n // //&& rotatedDegrees !== 90\r\n // ) {\r\n // const maxTopY = shape.getPrevLine(prevLine).from.y;\r\n // const maxBottomY = shape.getNextLine(nextLine).to.y;\r\n // return maxBottomY - maxTopY - 2; // 1 per each line, line can't be 0\r\n // }\r\n // } else if (lineDirection.newDirection === \"north\") {\r\n // if (prevLineDirection.orientation === \"horizontal\" && prevLineDirection.newDirection === \"east\"\r\n // && nextLineDirection.orientation === \"horizontal\" && nextLineDirection.newDirection === \"west\"\r\n // // && rotatedDegrees !== 270\r\n // ) {\r\n // const maxTopY = shape.getNextLine(nextLine).to.y;\r\n // const maxBottomY = shape.getPrevLine(prevLine).from.y;\r\n // return maxBottomY - maxTopY - 2; // 1 per each line, line can't be 0\r\n // }\r\n // }\r\n // }\r\n break;\r\n }\r\n return \"9999\";\r\n};\r\n","import Label from \"../../shapes/overlays/label\";\r\nimport {getShapeFeatureId} from \"../../../../../helpers/featureHelper\";\r\n\r\nconst SHAPE_LABELS = ['center_island_countertop', 'countertop'];\r\nexport const updateShape = (partId, shape, wizardGroup = null) => {\r\n shape.setPartId(partId);\r\n shape.setFeatureId(getShapeFeatureId(partId));\r\n if (!SHAPE_LABELS.includes(partId)) {\r\n shape.setType(partId);\r\n } else {\r\n shape.setType(undefined);\r\n }\r\n if (wizardGroup) {\r\n shape.setProperty(\"fromWizardGroupId\", wizardGroup.id);\r\n }\r\n};\r\n\r\nexport const initLabel = (labelText, partId, shape) => {\r\n let firstShapeLine = shape.getLines()[0];\r\n\r\n if(firstShapeLine.labelOverlay !== null) {\r\n firstShapeLine.labelOverlay.setLabelText(labelText);\r\n } else {\r\n firstShapeLine.labelOverlay = new Label();\r\n firstShapeLine.labelOverlay.init(firstShapeLine, labelText, partId);\r\n }\r\n};\r\n\r\nexport const initTitle = (labelText, partId, shape) => {\r\n let thirdShapeLine = shape.getLines()[2];\r\n thirdShapeLine.titleOverlay = new Label({\r\n labelTextColor: 'rgba(165, 174, 183, 0.66)',\r\n isTitle: true,\r\n lineOffset: 20\r\n });\r\n thirdShapeLine.titleOverlay.init(thirdShapeLine, labelText, partId);\r\n};\r\n","import EventManager from \"../store/sqftEventManager\";\r\nimport PointV2, {CORE_POINT_LAYOUTS} from \"../core/shapes/pointV2\";\r\nimport workspace from \"../core/workspace\";\r\nimport sqftConfig from \"../store/sqftConfig\";\r\nimport {\r\n getAngleRelativeToTheHorizontalAxis,\r\n getMousePositionOnField,\r\n getPointDistance\r\n} from \"../../../helpers/sqftHelper\";\r\n\r\n/**\r\n * @return {PointV2}\r\n */\r\nexport const getFreeDrawPoint = (pos) => {\r\n let pointState = {\r\n priority: EventManager.priorities.BOX_POINT,\r\n movable: true,\r\n isCentered: true,\r\n isResizedByPoint: false,\r\n isScaledByPoint: false,\r\n isVisibleOnHover: false\r\n };\r\n let pointDesign = {\r\n radius: 10,\r\n lineWidth: 1,\r\n layout: CORE_POINT_LAYOUTS.black\r\n };\r\n let wPos = workspace.getPosition();\r\n let scale = sqftConfig.scale;\r\n let offset = {\r\n x: (pos.x + wPos.x) / scale,\r\n y: (pos.y + wPos.y) / scale\r\n };\r\n\r\n return new PointV2(offset.x, offset.y, workspace, pointState, pointDesign);\r\n}\r\n\r\nexport const getLockedPoint = (existingPoint, pos, lockedAngleStep) => {\r\n const newPoint = getFreeDrawPoint(pos);\r\n const lockedPosition = getLockPointPos(existingPoint, lockedAngleStep);\r\n const lockedPositionOnField = getMousePositionOnField(lockedPosition.x, lockedPosition.y);\r\n newPoint.setPosition(lockedPositionOnField);\r\n\r\n return newPoint\r\n}\r\n\r\n/**\r\n * works only for 90 deg angle\r\n * @param pointV2\r\n * @param angleStep\r\n * @param mousePos\r\n * @return {{x: int, y: int}}\r\n */\r\nexport const getLockPointPos = (pointV2, angleStep = 90, mousePos = EventManager.LastKnownMousePos) => {\r\n const pointV2PointField = pointV2.getPointField();\r\n\r\n let rotateToMouseAngle = getAngleRelativeToTheHorizontalAxis(mousePos, pointV2PointField);\r\n let lineLength = getPointDistance(pointV2PointField, mousePos);\r\n const closestAngle = Math.round(rotateToMouseAngle / angleStep) * angleStep;\r\n const angleRad = (closestAngle * Math.PI) / 180;\r\n\r\n return {\r\n x: pointV2PointField.x + lineLength * Math.cos(angleRad),\r\n y: pointV2PointField.y + lineLength * Math.sin(angleRad)\r\n };\r\n};\r\n","import uuid from \"uuid\";\r\nimport _ from 'lodash';\r\n\r\nimport {pnpolyArray} from \"../../../../../lib/pnpoly\";\r\nimport {\r\n getParallelPoints,\r\n getPointBetweenPoints, getPointOnTheLine, isInnerCorner,\r\n measureDistanceToInches\r\n} from \"../../../../../helpers/sqftHelper\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport store from \"../../../../../../../store\";\r\nimport {deleteResourceAttachedTo} from \"../../../../../../../actions/sqftResourceFunctions\";\r\nimport {RESOURCE_TYPE} from \"../../../../../constants\";\r\nimport workspace from \"../../workspace\";\r\nimport MiteredController from \"../../controls/mitered\";\r\nimport {addMiteredSection} from \"../../../../../../../actions/sqftMiteredFunctions\";\r\n\r\nexport default class LineCorner {\r\n\r\n line;\r\n id;\r\n _state = {\r\n mouseDown: false,\r\n isHovering: false,\r\n isCornerLineHovering: false,\r\n withEdge: false,\r\n withBacksplash: false,\r\n withWall: false,\r\n withId: null,\r\n backsplashHeight: null,\r\n isWithMitered: false,\r\n };\r\n attachedShape = null;\r\n miteredOverlay = null;\r\n design = {\r\n additionalOutlineHoverWidth: 3,\r\n };\r\n\r\n constructor(line) {\r\n this.line = line;\r\n this.id = uuid.v4(); //line.id;\r\n }\r\n\r\n get state() {\r\n return this._state;\r\n }\r\n\r\n set state(value) {\r\n this._state = value;\r\n }\r\n\r\n isWithMitered = () => {\r\n return this.state.isWithMitered\r\n }\r\n\r\n getAttachedShape() {\r\n return this.attachedShape;\r\n }\r\n\r\n getAttachedItems() {\r\n let isAnyItemsAttached = false;\r\n for (const attachedItemKey in this._state.attachedItems) {\r\n if (this._state.attachedItems[attachedItemKey]) {\r\n isAnyItemsAttached = true\r\n }\r\n }\r\n return this._state.withEdge\r\n || this._state.withBacksplash\r\n || this._state.withWall\r\n || this._state.withId\r\n || isAnyItemsAttached\r\n }\r\n\r\n deleteAttachedItem = () => {\r\n this.state.withEdge = false;\r\n this.state.withBacksplash = false;\r\n this.state.withWall = false;\r\n this.state.withId = null;\r\n this.state.attachedShape = null;\r\n store.dispatch(deleteResourceAttachedTo(RESOURCE_TYPE.attachedToLine, this));\r\n //this.state.overlay.removeLineText(); // todo\r\n };\r\n\r\n getLength(){\r\n return this.line.to.angle\r\n }\r\n\r\n getLineLength() {\r\n return this.line.addDecimalToLength(measureDistanceToInches(this.line.to.angle));\r\n }\r\n\r\n getLineLengthMm() {\r\n return measureDistanceToInches(this.line.to.angle).millimeters;\r\n }\r\n\r\n getParent() {\r\n return this.line.getParent()\r\n }\r\n\r\n addEdgeToCornerLine = (edgeName, id) => {\r\n this.state.withEdge = true;\r\n this.state.withBacksplash = false;\r\n this.state.withWall = false;\r\n this.state.withId = id;\r\n\r\n //self.overlay.renderEdgeText(edgeName); //todo\r\n };\r\n\r\n addBacksplashToCornerLine = (backsplashName, type, featureId, backsplashHeight) => {\r\n if (type === \"wall\") {\r\n this.state.withWall = true;\r\n this.state.withBacksplash = false;\r\n } else {\r\n this.state.withBacksplash = true;\r\n this.state.withWall = false;\r\n }\r\n this.state.withEdge = false;\r\n this.state.withId = featureId;\r\n this.state.backsplashHeight = backsplashHeight;\r\n //self.overlay.renderBacksplashText(backsplashName, type); //todo\r\n };\r\n\r\n addMiteredToCornerLine = () => {\r\n for (const attachedItemKey in state.attachedItems) {\r\n this.state.attachedItems[attachedItemKey] = false\r\n }\r\n if (!this.state.isWithMitered) {\r\n this.deleteAttachedItem();\r\n //if (this.getOrientation() === orientation.VERTICAL || this.getOrientation() === orientation.HORIZONTAL) {\r\n this.state.isWithMitered = true;\r\n if (workspace.miteredController === null) {\r\n workspace.miteredController = new MiteredController();\r\n }\r\n this.miteredOverlay = workspace.miteredController.createMiteredOverlay(this);\r\n this.miteredOverlay.init();\r\n\r\n return this.miteredOverlay;\r\n }\r\n\r\n return this.miteredOverlay\r\n };\r\n\r\n updateCornerHoverState(mousePos){\r\n this.state.isHovering = false;\r\n this.state.isCornerLineHovering = false;\r\n\r\n if(this.line.to.angle > 0 && this.isMouseOverAngle(mousePos)) {\r\n //console.log('mouse over outline angle');\r\n this.state.isHovering = true;\r\n }\r\n\r\n if(this.line.to.angle > 0 && this.isMouseOverCornerLine(mousePos)) {\r\n //console.log('mouse over angle purple line');\r\n this.state.isCornerLineHovering = true;\r\n }\r\n }\r\n\r\n export() {\r\n return {\r\n id: this.id,\r\n _state: _.clone(this._state),\r\n miteredOverlay: this.miteredOverlay ? this.miteredOverlay.export() : null,\r\n }\r\n }\r\n\r\n import(data) {\r\n this.id = data.id;\r\n this._state = data._state;\r\n if (data.miteredOverlay) {\r\n //addMiteredToLine\r\n if (workspace.miteredController === null) {\r\n workspace.miteredController = new MiteredController();\r\n }\r\n this.miteredOverlay = workspace.miteredController.createMiteredOverlay(this);\r\n this.miteredOverlay.import(this, data.mitered);\r\n this.state.isWithMitered = true;\r\n store.dispatch(addMiteredSection(this.miteredOverlay));\r\n }\r\n }\r\n\r\n isMouseOverAngle(mousePos) {\r\n //console.log('state.angleLinePoints', state.angleLinePoints);\r\n let field = this.getOutlineAngleLineField();\r\n let isHovering = pnpolyArray(field, mousePos)\r\n || pnpolyArray([field[0], field[2], field[1], field[3]], mousePos);\r\n\r\n return isHovering || this.state.mouseDown;\r\n }\r\n\r\n isMouseOverCornerLine(mousePos) {\r\n let field = this.getAngleLineField();\r\n let isHovering = pnpolyArray(field, mousePos)\r\n || pnpolyArray([field[0], field[2], field[1], field[3]], mousePos);\r\n\r\n return isHovering || this.state.mouseDown ;\r\n }\r\n\r\n getAngleLineField() {\r\n const angleLinePoints = this.getAnglePoints();\r\n const design = this.line.getDesign();\r\n let lineField;\r\n\r\n if( angleLinePoints.cordCornerFrom === undefined ) {\r\n return {}\r\n }\r\n\r\n let outlineMargin = design.outlineWidth + this.design.additionalOutlineHoverWidth;\r\n\r\n // line /\r\n if(angleLinePoints.cordCornerFrom.y < angleLinePoints.cordCornerTo.y && angleLinePoints.cordCornerFrom.x > angleLinePoints.cordCornerTo.x\r\n || angleLinePoints.cordCornerFrom.y > angleLinePoints.cordCornerTo.y && angleLinePoints.cordCornerFrom.x < angleLinePoints.cordCornerTo.x\r\n ){\r\n lineField = [\r\n [angleLinePoints.cordCornerFrom.x + outlineMargin, angleLinePoints.cordCornerFrom.y + outlineMargin],\r\n [angleLinePoints.cordCornerTo.x + outlineMargin, angleLinePoints.cordCornerTo.y + outlineMargin],\r\n [angleLinePoints.cordCornerFrom.x - outlineMargin, angleLinePoints.cordCornerFrom.y - outlineMargin],\r\n [angleLinePoints.cordCornerTo.x - outlineMargin, angleLinePoints.cordCornerTo.y - outlineMargin],\r\n ];\r\n // line \\\r\n } else {\r\n lineField = [\r\n [angleLinePoints.cordCornerTo.x + outlineMargin, angleLinePoints.cordCornerTo.y - outlineMargin],\r\n [angleLinePoints.cordCornerFrom.x + outlineMargin, angleLinePoints.cordCornerFrom.y - outlineMargin],\r\n [angleLinePoints.cordCornerTo.x - outlineMargin, angleLinePoints.cordCornerTo.y + outlineMargin],\r\n [angleLinePoints.cordCornerFrom.x - outlineMargin, angleLinePoints.cordCornerFrom.y + outlineMargin],\r\n ];\r\n }\r\n\r\n return lineField\r\n }\r\n\r\n getOutlineAngleLineField() {\r\n const angleLinePoints = this.getAnglePoints();\r\n const design = this.line.getDesign();\r\n let lineField;\r\n\r\n if( angleLinePoints.cord1 === undefined ) {\r\n return {}\r\n }\r\n\r\n let outlineMargin = design.outlineWidth + this.design.additionalOutlineHoverWidth;\r\n\r\n // line /\r\n if(angleLinePoints.cord2.y < angleLinePoints.cord3.y && angleLinePoints.cord2.x > angleLinePoints.cord3.x\r\n || angleLinePoints.cord2.y > angleLinePoints.cord3.y && angleLinePoints.cord2.x < angleLinePoints.cord3.x\r\n ){\r\n lineField = [\r\n [angleLinePoints.cord2.x + outlineMargin, angleLinePoints.cord2.y + outlineMargin],\r\n [angleLinePoints.cord3.x + outlineMargin, angleLinePoints.cord3.y + outlineMargin],\r\n [angleLinePoints.cord2.x - outlineMargin, angleLinePoints.cord2.y - outlineMargin],\r\n [angleLinePoints.cord3.x - outlineMargin, angleLinePoints.cord3.y - outlineMargin],\r\n ];\r\n // line \\\r\n } else {\r\n lineField = [\r\n [angleLinePoints.cord3.x + outlineMargin, angleLinePoints.cord3.y - outlineMargin],\r\n [angleLinePoints.cord2.x + outlineMargin, angleLinePoints.cord2.y - outlineMargin],\r\n [angleLinePoints.cord3.x - outlineMargin, angleLinePoints.cord3.y + outlineMargin],\r\n [angleLinePoints.cord2.x - outlineMargin, angleLinePoints.cord2.y + outlineMargin],\r\n ];\r\n }\r\n\r\n return lineField\r\n }\r\n\r\n getAnglePoints() {\r\n const lineDirection = this.line.getParent().getAngleDirection(this.line),\r\n renderTo = this.line.calculateRenderPosition(this.line.to),\r\n renderFrom = this.line.calculateRenderPosition(this.line.from),\r\n nextLine = this.line.getParent().getNextLine(this.line),\r\n nextLineRenderTo = nextLine.calculateRenderPosition(nextLine.to),\r\n design = this.line.getDesign();\r\n\r\n let angleLinePoints = {};\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\":\r\n case \"vertical\":\r\n case \"NORTHWEST\":\r\n case \"NORTHEAST\":\r\n case \"SOUTHWEST\":\r\n case \"SOUTHEAST\": {\r\n nextLine.setLinePoints();\r\n if (this.line.drawLineTo === undefined || this.line.drawLineFrom === undefined) {\r\n this.line.setLinePoints();\r\n }\r\n\r\n const cord1 = this.line.drawLineTo;\r\n const cord4 = getPointOnTheLine(nextLine.drawLineFrom, nextLine.drawLineTo, design.outlineMargin); // +design.outlineMargin is to prevent overlapping\r\n\r\n // purple corner line\r\n // const renderTo = this.line.calculateRenderPosition(this.line.to);\r\n // const renderFrom = this.line.calculateRenderPosition(this.line.from);\r\n // const radiusMultiplier = Math.sqrt( Math.pow(this.getLength(), 2) * 2) * sqftConfig.scale;\r\n // const nextLineRenderTo = this.line.calculateRenderPosition(nextLine.to);\r\n\r\n const radiusMultiplier = Math.sqrt( Math.pow(this.line.to.angle, 2) * 2);\r\n const radius = radiusMultiplier * sqftConfig.scale;\r\n const isLineCornerInner = isInnerCorner(this.line.getParent(), renderFrom, renderTo, nextLineRenderTo);\r\n const pointIndent = isLineCornerInner ? 4 : -4;\r\n const pointOnTheBlueLine = getPointBetweenPoints(renderTo, renderFrom, radius / 2 + pointIndent);\r\n const pointOnTheBlueNextLine = getPointBetweenPoints(renderTo, nextLineRenderTo, radius / 2 + pointIndent);\r\n const [cord2] = getParallelPoints(renderFrom, pointOnTheBlueLine,-design.outlineMargin);\r\n const [cord3] = getParallelPoints(nextLineRenderTo, pointOnTheBlueNextLine, design.outlineMargin);\r\n\r\n const cordCornerIndent = isLineCornerInner && this.line.to.angle < design.outlineMargin\r\n ? 0\r\n : -3;\r\n const cordCornerFrom = getPointOnTheLine(cord2, cord3, cordCornerIndent * sqftConfig.scale); // set offset from corner\r\n const cordCornerTo = getPointOnTheLine(cord3, cord2, cordCornerIndent * sqftConfig.scale); // set offset from corner\r\n // v2\r\n //let [cordCornerTo, cordCornerFrom] = getParallelPoints(pointOnTheBlueLine, pointOnTheBlueNextLine, -9);\r\n\r\n angleLinePoints = {\r\n cord1: {\r\n x: cord1.x,\r\n y: cord1.y\r\n },\r\n cord2: {\r\n x: cord2.x,\r\n y: cord2.y\r\n },\r\n cord3: {\r\n x: cord3.x,\r\n y: cord3.y\r\n },\r\n cord4: {\r\n x: cord4.x,\r\n y: cord4.y\r\n },\r\n cordCornerFrom: {\r\n x: cordCornerFrom.x,\r\n y: cordCornerFrom.y\r\n },\r\n cordCornerTo: {\r\n x: cordCornerTo.x,\r\n y: cordCornerTo.y\r\n }\r\n };\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n //wtf?\r\n angleLinePoints.cord2.width = sqftConfig.fieldWidth;\r\n angleLinePoints.cord3.width = sqftConfig.fieldWidth;\r\n angleLinePoints.cord2.height = sqftConfig.fieldWidth;\r\n angleLinePoints.cord3.height = sqftConfig.fieldWidth;\r\n\r\n return angleLinePoints;\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nclass UiSelect extends Component {\r\n\r\n static propTypes = {\r\n type: PropTypes.number,\r\n selectItems: PropTypes.array.isRequired,\r\n itemClick: PropTypes.func,\r\n valueText: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),\r\n value: PropTypes.any,\r\n withCheckboxes: PropTypes.bool,\r\n className: PropTypes.string,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n toggle: false,\r\n };\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('click', this.handleWrapperBlur);\r\n }\r\n\r\n handleToggleDropdown = () => {\r\n this.setState({\r\n toggle: !this.state.toggle\r\n }, () => {\r\n setTimeout(() => {\r\n this.state.toggle\r\n ? window.addEventListener('click', this.handleWrapperBlur)\r\n : window.removeEventListener('click', this.handleWrapperBlur)\r\n }, 0)\r\n })\r\n };\r\n\r\n handleItemClick = (selectItem) => {\r\n this.handleToggleDropdown();\r\n this.props.itemClick(selectItem);\r\n };\r\n\r\n handleWrapperBlur = (e) => {\r\n const disallowClasses = [\".ui-checkbox, .ui-checkbox__label\", \".ui-select2__dropdown\",\r\n \".ui-select2__dropdown-back\", \".ui-select2__dropdown-list-item\", \".ui-select__dropdown\",\r\n \".ui-select__dropdown-back\", \".ui-select__dropdown-list-item\"];\r\n if (this.state.toggle && !disallowClasses.some(cls => e.target.closest(cls))) {\r\n this.handleToggleDropdown();\r\n }\r\n };\r\n\r\n getSelectText = (itemText) => {\r\n switch (itemText) {\r\n case \"4in\":\r\n case \"6in\":\r\n case \"18in\":\r\n case \"Full\":\r\n return \r\n default:\r\n return itemText\r\n }\r\n };\r\n\r\n render() {\r\n\r\n const baseClass = this.props.type === 1 ? \"ui-select\" : \"ui-select\"+this.props.type;\r\n const dropDownStyles = this.state.toggle\r\n ? { height: this.props.selectItems.length * (this.props.withCheckboxes ? 40 : 34)}\r\n : {};\r\n\r\n return (\r\n
    \r\n
    \r\n {this.props.valueText}\r\n {this.props.value ? (\r\n {this.getSelectText(this.props.value)}\r\n ) : null}\r\n
    \r\n
    \r\n
      \r\n {this.props.children || this.props.selectItems.map((selectItem, index) => {\r\n return (\r\n
    • this.handleItemClick(selectItem)}\r\n className={baseClass+\"__dropdown-list-item\"}>\r\n {this.getSelectText(selectItem.text || selectItem)}\r\n
    • \r\n )\r\n })}\r\n
    \r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n windowWidth: store.serverState.windowWidth,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n})(UiSelect);\r\n","import invert from 'lodash/invert';\r\nimport snakeCase from 'lodash/snakeCase';\r\n\r\nimport LayoutCommonNew from \"../../visComponents/layoutCommonNew\";\r\n\r\nimport {LayoutType, LayoutAbbreviation, METADATA, ShowerHeadTypes} from \"./constants\";\r\nimport zIndexes from \"./zIndex\";\r\n\r\nimport Other from \"./parts/other\";\r\nimport NonVisualizerSubPart from \"./subparts/nonVisualizerSubPart\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport Background from \"./parts/background\";\r\nimport {ShowerAccessories} from \"./parts/showerAccessories\";\r\nimport {Toilet} from \"./parts/toilet\";\r\nimport {WindowParent} from \"./parts/windowParent\";\r\nimport Floor from \"./parts/floor\";\r\nimport Walls from \"./parts/walls\";\r\nimport {Shower} from \"./parts/shower\";\r\nimport {Vanity} from \"./parts/vanity\";\r\nimport {ShowerTubCombo} from \"./parts/showerTubCombo\";\r\nimport Globals from \"./parts/globals\";\r\nimport {Bathtub} from \"./parts/bathtub\";\r\nimport {AVAILABLE_VISUALIZER_TYPES} from \"../../../config\";\r\nimport {Accessories} from \"./parts/accessories\";\r\n\r\nexport class Layout extends LayoutCommonNew {\r\n\r\n /**\r\n * @type {int}\r\n */\r\n defaultType = LayoutType.Layout1;\r\n type = this.defaultType;\r\n scene = \"1\";\r\n visualizerType = AVAILABLE_VISUALIZER_TYPES.bvLook;\r\n localStorageKey = \"bvLookState\";\r\n layersBinding = \"BathroomV5\";\r\n layoutNames = LayoutAbbreviation;\r\n layoutTypes = LayoutType;\r\n zIndexes = zIndexes.layouts;\r\n excludedPartIdsFromHover = [\"background_bg\", \"walls_ceiling\", \"front_wall_crop\", \"left_wall_crop\",\r\n \"right_wall_crop\", \"shower_wall_mirror\", \"window_body\", \"shower_screen\", \"skirting_board\"];\r\n checkMorePointsPartIds = [\"vanity_faucet\", \"vanity_sink\", \"shower_fixture\", \"bathtub_fixture\", \"towel_bar\",\r\n \"robe_hook\", \"towel_ring\", \"soap_dish\", \"corner_shelf\"];\r\n\r\n constructor(props) {\r\n super(props);\r\n this.parts[Background.id] = new Background();\r\n this.parts[Walls.id] = new Walls();\r\n this.parts[Vanity.id] = new Vanity();\r\n this.parts[Shower.id] = new Shower();\r\n this.parts[ShowerTubCombo.id] = new ShowerTubCombo();\r\n this.parts[ShowerAccessories.id] = new ShowerAccessories();\r\n this.parts[Accessories.id] = new Accessories();\r\n this.parts[Bathtub.id] = new Bathtub();\r\n this.parts[Toilet.id] = new Toilet();\r\n this.parts[Floor.id] = new Floor();\r\n this.parts[WindowParent.id] = new WindowParent();\r\n // this.parts[Ceiling.id] = new Ceiling();\r\n this.parts[Globals.id] = new Globals();\r\n this.parts[Other.id] = new Other();\r\n Object.values(this.parts).forEach(part => part.layout = this);\r\n }\r\n\r\n fixFeatureMetaData(dbFeature) {\r\n dbFeature.metaData.RoomLayout = dbFeature.metaData.RoomLayout.map((mValue) => {\r\n mValue = (mValue || \"\").replace(\"Look \", \"\").replace(\"Layout\", \"\");\r\n if (+mValue >= 10) {\r\n if (document.kvConfig.userId === 140067) {\r\n mValue = (+mValue - 10) + \"\"\r\n } else {\r\n dbFeature.isFromAsRoom = true;\r\n }\r\n }\r\n if (!mValue.includes(\"Layout\")) {\r\n mValue = \"Layout\" + mValue\r\n }\r\n return mValue\r\n });\r\n // [\"ShowerSize\", \"SplitWallType\"].forEach(metaName => { // splitWallType should not use 0 as all\r\n [\"ShowerSize\"].forEach(metaName => {\r\n if (Array.isArray(dbFeature.metaData[metaName])) {\r\n if (dbFeature.metaData[metaName].includes(\"0\")) {\r\n dbFeature.metaData[metaName] = [METADATA.ALL]\r\n } else if (dbFeature.metaData[metaName].includes(\"30\")) {\r\n dbFeature.metaData[metaName] = dbFeature.metaData[metaName].map(metaValue => {\r\n if (metaValue === \"30\") { // we have 30 and 36, but they should be the same. we decided to make all 36 as the shower body\r\n return \"36\"\r\n }\r\n return metaValue\r\n })\r\n }\r\n }\r\n });\r\n if (Array.isArray(dbFeature.metaData[\"Side\"]) && dbFeature.metaData[\"Side\"].length) {\r\n dbFeature.metaData.layerPosition = dbFeature.metaData[\"Side\"][0]\r\n }\r\n Object.keys(dbFeature.metaData).forEach(key => {\r\n if (Array.isArray(dbFeature.metaData[key]) && (key !== \"CropCoords\")) {\r\n dbFeature.metaData[key] = dbFeature.metaData[key].flatMap(metaValue => {\r\n if (typeof metaValue === \"string\") {\r\n if (metaValue.includes(\", \")) {\r\n return metaValue.split(\", \")\r\n } else if (metaValue.includes(\",\")) {\r\n return metaValue.split(\",\")\r\n }\r\n }\r\n return metaValue\r\n })\r\n }\r\n });\r\n return dbFeature\r\n }\r\n\r\n getCurrentLayoutName(type = this.type) {\r\n return invert(LayoutType)[type];\r\n }\r\n\r\n getCurrentLayoutAbbreviation() {\r\n return LayoutAbbreviation[this.getCurrentLayoutName()]\r\n }\r\n\r\n addNonVisualizerSubPart(featureGroupName){\r\n const otherParent = this.parts[Other.id];\r\n const partId = snakeCase(featureGroupName);\r\n let relatedItem = otherParent.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, featureGroupName);\r\n relatedItem.getParent = () => otherParent;\r\n otherParent.relatedItems.push(relatedItem);\r\n }\r\n return new DesignNavigationItem(relatedItem.partName, relatedItem)\r\n }\r\n\r\n addSpecificPropertiesToLocalStorage(bvState, useNames, returnAllFeatures= false) {\r\n const shower = this.parts[Shower.id];\r\n const showerTubCombo = this.parts[ShowerTubCombo.id];\r\n bvState[\"shower_head_type\"] = shower ? shower[\"shower_head_type\"] : \"\";\r\n bvState[\"shower_hand_type\"] = shower ? shower[\"shower_hand_type\"] : \"\";\r\n const vanityParent = this.parts[Vanity.id];\r\n bvState[\"vanity_type\"] = vanityParent ? vanityParent[\"vanity_type\"] : \"\";\r\n bvState.shower_tub_combo_is_active = shower.showerTubComboIsActive();\r\n bvState.bottom_tub = showerTubCombo.bottomTub;\r\n bvState.shower_floor_is_active = shower.showerFloorIsActive;\r\n return super.addSpecificPropertiesToLocalStorage(bvState, useNames, returnAllFeatures)\r\n }\r\n\r\n setActiveFeaturesFromObject(bvState, isCartAndUserStatedUpdateNeeded, useNames,\r\n needToChangeLayout, firstLoad, isFake) {\r\n const shower = this.parts[Shower.id];\r\n const showerTubCombo = this.parts[ShowerTubCombo.id];\r\n\r\n if (shower && bvState && bvState[\"shower_head_type\"]) {\r\n if (bvState[\"shower_head_type\"] === ShowerHeadTypes.shower_arm && !bvState[\"shower_arm\"] && bvState[\"shower_fixture\"]) {\r\n bvState[\"shower_head_type\"] = ShowerHeadTypes.shower_fixture; // fix for existing logic\r\n }\r\n shower.setShowerHeadType(bvState[\"shower_head_type\"]);\r\n }\r\n if (shower && bvState && bvState[\"shower_hand_type\"]) {\r\n shower.setShowerHandType(bvState[\"shower_hand_type\"]);\r\n }\r\n const vanityParent = this.parts[Vanity.id];\r\n vanityParent[\"vanity_type\"] = bvState[\"vanity_type\"]; // set it in any case! for standalone sink we are disabling vanity_type\r\n if (bvState[\"shower_tub_combo_is_active\"]) {\r\n showerTubCombo.setShowerTubCombo();\r\n if (bvState.bottom_tub) {\r\n showerTubCombo.bottomTub = bvState.bottom_tub\r\n }\r\n } else if (showerTubCombo.showerTubComboIsActive) {\r\n showerTubCombo.showerTubComboIsActive = false\r\n }\r\n if (bvState[\"shower_floor_is_active\"]) {\r\n shower.showerFloorIsActive = bvState[\"shower_floor_is_active\"];\r\n }\r\n return super.setActiveFeaturesFromObject(bvState, isCartAndUserStatedUpdateNeeded, useNames, needToChangeLayout, firstLoad, isFake)\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport { showerAccessoriesThumbnail } from '../../../bvComponent/core/assets';\r\nimport LargeCornerSeat from \"../subparts/showerAccessories/largeCornerSeat\";\r\nimport SoapDish from \"../subparts/showerAccessories/soapDish\";\r\nimport CornerCaddie from \"../subparts/showerAccessories/cornerCaddie\";\r\nimport LargeCornerCaddie from \"../subparts/showerAccessories/largeCornerCaddie\";\r\nimport GrabBar from \"../subparts/showerAccessories/grabBar\";\r\nimport CornerShelf from \"../subparts/showerAccessories/cornerShelf\";\r\nimport ShowerPod from \"../subparts/showerAccessories/showerPod\";\r\nimport Seats from \"../subparts/showerAccessories/seats\";\r\nimport ShowerRod from \"../subparts/showerAccessories/showerRod\";\r\nimport ToiletBrush from \"../subparts/showerAccessories/toiletBrush\";\r\nimport PaperHolder from \"../subparts/showerAccessories/paperHolder\";\r\nimport RobeHook from \"../subparts/showerAccessories/robeHook\";\r\nimport TowelBar from \"../subparts/showerAccessories/towelBar\";\r\nimport TowelRing from \"../subparts/showerAccessories/towelRing\";\r\nimport GlassHolder from \"../subparts/showerAccessories/glassHolder\";\r\nimport TowelRack from \"../subparts/showerAccessories/towelRack\";\r\nimport Wainscoting from \"../subparts/showerAccessories/wainscoting\";\r\nimport Towel from \"../subparts/showerAccessories/towel\";\r\nimport TowelTowelRing from \"../subparts/showerAccessories/towelTowelRing\";\r\nimport TowelTowelBar from \"../subparts/showerAccessories/towelTowelBar\";\r\nimport TowelTowelHook from \"../subparts/showerAccessories/towelTowelHook\";\r\n\r\nexport class ShowerAccessories extends Part {\r\n static id = 'Shower Accessories';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partThumbnail = showerAccessoriesThumbnail;\r\n this.partName = 'Shower Accessories';\r\n this.translateId = \"visualizer.bathroom.accessories\";\r\n this.relatedItems = [];\r\n\r\n // related items\r\n this.soapDish = null;\r\n this.largeCornerSeat = null;\r\n this.largeCornerCaddie = null;\r\n this.cornerCaddie = null;\r\n this.smallCornerShelf = null;\r\n this.grabBar = null;\r\n this.showerPod = null;\r\n this.seats = null;\r\n this.showerRod = null;\r\n this.robeHook = null;\r\n this.paperHolder = null;\r\n this.toiletBrush = null;\r\n this.towelBar = null;\r\n this.towel = null;\r\n this.towelTowelRing = null;\r\n this.towelTowelBar = null;\r\n this.towelTowelHook = null;\r\n\r\n //current active caddie type\r\n this.caddie_type = \"corner_shelf\";\r\n this.relatedGroupNames = [\"Soap Dish\", \"Large Corner Seat\", \"Large Corner Caddie\", \"Corner Caddie\", \"Grab Bar\",\r\n \"Robe Hook\", \"Paper Holder\", \"Toilet Brush\", \"Shower Rod\", \"Corner Shelf\", \"Shower Pod\", \"Seats\", \"Towel Bar\",\r\n \"Towel Rack\", \"Towel Ring\", \"Glass Holder\", \"Wainscoting\"];\r\n }\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Soap Dish\":\r\n relatedItemName = \"soapDish\";\r\n RelatedItemClass = SoapDish;\r\n break;\r\n case \"Large Corner Seat\":\r\n relatedItemName = \"largeCornerSeat\";\r\n RelatedItemClass = LargeCornerSeat;\r\n break;\r\n case \"Large Corner Caddie\":\r\n relatedItemName = \"largeCornerCaddie\";\r\n RelatedItemClass = LargeCornerCaddie;\r\n break;\r\n case \"Corner Caddie\":\r\n relatedItemName = \"cornerCaddie\";\r\n RelatedItemClass = CornerCaddie;\r\n break;\r\n case \"Grab Bar\":\r\n relatedItemName = \"grabBar\";\r\n RelatedItemClass = GrabBar;\r\n break;\r\n case \"Robe Hook\":\r\n relatedItemName = \"robeHook\";\r\n RelatedItemClass = RobeHook;\r\n break;\r\n case \"Paper Holder\":\r\n relatedItemName = \"paperHolder\";\r\n RelatedItemClass = PaperHolder;\r\n break;\r\n case \"Toilet Brush\":\r\n relatedItemName = \"toiletBrush\";\r\n RelatedItemClass = ToiletBrush;\r\n break;\r\n case \"Shower Rod\":\r\n relatedItemName = \"showerRod\";\r\n RelatedItemClass = ShowerRod;\r\n break;\r\n case \"Corner Shelf\":\r\n case \"Small Corner Shelf\":\r\n relatedItemName = \"cornerShelf\";\r\n RelatedItemClass = CornerShelf;\r\n break;\r\n case \"Shower Pod\":\r\n case \"Storage Pod\":\r\n case \"Storage Pods\":\r\n relatedItemName = \"showerPod\";\r\n RelatedItemClass = ShowerPod;\r\n break;\r\n case \"Seats\":\r\n case \"flip-Up Seat\":\r\n case \"Flip-Up Seat\":\r\n relatedItemName = \"seats\";\r\n RelatedItemClass = Seats;\r\n break;\r\n case \"Towel Bar\":\r\n relatedItemName = \"towelBar\";\r\n RelatedItemClass = TowelBar;\r\n break;\r\n case \"Towel Rack\":\r\n relatedItemName = \"towelRack\";\r\n RelatedItemClass = TowelRack;\r\n break;\r\n case \"Towel Ring\":\r\n relatedItemName = \"towelRing\";\r\n RelatedItemClass = TowelRing;\r\n break;\r\n case \"Towel\":\r\n case \"towel\":\r\n case \"Towels\": {\r\n if (dbFeature.metaData && Array.isArray(dbFeature.metaData[\"MountPosition\"]) && dbFeature.metaData[\"MountPosition\"].length) {\r\n if (dbFeature.metaData[\"MountPosition\"][0] === \"TowelRing\") {\r\n relatedItemName = \"towelTowelRing\";\r\n RelatedItemClass = TowelTowelRing;\r\n } else if (dbFeature.metaData[\"MountPosition\"][0] === \"TowelBar\" || dbFeature.metaData[\"MountPosition\"][0] === \"TowelTowelBar\") {\r\n relatedItemName = \"towelTowelBar\";\r\n RelatedItemClass = TowelTowelBar;\r\n } else if (dbFeature.metaData[\"MountPosition\"][0] === \"TowelHook\") {\r\n relatedItemName = \"towelTowelHook\";\r\n RelatedItemClass = TowelTowelHook;\r\n } else {\r\n relatedItemName = \"towel\";\r\n RelatedItemClass = Towel;\r\n }\r\n } else {\r\n relatedItemName = \"towel\";\r\n RelatedItemClass = Towel;\r\n }\r\n break;\r\n }\r\n case \"Glass Holder\":\r\n relatedItemName = \"glassHolder\";\r\n RelatedItemClass = GlassHolder;\r\n break;\r\n case \"Wainscoting\":\r\n relatedItemName = \"wainscoting\";\r\n RelatedItemClass = Wainscoting;\r\n break;\r\n\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n}\r\n\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {METADATA} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class EnclosureCommon extends IntermediatePart {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"BathType\"]) {\r\n dbFeature.metaData[\"BathType\"] = [METADATA.BathtubWithEnclosures]; // remove enclosure top and bottom\r\n }\r\n return super.load(dbFeature);\r\n }\r\n\r\n disabledClick() {\r\n const bathParent = this.getParent();\r\n if (bathParent[\"bathTubBody\"]) {\r\n bathParent[\"bathTubBody\"].disabled = this.disabled || !bathParent[\"bathTubBody\"].canBeEnabled(); // true or check if it can be enabled;\r\n }\r\n [\"enclosureTop\", \"enclosureBottom\"].forEach(relName => {\r\n if (bathParent[relName] && (bathParent[relName].partId !== this.partId)) {\r\n bathParent[relName].disabled = this.disabled;\r\n }\r\n })\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.partId === \"skirting_board\") {\r\n return super.setLayers(layout);\r\n }\r\n const bathtubParent = this.getParent();\r\n if (!bathtubParent || !bathtubParent.bathTubBody || !bathtubParent.bathTubBody.activeFeature\r\n || !bathtubParent.bathTubBody.activeFeature.metaData[\"BathType\"]\r\n || !bathtubParent.bathTubBody.activeFeature.metaData[\"BathType\"].includes(METADATA.BathtubWithEnclosures)) {\r\n super.hideLayers();\r\n return;\r\n }\r\n super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const bathtubParent = this.getParent();\r\n conditions.push({\r\n propName: \"BathType\",\r\n propValue: bathtubParent && bathtubParent.bathTubBody && bathtubParent.bathTubBody.activeFeature\r\n ? bathtubParent.bathTubBody.activeFeature.metaData[\"BathType\"]\r\n : METADATA.BathtubWithoutEnclosures // remove Enclosure Top\r\n });\r\n if (this.partId === \"skirting_board\") {\r\n const layout = bathtubParent.layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\nimport {LOOK_ROOM_TYPES, VANITY_TYPES} from \"../../constants\";\r\n\r\nexport default class VanityCommon extends IntermediatePart {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const vanityParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n let vanitySize = vanityParent.counterTopSize(this);\r\n if (this.partId === \"vanity_mirror\") {\r\n const currentVanityTypeFeatureGroup = vanityParent.relatedItems.find(relItem => relItem.partId === vanityParent.vanity_type);\r\n if (currentVanityTypeFeatureGroup && currentVanityTypeFeatureGroup.layerPositions) {\r\n if (vanitySize === \"24\" || (Array.isArray(vanitySize) && vanitySize.includes(\"24\"))) {\r\n if (currentVanityTypeFeatureGroup.layerPositions[\"L\"] && currentVanityTypeFeatureGroup.layerPositions[\"R\"]) {\r\n conditions.push({\r\n propName: \"MirrorShape\",\r\n propValue: \"24D\"\r\n });\r\n } else if (currentVanityTypeFeatureGroup.layerPositions[\"C\"]) {\r\n conditions.push({\r\n propName: \"MirrorShape\",\r\n propValue: \"24S\"\r\n });\r\n }\r\n }\r\n }\r\n }\r\n if (this.partId === \"vanity_backsplash\") {\r\n const activeSideMeta = vanityParent.getActiveMatchingMetaFromRelatedItem(vanityParent.vanity_type, \"Side\");\r\n if (activeSideMeta && activeSideMeta.includes(\"C\")) {\r\n conditions.push({\r\n propName: \"Side\",\r\n propValue: activeSideMeta\r\n });\r\n }\r\n }\r\n if (vanitySize && (getCurrentRoomType() === LOOK_ROOM_TYPES.as)\r\n && !(this.partId === \"vanity_countertop\" && vanityParent.vanity_type !== VANITY_TYPES.vanity_cabinet)) {\r\n conditions.push({\r\n propName: \"VanitySize\",\r\n propValue: vanitySize\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","export const VISUALIZER_MANAGEMENT_ACTIONS = {\r\n getState: \"getState\",\r\n checkState: \"checkState\",\r\n setState: \"setState\",\r\n visualizerIsLoaded: \"visualizerIsLoaded\",\r\n closeVisualizerNavigation: \"closeVisualizerNavigation\",\r\n visualizerIsSaved: \"visualizerIsSaved\",\r\n}\r\n","import {getBvGroupFeatures} from \"./server-api\";\r\nimport {getCurrentLayout} from \"../bvcomponents/appLayout\";\r\n\r\nlet axiosController;\r\n\r\n/**\r\n * renderErrorPopup can display retry connection and sign contract buttons\r\n * @param featureGroup {object}\r\n * @param searchText {string}\r\n * @param setShowLoader {function}\r\n */\r\nexport const searchProductRequest = async (featureGroup, searchText, setShowLoader = () => {}) => {\r\n if (!searchText || !featureGroup || featureGroup.getRealFeaturesReceivedProperty()\r\n || (Array.isArray(featureGroup.alreadyRequestedFeatureNames) && featureGroup.alreadyRequestedFeatureNames.includes(searchText))\r\n ) {\r\n return false\r\n }\r\n setShowLoader(true);\r\n if (axiosController) {\r\n axiosController.abort();\r\n }\r\n if (AbortController) {\r\n axiosController = new AbortController();\r\n }\r\n const dbName = featureGroup.dbName || featureGroup.partName;\r\n const pageSize = 9999;\r\n if (document.kvConfig.visualizerType === \"bvLook\") {\r\n const layout = getCurrentLayout();\r\n const wallParent = layout.parts[\"Walls\"];\r\n if (featureGroup.additionalPartPartId && wallParent && wallParent.relatedItems.some(relItem => relItem.partId === featureGroup.partId)) {\r\n const cropResponse = await getBvGroupFeatures(dbName + \" Crop\", 0, pageSize, [], searchText, null, axiosController);\r\n if (Array.isArray(cropResponse)) {\r\n featureGroup.setGroupFeatures(cropResponse, pageSize, false, \"\", null, true, false);\r\n }\r\n }\r\n }\r\n const response = await getBvGroupFeatures(dbName, 0, pageSize, [], searchText, null, axiosController)\r\n if (response) {\r\n featureGroup.setGroupFeatures(response, pageSize, false, \"\", null, true);\r\n }\r\n if (!featureGroup.alreadyRequestedFeatureNames) {\r\n featureGroup.alreadyRequestedFeatureNames = [];\r\n }\r\n featureGroup.alreadyRequestedFeatureNames.push(searchText);\r\n setShowLoader(false);\r\n return response ? response.data : []\r\n}\r\n","import flatten from \"lodash/flatten\";\r\n\r\nimport {loaderDisable, loaderEnable} from \"../bvcomponents/ui/loaderView\";\r\nimport {getCurrentLayout} from \"../bvcomponents/appLayout\";\r\nimport {getBathroomVisualizerData, getBvGroupFeatures, getBvGroups, getQtCategories} from \"../api/server-api\";\r\nimport Config from \"../config\";\r\nimport store from \"../store\";\r\nimport {setWizardIsActive} from \"../actions/wizardFunctions\";\r\nimport {addVisualizersLoaded, updateCanvasCount} from \"../actions/actionFunctions\";\r\nimport {getParsedWizardList} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\n\r\nexport const loadAdditionalVisualizerGroups = async (visualizerType) => {\r\n switch (visualizerType) {\r\n case \"bvLook\": {\r\n const additionalFeatures = await Promise.all([\r\n getBvGroupFeatures(\"Decor\", 0, 2000, [], \"\", \"\", null, false, visualizerType),\r\n getBvGroupFeatures(\"Attachment\", 0, 2000, [], \"\", \"\", null, false, visualizerType),\r\n getBvGroupFeatures(\"Towel\", 0, 2000, [], \"\", \"\", null, false, visualizerType),\r\n ]);\r\n // console.log(\"additionalFeatures\", flatten(additionalFeatures));\r\n return flatten(additionalFeatures)\r\n }\r\n // to do add here Kitchen ? not sure\r\n default:\r\n return []\r\n }\r\n}\r\n\r\nexport const parseWizardResponse = (mainResponse, qtCategoriesResponse, visualizerType = null) => {\r\n const useWizard = (Array.isArray(qtCategoriesResponse) && qtCategoriesResponse.some(qtCat => qtCat.useWizard))\r\n // || !Array.isArray(qtCategoriesResponse) || !qtCategoriesResponse.length)\r\n && mainResponse && (mainResponse.wizardData || mainResponse.wizardDataV2)\r\n && getParsedWizardList(mainResponse, true).length > 0;\r\n store.dispatch(setWizardIsActive(useWizard, visualizerType));\r\n}\r\n\r\nconst loadVisualizer = async (visualizerType) => {\r\n try {\r\n window.requestInProcess = true;\r\n loaderEnable();\r\n const layout = getCurrentLayout(visualizerType);\r\n const mainResponse = await Promise.all([\r\n getBathroomVisualizerData(30, true, visualizerType),\r\n getQtCategories(layout.getCurrentLayoutAbbreviation(), visualizerType)\r\n ]);\r\n if (Config.isDevMode()) {\r\n console.log('loadVisualizer mainResponse-->', mainResponse);\r\n }\r\n const groupsResponse = await getBvGroups(visualizerType);\r\n if (Config.isDevMode()) {\r\n console.log('loadVisualizer groupsResponse-->', groupsResponse);\r\n }\r\n const additionalFeatures = await loadAdditionalVisualizerGroups(visualizerType);\r\n layout.loadNewFeatures(Object.assign({}, mainResponse[0], {\r\n features: [...mainResponse[0].features, ...additionalFeatures]\r\n }));\r\n layout.setGroupsItemsCount(groupsResponse.data);\r\n // if (qtCategories.length) { //todo the most painful part // reactivate needed\r\n // this.loadQtCategoriesFeatures(qtCategories); // load features from feature groups\r\n // }\r\n layout.createCustomConfigurations();\r\n layout.setGroupsItemsCount(groupsResponse.data); // not sure why we need it two items but ok, let it be\r\n layout.setDefaultFeatures();\r\n if (Array.isArray(mainResponse[1]) && mainResponse[1].length) {\r\n layout.setQtCategoriesSubparts(mainResponse[1]); // set QtCategories subParts(wait until defaults are set)\r\n // this.loadQtCategoriesFeatures(qtCategories); // load features from feature groups second time!!\r\n // after qtCategories are set (because we need partIdExistInQtCategory logic)\r\n }\r\n parseWizardResponse(mainResponse[0], mainResponse[1], visualizerType);\r\n // const needToLoadDefaultPreset = !document.kvConfig.jobId; // we should apply saved preset, we don't need the default one\r\n const needToLoadDefaultPreset = true; // we should apply this preset because if it's the first time - then it should apply\r\n if (needToLoadDefaultPreset && Array.isArray(mainResponse[0].defaults)) {\r\n const roomPreset = mainResponse[0].defaults.find(preset => preset.loadByTheDefault);\r\n if (roomPreset) {\r\n const layout_type = +roomPreset.layout_type;\r\n const needToChangeLayout = (layout_type || layout_type === 0) && (layout_type !== +layout.type);\r\n if (needToChangeLayout) {\r\n // await this.changeLayout(layout_type, true)\r\n }\r\n await layout.setItemsFromBvState(\r\n roomPreset, false, (bvState) => bvState, true, visualizerType\r\n )\r\n }\r\n }\r\n\r\n layout.initialized = true;\r\n console.log(\"new layout initialized\", layout);\r\n window.requestInProcess = false;\r\n store.dispatch(addVisualizersLoaded(layout.visualizerType));\r\n store.dispatch(updateCanvasCount());\r\n\r\n return true\r\n\r\n } catch (error) {\r\n loaderDisable();\r\n console.log(\"error\", error);\r\n return false\r\n }\r\n}\r\n\r\nexport default loadVisualizer\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport MenuList from '@mui/material/MenuList';\r\nimport ListItemIcon from '@mui/material/ListItemIcon';\r\nimport SvgIcon from \"@mui/material/SvgIcon\";\r\nimport TwitterIcon from '@mui/icons-material/Twitter';\r\n\r\nimport {LookShareIcons} from \"../../../../common/icons\";\r\nimport {setLookOverlayOpened, setLookReturnAction} from \"../../../../../actions/lookFunctions\";\r\nimport {LOOK_OVERLAYS} from \"../../../core/constants\";\r\nimport {saveQuoteAndShare} from \"../../lookFunctions2\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport {pricingIsLocked} from \"../../lookNavigationFunctions\";\r\n\r\nexport const SHARE_BUTTONS = {\r\n facebook: \"facebook\",\r\n pinterest: \"pinterest\",\r\n twitter: \"twitter\",\r\n}\r\n\r\nexport const getShareConfig = ({height, width}) => {\r\n const left = window.outerWidth / 2 + (window.screenX || window.screenLeft || 0) - width / 2;\r\n const top = window.outerHeight / 2 + (window.screenY || window.screenTop || 0) - height / 2;\r\n const config = {\r\n height: height,\r\n width: width,\r\n left: left,\r\n top: top,\r\n location: 'no',\r\n toolbar: 'no',\r\n status: 'no',\r\n directories: 'no',\r\n menubar: 'no',\r\n scrollbars: 'yes',\r\n resizable: 'no',\r\n centerscreen: 'yes',\r\n chrome: 'yes'\r\n }\r\n return Object.keys(config).map(key => key + '=' + config[key]).join(', ');\r\n};\r\n\r\nconst LookSideBarShareButtons = (props) => {\r\n\r\n const {handleClose, userIsLoggedIn, propsShareUrl, setLookOverlayOpened, setLookReturnAction} = props;\r\n\r\n const shareClickButton = (buttonKey) => {\r\n switch (buttonKey) {\r\n case SHARE_BUTTONS.facebook:\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookSidebarFacebook);\r\n break;\r\n case SHARE_BUTTONS.twitter:\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookSidebarTwitter);\r\n break;\r\n case SHARE_BUTTONS.pinterest:\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookSidebarPinterest);\r\n break;\r\n default:\r\n break;\r\n }\r\n if (!userIsLoggedIn) {\r\n const {isLixil} = pricingIsLocked();\r\n if (isLixil) {\r\n setLookOverlayOpened(LOOK_OVERLAYS.questionShare);\r\n setLookReturnAction(buttonKey);\r\n } else {\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture, buttonKey);\r\n }\r\n return false;\r\n }\r\n\r\n handleClose();\r\n // if (jobId) {\r\n // shareLogic(buttonKey)\r\n // } else {\r\n saveQuoteAndShare(buttonKey, propsShareUrl);\r\n // }\r\n }\r\n\r\n return (\r\n \r\n {Object.keys(SHARE_BUTTONS).map(buttonKey => {\r\n const icon = (buttonKey === \"twitter\") ? : {LookShareIcons[buttonKey]};\r\n return (\r\n shareClickButton(buttonKey)}>\r\n {icon}\r\n \r\n \r\n )\r\n })}\r\n \r\n )\r\n};\r\n\r\nLookSideBarShareButtons.propTypes = {\r\n handleClose: PropTypes.func.isRequired,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {userIsLoggedIn} = store.userState;\r\n const {shareUrl} = store.serverState;\r\n return {\r\n userIsLoggedIn,\r\n propsShareUrl: shareUrl,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookOverlayOpened,\r\n setLookReturnAction,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LookSideBarShareButtons)\r\n","import orderBy from \"lodash/orderBy\";\r\nimport {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {cabinetThumbnail} from \"../../../kvComponent/core/assets\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport Handle from \"../subparts/cabinet/handle\";\r\nimport TopCabinet from \"../subparts/cabinet/topCabinet\";\r\nimport TallCabinet from \"../subparts/cabinet/tallCabinet\";\r\nimport CrownMolding from \"../subparts/cabinet/crownMolding\";\r\nimport BottomCabinet from \"../subparts/cabinet/bottomCabinet\";\r\nimport {setActiveFeaturesBeforeAllWalls} from \"../../../look/lookNavigation/lookNavigationFunctions\";\r\nimport {CABINET_GROUP} from \"../../../kvComponent/core/constants\";\r\nimport BottomHandle from \"../subparts/cabinet/bottomHandle\";\r\nimport TopHandle from \"../subparts/cabinet/topHandle\";\r\nimport DoorHandle from \"../subparts/cabinet/doorHandle\";\r\nimport DrawerHandle from \"../subparts/cabinet/drawerHandle\";\r\n\r\nexport default class Cabinet extends Part {\r\n static id = 'Cabinet';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Cabinet';\r\n this.partThumbnail = cabinetThumbnail;\r\n this.partThumbnailSize = \"70%\";\r\n this.translateId = \"visualizer.kitchen.cabinet\";\r\n\r\n // related items\r\n this.handle = null;\r\n this.bottomHandle = null;\r\n this.topHandle = null;\r\n this.topCabinet = null;\r\n this.doorHandle = null;\r\n this.drawerHandle = null;\r\n this.crownMolding = null;\r\n this.relatedGroupNames = [\"Handle\", \"Bottom Handle\", \"Top Handle\", \"Bottom Cabinet\", \"Top Cabinet\", \"Crown Molding\",\r\n \"Door Handle\", \"Drawer Handle\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Handle\":\r\n relatedItemName = \"handle\";\r\n RelatedItemClass = Handle;\r\n break;\r\n case \"Top Handle\":\r\n relatedItemName = \"topHandle\";\r\n RelatedItemClass = TopHandle;\r\n break;\r\n case \"Bottom Handle\":\r\n relatedItemName = \"bottomHandle\";\r\n RelatedItemClass = BottomHandle;\r\n break;\r\n case \"Bottom Cabinet\":\r\n relatedItemName = \"bottomCabinet\";\r\n RelatedItemClass = BottomCabinet;\r\n break;\r\n case \"Top Cabinet\":\r\n relatedItemName = \"topCabinet\";\r\n RelatedItemClass = TopCabinet;\r\n break;\r\n case \"Tall Cabinet\":\r\n relatedItemName = \"tallCabinet\";\r\n RelatedItemClass = TallCabinet;\r\n break;\r\n case \"Crown Molding\":\r\n relatedItemName = \"crownMolding\";\r\n RelatedItemClass = CrownMolding;\r\n break;\r\n case \"Door Handle\":\r\n relatedItemName = \"doorHandle\";\r\n RelatedItemClass = DoorHandle;\r\n break;\r\n case \"Drawer Handle\":\r\n relatedItemName = \"drawerHandle\";\r\n RelatedItemClass = DrawerHandle;\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n getRelatedItems() {\r\n return orderBy(this.relatedItems, 'layerPriority');\r\n }\r\n\r\n subParts(withHidden = true, hideWithoutFeatures = false) {\r\n return this.getRelatedItems()\r\n .filter(item => this.filterRelatedItem(item, withHidden))\r\n .filter(item => {\r\n if ((item.partId === \"crown_molding\" || item.partId === \"top_handle\") && hideWithoutFeatures && item.allFeaturesReceived) {\r\n return item.navigationSubItems({}, \"\").length\r\n }\r\n return item\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n getTopCabinetType() {\r\n if (this.topCabinet && this.topCabinet.activeFeature) {\r\n if (this.topCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"]) {\r\n return this.topCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"][0]\r\n } else {\r\n // console.log(\"no topCabinet metaData!\", this.topCabinet.activeFeature);\r\n return \"\"\r\n }\r\n }\r\n return \"\"\r\n }\r\n\r\n // getTopCabinetLayout() {\r\n //\r\n // if (this.topCabinet && this.topCabinet.activeFeature) {\r\n // if (this.topCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"]) {\r\n // return this.topCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"][0]\r\n // } else {\r\n // // console.log(\"no topCabinet metaData!\", this.topCabinet.activeFeature);\r\n // return \"\"\r\n // }\r\n // }\r\n // return \"ALL\"\r\n // }\r\n\r\n getBottomCabinetType() {\r\n if (this.bottomCabinet && this.bottomCabinet.activeFeature) {\r\n if (this.bottomCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"]) {\r\n return this.bottomCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"][0]\r\n } else {\r\n // console.log(\"no bottomCabinet metaData!\", this.bottomCabinet.activeFeature);\r\n return \"\"\r\n }\r\n }\r\n return \"\"\r\n }\r\n\r\n getTopCabinetApplianceType() {\r\n if (this.topCabinet && this.topCabinet.activeFeature) {\r\n if (this.topCabinet.activeFeature.dbFeature.metaData[\"Appliance\"]) {\r\n return this.topCabinet.activeFeature.dbFeature.metaData[\"Appliance\"][0]\r\n } else {\r\n // console.log(\"no Appliance metaData!\", this.topCabinet.activeFeature);\r\n return \"Hood\"\r\n }\r\n }\r\n return \"Hood\"\r\n }\r\n\r\n getTopCabinetShadowLayout() {\r\n if (this.topCabinet && this.topCabinet.activeFeature && this.topCabinet.activeFeature.dbFeature.metaData[\"CabinetLayout\"]) {\r\n return this.topCabinet.activeFeature.dbFeature.metaData[\"CabinetLayout\"][0]\r\n }\r\n return \"\"\r\n }\r\n\r\n getBottomCabinetApplianceType() {\r\n if (this.bottomCabinet && this.bottomCabinet.activeFeature) {\r\n if (this.bottomCabinet.activeFeature.dbFeature.metaData[\"Appliance\"]) {\r\n return this.bottomCabinet.activeFeature.dbFeature.metaData[\"Appliance\"][0]\r\n } else {\r\n // console.log(\"no Appliance metaData!\", this.bottomCabinet.activeFeature);\r\n return \"Range\"\r\n }\r\n }\r\n return \"Range\"\r\n }\r\n\r\n setPrevioslySelected() {\r\n setActiveFeaturesBeforeAllWalls(CABINET_GROUP);\r\n }\r\n\r\n}\r\n","\r\nimport {postSignInAuth} from \"../api/lixil-api\";\r\n\r\n// export const SET_APP_JWT_TOKEN = \"SET_APP_JWT_TOKEN\";\r\n//\r\n// export const setAppJwtToken = (jwtToken) => ({\r\n// type: SET_APP_JWT_TOKEN,\r\n// payload: {jwtToken}\r\n// });\r\n\r\nexport const setLixilAuthorizationToken = () => {\r\n return async (dispatch, getState) => {\r\n\r\n const {useLixilCalendar} = getState().fabricatorState;\r\n if (!useLixilCalendar) {\r\n return\r\n }\r\n const postAuthResponse = await postSignInAuth();\r\n console.log(\"postAuthResponse\", postAuthResponse);\r\n // if (postAuthResponse && postAuthResponse.data && postAuthResponse.data.data && postAuthResponse.data.data.jwtToken) {\r\n // dispatch(setAppJwtToken(postAuthResponse.data.data.jwtToken)); // just in case, we don't need it anymore\r\n // }\r\n return false\r\n }\r\n}\r\n\r\nexport const LIXIL_PRODUCT_TYPES = {\r\n srBathing: \"SR BATHING\",\r\n bathRemodel: \"Bath Remodel\",\r\n}\r\n\r\nconst lixilTermsText = \"By clicking “Let's Review” above, I consent to receive from American Standard and any party on its behalf at any time emails, telemarketing calls using an autodialer, artificial voices or pre-recordings and SMS text messages, which could result in wireless charges, at the number provided above. I understand that consent is not a condition of purchase. I also agree to the Terms of Use and Privacy policy, which are also linked at the bottom of this page.\";\r\n\r\nexport const getLixilCampaignInfo = (store) => {\r\n\r\n const {wizardState, appointmentState, globalState} = store;\r\n\r\n // const isShowerRemodel = wizardState.wizardSelectedValues\r\n // && wizardState.wizardSelectedValues[1]\r\n // && wizardState.wizardSelectedValues[1].selectedFeature && (\r\n // (wizardState.wizardSelectedValues[1].selectedFeature.customDisplayName === \"Replace Shower\")\r\n // || (wizardState.wizardSelectedValues[1].selectedFeature.sharedFeatureName === \"Replace Shower\")\r\n // || (\r\n // (wizardState.wizardActiveItem && (wizardState.wizardActiveItem.id === 2)) && (\r\n // (wizardState.wizardSelectedValues[1].selectedFeature.customDisplayName === \"Convert Tub to A Shower\")\r\n // || (wizardState.wizardSelectedValues[1].selectedFeature.sharedFeatureName === \"Convert Tub to A Shower\")\r\n // )\r\n // )\r\n // );\r\n\r\n const textWithUpdatedButton = globalState.footerInfoButtonText\r\n ? lixilTermsText.replace(\"Let's Review\", globalState.footerInfoButtonText)\r\n : lixilTermsText;\r\n\r\n const isSrBathing = wizardState.wizardActiveItem && (wizardState.wizardActiveItem.id === 2);\r\n\r\n const addressIsNotSupported = appointmentState && appointmentState.appointmentsNotAvailable;\r\n\r\n if (isSrBathing) {\r\n return {\r\n \"Campaign\": \"SOCIAL\",\r\n \"SubID\": addressIsNotSupported ? \"8087\" : \"8077\",\r\n \"PubID\": addressIsNotSupported ? \"SB-Social-OnlineForm-NoAppt\" : \"Social-SB-OnlineApptForm\",\r\n \"DNIS\": \"855-254-7620\",\r\n \"Product\": LIXIL_PRODUCT_TYPES.srBathing,\r\n \"terms_stc\": textWithUpdatedButton,\r\n \"promoter_id_stc\": addressIsNotSupported ? \"\" : \"3846\",\r\n }\r\n }\r\n return {\r\n \"Campaign\": \"SOCIAL\",\r\n \"SubID\": addressIsNotSupported ? \"8088\" : \"8079\",\r\n \"PubID\": addressIsNotSupported ? \"BR-Social-OnlineForm-NoAppt\" : \"BR-Social-OnlineApptForm\",\r\n \"DNIS\": \"855-254-7623\",\r\n \"Product\": LIXIL_PRODUCT_TYPES.bathRemodel,\r\n \"terms_stc\": textWithUpdatedButton,\r\n \"promoter_id_stc\": addressIsNotSupported ? \"\" : \"3846\",\r\n }\r\n}\r\n","import * as types from \"./appointmentActions\";\r\n\r\nexport const defaultTimeValue = \"Select time...\";\r\n\r\nconst initialState = {\r\n appointmentDate: \"\",\r\n appointmentTime: defaultTimeValue,\r\n appointmentTimeSlot: defaultTimeValue,\r\n timeStepIsActive: false,\r\n availableAppointmentDates: [],\r\n salesRepID: \"\", // lixil reponse sales id\r\n appointmentsNotAvailable: true, // lixil faraday reponse not available for this address\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.SET_APPOINTMENT_DATE:\r\n return {...state, appointmentDate: action.payload, appointmentTime: defaultTimeValue, appointmentTimeSlot: defaultTimeValue}\r\n case types.SET_APPOINTMENT_TIME:\r\n return {...state,\r\n appointmentTime: action.payload.time,\r\n appointmentTimeSlot: action.payload.timeSlot\r\n }\r\n case types.SET_APPOINTMENT_TIME_STEP_ACTIVE:\r\n return {...state, timeStepIsActive: action.payload}\r\n case types.SET_AVAILABLE_APPOINTMENTS:\r\n case types.SET_SALES_REP_ID:\r\n case types.SET_APPOINTMENTS_NOT_AVAILABLE:\r\n return {...state, ...action.payload}\r\n\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import {LEAD_WIZARD_GROUP_TYPES} from \"./wizardLogic\";\r\n\r\n/**\r\n * @param dbFeature {dbFeatureInterface}\r\n * @param wizardGroup {wizardGroupInterface}\r\n * @returns {boolean}\r\n */\r\nexport const featureIsExcluded = (dbFeature, wizardGroup) => {\r\n const {sku, featureDefinitionID, customDisplayName, matchingName} = dbFeature;\r\n if (wizardGroup.useIncluded && wizardGroup.featuresIncluded) {\r\n return !wizardGroup.featuresIncluded.some(includedFeature => {\r\n return (includedFeature.sharedFeatureName && (includedFeature.sharedFeatureName === matchingName))\r\n || (includedFeature.featureDefinitionId === featureDefinitionID)\r\n || (!includedFeature.sharedFeatureName && (includedFeature.name === customDisplayName))\r\n || (includedFeature.sku && sku && (includedFeature.sku === sku))\r\n })\r\n }\r\n return false\r\n}\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param features {featureInterface}\r\n * @param wizardGroup {wizardGroupInterface}\r\n * @returns {array}\r\n */\r\nexport const getFilteredNavItems = (features, wizardGroup) => {\r\n return features.filter(feature => !featureIsExcluded(feature, wizardGroup))\r\n};\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @param wizardActiveStep {number}\r\n * @param wizardSelectedValues {object}\r\n * @param prevStepGroups {[wizardGroupInterface]}\r\n * @param additionalWizardValuesToCheck {object}\r\n * @returns {array}\r\n */\r\nexport const getCurrentGroups = (wizardActiveItem,\r\n wizardActiveStep,\r\n wizardSelectedValues,\r\n prevStepGroups = [],\r\n additionalWizardValuesToCheck= null) => {\r\n if (!wizardActiveItem || wizardActiveStep < 0) {\r\n return []\r\n }\r\n const stepStr = \"\" + wizardActiveStep;\r\n\r\n if (wizardActiveStep === 0) {\r\n return getCurrentGroupsFromSource(stepStr, wizardActiveItem)\r\n }\r\n\r\n const selectedPrevStep = wizardSelectedValues[wizardActiveStep - 1];\r\n if (!selectedPrevStep || !selectedPrevStep.wizardGroup) {\r\n if (prevStepGroups.length && prevStepGroups[0].id) {\r\n if (additionalWizardValuesToCheck) { // here we check also previously selected values to make steps similar to prev choices\r\n let foundPreviouslySelectedGroup = null;\r\n if (prevStepGroups.every(wg => wg.nodeType === \"custom\")) {\r\n Object.keys(additionalWizardValuesToCheck).forEach(key => {\r\n if ((key > Object.keys(wizardSelectedValues).length)\r\n && !additionalWizardValuesToCheck[key].partId\r\n && additionalWizardValuesToCheck[key].wizardGroup) {\r\n prevStepGroups.forEach(wg => {\r\n if (wg.id === additionalWizardValuesToCheck[key].wizardGroup.id) {\r\n foundPreviouslySelectedGroup = wg;\r\n }\r\n });\r\n }\r\n });\r\n } else {\r\n // here we can add simple feature group, but no need for now\r\n }\r\n if (foundPreviouslySelectedGroup) {\r\n return getCurrentGroupsFromSource(foundPreviouslySelectedGroup.id, wizardActiveItem)\r\n }\r\n }\r\n return getCurrentGroupsFromSource(prevStepGroups[0].id, wizardActiveItem)\r\n }\r\n // console.log(\"Previous step is not selected! Check selected values --> \", wizardSelectedValues);\r\n return []\r\n }\r\n\r\n if (selectedPrevStep && selectedPrevStep.wizardGroup && selectedPrevStep.wizardGroup.mergedGroups && selectedPrevStep.selectedFeature) {\r\n const wizardGroupWithSelectedFeature = selectedPrevStep.wizardGroup.mergedGroups.find(wizGroup => {\r\n return !featureIsExcluded(selectedPrevStep.selectedFeature, wizGroup)\r\n });\r\n if (wizardGroupWithSelectedFeature) {\r\n return getCurrentGroupsFromSource(wizardGroupWithSelectedFeature.id, wizardActiveItem);\r\n }\r\n }\r\n\r\n // const prevStepStr = \"\" + (wizardActiveStep - 1);\r\n // const prevGroups = getCurrentGroupsFromSource(prevStepStr, wizardActiveItem);\r\n // if (prevGroups.length > 1 && wizardActiveStep > 0) {\r\n // return [selectedPrevStep.wizardGroup]\r\n // }\r\n\r\n return getCurrentGroupsFromSource(selectedPrevStep.wizardGroup.id, wizardActiveItem);\r\n}\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param source {string}\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @returns array {[wizardGroupInterface]}\r\n */\r\nexport const getCurrentGroupsFromSource = (source, wizardActiveItem) => {\r\n if (!wizardActiveItem) {\r\n return []\r\n }\r\n const siblingGroups = wizardActiveItem.wizardGroups.filter(wizGroup => {\r\n return wizardActiveItem.wizardEdges.some(wizEdge => wizEdge.source === source && wizEdge.target === wizGroup.id && wizGroup.enabled)\r\n });\r\n // console.log(\"siblingGroups\", siblingGroups);\r\n const areSameSiblingGroups = siblingGroups.length > 1 && siblingGroups.every(siblingGroup => {\r\n return (siblingGroup.nodeType === LEAD_WIZARD_GROUP_TYPES.group) && (siblingGroup.groupName === siblingGroups[0].groupName)\r\n });\r\n if (areSameSiblingGroups) {\r\n // console.log(\"areSameSiblingGroups\", areSameSiblingGroups);\r\n\r\n if (siblingGroups.every(wizardGroup => wizardGroup.useIncluded && wizardGroup.featuresIncluded)) { // new logic\r\n const featuresIncluded = siblingGroups.reduce((total, wizardGroup) => {\r\n wizardGroup.featuresIncluded.forEach(included => {\r\n if (!total.some(exclObj => (exclObj.featureDefinitionId === included.featureDefinitionId))) {\r\n total.push(included)\r\n }\r\n })\r\n return total\r\n }, []);\r\n const newGroup = Object.assign({}, siblingGroups[0], {\r\n mergedGroups: siblingGroups,\r\n featuresExcluded: [], // not sure if we need it\r\n featuresIncluded\r\n })\r\n return [newGroup]\r\n }\r\n\r\n const allFeaturesExcluded = siblingGroups.reduce((total, wizardGroup) => {\r\n wizardGroup.featuresExcluded.forEach(excluded => {\r\n if (!excluded) {\r\n return\r\n }\r\n if (typeof excluded === \"object\") { // new logic for excluded\r\n if (!total.some(exclObj => (typeof exclObj === \"object\") && (exclObj.featureDefinitionId === excluded.featureDefinitionId))) {\r\n total.push(excluded)\r\n }\r\n } else if (!total.includes(excluded)) {\r\n total.push(excluded)\r\n }\r\n })\r\n return total\r\n }, []);\r\n const featuresExcluded = allFeaturesExcluded.filter(exclFeature => {\r\n return siblingGroups.every(siblingGroup => {\r\n if (typeof exclFeature === \"object\") {\r\n return siblingGroup.featuresExcluded.some(exclObj => (typeof exclObj === \"object\") && (exclObj.featureDefinitionId === exclFeature.featureDefinitionId))\r\n }\r\n return siblingGroup.featuresExcluded.includes(exclFeature)\r\n })\r\n })\r\n const newGroup = Object.assign({}, siblingGroups[0], {\r\n mergedGroups: siblingGroups,\r\n featuresExcluded\r\n })\r\n return [newGroup]\r\n }\r\n return siblingGroups\r\n}\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @param wizardSelectedValues {object}\r\n * @param returnAllSteps {boolean}\r\n * @param additionalWizardValuesToCheck {object}\r\n * @returns {array}\r\n */\r\nexport const getAvailableSteps = (wizardActiveItem, wizardSelectedValues, returnAllSteps, additionalWizardValuesToCheck = null) => {\r\n if (!wizardActiveItem || !wizardActiveItem.wizardGroups || !wizardActiveItem.wizardEdges) {\r\n return []\r\n }\r\n\r\n const maxWizardSteps = 50;\r\n\r\n let stepsArray = [{\r\n stepIndex: 0,\r\n stepGroups: getCurrentGroupsFromSource(\"0\", wizardActiveItem),\r\n }];\r\n\r\n for (let i = 1; i <= maxWizardSteps; i++) {\r\n const prevStepGroups = returnAllSteps && stepsArray[i - 1] ? stepsArray[i - 1].stepGroups : [];\r\n const currentGroups = getCurrentGroups(wizardActiveItem, i, wizardSelectedValues, prevStepGroups, additionalWizardValuesToCheck)\r\n if (!currentGroups.length) {\r\n break;\r\n }\r\n stepsArray.push({\r\n stepIndex: i,\r\n stepGroups: currentGroups\r\n })\r\n }\r\n\r\n return stepsArray\r\n}\r\n\r\n\r\n/**\r\n * this returns new wizard steps depending on the current selection\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @param currentStep {number}\r\n * @param allWizardSelectedValues {object}\r\n * @returns {object}\r\n */\r\nexport const getNextWizardSteps = (wizardActiveItem, currentStep, allWizardSelectedValues) => {\r\n// const oldWizardSteps = getAvailableSteps(wizardActiveItem, oldWizardSelectedValues, true);\r\n\r\n let newValues = {};\r\n Object.keys(allWizardSelectedValues).forEach(key => {\r\n if (+key <= currentStep) {\r\n newValues[key] = allWizardSelectedValues[key] // here we create values object just until the current selected value\r\n }\r\n });\r\n\r\n const afterCurrentSelectionWizardSteps = getAvailableSteps(wizardActiveItem, newValues, true, allWizardSelectedValues);\r\n const allWizardSteps = getAvailableSteps(wizardActiveItem, allWizardSelectedValues, true);\r\n\r\n const nextStep = currentStep + 1;\r\n\r\n if (\r\n afterCurrentSelectionWizardSteps[nextStep] && allWizardSteps[nextStep]\r\n && afterCurrentSelectionWizardSteps[nextStep].stepGroups.every((wizardGroup, wizardGroupIndex) => {\r\n return allWizardSteps[nextStep].stepGroups[wizardGroupIndex] && wizardGroup.id === allWizardSteps[nextStep].stepGroups[wizardGroupIndex].id\r\n }) && (allWizardSelectedValues[nextStep] && allWizardSelectedValues[nextStep].wizardGroup\r\n && afterCurrentSelectionWizardSteps[nextStep].stepGroups.some(wizG => allWizardSelectedValues[nextStep].wizardGroup.id === wizG.id))\r\n ) {\r\n return allWizardSteps // keep it, as we didn't change the flow\r\n }\r\n\r\n return afterCurrentSelectionWizardSteps // use new ones, as the flow was changed\r\n\r\n}\r\n\r\n\r\n/**\r\n * this returns conflicting with the current selections steps\r\n * @param allWizardSelectedValues {object}\r\n * @param actionPayload {object} // {wizardActiveItem, quoteIndex}\r\n * @returns {array}\r\n */\r\nexport const getConflictingWizardSteps = (allWizardSelectedValues, actionPayload) => {\r\n\r\n const {wizardActiveItem} = actionPayload;\r\n\r\n const currentStep = +Object.keys(actionPayload.wizardSelectedValues)[0];\r\n\r\n let conflictingWizardSteps = [];\r\n const newWizardSteps = getNextWizardSteps(wizardActiveItem, currentStep, allWizardSelectedValues);\r\n\r\n Object.keys(allWizardSelectedValues).forEach(stepIndex => {\r\n if (allWizardSelectedValues[stepIndex] && allWizardSelectedValues[stepIndex].wizardGroup && (!newWizardSteps[stepIndex]\r\n || !newWizardSteps[stepIndex].stepGroups.some(wizardGroup => wizardGroup.id === allWizardSelectedValues[stepIndex].wizardGroup.id))) {\r\n conflictingWizardSteps.push({\r\n stepIndex,\r\n wizardGroupId: allWizardSelectedValues[stepIndex].wizardGroup.id,\r\n });\r\n }\r\n })\r\n\r\n // console.log(\"newWizardSteps\", newWizardSteps);\r\n // console.log(\"allWizardSelectedValues\", allWizardSelectedValues);\r\n // console.log(\"conflictingWizardSteps\", conflictingWizardSteps);\r\n\r\n return conflictingWizardSteps\r\n}\r\n\r\n\r\nexport const getUpdatedAllWizardValues = (state, quoteIndex, wizardItemId, wizardSelectedValues) => {\r\n const newWizObject = {\r\n quoteIndex,\r\n wizardItemId,\r\n lastVisitedStep: state.wizardActiveStep,\r\n wizardSelectedValues: Object.assign({}, wizardSelectedValues)\r\n };\r\n const existingIndex = state.allWizardsValues.findIndex(wizSelObject => {\r\n return wizSelObject.wizardItemId === newWizObject.wizardItemId && wizSelObject.quoteIndex === newWizObject.quoteIndex\r\n });\r\n existingIndex > -1\r\n ? state.allWizardsValues.splice(existingIndex, 1, newWizObject)\r\n : state.allWizardsValues.push(newWizObject);\r\n\r\n state.allWizardsValues = state.allWizardsValues.map(wizObject => {\r\n if (wizObject.quoteIndex === quoteIndex) {\r\n wizObject.isLastActiveWizard = wizObject.wizardItemId === wizardItemId // to return back and force correctly\r\n }\r\n return wizObject\r\n });\r\n\r\n return [...state.allWizardsValues]\r\n}\r\n","import values from 'lodash/values';\r\nimport invert from 'lodash/invert';\r\nimport snakeCase from 'lodash/snakeCase';\r\n\r\nimport {Bathtub} from \"./parts/bathtub\";\r\nimport FloorNew from \"./parts/floorNew\";\r\nimport {Vanity} from \"./parts/vanity\";\r\nimport {Window} from \"./parts/window\";\r\nimport {Ceiling} from \"./parts/ceiling\";\r\nimport {Toilet} from \"./parts/toilet\";\r\nimport {Shower} from \"./parts/shower\";\r\nimport {ShowerTubCombo} from \"./parts/showerTubCombo\";\r\nimport GlobalShadow from \"./parts/globalShadow\";\r\nimport {Wall} from \"./parts/wall\";\r\nimport ExternallWall from \"./subparts/wall/externallWall\";\r\nimport Layer from \"../../visComponents/layer\";\r\nimport Z from './parts/zIndex';\r\nimport {LayoutType, LayoutAbbreviation, bathTubTypeToString, ShowerComboTubType}\r\n from \"./constants\";\r\n\r\nimport {\r\n largeLayoutShadow,\r\n smallLayoutShadow,\r\n shower30inWallShadow,\r\n LayoutThumbnails\r\n} from './assets';\r\nimport LayoutCommon from \"../../visComponents/layoutCommon\";\r\nimport Other from \"./parts/other\";\r\nimport NonVisualizerSubPart from \"./subparts/nonVisualizerSubPart\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport {ShowerAccessories} from \"./parts/showerAccessories\";\r\nimport store from \"../../../store\";\r\nimport {AVAILABLE_VISUALIZER_TYPES} from \"../../../config\";\r\n\r\nexport class Layout extends LayoutCommon {\r\n\r\n /**\r\n * @type {int}\r\n */\r\n defaultType = LayoutType.Large;\r\n type = this.defaultType;\r\n localStorageKey = \"bvState\";\r\n layersBinding = \"Bathroom\";\r\n visualizerType = AVAILABLE_VISUALIZER_TYPES.Bathroom;\r\n layoutNames = LayoutAbbreviation;\r\n layoutTypes = LayoutType;\r\n layoutThumbnails = LayoutThumbnails;\r\n zIndexes = Z.layouts;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.parts[Vanity.id] = new Vanity();\r\n this.parts[Shower.id] = new Shower();\r\n this.parts[ShowerTubCombo.id] = new ShowerTubCombo();\r\n this.parts[ShowerAccessories.id] = new ShowerAccessories();\r\n this.parts[Bathtub.id] = new Bathtub();\r\n this.parts[Toilet.id] = new Toilet();\r\n this.parts[Wall.id] = new Wall(); // wall should render it's layers only after vanity & shower\r\n this.parts[FloorNew.id] = new FloorNew();\r\n this.parts[Ceiling.id] = new Ceiling();\r\n this.parts[Window.id] = new Window();\r\n this.parts[GlobalShadow.id] = new GlobalShadow();\r\n this.parts[Other.id] = new Other();\r\n\r\n values(this.parts).forEach(part => part.layout = this);\r\n }\r\n\r\n resetEverything() {\r\n const features = this.getFeatures();\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n features.forEach(parentGroup => {\r\n if (parentGroup instanceof Shower) {\r\n parentGroup.activeSubType_ = \"Custom\";\r\n } else if (parentGroup instanceof ShowerTubCombo) {\r\n parentGroup.showerTubComboIsActive = false;\r\n parentGroup.bottomTub = ShowerComboTubType.bathtub_liner;\r\n }\r\n parentGroup.setDefault(this);\r\n parentGroup.placeholderChanged = false;\r\n parentGroup.firstClick[activeQuoteIndex] = false;\r\n // if (parentGroup instanceof Shower && parentGroup.showerBody.featuresParts) {\r\n // parentGroup.showerBody.featuresParts = {};\r\n // }\r\n if (parentGroup.relatedItems && parentGroup.relatedItems.length) {\r\n parentGroup.relatedItems.forEach((subPart) => {\r\n if (subPart.partId !== 'shower_body') {\r\n subPart.placeholderChanged = false;\r\n subPart.firstClick[activeQuoteIndex] = false;\r\n }\r\n subPart.disabled = subPart.defaultDisabled;\r\n if (Array.isArray(subPart.activeFeatureParts) && subPart.activeFeatureParts.length) {\r\n subPart.activeFeatureParts = subPart.setActiveFeatureParts();\r\n }\r\n if (subPart instanceof ExternallWall) {\r\n subPart.selectedByUser = false\r\n }\r\n });\r\n }\r\n });\r\n this.changeLayout(features);\r\n }\r\n\r\n getCurrentLayoutName(type = this.type) {\r\n return invert(LayoutType)[type];\r\n }\r\n\r\n getCurrentLayoutAbbreviation() {\r\n return LayoutAbbreviation[this.getCurrentLayoutName()]\r\n }\r\n\r\n addCustomLayers = (res) => {\r\n // add global shadow\r\n const globalShadowParent = this.parts[GlobalShadow.id]; // if no global shadow uploaded - take the hardcoded one\r\n if (!globalShadowParent.categoryEnabled || (globalShadowParent.activeFeature\r\n && (!globalShadowParent.activeFeature.layer || !globalShadowParent.activeFeature.layer.src))) {\r\n if (this.type === LayoutType.Large) {\r\n res.push(new Layer(\"bv\", Z.layouts.Large.Global_Shadow_Overlay, largeLayoutShadow, false));\r\n } else if (this.type === LayoutType.Small) {\r\n res.push(new Layer(\"bv\", Z.layouts.Small.Global_Shadow_Overlay, smallLayoutShadow, false));\r\n }\r\n }\r\n\r\n // add right ex wall shadow for complete showers\r\n const shower = this.parts[Shower.id];\r\n if (shower.showerSize() === \"30in\" && shower.activeSubType_ === \"Complete\" && !shower.showerTubComboIsActive() && this.type === LayoutType.Large) {\r\n res.push(new Layer(\"bv\", Z.layouts.Large.Shower.Custom60in.ExtrusionWallRightShadow, shower30inWallShadow, false));\r\n }\r\n return res\r\n }\r\n\r\n /**\r\n * Sets bv features from url\r\n */\r\n\r\n parseUrl(bvState) {\r\n if (bvState.disabled_parts) {\r\n bvState.disabled_parts = bvState.disabled_parts.split(\",\");\r\n }\r\n if (bvState.shower_floor_is_active) {\r\n bvState.shower_floor_is_active = bvState.shower_floor_is_active === \"true\"\r\n }\r\n if (bvState.shower_tub_combo_is_active) {\r\n bvState.shower_tub_combo_is_active = bvState.shower_tub_combo_is_active === \"true\"\r\n }\r\n if (bvState.shower_interior_wall_accent_parts) {\r\n bvState.shower_interior_wall_accent_parts = Number.isInteger(bvState.shower_interior_wall_accent_parts)\r\n ? [bvState.shower_interior_wall_accent_parts]\r\n : bvState.shower_interior_wall_accent_parts.split(\",\")\r\n }\r\n if (bvState.shower_interior_wall_parts) {\r\n bvState.shower_interior_wall_parts = Number.isInteger(bvState.shower_interior_wall_parts)\r\n ? [bvState.shower_interior_wall_parts]\r\n : bvState.shower_interior_wall_parts.split(\",\")\r\n }\r\n if (bvState.left_shower_wall_type) {\r\n switch (bvState.left_shower_wall_type) {\r\n case 30:\r\n case \"30\":\r\n case \"30X8\":\r\n bvState.left_shower_wall_type = \"30X8\";\r\n break;\r\n case 15:\r\n case \"15\":\r\n case \"15X4\":\r\n bvState.left_shower_wall_type = \"15X4\";\r\n break;\r\n case \"Pony\":\r\n bvState.left_shower_wall_type = \"Pony\";\r\n break;\r\n }\r\n }\r\n if (bvState[\"caddie_type\"] && this.parts[ShowerAccessories.id]) {\r\n this.parts[ShowerAccessories.id].caddie_type = bvState[\"caddie_type\"];\r\n }\r\n return bvState\r\n // console.log('restoring bvState from url...', bvState);\r\n }\r\n\r\n /**\r\n *\r\n * @param bvState {object}\r\n * @param setCartAndUserState {boolean}\r\n * @param useNames {boolean}\r\n * @param needToChangeLayout {boolean}\r\n * @param firstLoad {boolean}\r\n */\r\n setActiveFeaturesFromObject(bvState, setCartAndUserState = false, useNames = false, needToChangeLayout = true, firstLoad = false) {\r\n if (bvState) {\r\n\r\n const layout_type = +bvState.layout_type;\r\n needToChangeLayout = needToChangeLayout && (layout_type || layout_type === 0) && (layout_type !== +this.type);\r\n\r\n if (needToChangeLayout) {\r\n this.type = layout_type;\r\n }\r\n\r\n const vanity = this.parts[Vanity.id];\r\n const shower = this.parts[Shower.id];\r\n const showerTubCombo = this.parts[ShowerTubCombo.id];\r\n // const bathtub = this.parts[Bathtub.id];\r\n\r\n // to avoid checks below\r\n bvState.disabled_parts = bvState.disabled_parts || [];\r\n\r\n // const {activeQuoteIndex} = store.getState().quotesState;\r\n\r\n this.getFeatures()\r\n .forEach((parentGroup) => {\r\n if (parentGroup.menuType === 0 && parentGroup.partName !== \"Toilet\") {\r\n const partId = parentGroup.partId;\r\n const hasPreviouslySavedItem = this.selectedLayoutFeatures[layout_type]\r\n && this.selectedLayoutFeatures[layout_type][partId];\r\n if (bvState.hasOwnProperty(partId) || hasPreviouslySavedItem) {\r\n if (useNames) {\r\n parentGroup.activeFeature = parentGroup.getFeatureByPartName(bvState[partId]);\r\n if (!parentGroup.activeFeature && hasPreviouslySavedItem) {\r\n parentGroup.activeFeature = parentGroup.getFeatureByPartName(hasPreviouslySavedItem);\r\n }\r\n } else {\r\n parentGroup.activeFeature = parentGroup.getFeatureById(bvState[partId])\r\n || parentGroup.getDefaultFeature();\r\n }\r\n parentGroup.placeholderChanged = !!parentGroup.activeFeature;\r\n // parentGroup.firstClick[activeQuoteIndex] = !!parentGroup.activeFeature; // this makes steps selected! removed\r\n }\r\n if (parentGroup.activeFeature && firstLoad && !parentGroup.activeFeature.notAvailableInVisualizer) { // Leave non in vis features locked\r\n parentGroup.activeFeature.dbFeature.unlocked = true;\r\n }\r\n parentGroup.disabled = bvState.disabled_parts.includes(partId)\r\n } else {\r\n let subParts = parentGroup.relatedItems;\r\n subParts.forEach((subPart) => {\r\n const partId = subPart.partId;\r\n const hasPreviouslySavedItem = this.selectedLayoutFeatures[layout_type]\r\n && this.selectedLayoutFeatures[layout_type][partId];\r\n if (bvState.hasOwnProperty(partId) || hasPreviouslySavedItem) {\r\n if (useNames) {\r\n subPart.activeFeature = subPart.getFeatureByPartName(bvState[partId]);\r\n if (!subPart.activeFeature && hasPreviouslySavedItem) {\r\n subPart.activeFeature = subPart.getFeatureByPartName(hasPreviouslySavedItem);\r\n }\r\n } else {\r\n subPart.activeFeature = subPart.getFeatureById(bvState[partId]) || parentGroup.getDefaultFeature();\r\n }\r\n subPart.placeholderChanged = !!subPart.activeFeature;\r\n // subPart.firstClick[activeQuoteIndex] = !!subPart.activeFeature // this makes steps selected! removed\r\n if (partId === \"shower_body\") {\r\n subPart.showerBodySelectedByUser = true\r\n }\r\n }\r\n if (subPart.activeFeature && firstLoad && !subPart.activeFeature.notAvailableInVisualizer) {\r\n subPart.activeFeature.dbFeature.unlocked = true;\r\n }\r\n if (firstLoad) {\r\n subPart.placeholderChanged = true;\r\n }\r\n subPart.disabled = bvState.disabled_parts.includes(partId);\r\n })\r\n }\r\n });\r\n\r\n const partPredicate = (part, value) => useNames ? part.partName === value : +part.dbFeature.id === +value;\r\n Object.keys(bvState)\r\n .forEach((bvStateKey) => {\r\n if (bvStateKey === \"vanity_type\") {\r\n vanity.activeSubType_ = bvState.vanity_type.charAt(0).toUpperCase() + bvState.vanity_type.substr(1);\r\n }\r\n if (bvStateKey === \"shower_type\") {\r\n shower.activeSubType_ = bvState.shower_type.charAt(0).toUpperCase() + bvState.shower_type.substr(1);\r\n if (bvState.shower_type === \"complete\" && bvState.shower_parts.length) {\r\n shower.showerBody.activeFeatureParts = bvState.shower_parts.map(shower_part_id => {\r\n return shower.showerBody.featuresParts.find(_ => partPredicate(_, shower_part_id));\r\n });\r\n }\r\n }\r\n if (bvStateKey === \"shower_interior_wall_parts\") {\r\n if (bvState.shower_interior_wall_parts.length && shower.showerInteriorWall) {\r\n shower.showerInteriorWall.activeFeatureParts = bvState.shower_interior_wall_parts\r\n .map((shower_accent_wall_part_id) => {\r\n let accordingPart = shower.showerInteriorWall.featuresParts.find(_ => partPredicate(_, shower_accent_wall_part_id));\r\n if (!accordingPart) {\r\n const showerFeature = shower.showerInteriorWall.features.find(_ => partPredicate(_, bvState.shower_interior_wall));\r\n if (showerFeature) {\r\n const availableParts = shower.showerInteriorWall.setActiveFeatureParts(showerFeature);\r\n if (availableParts.length) {\r\n accordingPart = availableParts[0]\r\n }\r\n }\r\n }\r\n return accordingPart;\r\n });\r\n }\r\n }\r\n if (bvStateKey === \"shower_interior_wall_accent_parts\") {\r\n if (bvState.shower_interior_wall_accent_parts.length && shower.showerInteriorWallAccent) {\r\n shower.showerInteriorWallAccent.activeFeatureParts = bvState.shower_interior_wall_accent_parts\r\n .map((shower_accent_wall_part_id) => {\r\n return shower.showerInteriorWallAccent.featuresParts.find(_ => partPredicate(_, shower_accent_wall_part_id));\r\n });\r\n }\r\n }\r\n if (bvStateKey === \"shower_floor_is_active\") {\r\n shower.showerFloorIsActive = bvState[bvStateKey];\r\n }\r\n if (bvStateKey === \"shower_tub_combo_is_active\") {\r\n showerTubCombo.showerTubComboIsActive = bvState[bvStateKey];\r\n if (bvState[bvStateKey] && bvState.bottom_tub) {\r\n showerTubCombo.bottomTub = bvState.bottom_tub\r\n }\r\n if (bvState[bvStateKey] && bvState.left_shower_wall_type) {\r\n showerTubCombo.leftShowerWallType = bvState.left_shower_wall_type\r\n }\r\n }\r\n });\r\n\r\n if (needToChangeLayout) {\r\n this.changeLayout(this.getFeatures());\r\n }\r\n\r\n if (setCartAndUserState) {\r\n this.setCartStateAndUserStateFromBvState(bvState);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param bvState {object}\r\n * @param useNames {boolean}\r\n * @returns bvState {object}\r\n */\r\n addSpecificPropertiesToLocalStorage(bvState, useNames = false) {\r\n\r\n const bathTub = this.parts[Bathtub.id];\r\n const shower = this.parts[Shower.id];\r\n const showerTubCombo = this.parts[ShowerTubCombo.id];\r\n\r\n bvState.layout_type = this.type;\r\n\r\n Object.keys(bvState).forEach((bvStateKey) => {\r\n // console.log('bvStateKey', bvStateKey);\r\n if (bvStateKey === 'bathtub') {\r\n bvState.bathtub_type = bathTubTypeToString(bathTub.activeSubType_).toLowerCase();\r\n }\r\n if (bvStateKey === 'shower_body') {\r\n bvState.shower_type = shower.activeSubType_.toLowerCase();\r\n bvState.shower_floor_is_active = shower.showerFloorIsActive;\r\n if (bvState.shower_type === \"complete\") {\r\n bvState.shower_parts = shower.showerBody.activeFeatureParts\r\n .filter(activeFeaturePart => activeFeaturePart)\r\n .map(activeFeaturePart => {\r\n return useNames ? activeFeaturePart.partName : activeFeaturePart.dbFeature.id\r\n });\r\n }\r\n bvState.shower_tub_combo_is_active = shower.showerTubComboIsActive();\r\n if (bvState.shower_tub_combo_is_active) {\r\n bvState.bottom_tub = showerTubCombo.bottomTub;\r\n bvState.left_shower_wall_type = showerTubCombo.leftShowerWallType;\r\n }\r\n }\r\n if (bvStateKey === 'shower_interior_wall') {\r\n bvState.shower_interior_wall_parts = shower.showerInteriorWall.activeFeatureParts\r\n .filter(activeFeaturePart => activeFeaturePart)\r\n .map(activeFeaturePart => {\r\n return useNames ? activeFeaturePart.partName : activeFeaturePart.dbFeature.id\r\n });\r\n }\r\n if (bvStateKey === 'shower_interior_wall_accent') {\r\n bvState.shower_interior_wall_accent_parts = shower.showerInteriorWallAccent.activeFeatureParts\r\n .filter(activeFeaturePart => activeFeaturePart && activeFeaturePart.dbFeature)\r\n .map(activeFeaturePart => {\r\n return useNames ? activeFeaturePart.partName : activeFeaturePart.dbFeature.id\r\n });\r\n }\r\n if (bvStateKey === 'vanity') {\r\n bvState.vanity_type = this.parts[Vanity.id].activeSubType_.toLowerCase();\r\n }\r\n });\r\n // console.log('bvState', bvState);\r\n if (bvState[\"pony_wall\"]) {\r\n if (!bvState[\"pony_wall_glass\"] && shower.ponyWallGlass\r\n && shower.ponyWallGlass.activeFeature && shower.ponyWallGlass.activeFeature.dbFeature.id) {\r\n const feature = shower.ponyWallGlass.activeFeature;\r\n bvState[\"pony_wall_glass\"] = useNames ? feature.partName : feature.dbFeature.id\r\n }\r\n }\r\n if (bvState[\"large_corner_caddie\"] || bvState[\"corner_caddie\"] || bvState[\"small_corner_shelf\"]) {\r\n const showerAccessoriesParent = this.parts[ShowerAccessories.id];\r\n if (showerAccessoriesParent) {\r\n bvState.caddie_type = this.parts[ShowerAccessories.id].caddie_type;\r\n }\r\n }\r\n return bvState\r\n }\r\n\r\n addNonVisualizerSubPart(featureGroupName){\r\n const otherParent = this.parts[Other.id];\r\n const partId = snakeCase(featureGroupName);\r\n let relatedItem = otherParent.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, featureGroupName);\r\n relatedItem.getParent = () => otherParent;\r\n otherParent.relatedItems.push(relatedItem);\r\n }\r\n return new DesignNavigationItem(relatedItem.partName, relatedItem)\r\n }\r\n\r\n excludedIndexesFromHover = (layoutType) => {\r\n return [\r\n this.zIndexes[layoutType].Global_Shadow_Overlay, // exclude Global Shadow\r\n this.zIndexes[layoutType].Window_Covering, // exclude Window Coverings\r\n this.zIndexes[layoutType].Ceiling_Lights, // exclude Ceiling_Lights\r\n // this.zIndexes[layoutType].Shower.Custom60in.Wall, // exclude Shower Wall\r\n this.zIndexes[layoutType].Shower.Custom60in.Glass, // exclude Shower Glass\r\n // && layerHovering.layer.zIndex !== Z.this.zIndexes[layoutType].Shower.Custom60in.ExtrusionWallRight // exclude Shower ExtrusionWallRight\r\n // && layerHovering.layer.zIndex !== Z.this.zIndexes[layoutType].Shower.Custom60in.ExtrusionWallLeft // exclude Shower ExtrusionWallLeft\r\n this.zIndexes[layoutType].Shower.Custom60in.Overlay, // exclude Shower Overlay\r\n this.zIndexes[layoutType].Shower.Steam60in.Overlay, // exclude Shower Overlay\r\n this.zIndexes[layoutType].Shower.Custom60in.ExtrusionWallRightShadow, // exclude Right Shower Wall Shadow\r\n this.zIndexes[layoutType].Shower.Custom60in.ExtrusionWallLeftShadow, // exclude Left Shower Wall Shadow\r\n this.zIndexes[layoutType].Shower.Custom60in.ExtrusionWallLeftShadowHalfWall, // exclude Left Shower Wall Shadow\r\n this.zIndexes[layoutType].Shower.Custom60in.ShowerDrain, // exclude Shower Drain\r\n this.zIndexes[layoutType].Shower.Custom60in.PonyWallCapShadow, // exclude Pony Wall Cap Shadow\r\n this.zIndexes[layoutType].Shower.Custom60in.WallShadow, // exclude Shower Interior shadow\r\n this.zIndexes[layoutType].Shower.Custom60in.PonyWallShadow, // exclude Pony Wall Overlay\r\n this.zIndexes[layoutType].Shower.Custom60in.ThresholdShadow, // exclude ThresholdShadow\r\n this.zIndexes[layoutType].Shower.Custom60in.FloorShadow, // exclude ThresholdShadow\r\n ]\r\n }\r\n\r\n}\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {setNavigationViewType} from \"../../../../actions/navigationFunctions\";\r\n\r\nclass SelectionMobileViewSwitchers extends Component {\r\n\r\n static propTypes = {\r\n switchers: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n };\r\n\r\n render() {\r\n return (\r\n
    \r\n {this.props.switchers.includes(2) ? (\r\n \r\n ) : null}\r\n {this.props.switchers.includes(3) ? (\r\n \r\n ) : null}\r\n {this.props.switchers.includes(4) ? (\r\n \r\n ) : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n navigationViewType: store.navigationState.navigationViewType,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SelectionMobileViewSwitchers);","import React, {useCallback} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport $ from \"jquery\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport Button from \"@mui/material/Button\";\r\nimport DeleteIcon from \"@mui/icons-material/Delete\";\r\nimport DeleteForeverIcon from \"@mui/icons-material/DeleteForever\";\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\nimport Switch from '@mui/material/Switch';\r\n\r\nimport {checkIfFeatureDisabled, navFeatureCLick} from \"../lookFunctions\";\r\nimport {updateCanvasCount} from \"../../../../actions/actionFunctions\";\r\nimport {featureInterface} from \"../../../../interfaces/featureInterface\";\r\nimport {disableFeature, enableRelatedFeature} from \"../lookFunctions2\";\r\nimport {setLookOverlayOpened, setLookStylePopup} from \"../../../../actions/lookFunctions\";\r\nimport {LOOK_OVERLAYS} from \"../../core/constants\";\r\nimport {IS_LIXIL_UI, IS_PRODUCT_JOURNEY, IS_QKB_UI} from \"../../../../config\";\r\n\r\nimport {getCurrentLayout} from \"../../../appLayout\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS, PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../analytics\";\r\nimport {getFeatureIsLocked} from \"../../../../misc/helpers\";\r\nimport WithUpdateLookCartItem from \"../../hocs/withUpdateLookCartItem\";\r\nimport ActionTypes from \"../../../../misc/actionTypes\";\r\n\r\nconst LookFeatureRemoveButton = (props) => {\r\n\r\n const {lookFeature, updateCanvasCount, isIcon, isList, isToggle, intl, setLookOverlayOpened, setLookStylePopup,\r\n text, updateLookCartItem, refreshItems} = props;\r\n\r\n const parent = lookFeature.getParent();\r\n const alreadyDisabled = checkIfFeatureDisabled(lookFeature, parent);\r\n const featureIsLocked = getFeatureIsLocked(lookFeature);\r\n\r\n const updateForOldUI = useCallback(() => {\r\n if (!IS_QKB_UI) {\r\n return\r\n }\r\n $(window).trigger(ActionTypes.CHANGE_LAYOUT); // update canvas\r\n if (refreshItems) {\r\n refreshItems();// update navigation (non compatible)\r\n }\r\n }, [refreshItems]);\r\n\r\n const deleteButtonClick = async () => {\r\n if (alreadyDisabled) {\r\n return false\r\n }\r\n\r\n if (IS_LIXIL_UI) {\r\n const featureLabel = Analytics.getSkuForAnalytics(lookFeature);\r\n Analytics.sendClickEvent(IS_PRODUCT_JOURNEY\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureRemove + featureLabel\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeatureRemove + featureLabel\r\n );\r\n\r\n if (featureIsLocked) {\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture);\r\n return false\r\n }\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n if (document.kvConfig.visualizerType === \"bvLook\") {\r\n switch (lookFeature.partId) {\r\n case \"vanity_faucet\":\r\n case \"vanity_sink\": {\r\n if (IS_PRODUCT_JOURNEY) {\r\n if (lookFeature.partId === \"vanity_sink\") {\r\n const relatedFeatureGroup = layout.getFeatureGroupByPartId(\"vanity_faucet\");\r\n if (relatedFeatureGroup && !relatedFeatureGroup.disabled && relatedFeatureGroup.activeFeature\r\n && (!relatedFeatureGroup.activeFeature.metaData[\"MountType\"] || !relatedFeatureGroup.activeFeature.metaData[\"MountType\"].includes('U'))) {\r\n // Turning off the faucet should not turn off the sink or countertop, but turning of the sink should turn off the faucet (*unless it’s a wall mount faucet)\r\n disableFeature(relatedFeatureGroup.activeFeature, updateLookCartItem);\r\n }\r\n }\r\n break;\r\n }\r\n const parent = layout.getSubPartByPartId(lookFeature.partId === \"vanity_faucet\" ? \"vanity_sink\" : \"vanity_faucet\");\r\n if (IS_LIXIL_UI && parent && lookFeature.metaData[\"layerPosition\"] && parent.part.layerPositions[lookFeature.metaData.layerPosition]) {\r\n setLookOverlayOpened(LOOK_OVERLAYS.styleRemoveFeature);\r\n // setLookRemovePopup({\r\n // fromFeature: lookFeature\r\n // });\r\n setLookStylePopup({\r\n notMatchingFeatures: [parent.part.layerPositions[lookFeature.metaData.layerPosition]]\r\n });\r\n return false\r\n }\r\n break;\r\n }\r\n case \"toilet\": {\r\n [\"toilet_brush\", \"paper_holder\"].forEach(partId => {\r\n const relatedFeatureGroup = layout.getFeatureGroupByPartId(partId);\r\n if (relatedFeatureGroup && !relatedFeatureGroup.disabled && relatedFeatureGroup.activeFeature) {\r\n disableFeature(relatedFeatureGroup.activeFeature, updateLookCartItem);\r\n }\r\n })\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n await disableFeature(lookFeature, updateLookCartItem);\r\n updateCanvasCount(); // update canvas and self component\r\n updateForOldUI(); // update canvas with jquery ommmg\r\n };\r\n\r\n const turnOnClick = () => {\r\n const featureLabel = Analytics.getSkuForAnalytics(lookFeature);\r\n Analytics.sendClickEvent(IS_PRODUCT_JOURNEY\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureEnable + featureLabel\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeatureEnable + featureLabel\r\n );\r\n\r\n if (parent.disabled) {\r\n parent.disabled = false;\r\n parent.disabledClick();\r\n }\r\n navFeatureCLick(lookFeature);\r\n enableRelatedFeature(lookFeature, null, null);\r\n updateCanvasCount(); // update canvas and self component\r\n updateForOldUI(); // update canvas with jquery ommmg\r\n }\r\n\r\n if (isIcon) {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n if (isToggle) {\r\n return (\r\n \r\n }\r\n label={intl.formatMessage({id: text || \"grohe.mobile.feature.enableButton\"})}\r\n />\r\n )\r\n }\r\n\r\n return (\r\n \r\n )\r\n};\r\n\r\nLookFeatureRemoveButton.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface),\r\n updateLookCartItem: PropTypes.func.isRequired,\r\n isList: PropTypes.bool,\r\n isIcon: PropTypes.bool,\r\n isToggle: PropTypes.bool,\r\n text: PropTypes.string,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {canvasCount} = store.bathroomVisualizerState;\r\n const {isPhoneNumberValidated} = store.userState; // to update component when user is logged in\r\n\r\n return {\r\n canvasCount,\r\n isPhoneNumberValidated,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookOverlayOpened,\r\n // setLookRemovePopup,\r\n setLookStylePopup,\r\n updateCanvasCount,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)((props) => {\r\n return (\r\n \r\n {(updateLookCartItem) => }\r\n \r\n )\r\n })\r\n)\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport Button from \"@mui/material/Button\";\r\n\r\nimport Analytics from './../../analytics';\r\nimport UiSelect from \"../ui/select\";\r\nimport {BACKSPLASH_TYPES} from \"../kvComponent/core/constants\";\r\nimport {KVSCENE_BACKSPLASH_TYPES} from \"../kvSceneComponent/core/constants\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport {\r\n setActiveFeature,\r\n toggleSelectionFeatureInfo,\r\n toggleShowDescriptionCover,\r\n updateCanvasCount\r\n} from \"../../actions/actionFunctions\";\r\nimport WithClickCount from \"../look/hocs/withClickCount\";\r\nimport {loaderDisable, loaderEnable} from \"../ui/loaderView\";\r\nimport Navigation from \"../visComponents/navigation/navigation\";\r\nimport {setLookActiveFeature} from \"../../actions/lookFunctions\";\r\nimport {featureInterface} from \"../../interfaces/featureInterface\";\r\n\r\nclass BacksplashSelect extends Component {\r\n\r\n static propTypes = {\r\n // activePart: PropTypes.object.isRequired // Backsplash\r\n updateParent: PropTypes.func,\r\n useButtons: PropTypes.bool,\r\n activeFeature: PropTypes.shape(featureInterface),\r\n };\r\n\r\n handleBacksplashItemClick = async (type, maxClickCountReached) => {\r\n Analytics.sendClickEvent(\"backsplash-type-selected-\" + type);\r\n if (maxClickCountReached && maxClickCountReached()) {\r\n return false\r\n }\r\n const backsplashSubPart = this.getBacksplashPart();\r\n const currentActiveName = backsplashSubPart.activeFeature ? backsplashSubPart.activeFeature.getCountertopGroupsSplittedFeatureName() : \"\";\r\n let featureToClick = backsplashSubPart.getFeatureByBacksplashType(type);\r\n // console.log(\"featureToClick\", featureToClick);\r\n if (featureToClick && currentActiveName && (featureToClick.getCountertopGroupsSplittedFeatureName() !== currentActiveName)) {\r\n loaderEnable();\r\n await Navigation.searchFeaturesByName(backsplashSubPart, currentActiveName);\r\n loaderDisable();\r\n featureToClick = backsplashSubPart.getFeatureByBacksplashType(type);\r\n // console.log(\"featureToClick2\", featureToClick);\r\n }\r\n console.log(\"featureToClick\", featureToClick);\r\n if (featureToClick) {\r\n featureToClick.handleClick();\r\n this.props.setActiveFeature(featureToClick);\r\n // this.props.toggleShowDescriptionCover(false);\r\n this.forceUpdate();\r\n if (this.props.updateParent) {\r\n this.props.updateParent(featureToClick);\r\n }\r\n this.props.updateCanvasCount();\r\n }\r\n if (this.props.useButtons) {\r\n this.props.setLookActiveFeature(featureToClick);\r\n }\r\n };\r\n\r\n getBacksplashPart = () => {\r\n const layout = getCurrentLayout();\r\n const wallsParent = layout.parts[\"Walls\"];\r\n return wallsParent.relatedItems.find(relItem => relItem.partId === \"backsplash\");\r\n };\r\n\r\n getValueText = () => {\r\n if (this.props.bvOpened) { // visualizer\r\n return \r\n } else {\r\n if (this.props.windowWidth < 1160) {\r\n return \r\n } else if (this.props.windowWidth < 1600) {\r\n return \r\n } else {\r\n return \r\n }\r\n }\r\n };\r\n\r\n getBackplashTypes = () => {\r\n if (document.kvConfig.visualizerType === \"Kitchen\") {\r\n return BACKSPLASH_TYPES\r\n }\r\n if (this.props.fabricatorData.isEncore) {\r\n const backsplashSubPart = this.getBacksplashPart();\r\n if (backsplashSubPart) {\r\n return KVSCENE_BACKSPLASH_TYPES.filter(type => {\r\n return !!backsplashSubPart.getFeatureByBacksplashType(type, \"\", true)\r\n })\r\n }\r\n }\r\n return KVSCENE_BACKSPLASH_TYPES\r\n };\r\n\r\n renderButtons = (currentType) => {\r\n return (\r\n \r\n {(maxClickCountReached) => (\r\n
    \r\n \r\n \r\n \r\n
    \r\n {this.getBackplashTypes().map(backsplashType => {\r\n const isActive = currentType === backsplashType;\r\n return (\r\n \r\n )\r\n })}\r\n
    \r\n
    \r\n )}\r\n
    \r\n )\r\n };\r\n\r\n render() {\r\n const backsplashSubPart = this.getBacksplashPart();\r\n const currentType = backsplashSubPart.getCurrentActiveFeatureType();\r\n if (this.props.useButtons) {\r\n return this.renderButtons(currentType)\r\n }\r\n // console.log(\"backsplashSubPart\", );\r\n return (\r\n \r\n )\r\n }\r\n}\r\n\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n const {lookActiveFeature} = store.lookState;\r\n const fabricatorData = store.fabricatorState;\r\n const {canvasCount} = store.bathroomVisualizerState;\r\n return {\r\n bvOpened: store.bathroomVisualizerState.bvOpened,\r\n windowWidth: store.serverState.windowWidth,\r\n lookActiveFeature: ownProps.activeFeature || lookActiveFeature, // update active button\r\n fabricatorData, // update active button\r\n canvasCount,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n toggleSelectionFeatureInfo,\r\n setActiveFeature,\r\n toggleShowDescriptionCover,\r\n updateCanvasCount,\r\n setLookActiveFeature,\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BacksplashSelect)\r\n","import {MODULE_CONTEXT_MENU_DIRECTIONS} from \"../../constants\";\r\n\r\nexport const topCabinetModuleSystem = [\r\n [\"18_18_25\", \"18_18_26\"],\r\n [\"18_36_4\", \"18_36_5\"],\r\n [\"36_36_1\"],\r\n [\"18_36_4\", \"18_18_26\", \"18_18_28\"],\r\n [\"18_36_4\", \"18_36_5\"],\r\n [\"18_18_25\", \"18_18_26\"],\r\n [\"18_36_4\", \"18_36_5\"],\r\n [\"36_36_1\"]\r\n];\r\n\r\nexport const bottomCabinetModuleSystem = [\r\n [],\r\n [\"36_12_41\", \"36_24_10\"],\r\n [\"24_12_44\", \"12_36_8\", \"24_12_46\", \"24_12_48\"],\r\n [\"12_36_6\", \"24_36_3\"],\r\n [\"12_36_6\", \"24_12_45\", \"24_24_18\"],\r\n [\"36_36_1\"],\r\n [\"36_12_41\", \"36_24_10\"],\r\n [\"36_12_41\", \"36_12_42\", \"36_12_43\"]\r\n];\r\n\r\nexport const getModuleCombinations = (moduleContextMenuModulePart, direction = MODULE_CONTEXT_MENU_DIRECTIONS.Vertical) => {\r\n // width-height-id\r\n switch (moduleContextMenuModulePart) {\r\n case \"1\":\r\n switch (direction) {\r\n case MODULE_CONTEXT_MENU_DIRECTIONS.Vertical:\r\n return [\"12_36_6-12_36_7-12_36_8\", \"18_36_4-18_36_5\", \"24_36_2-12_36_8\", \"12_36_6-24_36_3\"];\r\n case MODULE_CONTEXT_MENU_DIRECTIONS.Horizontal:\r\n return [\"36_12_41-36_12_42-36_12_43\", \"36_18_19-36_18_20\", \"36_24_9-36_12_43\", \"36_12_41-36_24_10\"];\r\n default:\r\n return []\r\n }\r\n case \"2\":\r\n switch (direction) {\r\n case MODULE_CONTEXT_MENU_DIRECTIONS.Vertical:\r\n return [\"12_36_6-12_36_7\"];\r\n case MODULE_CONTEXT_MENU_DIRECTIONS.Horizontal:\r\n return [\"24_24_15-24_12_48\", \"24_24_17-24_12_44\", \"24_18_21-24_18_23\", \"24_12_44-24_12_46-24_12_48\"];\r\n default:\r\n return []\r\n }\r\n case \"3\":\r\n switch (direction) {\r\n case MODULE_CONTEXT_MENU_DIRECTIONS.Vertical:\r\n return [\"12_36_7-12_36_8\"];\r\n case MODULE_CONTEXT_MENU_DIRECTIONS.Horizontal:\r\n return [\"24_24_16-24_12_49\", \"24_24_18-24_12_45\", \"24_18_22-24_18_24\", \"24_12_45-24_12_47-24_12_49\"];\r\n default:\r\n return []\r\n }\r\n case \"4\":\r\n return [\"18_24_11-18_12_54\", \"18_24_13-18_12_50\", \"18_18_25-18_18_27\", \"18_12_50-18_12_52-18_12_54\"];\r\n case \"5\":\r\n return [\"18_24_12-18_12_55\", \"18_24_14-18_12_51\", \"18_18_26-18_18_28\", \"18_12_51-18_12_53-18_12_55\"];\r\n case \"6\": // left 18\r\n return [\"12_18_29-12_18_32\", \"12_24_35-12_12_62\", \"12_24_38-12_12_56\", \"12_12_56-12_12_59-12_12_62\"];\r\n case \"7\": // center 18\r\n return [\"12_18_30-12_18_33\", \"12_24_36-12_12_63\", \"12_24_39-12_12_57\", \"12_12_57-12_12_60-12_12_63\"];\r\n case \"8\": // right 18\r\n return [\"12_18_31-12_18_34\", \"12_24_37-12_12_64\", \"12_24_40-12_12_58\", \"12_12_58-12_12_61-12_12_64\"];\r\n case \"9\":\r\n switch (direction) {\r\n case MODULE_CONTEXT_MENU_DIRECTIONS.Vertical:\r\n return [\"18_24_11-18_24_12\", \"24_24_15-12_24_37\", \"24_24_16-12_24_35\", \"12_24_35-12_24_36-12_24_37\"];\r\n case MODULE_CONTEXT_MENU_DIRECTIONS.Horizontal:\r\n return [\"36_12_41-36_12_42\"];\r\n default:\r\n return []\r\n }\r\n case \"10\":\r\n switch (direction) {\r\n case MODULE_CONTEXT_MENU_DIRECTIONS.Vertical:\r\n return [\"18_24_13-18_24_14\", \"24_24_17-12_24_40\", \"24_24_18-12_24_38\", \"12_24_38-12_24_39-12_24_40\"];\r\n case MODULE_CONTEXT_MENU_DIRECTIONS.Horizontal:\r\n return [\"36_12_42-36_12_43\"];\r\n default:\r\n return []\r\n }\r\n case \"11\":\r\n return [\"18_12_50-18_12_52\"];\r\n case \"12\":\r\n return [\"18_12_51-18_12_53\"];\r\n case \"13\":\r\n return [\"18_12_52-18_12_54\"];\r\n case \"14\":\r\n return [\"18_12_53-18_12_55\"];\r\n case \"15\":\r\n return [\"12_24_35-12_24_36\", \"24_12_44-24_12_46\"];\r\n case \"16\":\r\n return [\"12_24_36-12_24_37\", \"24_12_45-24_12_47\"];\r\n case \"17\":\r\n return [\"12_24_38-12_24_39\", \"24_12_46-24_12_48\"];\r\n case \"18\":\r\n return [\"12_24_39-12_24_40\", \"24_12_47-24_12_49\"];\r\n case \"19\":\r\n return [\"24_18_21-12_18_31\", \"24_18_22-12_18_29\", \"18_18_25-18_18_26\", \"12_18_29-12_18_30-12_18_31\"];\r\n case \"20\":\r\n return [\"24_18_23-12_18_34\", \"24_18_24-12_18_32\", \"18_18_27-18_18_28\", \"12_18_32-12_18_33-12_18_34\"];\r\n case \"21\":\r\n return [\"12_18_29-12_18_30\"];\r\n case \"22\":\r\n return [\"12_18_30-12_18_31\"];\r\n case \"23\":\r\n return [\"12_18_32-12_18_33\"];\r\n case \"24\":\r\n return [\"12_18_33-12_18_34\"];\r\n case \"35\":\r\n return [\"12_12_56-12_12_59\"];\r\n case \"36\":\r\n return [\"12_12_57-12_12_60\"];\r\n case \"37\":\r\n return [\"12_12_58-12_12_61\"];\r\n case \"38\":\r\n return [\"12_12_59-12_12_62\"];\r\n case \"39\":\r\n return [\"12_12_60-12_12_63\"];\r\n case \"40\":\r\n return [\"12_12_61-12_12_64\"];\r\n case \"41\":\r\n return [\"24_12_44-12_12_58\", \"24_12_45-12_12_56\", \"12_12_56-12_12_57-12_12_58\"];\r\n case \"42\":\r\n return [\"24_12_46-12_12_61\", \"24_12_47-12_12_59\", \"12_12_59-12_12_60-12_12_61\"];\r\n case \"43\":\r\n return [\"24_12_48-12_12_64\", \"24_12_49-12_12_62\", \"12_12_62-12_12_63-12_12_64\"];\r\n case \"44\":\r\n return [\"12_12_56-12_12_57\"];\r\n case \"45\":\r\n return [\"12_12_57-12_12_58\"];\r\n case \"46\":\r\n return [\"12_12_59-12_12_60\"];\r\n case \"47\":\r\n return [\"12_12_60-12_12_61\"];\r\n case \"48\":\r\n return [\"12_12_62-12_12_63\"];\r\n case \"49\":\r\n return [\"12_12_63-12_12_64\"];\r\n case \"50\":\r\n case \"51\":\r\n case \"52\":\r\n case \"53\":\r\n case \"54\":\r\n case \"55\":\r\n case \"56\":\r\n case \"57\":\r\n case \"58\":\r\n case \"59\":\r\n case \"60\":\r\n case \"61\":\r\n case \"62\":\r\n case \"63\":\r\n case \"64\": // no where to split more!\r\n default:\r\n return []\r\n }\r\n};","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {applianceThumbnail} from \"../assets\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PLACEMENTS} from \"../constants\";\r\n\r\nimport Fridge from \"../subparts/appliances/fridge\";\r\nimport FridgeShadow from \"../subparts/appliances/fridgeShadow\";\r\nimport Hood from \"../subparts/appliances/hood\";\r\nimport Dishwasher from \"../subparts/appliances/dishwasher\";\r\nimport Microwave from \"../subparts/appliances/microwave\";\r\nimport Range from \"../subparts/appliances/range\";\r\n\r\nexport default class Appliance extends Part {\r\n static id = 'Appliances';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Appliances';\r\n this.partThumbnail = applianceThumbnail;\r\n this.partThumbnailSize = \"70%\";\r\n this.translateId = \"visualizer.kitchen.appliance\";\r\n\r\n // related items\r\n this.fridge = null;\r\n this.fridgeShadow = null;\r\n this.hood = null;\r\n this.microwave = null;\r\n this.range = null;\r\n this.dishwasher = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n shouldLoadInDifferentGroups = false,\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Fridge\":\r\n relatedItemName = \"fridge\";\r\n RelatedItemClass = Fridge;\r\n break;\r\n case \"Fridge Shadow\":\r\n relatedItemName = \"fridgeShadow\";\r\n RelatedItemClass = FridgeShadow;\r\n break;\r\n case \"Hood\":\r\n relatedItemName = \"hood\";\r\n RelatedItemClass = Hood;\r\n break;\r\n case \"Dishwasher\":\r\n relatedItemName = \"dishwasher\";\r\n RelatedItemClass = Dishwasher;\r\n break;\r\n case \"Microwave\":\r\n relatedItemName = \"microwave\";\r\n RelatedItemClass = Microwave;\r\n break;\r\n case \"Range\":\r\n // we still need to keep NotInVisualizer Ranges here\r\n if ((dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Countertop)) || !dbFeature.metaData[\"Placement\"]) {\r\n if (!dbFeature.metaData[\"Placement\"]) {\r\n shouldLoadInDifferentGroups = true;\r\n }\r\n relatedItemName = \"range\";\r\n RelatedItemClass = Range;\r\n }\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return !shouldLoadInDifferentGroups;\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Appliance', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {centerIslandThumbnail} from \"../assets\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PLACEMENTS} from \"../constants\";\r\n\r\nimport Cabinet from \"../subparts/centerIsland/cabinet\";\r\nimport Countertop from \"../subparts/centerIsland/countertop\";\r\nimport Chairs from \"../subparts/centerIsland/chairs\";\r\nimport Faucet from \"../subparts/centerIsland/faucet\";\r\nimport Sink from \"../subparts/centerIsland/sink\";\r\nimport Handle from \"../subparts/centerIsland/handle\";\r\nimport CenterIslandShadow from \"../subparts/centerIsland/centerIslandshadow\";\r\nimport Stovetop from \"../subparts/centerIsland/stovetop\";\r\nimport Range from \"../subparts/centerIsland/range\";\r\nimport Edge from \"../subparts/centerIsland/edge\";\r\nimport ChairsShadow from \"../subparts/centerIsland/chairsShadow\";\r\n\r\nexport default class CenterIsland extends Part {\r\n static id = 'CenterIsland';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'CenterIsland';\r\n this.partThumbnail = centerIslandThumbnail;\r\n this.translateId = \"visualizer.kitchen.center_island\";\r\n\r\n // related items\r\n this.cabinet = null;\r\n this.countertop = null;\r\n this.chairs = null;\r\n this.edge = null;\r\n this.faucet = null;\r\n this.sink = null;\r\n this.range = null;\r\n this.centerIslandshadow = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n shouldLoadInDifferentGroups = false,\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Center Island\":\r\n relatedItemName = \"cabinet\";\r\n RelatedItemClass = Cabinet;\r\n break;\r\n case \"Center Island Countertop\":\r\n relatedItemName = \"countertop\";\r\n RelatedItemClass = Countertop;\r\n break;\r\n case \"Center Island Handle\":\r\n relatedItemName = \"handle\";\r\n RelatedItemClass = Handle;\r\n break;\r\n case \"Chair Shadow\":\r\n relatedItemName = \"chairsShadow\";\r\n RelatedItemClass = ChairsShadow;\r\n break;\r\n case \"Chair\":\r\n relatedItemName = \"chairs\";\r\n RelatedItemClass = Chairs;\r\n break;\r\n case \"Center Island Shadow\":\r\n relatedItemName = \"centerIslandshadow\";\r\n RelatedItemClass = CenterIslandShadow;\r\n break;\r\n case \"Faucet\":\r\n if ((dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) || !dbFeature.metaData[\"Placement\"]) {\r\n if (!dbFeature.metaData[\"Placement\"]) {\r\n shouldLoadInDifferentGroups = true;\r\n }\r\n relatedItemName = \"faucet\";\r\n RelatedItemClass = Faucet;\r\n }\r\n break;\r\n case \"Sink\":\r\n if ((dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) || !dbFeature.metaData[\"Placement\"]) {\r\n if (!dbFeature.metaData[\"Placement\"]) {\r\n shouldLoadInDifferentGroups = true;\r\n }\r\n relatedItemName = \"sink\";\r\n RelatedItemClass = Sink;\r\n }\r\n break;\r\n case \"Stovetop\":\r\n if ((dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) || !dbFeature.metaData[\"Placement\"]) {\r\n if (!dbFeature.metaData[\"Placement\"]) {\r\n shouldLoadInDifferentGroups = true;\r\n }\r\n relatedItemName = \"stovetop\";\r\n RelatedItemClass = Stovetop;\r\n }\r\n break;\r\n case \"Range\":\r\n if ((dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) || !dbFeature.metaData[\"Placement\"]) {\r\n if (!dbFeature.metaData[\"Placement\"]) {\r\n shouldLoadInDifferentGroups = true;\r\n }\r\n relatedItemName = \"range\";\r\n RelatedItemClass = Range;\r\n }\r\n break;\r\n case \"Edge Profile\":\r\n shouldLoadInDifferentGroups = true;\r\n relatedItemName = \"edge\";\r\n RelatedItemClass = Edge;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return !shouldLoadInDifferentGroups;\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Center Island', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts(withHidden = true) {\r\n return this.relatedItems\r\n .filter(item => {\r\n if (item.partId === \"center_island_handle\") {\r\n item.visible = item.features.filter(f => f.matchesMetaForArrayOfConditions(item.getArrayOfConditions())).length;\r\n }\r\n return this.filterRelatedItem(item, withHidden)\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n getCabinetType() {\r\n return this.cabinet && this.cabinet.activeFeature\r\n ? this.cabinet.activeFeature.dbFeature.metaData[\"Cabinet\"]\r\n : \"\"\r\n }\r\n\r\n getChairType() {\r\n return this.chairs && this.chairs.activeFeature\r\n ? this.chairs.activeFeature.dbFeature.metaData[\"Chair\"]\r\n : \"\"\r\n }\r\n\r\n}\r\n","import React, {Component} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport Analytics from './../../analytics';\r\nimport UserLoginButton from './../ui/userLoginButton';\r\nimport {toggleUserPopup, changeMessageBoxState, showSchedulerPopup} from \"../../actions/actionFunctions\";\r\nimport {loaderDisable, loaderEnable} from \"../ui/loaderView\";\r\nimport {saveQuote} from \"../../api/server-api\";\r\nimport {QuoteRequestType, UserPopupTypes} from \"../visComponents/constants\";\r\nimport {renderMessagePopup} from \"../../api/api-popups\";\r\n\r\nclass ScheduleButton extends Component {\r\n\r\n static propTypes = {\r\n buttonLayoutId: PropTypes.oneOf([\"mobileButton\", \"designButtonMenu\", \"mobileNavigationMenu\"]).isRequired,\r\n scheduleButtonOnClick: PropTypes.func\r\n };\r\n\r\n handleScheduleButtonClick = () => {\r\n if (this.props.scheduleButtonOnClick) {\r\n this.props.scheduleButtonOnClick(); // close design button list, etc.\r\n }\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n Analytics.sendClickEvent(this.getAnalyticsEvent());\r\n if (!this.props.isPhoneNumberValidated) {\r\n UserLoginButton.handleLoginClick({\r\n ...this.props,\r\n userPopupType: UserPopupTypes.Schedule\r\n });\r\n return;\r\n }\r\n if (fabricatorSettings.enableCalendarForScheduling) {\r\n this.props.showSchedulerPopup(true)\r\n } else {\r\n loaderEnable(\"loader.appointmentText\", \"loader.appointmentTitle\");\r\n saveQuote({submit: true, quoteRequestType: QuoteRequestType.ScheduleAnAppointment})\r\n .then(() => {\r\n loaderDisable();\r\n renderMessagePopup(\"userPopup.messageBox.appointmentRequested\");\r\n });\r\n }\r\n };\r\n\r\n getAnalyticsEvent = () => {\r\n switch (this.props.buttonLayoutId) {\r\n case \"mobileButton\":\r\n default:\r\n return \"schedule-appointment-main-button\";\r\n case \"designButtonMenu\":\r\n return \"design-buttons-schedule-button\";\r\n case \"mobileNavigationMenu\":\r\n return \"menu-option-clicked-design-consultation\";\r\n }\r\n };\r\n\r\n getSchedulingButton =() => {\r\n switch (this.props.buttonLayoutId) {\r\n case \"mobileButton\":\r\n default:\r\n return (\r\n \r\n );\r\n case \"designButtonMenu\":\r\n return (\r\n
  • \r\n \r\n
  • \r\n );\r\n case \"mobileNavigationMenu\":\r\n return (\r\n
  • \r\n )\r\n }\r\n };\r\n\r\n render() {\r\n return this.props.fabricatorSettings.enableScheduling ? this.getSchedulingButton() : null\r\n }\r\n\r\n}\r\nconst mapStateToProps = (store) => ({\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n fabricatorSettings: store.fabricatorState.settings\r\n});\r\nexport default connect(mapStateToProps, {\r\n toggleUserPopup,\r\n changeMessageBoxState,\r\n showSchedulerPopup\r\n})(ScheduleButton);\r\n","import values from 'lodash/values';\r\nimport invert from 'lodash/invert';\r\nimport snakeCase from 'lodash/snakeCase';\r\n\r\nimport LayoutCommon from \"../../visComponents/layoutCommon\";\r\n\r\nimport {LayoutType, LayoutAbbreviation} from \"./constants\";\r\nimport zIndexes from \"./zIndex\";\r\n\r\nimport Other from \"./parts/other\";\r\nimport NonVisualizerSubPart from \"./subparts/nonVisualizerSubPart\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport Background from \"./parts/background\";\r\nimport {ShowerAccessories} from \"./parts/showerAccessories\";\r\nimport {Toilet} from \"./parts/toilet\";\r\n// import {WindowParent} from \"./parts/windowParent\";\r\nimport Floor from \"./parts/floor\";\r\nimport Walls from \"./parts/walls\";\r\nimport {Shower} from \"./parts/shower\";\r\nimport {Vanity} from \"./parts/vanity\";\r\nimport {ShowerTubCombo} from \"./parts/showerTubCombo\";\r\nimport Globals from \"./parts/globals\";\r\nimport {Bathtub} from \"./parts/bathtub\";\r\nimport {AVAILABLE_VISUALIZER_TYPES, IS_BATHROOM_OLD_BV_SCENE} from \"../../../config\";\r\n\r\nexport class Layout extends LayoutCommon {\r\n\r\n /**\r\n * @type {int}\r\n */\r\n defaultType = LayoutType.Layout1;\r\n type = this.defaultType;\r\n scene = \"1\";\r\n visualizerType = AVAILABLE_VISUALIZER_TYPES.bvScene;\r\n localStorageKey = \"bvSceneState\";\r\n layersBinding = IS_BATHROOM_OLD_BV_SCENE ? \"Bathroom\" : \"BathroomV5\";\r\n layoutNames = LayoutAbbreviation;\r\n layoutTypes = LayoutType;\r\n zIndexes = zIndexes.layouts;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.parts[Background.id] = new Background();\r\n this.parts[Walls.id] = new Walls();\r\n this.parts[Vanity.id] = new Vanity();\r\n this.parts[Shower.id] = new Shower();\r\n this.parts[ShowerTubCombo.id] = new ShowerTubCombo();\r\n this.parts[ShowerAccessories.id] = new ShowerAccessories();\r\n this.parts[Bathtub.id] = new Bathtub();\r\n this.parts[Toilet.id] = new Toilet();\r\n this.parts[Floor.id] = new Floor();\r\n // this.parts[WindowParent.id] = new WindowParent();\r\n // this.parts[Ceiling.id] = new Ceiling();\r\n this.parts[Globals.id] = new Globals();\r\n this.parts[Other.id] = new Other();\r\n values(this.parts).forEach(part => part.layout = this);\r\n }\r\n\r\n fixFeatureMetaData(dbFeature) {\r\n dbFeature.metaData.RoomLayout = dbFeature.metaData.RoomLayout.map((mValue) => {\r\n Object.values(LayoutType).map(val => val + \"\").forEach(stringNum => {\r\n if (mValue === stringNum) {\r\n mValue = \"Layout\" + mValue\r\n }\r\n })\r\n return mValue\r\n })\r\n return dbFeature\r\n }\r\n\r\n getCurrentLayoutName(type = this.type) {\r\n return invert(LayoutType)[type];\r\n }\r\n\r\n getCurrentLayoutAbbreviation() {\r\n return LayoutAbbreviation[this.getCurrentLayoutName()]\r\n }\r\n\r\n addNonVisualizerSubPart(featureGroupName){\r\n const otherParent = this.parts[Other.id];\r\n const partId = snakeCase(featureGroupName);\r\n let relatedItem = otherParent.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, featureGroupName);\r\n relatedItem.getParent = () => otherParent;\r\n otherParent.relatedItems.push(relatedItem);\r\n }\r\n return new DesignNavigationItem(relatedItem.partName, relatedItem)\r\n }\r\n\r\n excludedIndexesFromHover = (layoutType) => {\r\n return [\r\n this.zIndexes[layoutType].Background.BackgroundBG, // exclude Globals\r\n ...Object.keys(this.zIndexes[layoutType].Globals).map(key => this.zIndexes[layoutType].Globals[key])\r\n ]\r\n }\r\n\r\n}\r\n","import {COUNTERTOP_GROUP} from \"../../../../kvComponent/core/constants\";\r\nimport {COUNTERTOP_GROUP_BATHROOM} from \"../../../core/constants\";\r\nimport {filterCartItems, sortCartItemsForListPage} from \"../../../lookNavigation/lookFunctions2\";\r\n\r\n/**\r\n * @param cartItem {cartItemInterface}\r\n * @param property {string}\r\n * @returns {number|string}\r\n */\r\nexport const getCartItemShippingCost = (cartItem, property = \"shippingCost\") => {\r\n if (property !== \"shippingCost\") {\r\n return cartItem[property] || cartItem.cartFeature.dbFeature[property]\r\n }\r\n return (typeof cartItem.shippingCost === \"number\")\r\n ? cartItem.shippingCost\r\n : (typeof cartItem.cartFeature.dbFeature.shippingCost === \"number\")\r\n ? cartItem.cartFeature.dbFeature.shippingCost\r\n : 0\r\n}\r\n\r\n/**\r\n * returns array of deliveries\r\n * @param cartItems {[cartItemInterface]}\r\n * @returns {array}\r\n */\r\nexport const createDeliverySections = (cartItems) => {\r\n\r\n const cartItemsToInclude = filterCartItems(cartItems, true, true);\r\n const cartItemsList = sortCartItemsForListPage(cartItemsToInclude);\r\n\r\n let deliveries = [];\r\n cartItemsList.forEach(cartItem => {\r\n const cartItemShippingCost = getCartItemShippingCost(cartItem) || 0;\r\n const cartItemShippingName = getCartItemShippingCost(cartItem, \"shippingName\") || \"Free\";\r\n const cartItemShippingTime = getCartItemShippingCost(cartItem, \"shippingTime\") || \"-\";\r\n const cartItemShippingCode = getCartItemShippingCost(cartItem, \"shippingCode\") || \"-\";\r\n const existingDelivery = deliveries.find(delivery => {\r\n return delivery.price === cartItemShippingCost && delivery.name === cartItemShippingName\r\n });\r\n if (existingDelivery) {\r\n existingDelivery.cartItems.push(cartItem.id)\r\n } else {\r\n deliveries.push({\r\n price: cartItemShippingCost,\r\n name: cartItemShippingName,\r\n time: cartItemShippingTime,\r\n code: cartItemShippingCode,\r\n cartItems: [cartItem.id],\r\n // activeDeliveryIndex: deliveries.length,\r\n })\r\n }\r\n })\r\n return deliveries\r\n}\r\n\r\nexport const setCartItemsShipping = (cartItems, shippingOptions = []) => {\r\n return cartItems.map(cartItem => {\r\n if (!cartItem.cartFeature || !cartItem.cartFeature.dbFeature) {\r\n return cartItem // no need to add a delivery\r\n }\r\n const shippingForItem = shippingOptions.find(shippingObject => shippingObject.dbFeatureId === cartItem.cartFeature.dbFeature.id);\r\n if (shippingForItem && shippingForItem.options && shippingForItem.options.length) {\r\n if (cartItem.shippingName && shippingForItem.options.some(option => option.title === cartItem.shippingName)) {\r\n return cartItem // already assigned, we already have been here\r\n }\r\n const firstOption = shippingForItem.options[0];\r\n return Object.assign({}, cartItem, {\r\n shippingCost: Math.trunc(firstOption.cost * 100) / 100,\r\n shippingName: firstOption.title,\r\n shippingTime: firstOption.delivery,\r\n shippingCode: firstOption.code,\r\n })\r\n } else if (cartItem.shippingName) {\r\n return cartItem // already assigned, we already have been here\r\n } else if (cartItem.cartFeature.dbFeature.shippingCost || cartItem.cartFeature.dbFeature.shippingName) {\r\n return Object.assign({}, cartItem, {\r\n shippingCost: cartItem.cartFeature.dbFeature.shippingCost || 0,\r\n shippingName: getCartItemShippingCost(cartItem, \"shippingName\") || \"Free\",\r\n shippingTime: getCartItemShippingCost(cartItem, \"shippingTime\") || \"-\",\r\n shippingCode: getCartItemShippingCost(cartItem, \"shippingCode\") || \"-\",\r\n })\r\n } else {\r\n return Object.assign({}, cartItem, {\r\n shippingCost: 0,\r\n shippingName: \"Free\",\r\n shippingTime: \"-\",\r\n shippingCode: \"-\",\r\n })\r\n }\r\n })\r\n}\r\n\r\nconst area2Codes = [\"MN\", \"WI\", \"MI\", \"NY\", \"VT\", \"NH\", \"ME\", \"MA\", \"RI\", \"CT\", \"NJ\"];\r\nconst area3Codes = [\"WA\", \"OR\", \"CA\", \"AZ\", \"NV\", \"ID\", \"MT\", \"WY\", \"UT\", \"NM\", \"CO\", \"SD\", \"ND\"];\r\n\r\nconst getAreaCost = (postalCode) => {\r\n if (area3Codes.includes(postalCode)) {\r\n return 295\r\n } else if (area2Codes.includes(postalCode)) {\r\n return 245\r\n }\r\n return 225\r\n}\r\n\r\n/**\r\n * @param deliveryCost {number}\r\n * @param cartItems {{cartItemInterface}}\r\n * @param storeState {object}\r\n * @returns {number}\r\n */\r\nexport const getCafeCountertopsDeliveryCost = (deliveryCost = 0, cartItems, storeState) => {\r\n let materialsQuantity = cartItems.reduce(((totalQuantity, cartItem) => {\r\n if (COUNTERTOP_GROUP.includes(cartItem.partId) || COUNTERTOP_GROUP_BATHROOM.includes(cartItem.partId)) {\r\n totalQuantity = totalQuantity + cartItem.quantity;\r\n }\r\n return totalQuantity\r\n }), 0)\r\n if (materialsQuantity === 0) {\r\n return deliveryCost\r\n }\r\n if (materialsQuantity < 10) {\r\n deliveryCost = deliveryCost + (95 * 2)\r\n } else if (materialsQuantity < 25) {\r\n const {stateShort, state} = storeState.paymentState.shippingAddress;\r\n const postalCode = stateShort || (state || \"\").slice(0, 2) || storeState.userState.userInfo.stateShort || (storeState.userState.userInfo.state || \"\").slice(0, 2);\r\n deliveryCost = deliveryCost + (getAreaCost(postalCode) * 2)\r\n } else {\r\n deliveryCost = deliveryCost + ((materialsQuantity * 6) * 2) // $6/sqft of material\r\n }\r\n return deliveryCost\r\n}\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport TextField from \"@mui/material/TextField\";\r\nimport {changeUserInfo, changeUserInfoErrors} from \"../../../actions/actionFunctions\";\r\nimport {onInputBlur, onInputChange, useInputsValidation} from \"../ui/inputFunctions\";\r\n\r\nexport const getValidationErrors = (property, currentValue) => {\r\n const errors = [];\r\n\r\n switch (property) {\r\n case \"firstName\": {\r\n if (!currentValue) {\r\n errors.push(\"look.inputs.errors.fieldRequired\");\r\n return errors\r\n }\r\n if (currentValue.length === 1) {\r\n errors.push(\"look.inputs.errors.shortName\");\r\n } else if (currentValue.length > 50) {\r\n errors.push(\"look.inputs.errors.longName\");\r\n }\r\n if (!/^[A-Z\\s\\'\\-\\&\\.a-z]+$/.test(currentValue)) {\r\n errors.push(\"look.inputs.errors.nameIsIncorrect\");\r\n }\r\n break;\r\n }\r\n case \"email\": {\r\n if (!currentValue) {\r\n errors.push(\"look.inputs.errors.fieldRequired\");\r\n return errors\r\n }\r\n if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(currentValue)) {\r\n errors.push(\"look.inputs.errors.invalidEmail\");\r\n }\r\n break;\r\n }\r\n case \"password\": {\r\n if (!currentValue) {\r\n errors.push(\"look.inputs.errors.fieldRequired\");\r\n return errors\r\n }\r\n break;\r\n }\r\n case \"postal\": {\r\n if (!currentValue) {\r\n errors.push(\"look.inputs.errors.fieldRequired\");\r\n return errors\r\n }\r\n const regex = /[a-zA-Z0-9][a-zA-Z0-9\\- ]{0,10}[a-zA-Z0-9]/;\r\n if (!regex.test(currentValue)) {\r\n errors.push(\"look.inputs.errors.incorrectPostal\");\r\n return errors\r\n }\r\n break;\r\n }\r\n }\r\n return errors\r\n}\r\n\r\nconst LookUserInput = (props) => {\r\n\r\n const {property, userInfo, changeUserInfo, intl, userInfoErrors, changeUserInfoErrors, inputsValidated, shrink} = props;\r\n // const [inputValue, setInputValue] = useState(userInfo[property] || \"\");\r\n\r\n const userInputChange = (property, value) => {\r\n changeUserInfo({\r\n [property]: value\r\n });\r\n }\r\n\r\n const userInputBlur = (property, value) => {\r\n if (userInfo[property] !== value) {\r\n changeUserInfo({\r\n [property]: value\r\n });\r\n }\r\n }\r\n\r\n const onBlur = (event) => {\r\n onInputBlur(event, property, userInputBlur, userInfoErrors, changeUserInfoErrors, getValidationErrors);\r\n };\r\n\r\n useInputsValidation(inputsValidated, onBlur, userInfo[property]);\r\n\r\n const onChange = (event) => {\r\n onInputChange(event, property, userInputChange, userInfoErrors, changeUserInfoErrors, getValidationErrors);\r\n };\r\n\r\n const errorsExist = Array.isArray(userInfoErrors[property]) && !!userInfoErrors[property].length;\r\n\r\n const requiredFields = [\"firstName\", \"email\", \"postal\", \"phoneNumber\"];\r\n const type = property !== \"email\" && property !== \"password\" ? \"text\" : property;\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n};\r\n\r\nLookUserInput.propTypes = {\r\n property: PropTypes.string.isRequired,\r\n inputsValidated: PropTypes.bool.isRequired,\r\n shrink: PropTypes.bool,\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {userInfo, userInfoErrors} = store.userState;\r\n return {\r\n userInfo,\r\n userInfoErrors,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n changeUserInfo,\r\n changeUserInfoErrors\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookUserInput)\r\n)\r\n","//INITIAL FLOW\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const setShowUnlockCalculations = (showUnlockCalculations) => ({\r\n type: types.SET_SHOW_UNLOCK_CALCULATIONS,\r\n payload: {showUnlockCalculations}\r\n});\r\n\r\nexport const setUnlockCalculationsStep = (unlockCalculationsStep) => ({\r\n type: types.SET_UNLOCK_CALCULATIONS_STEP,\r\n payload: {unlockCalculationsStep}\r\n});\r\n\r\nexport const showUnlockCalculationsCartItems = (showCartItems) => ({\r\n type: types.SHOW_UNLOCK_CALCULATIONS_CART_ITEM,\r\n payload: {showCartItems}\r\n});\r\n\r\nexport const showUnlockCalculationsTotalItems = (showTotalItems) => ({\r\n type: types.SHOW_UNLOCK_CALCULATIONS_TOTAL_ITEM,\r\n payload: {showTotalItems}\r\n});\r\n\r\nexport const setShowUnlockCalculationsTutorial = (showUnlockCalculationsTutorial) => ({\r\n type: types.SHOW_UNLOCK_CALCULATIONS_TUTORIAL,\r\n payload: {showUnlockCalculationsTutorial}\r\n});\r\n\r\nexport const setUnlockCalculationsTutorialStep = (unlockCalculationsTutorialStep) => ({\r\n type: types.SET_UNLOCK_CALCULATIONS_TUTORIAL_STEP,\r\n payload: {unlockCalculationsTutorialStep}\r\n});\r\n\r\nexport const setUnlockCalculationsTutorialFinished = (unlockCalculationsTutorialIsFinished) => ({\r\n type: types.SET_UNLOCK_CALCULATIONS_TUTORIAL_FINISHED,\r\n payload: {unlockCalculationsTutorialIsFinished}\r\n});\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\n// import SvgIcon from \"@mui/material/SvgIcon\";\r\nimport Grow from '@mui/material/Grow';\r\nimport Popper from '@mui/material/Popper';\r\n// import Button from \"@mui/material/Button\";\r\n// import ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\r\n\r\n// import {setLookIntroStep, setLookOverlayOpened} from \"../../../../actions/lookFunctions\";\r\n// import {LOOK_INTRO_STEPS} from \"../../core/constants\";\r\n// import {LookIconNavigate} from \"../../../common/icons\";\r\n\r\nconst LookIntroPopper = (props) => {\r\n\r\n const {introStep, anchorRef, currentStep, placement, toolTipText = \"\", className, roomIdeasButtonTranslate} = props;\r\n\r\n // const nextButtonClick = () => {\r\n // if (currentStep === LOOK_INTRO_STEPS.review) {\r\n // setLookIntroStep(introStep + 2); // go to exit, skip rooms\r\n // } else if (currentStep === LOOK_INTRO_STEPS.exit) { // exit button - finish\r\n // setLookOverlayOpened(\"\");\r\n // setLookIntroStep(LOOK_INTRO_STEPS.disabled);\r\n // setLocalStorageItem(LOCAL_STORAGE_KEYS.introVisited, true);\r\n // } else {\r\n // setLookIntroStep(introStep + 1);\r\n // }\r\n // };\r\n\r\n return (\r\n \r\n {({ TransitionProps }) => (\r\n \r\n
    \r\n \r\n {/**/}\r\n {/* */}\r\n {/**/}\r\n \r\n \r\n {/*{lastMobileSteps ? null : (*/}\r\n {/* */}\r\n {/*)}*/}\r\n
    \r\n \r\n )}\r\n
    \r\n )\r\n};\r\n\r\nLookIntroPopper.propTypes = {\r\n // anchorRef: PropTypes.oneOfType([\r\n // PropTypes.func,\r\n // PropTypes.shape({ current: PropTypes.elementType })\r\n // ]).isRequired,\r\n anchorRef: PropTypes.object.isRequired,\r\n currentStep: PropTypes.number.isRequired,\r\n placement: PropTypes.string,\r\n toolTipText: PropTypes.string,\r\n roomIdeasButtonTranslate: PropTypes.string,\r\n className: PropTypes.string,\r\n}\r\n\r\nLookIntroPopper.defaultProps = {\r\n placement: \"right\"\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {introStep} = store.lookState;\r\n // const {isMobile} = store.serverState;\r\n return {\r\n introStep,\r\n // isMobile,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n // setLookIntroStep,\r\n // setLookOverlayOpened,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LookIntroPopper)\r\n","import React from \"react\";\r\n\r\nexport const initialContext = {\r\n activeContract: null,\r\n globalContractPage: 1, // pager\r\n activeContractPage: 1, // for current doc\r\n selectedContracts: [],\r\n totalPages: 1,\r\n receiptUrl: \"\", //blobUrl\r\n receiptPages: 0, // if 0 - contracts will start from 1\r\n receiptLayout: null, // for receipt sign\r\n // doc props\r\n showPage: false,\r\n pageRendered: false,\r\n selectedFieldIndex: -1,\r\n}\r\n\r\nconst ContractsContext = React.createContext(initialContext)\r\nexport default ContractsContext;\r\n","import flatMap from 'lodash/flatMap';\r\nimport find from 'lodash/find';\r\nimport some from 'lodash/some';\r\nimport findIndex from 'lodash/findIndex';\r\nimport cloneDeep from 'lodash/cloneDeep';\r\n\r\nimport * as types from '../actions/actionTypes';\r\n//import instList from '../bvcomponents/installation/instHardCode';\r\n\r\nconst initialState = {\r\n instOpened: false,\r\n instList: [],\r\n defaultInstallations: [],\r\n};\r\n\r\nlet __installations = [];\r\n\r\nexport default function (state = initialState, action) {\r\n\r\n switch (action.type) {\r\n case types.ADD_TO_CART:\r\n return __tryAddToInstallation(state, action.payload.cartItems);\r\n case types.REMOVE_FROM_CART:\r\n return __tryRemoveFromInstallations(state, action.payload.cartItem);\r\n case types.TOGGLE_INST_OPENED:\r\n case types.SET_INST_LIST:\r\n case types.SET_DEFAULT_INST_LIST:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.REMOVE_INSTALLATION_SERVICE_FROM_CART:\r\n return __toggleInstallationServiceUsage(state, action.payload);\r\n }\r\n\r\n return state;\r\n\r\n}\r\n\r\nexport function getInstallationsTotalCost(instList) {\r\n let cost = 0;\r\n flatMap(instList, group => group.services)\r\n .forEach(s => {\r\n if (s.selected) {\r\n cost += getInstallationCost(s);\r\n }\r\n });\r\n\r\n return cost;\r\n}\r\n\r\nexport function getInstallationCost(installationService) {\r\n return installationService.hourly * installationService.price;\r\n}\r\n\r\nfunction __toggleInstallationServiceUsage(state, {installationService}) {\r\n const {instList} = state;\r\n for (let i = 0; i < instList.length; i++){\r\n for (let j = 0; j < instList[i].services.length; j++) {\r\n const service = instList[i].services[j];\r\n if ((service.fabricatorFeature_id === installationService.fabricatorFeature_id)\r\n && (service.fabricatorInstallation_id === installationService.fabricatorInstallation_id)){\r\n service.selected = !service.selected;\r\n return {...state, instList: cloneDeep(instList)};\r\n }\r\n }\r\n }\r\n\r\n return state;\r\n}\r\n\r\nfunction __tryAddToInstallation(state, cartItems) {\r\n let hasChanges = false;\r\n const {instList} = state;\r\n\r\n cartItems.filter(cartItem => cartItem.quantity).forEach(cartItem => {\r\n const ID = cartItem.cartFeature.dbFeature.id;\r\n const allInstallations = __getInstallations(state.defaultInstallations);\r\n const installations = allInstallations.filter(inst => {\r\n return inst && (inst.fabricatorFeature_id === ID)\r\n });\r\n\r\n if (installations.length) {\r\n let instGroup = find(instList, {title: cartItem.selectionGroup});\r\n if (!instGroup) {\r\n instGroup = {\r\n title: cartItem.selectionGroup,\r\n services: [],\r\n description: 'Do you wand to add installation for ' + cartItem.selectionGroup,\r\n enabled: false\r\n };\r\n instList.push(instGroup);\r\n }\r\n\r\n installations.forEach(installation => {\r\n const service = some(instGroup.services, {\r\n // fabricatorFeature_id: id, // removed this check cause they are different, but we need to remove duplicates\r\n fabricatorInstallation_id: installation.fabricatorInstallation_id\r\n });\r\n if (!service) {\r\n const selected = installation.autoAddWithProduct;\r\n instGroup.services.push({\r\n fabricatorFeature_id: cartItem.cartFeature.dbFeature.id,\r\n title: installation.installationName,\r\n hourly: installation.defaultQuantity || 1,\r\n price: installation.price,\r\n description: installation.description,\r\n fabricatorInstallation_id: installation.fabricatorInstallation_id,\r\n selected,\r\n autoAddWithProduct: installation.autoAddWithProduct,\r\n defaultQuantity: installation.defaultQuantity,\r\n hideQuantity: installation.hideQuantity,\r\n unit: installation.unit\r\n });\r\n if (selected) {\r\n instGroup.enabled = true;\r\n }\r\n hasChanges = true;\r\n }\r\n });\r\n }\r\n });\r\n\r\n return hasChanges ? {...state, instList: cloneDeep(instList)} : state;\r\n}\r\n\r\nfunction __tryRemoveFromInstallations(state, cartItem) {\r\n const {instList} = state;\r\n const ID = cartItem.cartFeature.dbFeature.id;\r\n const allInstallations = __getInstallations(state.defaultInstallations);\r\n const installations = allInstallations.filter(inst => {\r\n return inst.fabricatorFeature_id === ID\r\n });\r\n if (installations.length) {\r\n installations.forEach(installation => {\r\n let instGroupIdx = findIndex(instList, {title: cartItem.selectionGroup});\r\n if (instGroupIdx !== -1) {\r\n const serviceIdx = findIndex(instList[instGroupIdx].services, {\r\n fabricatorFeature_id: cartItem.cartFeature.dbFeature.id,\r\n fabricatorInstallation_id: installation.fabricatorInstallation_id\r\n });\r\n if (serviceIdx !== -1) {\r\n instList[instGroupIdx].services.splice(serviceIdx, 1);\r\n if (!instList[instGroupIdx].services.length) {\r\n // remove group as well\r\n instList.splice(instGroupIdx, 1);\r\n return {...state, instList: cloneDeep(instList)};\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n return {...state, instList: cloneDeep(instList)};\r\n}\r\n\r\nfunction __getInstallations(defaultInstallations) {\r\n if (defaultInstallations && defaultInstallations.length && __installations && !__installations.length) {\r\n __installations = flatMap(defaultInstallations, i => i.installations);\r\n __installations = __installations.filter(i => {\r\n return i && (i.autoAddWithProduct || i.customerAdd || (i.employeesOnly && document.kvConfig.isBackend));\r\n })\r\n }\r\n\r\n return __installations;\r\n}\r\n\r\n","export const GROHE_CONFIG = {\r\n sidebarWidth: {\r\n desktop: 306.5,\r\n mobile: 360,\r\n },\r\n similarProductsWidth: {\r\n desktop: 307.5,\r\n // mobile: 360,\r\n },\r\n mainBarWidth: {\r\n desktop: 412,\r\n }\r\n};\r\n","import 'whatwg-fetch';\r\n\r\nconst shouldUseKvConfigDomain = document.location.hostname === 'localhost'\r\n || document.location.hostname.includes(\"192.168\")\r\n || window.location.href.includes(\"testprod\")\r\n || document.kvConfig.isWordpressPlugin;\r\n\r\nexport const HOST_NAME = document.kvConfig.domain && shouldUseKvConfigDomain\r\n ? document.kvConfig.domain : \"\";\r\n\r\nexport function handleHttpError(response) {\r\n if (response.status === 400) { // bad request\r\n return response.json()\r\n .then(json => {\r\n checkApiError(json);\r\n //console.log(400, json);\r\n return Promise.resolve({__error__: true});\r\n });\r\n }\r\n\r\n if (!response.ok) {\r\n return response.json()\r\n .then(json => Promise.reject(json ? json.message : response.statusMessage));\r\n }\r\n\r\n return response;\r\n}\r\n\r\nfunction checkApiError(response) {\r\n let errorMessage = response.error || response.errorMessage\r\n || (response.errors && Array.isArray(response.errors) ? response.errors.join(',') : null);\r\n if (!errorMessage) {\r\n return;\r\n }\r\n\r\n //dispatch({type: ActionTypes.HTTP_ERROR, payload: errorMessage});\r\n}\r\n\r\nexport function getResponse(response) {\r\n if (!response)\r\n return null;\r\n if (response.json)\r\n return response.json();\r\n return response;\r\n}\r\n\r\n\r\nexport const get = (url) => {\r\n return fetch(HOST_NAME + url, {\r\n // return fetch('http://localhost:3000/localdata', {\r\n headers: {\r\n 'Accept': 'application/json'\r\n }\r\n })\r\n .then(handleHttpError)\r\n .then(response => getResponse(response))\r\n .catch(reason => Promise.reject(reason));\r\n};\r\n\r\nexport const post = (url, data, { signal, domain } = {}) => {\r\n const isFormData = Object.prototype.toString.call(data) === '[object FormData]';\r\n const headers = {\r\n 'Accept': 'application/json'\r\n };\r\n if (!isFormData) {\r\n headers['Content-Type'] = 'application/json';\r\n }\r\n\r\n return fetch(domain ? domain + url : HOST_NAME + url, {\r\n method: 'post',\r\n body: isFormData ? data : JSON.stringify(data),\r\n headers: new Headers(headers),\r\n signal: signal,\r\n })\r\n .then(handleHttpError)\r\n .then(response => getResponse(response))\r\n .catch(reason => {\r\n if (reason.name === 'AbortError') {\r\n console.log('Fetch aborted');\r\n } else {\r\n return Promise.reject(reason);\r\n }\r\n });\r\n};\r\n","// do not use imports in this file!! we are trying to keep lead form bundle js clean\r\n\r\nimport {getCommonVisualizerType} from \"../../../../../config\";\r\nimport {getCurrentLayout} from \"../../../../appLayout\";\r\nimport {getFeatureFromTheBackendBySku} from \"../../../../../api/look-api\";\r\n\r\nexport const fixStringEncoding = (string) => {\r\n return string && (typeof string === \"string\")\r\n ? string\r\n .replace(\"â€�\", \"”\")\r\n .replace(\"”\", \"”\")\r\n .replace(\"’\", \"’\")\r\n .replace(\"
\", \" \")\r\n .replace(\"
\", \"\") // not sure what it is\r\n : string\r\n}\r\n\r\nexport const fixWizardItem = (wizardItem, wizardItemIndex, forLeadForm = false, newVisualizerType) => {\r\n wizardItem.wizardNodes = []; // we don't use them in the visualizer! why do we keep them then\r\n Object.keys(wizardItem).forEach(property => {\r\n if (typeof wizardItem[property] === \"string\") {\r\n wizardItem[property] = fixStringEncoding(wizardItem[property]);\r\n }\r\n });\r\n if (!wizardItem.name) {\r\n wizardItem.name = \"wizard\" + (wizardItemIndex > 0 ? \"-\" + wizardItemIndex + 1 : \"\");\r\n }\r\n const currentVisType = getCommonVisualizerType(newVisualizerType);\r\n if (wizardItem.wizardGroups) {\r\n wizardItem.wizardGroups = wizardItem.wizardGroups.filter(wizGroup => {\r\n if (!wizGroup.enabled || (wizGroup.hideForCustomers && !document.kvConfig.isBackend)) {\r\n return false\r\n }\r\n if (wizardItem.visualizer === \"all\") {\r\n return (wizGroup.groupName === \"Room\") || !Array.isArray(wizGroup.visibleInVisualizers)\r\n || !wizGroup.visibleInVisualizers.length || wizGroup.visibleInVisualizers.includes(currentVisType)\r\n }\r\n return true\r\n }).map(wizGroup => {\r\n if (forLeadForm) {\r\n //getUrlLeadStepName\r\n wizGroup.leadStepUrl = wizGroup.leadStep\r\n ? wizGroup.leadStep.toLowerCase().replace(/ /g,\"-\")\r\n : \"project\"\r\n }\r\n if (wizGroup.nodeType === \"inputs\" && Array.isArray(wizGroup.inputFields)) {\r\n wizGroup.inputFields = wizGroup.inputFields.filter(inputObject => inputObject.checked)\r\n }\r\n Object.keys(wizGroup).forEach(property => {\r\n if (typeof wizGroup[property] === \"string\") {\r\n wizGroup[property] = fixStringEncoding(wizGroup[property]);\r\n }\r\n });\r\n [\"featuresIncluded\", \"featuresExcluded\"].forEach(property => {\r\n if (Array.isArray(wizGroup[property]) && wizGroup[property].length) {\r\n wizGroup[property] = wizGroup[property].map(excluded => {\r\n if (excluded && (typeof excluded === \"object\") && excluded.sharedFeatureName) {\r\n excluded.sharedFeatureName = excluded.sharedFeatureName\r\n .trim()\r\n .toLowerCase()\r\n .replace('room - ', '')\r\n }\r\n return excluded\r\n })\r\n }\r\n });\r\n return wizGroup\r\n })\r\n }\r\n return wizardItem\r\n}\r\n\r\nexport const getWizardFeatureAsync = async (feature, groupName) => {\r\n const layout = getCurrentLayout();\r\n const featureGroup = layout.getFeatureGroupByGroupName(groupName);\r\n if (featureGroup) {\r\n const nameToCompare = feature.sharedFeatureName; //lowercased already\r\n if (featureGroup.activeFeature && featureGroup.activeFeature.getLowerCasedSharedFeatureName() === nameToCompare) {\r\n return featureGroup.activeFeature\r\n }\r\n const navItems = layout.designNavigationItems({part: featureGroup}, null, \"\", false, \"all\");\r\n for (let i = 0; i < navItems.length; i++) {\r\n if (navItems[i].part.getLowerCasedSharedFeatureName() === nameToCompare) {\r\n return navItems[i].part;\r\n }\r\n }\r\n }\r\n return await getFeatureFromTheBackendBySku(feature.sku || feature.sharedFeatureName, featureGroup ? featureGroup.partId : \"\");\r\n}\r\n","import workspace from \"./workspace\";\r\nimport sqftShape from \"./shapes/sqftShape\";\r\n//todo sqft-react\r\n// import {setDataToQt} from \"../postMessage\";\r\n\r\nexport default new function() {\r\n\r\n var _self = this;\r\n\r\n this.store = {\r\n shapes: [],\r\n cfg: {},\r\n exportData: null\r\n };\r\n\r\n this.init = function() {\r\n // $('#saveHistory').click(_self.rememberShapes);\r\n // $('#restoreHistory').click(_self.restoreShapesFromHistory);\r\n // $('#consoleShapesFromHistory').click(_self.consoleShapesFromHistory);\r\n window.clearHistory = function() {\r\n this.store.shapes = [];\r\n this.store.exportData = null;\r\n }\r\n };\r\n // this.addEvent = function(eventName, eventData) {\r\n // switch (eventName) {\r\n // case \"newShape\":\r\n // _self.store.shapes.push(eventData);\r\n // break;\r\n // }\r\n // };\r\n this.getHistoryStore = function () {\r\n return _self.store\r\n };\r\n this.rememberShapes = function() {\r\n _self.store.shapes = [];\r\n workspace.getShapes().forEach(function (shape) {\r\n if (!shape.attachedToShape && shape.type !== \"appliances\" && shape.getLines) {\r\n shape.lines = [];\r\n shape.getLines().forEach(function (line) {\r\n line.historyPointFeatures = line.getPointsFeatures();\r\n shape.lines.push(line);\r\n });\r\n }\r\n shape.historyPosition = shape.pos;\r\n _self.store.shapes.push(shape);\r\n });\r\n // console.log('saved', _self.store.shapes);\r\n _self.store.exportData = window.exportData;\r\n };\r\n this.rememberConfig = function(cfg) {\r\n _self.store.cfg = cfg;\r\n };\r\n this.restoreShapesFromHistory = function() {\r\n // console.log('_self.store.shapes', _self.store.shapes);\r\n workspace.removeAllShapes();\r\n _self.store.shapes.forEach(function (newShape) {\r\n if (newShape.lines) {\r\n workspace.addShape(newShape.lines, newShape.shapeType, newShape.historyPosition, newShape.partId, newShape.layoutName);\r\n } else {\r\n workspace.addImage(\r\n newShape.historyProps.image,\r\n newShape.historyProps.width,\r\n newShape.historyProps.height,\r\n newShape.historyProps.attachedTo,\r\n newShape.historyProps.hoverShape,\r\n newShape.historyProps.type,\r\n newShape.historyProps.subType,\r\n newShape.historyProps.historyCallBack,\r\n newShape.historyPosition\r\n );\r\n }\r\n });\r\n _self.store.shapes.forEach(function (newShape) { // go again through all attached shapes and render lines text\r\n if (!newShape.lines) {\r\n newShape.historyProps.historyCallBack()\r\n }\r\n });\r\n // console.log('setted!', workspace.getShapes());\r\n Object.assign(_self.store.exportData, _self.store.cfg);\r\n setDataToQt(_self.store.exportData, true);\r\n setTimeout(function () {\r\n _self.store.exportData = window.exportData;\r\n }, 0);\r\n };\r\n // this.consoleShapesFromHistory = function() {\r\n // console.log('_self.store.shapes', _self.store.shapes);\r\n // };\r\n this.checkForChangesApplied = function () { // this is called after cancel click\r\n // console.log('_self.store.exportData', _self.store.exportData);\r\n // console.log('window.exportData',window.exportData);\r\n let currentShapes = workspace.getShapes();\r\n\r\n //if (_self.store.exportData && (JSON.stringify(_self.store.exportData) !== JSON.stringify(window.exportData))) {\r\n // return true; // check for exportData\r\n //}\r\n\r\n if (currentShapes.length !== _self.store.shapes.length) {\r\n return true; // check for appliances, etc.\r\n }\r\n\r\n let shapesChanged = false;\r\n\r\n workspace.getShapes().forEach(function (shape) { // go through each shape && check for its changes\r\n //if (!shape.attachedToShape && shape.type !== \"appliances\") {\r\n if (shape instanceof sqftShape) {\r\n\r\n var historyShape = _self.store.shapes.find(function (historyShapetoFind) {\r\n return historyShapetoFind.id === shape.id\r\n });\r\n\r\n if (!historyShape) {\r\n shapesChanged = true\r\n }\r\n\r\n shape.getLines().forEach(function (line, index) {\r\n if (historyShape && historyShape.lines && historyShape.lines[index] && JSON.stringify(line.getPointsFeatures()) !== JSON.stringify(historyShape.lines[index].historyPointFeatures)) {\r\n shapesChanged = true\r\n }\r\n });\r\n }\r\n });\r\n\r\n return shapesChanged || false\r\n }\r\n};\r\n","import {SHAPE_PART_ID, SQFT_APPLIANCES} from \"../constants\";\r\nimport store from \"../../../store\";\r\nimport workspace from \"../components/canvas/core/workspace\";\r\nimport sqftShape from \"../components/canvas/core/shapes/sqftShape\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport MovableImage from \"../components/canvas/core/shapes/movableImage\";\r\nimport {\r\n containsHEBeforeExtension,\r\n findGLBLink,\r\n get3dURLsForFeature, getCategoryFromMetadata, getThirdPartyAR3DMetaData,\r\n getUrlMatchingByColor, isHoodShape,\r\n} from \"./sqft3dArHelper\";\r\nimport workspaceControllers from \"../components/canvas/store/workspaceControllers\";\r\nimport sqftShapeManager from \"../components/canvas/store/sqftShapeManager\";\r\nimport {featureThumbnailUrl} from \"../../../misc/helpers\";\r\n\r\nexport const DEFAULT_COUNTERTOP_HEIGHT = 34;\r\nexport const DEFAULT_BACKSPLASH_HEIGHT = 18;\r\n\r\nexport class CabinetsSet {\r\n\r\n static prepareCabinetsSet(displayDoorsOnly = false, shouldDisplayFramedDoors = false) {\r\n const cabinetPositions = CabinetsSet.prepareCabinetsPositions();\r\n const countertopPositions = CountertopPositions.prepareCountertopPositions();\r\n const wallPositions = WallPositions.prepareWallPositions();\r\n const cabinetSet = {\r\n \"doors_only\": displayDoorsOnly,\r\n \"should_display_framed_doors\": shouldDisplayFramedDoors,\r\n \"positions\": [...cabinetPositions, ...countertopPositions, ...wallPositions]\r\n }\r\n\r\n // add countertop if bottom_cabinets exist\r\n // if (cabinetSet.positions.some(position => position.partId === SHAPE_PART_ID.lower_cabinet_boxes)) {\r\n // let texture = \"https://static6.depositphotos.com/1031174/647/i/450/depositphotos_6477080-stock-photo-grungy-background.jpg\";\r\n // const state = store.getState();\r\n // if (state.sqftState.selectedCountertop) {\r\n // const layout = getCurrentLayout();\r\n // const countertopFeature = layout.getFeatureById(state.sqftState.selectedCountertop, true);\r\n // if (countertopFeature && countertopFeature.dbFeature.thirdPartyAR3DUrls) {\r\n // const URLByFeatureName = get3dURLsForFeature(countertopFeature);\r\n // texture = URLByFeatureName ? URLByFeatureName : countertopFeature.dbFeature.thirdPartyAR3DUrls[0]\r\n // }\r\n // }\r\n //\r\n // cabinetSet.countertop = {\r\n // \"main\": \"https://quotecountertops.com/video/sqft/cabinets/Quarter Round_Main Body.glb\",\r\n // \"edge\": \"https://quotecountertops.com/video/sqft/cabinets/Quarter Round_Edge.glb\",\r\n // \"corner\": \"https://quotecountertops.com/video/sqft/cabinets/Quarter Round_Corner.glb\",\r\n // \"texture\": texture\r\n // }\r\n // }\r\n\r\n return cabinetSet\r\n }\r\n\r\n static prepareCabinetsPositions(shouldDisplayFramedDoors = false) {\r\n const layout = getCurrentLayout();\r\n const shapes = workspace.getShapes();\r\n\r\n return shapes.map((shape) => {\r\n if (shape instanceof sqftShape) {\r\n let absolutePos = shape.shapeAbsolute.getAbsolutePosition();\r\n let shapePosition = absolutePos ? absolutePos : shape.getPosition();\r\n\r\n const relatedParentFeature = layout.getFeatureById(shape.relatedParentFeatureId, true);\r\n if (relatedParentFeature) {\r\n let shapeDbFeature = relatedParentFeature.getFeatureRelatedFeatures().find(relatedFeature => relatedFeature.id === shape.featureId);\r\n if (!shapeDbFeature) {\r\n const shapeFeature = layout.getFeatureById(shape.featureId, true);\r\n if (shapeFeature) {\r\n shapeDbFeature = shapeFeature.dbFeature\r\n }\r\n }\r\n return CabinetsSet.prepareRegularCabinetSet(shape, shapePosition, shapeDbFeature, relatedParentFeature, shouldDisplayFramedDoors);\r\n } else {\r\n console.log(\"3d model cannot be prepared its parent not found shape.relatedParentFeatureId:\", shape.relatedParentFeatureId);\r\n }\r\n } if (shape instanceof MovableImage) {\r\n let absolutePos = shape.shapeAbsolute.getAbsolutePosition();\r\n const shapePosition = absolutePos ? absolutePos : shape.getPosition();\r\n const shapeFeature = layout.getFeatureById(shape.featureId);\r\n\r\n if (shapeFeature) {\r\n return CabinetsSet.prepareImageCabinetSet(shape, shapePosition, shapeFeature);\r\n }\r\n }\r\n return null\r\n }).filter(cabinetSet => {\r\n return cabinetSet !== null\r\n })\r\n }\r\n\r\n /**\r\n * Adjust model position based on shape position, dimensions, and rotation.\r\n * @returns {Object} Updated model position.\r\n * @param shapePosition\r\n * @param shapeWidth\r\n * @param shapeDepth\r\n * @param rotatedDegrees\r\n */\r\n static adjustApplianceModelPosition(shapePosition, shapeWidth, shapeDepth, rotatedDegrees) {\r\n // Convert degrees to radians and account for the model's initial -90 degree rotation offset\r\n const radians = (Math.PI / 180) * (rotatedDegrees - 90);\r\n\r\n // Calculate the center of the shape, used as the base point for rotation\r\n const centerX = shapePosition.x + shapeWidth / 2;\r\n const centerZ = shapePosition.y + shapeDepth / 2;\r\n\r\n // Calculate the offsets for X and Z axes based on the current rotation angle\r\n const offsetX = (shapeWidth / 2) * Math.cos(radians);\r\n const offsetZ = (shapeDepth / 2) * Math.sin(radians);\r\n\r\n // Apply Z-axis correction dynamically based on the sine of the rotation angle\r\n const zCorrection = shapeDepth * Math.sin(radians);\r\n\r\n // Return the updated position of the model\r\n return {\r\n x: centerX - offsetX, // Corrected X position after rotation\r\n y: shapePosition.y, // Y position remains unchanged (fixed height)\r\n z: centerZ - offsetZ + zCorrection // Corrected Z position with dynamic adjustment\r\n };\r\n }\r\n\r\n /**\r\n * This function corrects shape position because shape rotation in sqft is made around shape center\r\n * while baking models script rotates shapes around top left corner, so we need to move shape a bit.\r\n * @param rotatedDegrees\r\n * @param position\r\n * @param width\r\n * @param height\r\n * @return {{x: *, y: *}}\r\n */\r\n static getShapeCorrectedPos = (rotatedDegrees, position, width, height) => {\r\n // get radians\r\n let thetaRad = -(rotatedDegrees * Math.PI / 180);\r\n\r\n // left top corner pos (shape pos)\r\n let xInit = position.x;\r\n let yInit = position.y;\r\n\r\n // shape center after rotation\r\n let xCenterBAfterRotation = xInit + width / 2 * Math.cos(thetaRad) - height / 2 * Math.sin(thetaRad);\r\n let yCenterBAfterRotation = yInit + width / 2 * Math.sin(thetaRad) + height / 2 * Math.cos(thetaRad);\r\n\r\n // initial shape center\r\n let xCenterBInitial = xInit + width / 2;\r\n let yCenterBInitial = yInit + height / 2;\r\n\r\n // shape center - shape center after rotation\r\n let deltaX = xCenterBInitial - xCenterBAfterRotation;\r\n let deltaY = yCenterBInitial - yCenterBAfterRotation;\r\n\r\n return {\r\n x: rotatedDegrees > 0\r\n ? position.x + deltaX\r\n : position.x,\r\n y: rotatedDegrees > 0\r\n ? position.y + deltaY\r\n : position.y\r\n }\r\n }\r\n\r\n static prepareRegularCabinetSet = (shape, shapePosition, shapeDbFeature, relatedParentFeature, shouldDisplayFramedDoors) => {\r\n if (shapeDbFeature) {\r\n //console.log(\"shapeDbFeatureFeature.thirdPartyAR3DUrls\", shapeDbFeature.thirdPartyAR3DUrls);\r\n }\r\n\r\n if (!shapeDbFeature || !shapeDbFeature.thirdPartyAR3DUrls) {\r\n return null\r\n }\r\n\r\n const shapeWidth = shape.shapeCabinet ? shape.shapeCabinet.getShapeWidth() : shape.getWidth();\r\n //if it is cube then we can set target width and resize it\r\n const targetWidth = shape.getLines().length === 4 ? shape.getSize().width : shape.getWidth();\r\n const shapeHeight = shape.shapeCabinet ? shape.shapeCabinet.getShapeHeight() : shape.getHeight();\r\n const shapeDepth = shape.shapeCabinet ? shape.shapeCabinet.getShapeDepth() : shape.getDepth();\r\n const targetDepth = shape.getLines().length === 4 ? shape.getSize().height : shape.getHeight();\r\n\r\n //We are sending top left corner position.\r\n const originPointOnWorkspace = shape.getOriginPointOnWorkspace();\r\n const url = getUrlMatchingByColor(shapeDbFeature, relatedParentFeature);\r\n const material_url = getUrlMatchingByColor(relatedParentFeature.dbFeature, relatedParentFeature); //todo remove\r\n const posY = CabinetsHelper.getCabinetPosY(shape, shapeDbFeature, url, shapeHeight);\r\n const shapeLayout = shape.shapeParams.shapeLayout;\r\n const threeDPos = { x: originPointOnWorkspace.x, y: posY, z: originPointOnWorkspace.y };\r\n const handles = CabinetsHelper.getHandles(shape, threeDPos, shape.rotatedDegrees, targetWidth, targetDepth, shapeHeight);\r\n\r\n // log parent feature material\r\n // if (!material_url) {\r\n // console.log(\"material wasn't found for the feature\", shapeDbFeature.id);\r\n // console.log(\"relatedParentFeature.dbFeature.id\", relatedParentFeature.dbFeature.id);\r\n // console.log(\"relatedParentFeature.dbFeature.thirdPartyAR3DUrls\", relatedParentFeature.dbFeature.thirdPartyAR3DUrls);\r\n // }\r\n\r\n return {\r\n \"shapeId\": shape.id,\r\n \"partId\": shape.parentPartId ? shape.parentPartId : shape.partId,\r\n \"is_filler\": shape.shapeParams.isSpacer,\r\n \"x\": threeDPos.x,\r\n \"y\": threeDPos.y, // height between floor and roof. 0 is floor\r\n \"z\": threeDPos.z,\r\n \"rotation\": shape.rotatedDegrees,\r\n \"url\": url,\r\n \"material_url\": material_url,\r\n //\"url\": \"https://master_new_1512.quoteremodel.com/content/Views/visualizers/images/sqft-icons/3d/cabinet.glb\",\r\n \"framed\": shouldDisplayFramedDoors,\r\n \"frame_width\": 0.75,\r\n \"frame_height\": 0.25,\r\n \"target_width\": targetWidth,\r\n \"target_depth\": targetDepth,\r\n \"target_height\": shapeHeight,\r\n \"width\": shapeWidth,\r\n \"height\": shapeHeight, //in sqft wee cabinets from top so we can see this value\r\n \"depth\": shapeDepth,\r\n \"contour_points\": shape.getPointsCoords(),\r\n \"original_points\": shape.getOriginalPointsCoords(),\r\n \"featureId\": shapeDbFeature.id,\r\n \"parentFeatureId\": relatedParentFeature.dbFeature.id,\r\n \"shapeLayout\": shapeLayout,\r\n \"handles\": handles,\r\n // \"url\": shapeDbFeatureFeature && shapeDbFeatureFeature.thirdPartyAR3DUrls\r\n // ? shapeDbFeatureFeature.thirdPartyAR3DUrls[0]\r\n // : \"https://qc-3dfiles.s3.amazonaws.com/ar-composer/W3030.glb\" //localGlb\r\n //: \"https://dv84u4f1bblk2.cloudfront.net/6cp14aef9e7rfg6gds5orh1cej7ctlvq.glb\"\r\n }\r\n }\r\n\r\n static prepareImageCabinetSet = (shape, shapePosition, shapeFeature) => {\r\n if (!shapeFeature || !shapeFeature.dbFeature || !shapeFeature.dbFeature.thirdPartyAR3DUrls) {\r\n return null\r\n }\r\n //console.log(\"shapeDbFeatureFeature.thirdPartyAR3DUrls\", shapeFeature.dbFeature.thirdPartyAR3DUrls);\r\n\r\n const shapeWidth = +shape.getWidth();\r\n const shapeHeight = +shape.getThickness();\r\n const shapeDepth = +shape.getHeight();\r\n const applianceRotatedDegrees = shape.rotatedDegrees - 90;\r\n\r\n let appliancePosition = CabinetsSet.adjustApplianceModelPosition(shapePosition, shapeWidth, shapeDepth, shape.rotatedDegrees);\r\n const url = findGLBLink(shapeFeature.dbFeature.thirdPartyAR3DUrls);\r\n\r\n //rise hood to the level of top cabinets\r\n const yPos = shapeFeature.partId === SQFT_APPLIANCES.hood ? DEFAULT_COUNTERTOP_HEIGHT + DEFAULT_BACKSPLASH_HEIGHT : 0;\r\n\r\n // hardcode to create countertop over the dishwasher\r\n const partId = shapeFeature.partId === SHAPE_PART_ID.dishwasher ? SHAPE_PART_ID.lower_cabinet_boxes: shapeFeature.partId;\r\n // we need to hide the hood behind the top cabinet\r\n //const zPos = shapeFeature.partId === SHAPE_PART_ID.hood ? appliancePosition.y - 0.5 : appliancePosition.y;\r\n\r\n return {\r\n \"shapeId\": shape.id,\r\n \"partId\": partId,\r\n \"x\": appliancePosition.x,\r\n \"y\": yPos, //todo (shape bottom cabinet height + distance between bottom and top cabinets)\r\n \"z\": appliancePosition.z,\r\n \"rotation\": applianceRotatedDegrees,\r\n \"url\": url,\r\n \"width\": shapeWidth,\r\n \"height\": shapeHeight, //in sqft wee cabinets from top so we can see this value\r\n \"depth\": shapeDepth,\r\n }\r\n }\r\n}\r\n\r\nexport class CountertopPositions {\r\n\r\n static prepareCountertopPositions() {\r\n const countertopPositions = [];\r\n const partIdsCoveredByCountertop = [SHAPE_PART_ID.lower_cabinet_boxes, SHAPE_PART_ID.dishwasher];\r\n\r\n /**\r\n * This function will search and return texture in thirdPartyAR3DUrls\r\n * and if it is not found will return large thumbnail\r\n * @return {string}\r\n */\r\n const getCountertopTexture = () => {\r\n let textureUrl = \"https://qc-3dfiles.s3.amazonaws.com/ar-textures/Absolute White - MSI - Marble - color - 1 - 0.16 - 0.33.png\";\r\n const state = store.getState();\r\n if (state.sqftState.selectedCountertop) {\r\n const layout = getCurrentLayout();\r\n const countertopFeature = layout.getFeatureById(state.sqftState.selectedCountertop, true);\r\n if (countertopFeature) {\r\n if (countertopFeature.dbFeature.thirdPartyAR3DUrls) {\r\n const URLByFeatureName = get3dURLsForFeature(countertopFeature);\r\n textureUrl = URLByFeatureName ? URLByFeatureName : countertopFeature.dbFeature.thirdPartyAR3DUrls[0];\r\n } else {\r\n textureUrl = featureThumbnailUrl(countertopFeature);\r\n }\r\n }\r\n }\r\n return textureUrl;\r\n };\r\n\r\n const textureUrl = getCountertopTexture();\r\n const snappedShapeGroups = workspaceControllers.snappedShapeGroups.getResources();\r\n\r\n // Function to group shapes by partId, height, and handle gaps\r\n const groupShapes = (shapes) => {\r\n let currentGroup = [];\r\n let lastHeight = null;\r\n\r\n for (const shape of shapes) {\r\n const shapeHeight = shape.shapeCabinet && shape.shapeCabinet.getShapeHeight\r\n ? shape.shapeCabinet.getShapeHeight()\r\n : DEFAULT_COUNTERTOP_HEIGHT;\r\n const isDishwasher = shape.subType === SHAPE_PART_ID.dishwasher;\r\n const isValidShape = partIdsCoveredByCountertop.includes(shape.partId) ||\r\n partIdsCoveredByCountertop.includes(shape.parentPartId) ||\r\n partIdsCoveredByCountertop.includes(shape.subType)\r\n\r\n if (!isValidShape) {\r\n if (currentGroup.length > 0) {\r\n CountertopPositions.prepareCountertopForGroup(currentGroup, textureUrl, countertopPositions, lastHeight);\r\n currentGroup = [];\r\n }\r\n lastHeight = null;\r\n continue;\r\n }\r\n\r\n if (shapeHeight !== lastHeight && !isDishwasher) {\r\n if (currentGroup.length > 0) {\r\n CountertopPositions.prepareCountertopForGroup(currentGroup, textureUrl, countertopPositions, lastHeight);\r\n currentGroup = [];\r\n }\r\n }\r\n\r\n lastHeight = shapeHeight;\r\n currentGroup.push(shape);\r\n }\r\n\r\n if (currentGroup.length > 0) {\r\n CountertopPositions.prepareCountertopForGroup(currentGroup, textureUrl, countertopPositions, lastHeight);\r\n }\r\n };\r\n\r\n // Prepare countertops for the snapped lower_cabinet_boxes\r\n for (const snappedShapeGroup of snappedShapeGroups) {\r\n let shapes = workspaceControllers.snappedShapeGroups.getSnappedShapes(snappedShapeGroup);\r\n\r\n //shapes = shapes.filter(shp => shp.partId !== SHAPE_PART_ID.upper_cabinet_boxes);\r\n // shapes = shapes.filter(shp =>\r\n // partIdsCoveredByCountertop.includes(shp.partId)\r\n // || partIdsCoveredByCountertop.includes(shp.parentPartId)\r\n // || partIdsCoveredByCountertop.includes(shp.subType)\r\n // );\r\n\r\n shapes.sort((a, b) => {\r\n const posA = a.getPosition();\r\n const posB = b.getPosition();\r\n const tolerance = 15; // x tolerance for defining \"one line\"\r\n\r\n if (Math.abs(posA.x - posB.x) <= tolerance) {\r\n return posA.y - posB.y;\r\n }\r\n\r\n return posA.x - posB.x;\r\n });\r\n\r\n if (shapes.length > 0) {\r\n groupShapes(shapes);\r\n }\r\n }\r\n\r\n // Prepare countertops for the single cabinets\r\n const shapes = workspace.getShapes();\r\n const countertopCabinets = shapes.filter(shp =>\r\n partIdsCoveredByCountertop.includes(shp.partId)\r\n || partIdsCoveredByCountertop.includes(shp.parentPartId)\r\n || partIdsCoveredByCountertop.includes(shp.subType)\r\n );\r\n\r\n for (const countertopCabinet of countertopCabinets) {\r\n if (countertopCabinet.shapeAbsolute.getSnappedShapeGroup() === null) {\r\n const countertopCabinetHeight = countertopCabinet.shapeCabinet && countertopCabinet.shapeCabinet.getShapeHeight\r\n ? countertopCabinet.shapeCabinet.getShapeHeight()\r\n : DEFAULT_COUNTERTOP_HEIGHT;\r\n\r\n CountertopPositions.prepareCountertopForGroup(\r\n [countertopCabinet],\r\n textureUrl,\r\n countertopPositions,\r\n countertopCabinetHeight\r\n );\r\n }\r\n }\r\n\r\n return countertopPositions;\r\n }\r\n\r\n static prepareCountertopForGroup = (snappedShapes, textureUrl, countertopPositions, shapeHeight) => {\r\n const measurementPoints = sqftShapeManager.getMinMaxShapesPointsOnWorkspace(snappedShapes);\r\n const contourPoints = sqftShapeManager.getShapesContourPointsOnWorkspace(snappedShapes, true);\r\n const overhang = sqftShapeManager.getShapesOverhangOnWorkspace(contourPoints, snappedShapes);\r\n\r\n if (measurementPoints.length > 0) {\r\n const width = measurementPoints[1].x - measurementPoints[0].x;\r\n const height = measurementPoints[2].y - measurementPoints[1].y;\r\n countertopPositions.push({\r\n 'partId': 'countertop',\r\n 'x': contourPoints[0].x,\r\n 'y': shapeHeight, // Using the shapeHeight parameter instead of hardcoded value\r\n 'z': contourPoints[0].y,\r\n 'width': width,\r\n 'height': height,\r\n 'edge_url': 'https://quotecountertops.com/video/sqft/countertop_edges/Eased Countertop.glb',\r\n 'texture_url': textureUrl,\r\n 'contour_points': contourPoints,\r\n 'overhang': overhang\r\n });\r\n } else {\r\n console.error(\"contourPoints is empty\");\r\n }\r\n }\r\n}\r\n\r\nexport class WallPositions {\r\n static prepareWallPositions() {\r\n const walls = workspaceControllers.walls.getResources();\r\n const getWallTexture = () => {\r\n let textureUrl = \"https://qc-3dfiles.s3.amazonaws.com/ar-textures/Absolute White - MSI - Marble - color - 1 - 0.16 - 0.33.png\";\r\n const state = store.getState();\r\n if (state.sqftState.selectedWall) {\r\n const layout = getCurrentLayout();\r\n const wallFeature = layout.getFeatureById(state.sqftState.selectedWall, true);\r\n if (wallFeature) {\r\n if (wallFeature.dbFeature.thirdPartyAR3DUrls) {\r\n const URLByFeatureName = get3dURLsForFeature(wallFeature);\r\n textureUrl = URLByFeatureName ? URLByFeatureName : wallFeature.dbFeature.thirdPartyAR3DUrls[0];\r\n } else {\r\n textureUrl = featureThumbnailUrl(wallFeature);\r\n }\r\n }\r\n }\r\n return textureUrl;\r\n };\r\n \r\n return walls.map(wall => {\r\n return {\r\n \"partId\": \"wall\",\r\n \"texture_url\": getWallTexture(),\r\n \"height\": 100.0,\r\n \"contour_points\": wall.getPoints().map(point => point.getPosition())\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport class CabinetsHelper {\r\n static getHighestCabinetValue(partId = SHAPE_PART_ID.upper_cabinet_boxes) {\r\n const shapes = workspace.getShapes();\r\n if (shapes.length === 0) {\r\n return 0;\r\n }\r\n\r\n return shapes.reduce((acc, current) => {\r\n let currentShapeHeight = 0;\r\n\r\n if (current.partId === partId) {\r\n if (current instanceof sqftShape) {\r\n currentShapeHeight = current.shapeCabinet.getShapeHeight();\r\n } else if (current instanceof MovableImage) {\r\n currentShapeHeight = current.getThickness();\r\n }\r\n }\r\n\r\n if (currentShapeHeight > acc) {\r\n return currentShapeHeight;\r\n }\r\n\r\n return acc;\r\n }, 0);\r\n }\r\n\r\n static getCabinetPosYFromShape (shape) {\r\n const layout = getCurrentLayout();\r\n const relatedParentFeature = layout.getFeatureById(shape.relatedParentFeatureId, true);\r\n if (relatedParentFeature) {\r\n let shapeDbFeature = relatedParentFeature.getFeatureRelatedFeatures().find(relatedFeature => relatedFeature.id === shape.featureId);\r\n if (!shapeDbFeature) {\r\n const shapeFeature = layout.getFeatureById(shape.featureId, true);\r\n if (shapeFeature) {\r\n shapeDbFeature = shapeFeature.dbFeature\r\n }\r\n }\r\n const shapeHeight = shape.shapeCabinet ? shape.shapeCabinet.getShapeHeight() : shape.getHeight();\r\n const url = getUrlMatchingByColor(shapeDbFeature, relatedParentFeature);\r\n\r\n return CabinetsHelper.getCabinetPosY(shape, shapeDbFeature, url, shapeHeight)\r\n }\r\n\r\n return 0\r\n }\r\n\r\n static getCabinetPosY(shape, shapeDbFeature, url, shapeHeight) {\r\n let posY = 0\r\n const metaData = getThirdPartyAR3DMetaData(shapeDbFeature, url);\r\n const category = getCategoryFromMetadata(metaData);\r\n\r\n if (shape.partId === SHAPE_PART_ID.upper_cabinet_boxes || shape.parentPartId === SHAPE_PART_ID.upper_cabinet_boxes) {\r\n // //todo (shape bottom cabinet height + distance between bottom and top cabinets)\r\n posY = DEFAULT_COUNTERTOP_HEIGHT + DEFAULT_BACKSPLASH_HEIGHT;\r\n\r\n //set hood cabinet height to the level of highest upper_cabinet value\r\n const isHoodCabinet = category === \"Hood\" || containsHEBeforeExtension(url) || shapeHeight <= DEFAULT_BACKSPLASH_HEIGHT;\r\n if (isHoodCabinet) {\r\n const snappedWithShape = shape.shapeAbsolute.getSnappedWithShape();\r\n\r\n //const snappedShapes = workspaceControllers.snappedShapeGroups.getSnappedShapes(shape.shapeAbsolute.snappedShapeGroup);\r\n let upperCabinetHighestCabinetValue;\r\n //todo might be issues here, it is better to search for the closest cabinet\r\n if (snappedWithShape && !isHoodShape(snappedWithShape) && snappedWithShape.partId === SHAPE_PART_ID.upper_cabinet_boxes) {\r\n upperCabinetHighestCabinetValue = parseFloat(snappedWithShape.shapeCabinet.getShapeHeight());\r\n } else {\r\n upperCabinetHighestCabinetValue = parseFloat(CabinetsHelper.getHighestCabinetValue(SHAPE_PART_ID.upper_cabinet_boxes));\r\n }\r\n posY = DEFAULT_COUNTERTOP_HEIGHT + DEFAULT_BACKSPLASH_HEIGHT + upperCabinetHighestCabinetValue - shapeHeight;\r\n //upper cabinets was raised in 3d models\r\n // hardcode for cabinets that is raised in the model\r\n // if (startsFromH(shapeDbFeature.sharedFeatureName)) {\r\n // posY = posY - 30 + shapeHeight\r\n // }\r\n }\r\n\r\n //set upper cabinet height to the level of tall cabinets\r\n const tallCabinetHighestCabinetValue = parseFloat(CabinetsHelper.getHighestCabinetValue(SHAPE_PART_ID.tall_cabinet_boxes));\r\n if (tallCabinetHighestCabinetValue) {\r\n posY = tallCabinetHighestCabinetValue - shapeHeight;\r\n }\r\n }\r\n return posY\r\n }\r\n\r\n static getHandles(shape) {\r\n for (const line of shape.getLines()) {\r\n const handleId = line.getHandleId()\r\n if (handleId) {\r\n const handle3dURL = line.getHandle3dURL();\r\n //todo we need to create handle for each of the position in ar3dFile\r\n return [\r\n {\r\n handle3dURL,\r\n partId: shape.partId,\r\n // pos: {\r\n // x: pos.x + targetWidth / 2,\r\n // y: pos.y + targetHeight / 2,\r\n // z: pos.z + targetDepth,\r\n // }\r\n }\r\n // ,\r\n // {\r\n // handle3dURL,\r\n // partId: shape.partId,\r\n // }, {\r\n // handle3dURL,\r\n // partId: shape.partId,\r\n // }\r\n ]\r\n }\r\n }\r\n }\r\n}\r\n","import {\r\n ALLOWED_LABEL_NAV_ITEMS, COUNTERTOP_LABELS,\r\n FEATURES_WITH_0_VALUE_FOR_THE_SLABS,\r\n MEASURE_UNITS,\r\n SHAPE_PART_ID,\r\n SQFT_FEATURES,\r\n} from \"../../sqft/constants\";\r\nimport {\r\n FEATURE_STONE,\r\n getFeatureType,\r\n getFeatureUnit,\r\n getSlabUnit,\r\n calculateStoneCost,\r\n getRoomName, getSlabsFeatureGroup\r\n} from \"../../../misc/helpers\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport store from \"../../../store\";\r\nimport sqftShapeManager from \"../../sqft/components/canvas/store/sqftShapeManager\";\r\nimport workspace from \"../../sqft/components/canvas/core/workspace\";\r\nimport {getCommonVisualizerType} from \"../../../config\";\r\nimport {getNavItemsFromTheWizard, getWizardGroupsFromTheWizard} from \"../../sqft/helpers/sqftHelperUi\";\r\nimport sqftConfig from \"../../sqft/components/canvas/store/sqftConfig\";\r\nimport {\r\n groupedDataInControllers,\r\n WORKSPACE_CONTROLLERS_THAT_WILL_ADD_FEATURES\r\n} from \"../../sqft/components/canvas/store/workspaceControllers\";\r\n//import {isFeatureUnitUseEach} from \"../../sqft/helpers/featureHelper\";\r\n\r\n/**\r\n * @param parentKey {string}\r\n * @param partId {string}\r\n * @param quoteIndex {number || null}\r\n * @returns featureGroup {object}\r\n */\r\nexport const getSimilarFeatureGroup = (parentKey, partId, quoteIndex = null) => {\r\n const state = store.getState();\r\n const quotes = state.quotesState.quotes;\r\n let room;\r\n let qtCategoryName;\r\n if (quoteIndex !== null && quotes[quoteIndex].room) {\r\n const activeQuote = quotes[quoteIndex];\r\n room = activeQuote.room;\r\n qtCategoryName = quotes[quoteIndex].qtCatName ? quotes[quoteIndex].qtCatName : getRoomNameInQuote(quoteIndex);\r\n }\r\n const layout = getCurrentLayout(room);\r\n if (!layout) {\r\n return null\r\n }\r\n\r\n let featureGroup = null;\r\n let neededPartId = partId;\r\n switch (parentKey) {\r\n case \"backsplashes\": {\r\n const isBathroom = getCommonVisualizerType() === \"bathroom\";\r\n featureGroup = layout.getSubPartFromQtCategories(\"backsplash\", qtCategoryName, true);\r\n if (!featureGroup && isBathroom) {\r\n featureGroup = layout.getSubPartFromQtCategories(SQFT_FEATURES.vanity_backsplash, qtCategoryName);\r\n }\r\n neededPartId = isBathroom ? SQFT_FEATURES.vanity_backsplash : \"backsplash\";\r\n break;\r\n }\r\n case \"edges\": {\r\n const mainNeeded = parentKey === \"center_island_countertop\" ? \"center_island_edge\" : \"edge_profile\";\r\n const oppositeNeeded = mainNeeded === \"center_island_edge\" ? \"edge_profile\" : \"center_island_edge\";\r\n featureGroup = layout.getSubPartFromQtCategories(mainNeeded, qtCategoryName);\r\n if (!featureGroup) {\r\n featureGroup = layout.getSubPartFromQtCategories(oppositeNeeded, qtCategoryName);\r\n }\r\n neededPartId = mainNeeded;\r\n break;\r\n }\r\n case SQFT_FEATURES.slabs: {\r\n featureGroup = getSlabsFeatureGroup();\r\n // let countertopsCategory = layout.qtCategories.find(qtCategory => {\r\n // return qtCategory.name === \"Countertops\" || qtCategory.name === \"Countertop\"\r\n // });\r\n //countertopsCategory = countertopsCategory === undefined ? layout.qtCategories[0] : countertopsCategory;\r\n\r\n //let subParts = countertopsCategory.subParts;\r\n //const subPartSlab = subParts.find(designNavigationItem => designNavigationItem.part.partId === SQFT_FEATURES.slabs);\r\n //if (!subPartSlab) {\r\n //subParts.splice(2, 0, featureGroup);\r\n //countertopsCategory.subParts = subParts;\r\n //}\r\n\r\n break;\r\n }\r\n case \"countertop\":\r\n case \"center_island_countertop\": {\r\n const oppositeNeeded = partId === \"center_island_countertop\" ? \"countertop\" : \"center_island_countertop\";\r\n featureGroup = layout.getSubPartFromQtCategories(partId, qtCategoryName);\r\n if (!featureGroup) {\r\n featureGroup = layout.getSubPartFromQtCategories(oppositeNeeded, qtCategoryName);\r\n }\r\n break;\r\n }\r\n case \"corners\": {\r\n featureGroup = layout.getSubPartFromQtCategories(partId, qtCategoryName);\r\n if (!featureGroup) {\r\n featureGroup = layout.getSubPartFromQtCategories('radius', qtCategoryName);\r\n }\r\n break;\r\n }\r\n default:\r\n featureGroup = layout.getSubPartFromQtCategories(partId, qtCategoryName);\r\n break;\r\n }\r\n if (!featureGroup) {\r\n const foundGroup = layout.getFeatureGroupByPartId(neededPartId);\r\n if (foundGroup) {\r\n featureGroup = {part: foundGroup}\r\n }\r\n }\r\n return featureGroup\r\n};\r\n\r\n/**\r\n * @returns {string}\r\n */\r\nexport const getRoomNameInQuote = (quoteIndex) => {\r\n const state = store.getState();\r\n const {quotes} = state.quotesState;\r\n const fabricatorData = state.fabricatorState;\r\n const cartItems = state.cartState.cartItems;\r\n const intl = workspace.intl;\r\n\r\n return getRoomName(quoteIndex, cartItems, quotes, intl.messages, intl.locale, fabricatorData);\r\n}\r\n\r\n/**\r\n * @param {{}} parentsList\r\n * @returns {boolean}\r\n */\r\nexport const isRecalculateSlabNeeded = (parentsList) => {\r\n const useStonePricing = Object.keys(parentsList).some(parentKey => {\r\n if (!parentsList[parentKey] || !parentsList[parentKey].features) {\r\n return false\r\n }\r\n return parentsList[parentKey].features.some((sqftFeature) => {\r\n if (sqftFeature.feature && (FEATURE_STONE === getFeatureType(sqftFeature.feature.dbFeature))) { // dbFeature stone pricing algorithms related\r\n const {serverState, fabricatorState, cartState} = store.getState();\r\n // here we are checking if we should calculate algorithm or not\r\n // (if not - it should be counted as a regular feature, so it should be no grouping and included logic then)\r\n const stoneCost = calculateStoneCost(\r\n sqftFeature.feature.dbFeature,\r\n sqftFeature.initialQuantity,\r\n serverState.stonePricing,\r\n fabricatorState.stoneSupplier,\r\n false,\r\n fabricatorState.settings,\r\n cartState,\r\n );\r\n return !!stoneCost;\r\n }\r\n return false\r\n })\r\n })\r\n const useSlabImagePricing = parentsList.slabs.features.length > 0;\r\n\r\n return useStonePricing || useSlabImagePricing\r\n}\r\n\r\n/**\r\n * @param parentList {object}\r\n * @param firstOpen {boolean}\r\n * @returns sqftFeatures {object}\r\n */\r\nexport const recalculateSlabs = (parentList, firstOpen = false) => {\r\n const state = store.getState();\r\n const fabricatorSettings = state.fabricatorState.settings;\r\n let updatedParentList;\r\n if (fabricatorSettings.useCategorySwitching) {\r\n updatedParentList = splitPriceBetweenSlabsMaterial(parentList); // will divide total price between shapes\r\n } else {\r\n updatedParentList = setPriceIntoSingleFeature(parentList, firstOpen); // will display included price\r\n }\r\n\r\n return updatedParentList;\r\n};\r\n\r\n/**\r\n * @param sqftFeatures {object}\r\n * @param firstOpen {boolean}\r\n * @returns sqftFeatures {object}\r\n */\r\nexport const setPriceIntoSingleFeature = (sqftFeatures, firstOpen = false) => {\r\n let commonSharedFeatureNames = getCommonSharedFeatureNames(sqftFeatures); // {sharedName: \"\", totalQuantity: 0, biggestFeature, sqftFeatures: []}\r\n if (commonSharedFeatureNames.length) { // 2) set each feature new fake quantity\r\n commonSharedFeatureNames.forEach(sharedObject => {\r\n sharedObject.sqftFeatures.forEach(sqftFeature => {\r\n const {fabricatorState} = store.getState();\r\n if (fabricatorState.isCaesarStone) {\r\n if (firstOpen) {\r\n if (sharedObject.biggestFeature && (sqftFeature.sqftId === sharedObject.biggestFeature.sqftId)) {\r\n sqftFeature.sortOrder = 1;\r\n } else {\r\n sqftFeature.sortOrder = 0;\r\n }\r\n }\r\n } else {\r\n //QCDES-1507 calculates slab algorithm pricing\r\n sqftFeature.displayFakeQuantity = sqftFeature.initialQuantity; // removed for CAESARSTONE, don't know about the others\r\n if (sharedObject.biggestFeature && (sqftFeature.sqftId === sharedObject.biggestFeature.sqftId)) {\r\n sqftFeature.quantity = sharedObject.totalQuantity; // removed for CAESARSTONE, don't know about the others\r\n if (firstOpen) {\r\n sqftFeature.sortOrder = 1;\r\n }\r\n sqftFeature.isBiggestFeature = true;\r\n } else {\r\n // removed for CAESARSTONE, don't know about the others\r\n sqftFeature.quantityRounded = 0;\r\n sqftFeature.quantity = 0;\r\n sqftFeature.isQuantityAddedToBiggestFeature = true;\r\n if (firstOpen) {\r\n sqftFeature.sortOrder = 0;\r\n }\r\n }\r\n }\r\n });\r\n });\r\n if (firstOpen) {\r\n sqftFeatures = sortSqftFeatures(sqftFeatures);\r\n }\r\n }\r\n console.log(\"commonSharedFeatureNames\", commonSharedFeatureNames);\r\n return sqftFeatures\r\n};\r\n\r\nconst createSqftFeaturesObj = () => {\r\n let sqftFeaturesObj = {};\r\n for (const availablePartIdsKey in SQFT_FEATURES) {\r\n sqftFeaturesObj[availablePartIdsKey] = {\r\n subPart: null,\r\n features: []\r\n }\r\n }\r\n\r\n return sqftFeaturesObj;\r\n}\r\n\r\n/**\r\n * @param sqftFeatures {object}\r\n * @param firstOpen {boolean}\r\n * @returns sqftFeatures {object}\r\n */\r\nexport const splitPriceBetweenSlabsMaterial = (sqftFeatures, firstOpen = false) => {\r\n let commonSharedFeatureNames = getCommonSharedFeatureNames(sqftFeatures);\r\n if (commonSharedFeatureNames.length) {\r\n commonSharedFeatureNames.forEach(sharedObject => {\r\n sharedObject = sortSharedObject(sharedObject, firstOpen);\r\n updateSharedObjectWithGroupQuantity(sharedObject);\r\n });\r\n if (firstOpen) {\r\n sqftFeatures = sortSqftFeatures(sqftFeatures);\r\n }\r\n }\r\n console.log(\"commonSharedFeatureNames\", commonSharedFeatureNames);\r\n return sqftFeatures\r\n};\r\n\r\nconst sortSqftFeatures = (sqftFeatures) => {\r\n Object.keys(sqftFeatures).forEach(parentKey => {\r\n if (sqftFeatures[parentKey]\r\n && sqftFeatures[parentKey].features\r\n && parentKey !== \"edges\"\r\n ) {\r\n sqftFeatures[parentKey].features = sqftFeatures[parentKey].features.sort((a, b) => b.sortOrder - a.sortOrder);\r\n }\r\n })\r\n\r\n return sqftFeatures\r\n}\r\n/**\r\n * @return array of objects [{sharedName: string, totalQuantity: number, biggestFeature: feature, sqftFeatures: []}]\r\n */\r\nconst getCommonSharedFeatureNames = (sqftFeatures) => {\r\n let commonSharedFeatureNames = [];\r\n Object.keys(sqftFeatures).forEach(parentKey => { // 1) create common objects and find the biggest feature\r\n if (sqftFeatures[parentKey]\r\n && sqftFeatures[parentKey].features\r\n && parentKey !== \"edges\"\r\n && parentKey !== \"slabs\"\r\n ) {\r\n sqftFeatures[parentKey].features.forEach(sqftFeature => {\r\n if (sqftFeature.feature && Array.isArray(sqftFeature.feature.dbFeature.stonePricingId)\r\n && sqftFeature.feature.dbFeature.stonePricingId.length) {\r\n const alreadyAdded = commonSharedFeatureNames.find(sharedObject => {\r\n return sharedObject.sharedName === sqftFeature.feature.dbFeature.sharedFeatureName\r\n });\r\n if (!alreadyAdded) {\r\n commonSharedFeatureNames.push({\r\n sharedName: sqftFeature.feature.dbFeature.sharedFeatureName,\r\n totalQuantity: sqftFeature.disabled ? 0 : sqftFeature.initialQuantity,\r\n sqftFeatures: [sqftFeature],\r\n biggestFeature: sqftFeature.disabled ? null : sqftFeature,\r\n })\r\n } else {\r\n alreadyAdded.sqftFeatures.push(sqftFeature);\r\n if (!sqftFeature.disabled) {\r\n alreadyAdded.totalQuantity += sqftFeature.initialQuantity;\r\n if (!alreadyAdded.biggestFeature) {\r\n alreadyAdded.biggestFeature = sqftFeature;\r\n } else if (sqftFeature.feature.partId === \"countertop\") {\r\n if (alreadyAdded.biggestFeature.partId !== \"countertop\" || (alreadyAdded.biggestFeature.initialQuantity < sqftFeature.initialQuantity)) {\r\n alreadyAdded.biggestFeature = sqftFeature;\r\n }\r\n } else if (sqftFeature.feature.partId === \"center_island_countertop\") {\r\n if ((alreadyAdded.biggestFeature.partId !== \"countertop\" && alreadyAdded.biggestFeature.partId !== \"center_island_countertop\")\r\n || (alreadyAdded.biggestFeature.partId === \"center_island_countertop\" && alreadyAdded.biggestFeature.initialQuantity < sqftFeature.initialQuantity)) {\r\n alreadyAdded.biggestFeature = sqftFeature;\r\n }\r\n } else if ((alreadyAdded.biggestFeature.partId !== \"countertop\") && (alreadyAdded.biggestFeature.partId !== \"center_island_countertop\")\r\n && alreadyAdded.biggestFeature.initialQuantity < sqftFeature.initialQuantity) { // backsplash\r\n alreadyAdded.biggestFeature = sqftFeature;\r\n }\r\n }\r\n }\r\n }\r\n })\r\n }\r\n });\r\n\r\n return commonSharedFeatureNames\r\n}\r\n/**\r\n * set group price foreach sqftFeature inside sharedObject\r\n * @param sharedObject {object}\r\n * @returns sharedObject {object}\r\n */\r\nconst updateSharedObjectWithGroupQuantity = (sharedObject) => {\r\n const quantityPerFeature = sharedObject.totalQuantity / sharedObject.sqftFeatures.length;\r\n sharedObject.sqftFeatures.forEach(sqftFeature => {\r\n const {fabricatorState} = store.getState();\r\n if (!fabricatorState.isCaesarStone) {\r\n sqftFeature.group = {\r\n quantityPerFeature: quantityPerFeature,\r\n totalFeaturesInGroup: sharedObject.sqftFeatures.filter(sqftFeature => !sqftFeature.disabled).length,\r\n totalQuantity: sharedObject.totalQuantity,\r\n }\r\n }\r\n });\r\n\r\n return sharedObject\r\n}\r\n\r\n/**\r\n * Returns sorted sharedObject\r\n * @param sharedObject {object}\r\n * @param firstOpen {boolean}\r\n * @returns sharedObject {object}\r\n */\r\nconst sortSharedObject = (sharedObject, firstOpen) => {\r\n sharedObject.sqftFeatures.forEach(sqftFeature => {\r\n if (firstOpen) {\r\n if (sharedObject.biggestFeature && (sqftFeature.sqftId === sharedObject.biggestFeature.sqftId)) {\r\n sqftFeature.sortOrder = 1;\r\n } else {\r\n sqftFeature.sortOrder = 0;\r\n }\r\n }\r\n });\r\n\r\n return sharedObject\r\n}\r\n\r\n/**\r\n * Returns needed for popup data\r\n * @param sqftPassedData {object} // it has sqftCalcData - data that comes from sqft\r\n * @param previouslyAddedSqftFeatures {object}\r\n * @param intl {object} // react intl instance\r\n * @param fabricatorData {object}\r\n * @param cartItems {array}\r\n * @param sqftFromFeature {object}\r\n * @param quoteIndex {number}\r\n * @param visualizerType {string}\r\n * @param stonePricing {object}\r\n * @returns sqftFeatures {object}\r\n */\r\nexport function getParsedSqftData (\r\n sqftPassedData,\r\n previouslyAddedSqftFeatures,\r\n intl,\r\n fabricatorData,\r\n cartItems,\r\n sqftFromFeature,\r\n quoteIndex,\r\n visualizerType,\r\n stonePricing,\r\n) {\r\n let sqftFeatures = createSqftFeaturesObj();\r\n\r\n if (!sqftPassedData || !sqftPassedData.countertops) {\r\n return sqftFeatures\r\n }\r\n\r\n const state = store.getState();\r\n const isSlabPricingEnabled = state.sqftSlabState.isSlabPricingEnabled;\r\n const layout = getCurrentLayout(visualizerType);\r\n let isFromCartFeatureAdded = false;\r\n let feature = null;\r\n\r\n Object.keys(sqftFeatures).forEach(parentKey => {\r\n const isCountertop = parentKey === \"countertop\" || parentKey === \"center_island_countertop\";\r\n let featuresPassed = [];\r\n let shouldUseRelatedParentFeatureAsMain = false;\r\n\r\n // Skip adding slab features if slab pricing is disabled;\r\n if (parentKey === SQFT_FEATURES.slabs && !isSlabPricingEnabled) {\r\n return;\r\n }\r\n\r\n if (isCountertop) {\r\n featuresPassed = prepareCountertopFeaturesPassed(sqftPassedData, layout, parentKey);\r\n } else if (parentKey === SQFT_FEATURES.slabs) {\r\n featuresPassed = prepareSlabFeaturesPassed(sqftPassedData.slabImagesTotalArea);\r\n } else if (parentKey === SQFT_FEATURES.edges || parentKey === SQFT_FEATURES.backsplashes) {\r\n let shapeType;\r\n switch (parentKey) {\r\n case \"edges\":\r\n shapeType = \"edge\";\r\n break;\r\n case \"backsplashes\":\r\n shapeType = \"backsplash\"\r\n break;\r\n default:\r\n shapeType = parentKey\r\n break;\r\n }\r\n\r\n if (sqftPassedData.manualCalculate) {\r\n featuresPassed = prepareEdgesAndBacksplashesManual(sqftPassedData, shapeType, featuresPassed);\r\n } else {\r\n featuresPassed = prepareEdgesAndBacksplashes(sqftPassedData, shapeType, featuresPassed);\r\n }\r\n\r\n // console.log(\"featuresPassed edges\", featuresPassed);\r\n // } else {\r\n // featuresPassed = sqftPassedData[parentKey]\r\n } else if (parentKey === SQFT_FEATURES.crown_molding) {\r\n featuresPassed = prepareCrownMoldings(sqftPassedData, parentKey);\r\n } else if (Object.values(ALLOWED_LABEL_NAV_ITEMS).includes(parentKey)) {\r\n if (sqftConfig.shouldUseCabinetDoorsSQFT) {\r\n featuresPassed = prepareDefaultFeatureObjectGrouped(sqftPassedData.countertops, parentKey, 'relatedParentFeatureId');\r\n shouldUseRelatedParentFeatureAsMain = true;\r\n } else {\r\n featuresPassed = prepareDefaultFeatureObject(sqftPassedData.countertops, parentKey);\r\n }\r\n } else if (parentKey === SQFT_FEATURES.radius) {\r\n featuresPassed = prepareDefaultFeatureObject(sqftPassedData.radii, parentKey);\r\n } else if (parentKey === SQFT_FEATURES.corners) {\r\n featuresPassed = prepareDefaultFeatureObject(sqftPassedData.corners, parentKey);\r\n } else if (parentKey === SQFT_FEATURES.underlayment && sqftPassedData.underlayment && sqftPassedData.underlayment.sections) {\r\n featuresPassed = prepareDefaultFeatureObject(sqftPassedData.underlayment.sections, parentKey);\r\n } else if (parentKey === SQFT_FEATURES.bumpouts && sqftPassedData.bumpouts) {\r\n featuresPassed = sqftPassedData.bumpouts\r\n } else if (parentKey === SQFT_FEATURES.top_handle && sqftPassedData.controllers && sqftPassedData.controllers.handles) {\r\n featuresPassed = prepareDefaultFeatureObjectGrouped(sqftPassedData.controllers.handles, parentKey);\r\n } else if (parentKey === SQFT_FEATURES.bottom_handle && sqftPassedData.controllers && sqftPassedData.controllers.handles) {\r\n featuresPassed = prepareDefaultFeatureObjectGrouped(sqftPassedData.controllers.handles, parentKey);\r\n } else if (WORKSPACE_CONTROLLERS_THAT_WILL_ADD_FEATURES.includes(parentKey)\r\n && sqftPassedData.controllers\r\n && sqftPassedData.controllers[parentKey]\r\n ) {\r\n if (groupedDataInControllers.includes(parentKey)) {\r\n featuresPassed = prepareDefaultFeatureObjectGrouped(sqftPassedData.controllers[parentKey], parentKey);\r\n } else {\r\n featuresPassed = prepareDefaultFeatureObject(sqftPassedData.controllers[parentKey], parentKey);\r\n }\r\n }\r\n\r\n if (featuresPassed && featuresPassed.length) {\r\n featuresPassed.forEach(featurePassed => {\r\n const relatedParentFeature = featurePassed.relatedParentFeatureId ? layout.getFeatureById(featurePassed.relatedParentFeatureId) : null;\r\n const partId = sqftConfig.shouldUseCabinetDoorsSQFT && relatedParentFeature ? relatedParentFeature.partId : parentKey;\r\n const featureGroup = getSimilarFeatureGroup(partId, partId, quoteIndex);\r\n let isSqftFromFeature = false;\r\n let fromWizardGroupId = \"\";\r\n if (featureGroup) {\r\n if (!sqftFeatures[partId].subPart) {\r\n sqftFeatures[partId].subPart = featureGroup;\r\n }\r\n const quantity = getQuantityFromCalculator(partId, featurePassed, sqftPassedData);\r\n const displayFakePrice = getFakePriceFromCalculator(partId, featurePassed, sqftPassedData, cartItems, quoteIndex);\r\n //const displayFakeQuantity = getFakeQuantityFromCalculator(parentKey, featurePassed, sqftPassedData);\r\n [feature, isSqftFromFeature, isFromCartFeatureAdded, fromWizardGroupId] = getFeatureFromSQFT(\r\n featurePassed,\r\n previouslyAddedSqftFeatures,\r\n featureGroup,\r\n parentKey,\r\n quoteIndex,\r\n isCountertop,\r\n sqftFromFeature,\r\n cartItems,\r\n layout,\r\n isFromCartFeatureAdded,\r\n );\r\n let displayFakeQuantity = partId === SQFT_FEATURES.slabs ? featurePassed.totalSlabs : null;\r\n let displayFakeFeatureGroupName = partId === SQFT_FEATURES.slabs ? SQFT_FEATURES.slabs : null;\r\n const featureToCheckUnit = feature || featureGroup.part.features[0];\r\n const featureUnit = featureToCheckUnit ? getFeatureUnit(featureToCheckUnit, intl, fabricatorData, quantity) : \"\";\r\n const unit = partId === SQFT_FEATURES.slabs ? getSlabUnit(featurePassed.totalSlabs, intl) : featureUnit;\r\n\r\n sqftShapeManager.setShapeFeature(featurePassed.id, feature);\r\n sqftFeatures[partId].features.push({\r\n disabled: featurePassed.isDisabledInPopup || false, //previouslyAddedSqftFeature ? previouslyAddedSqftFeature.disabled : false,\r\n feature: sqftConfig.shouldUseCabinetDoorsSQFT && relatedParentFeature ? relatedParentFeature : feature,\r\n partId: partId,\r\n relatedParentFeature,\r\n shouldUseRelatedParentFeatureAsMain,\r\n displayFakeFeatureGroupName,\r\n unit,\r\n subPart: featureGroup,\r\n //quantity: isFeatureUnitUseEach(feature) ? 1 : quantity,\r\n quantity: quantity,\r\n quantityRounded: Math.ceil(quantity),\r\n displayFakeQuantity: displayFakeQuantity,\r\n displayFakePrice,\r\n initialQuantity: quantity,\r\n sqftId: featurePassed.id,\r\n sqftIds: featurePassed.ids,\r\n qtCatName: featurePassed.qtCatName,\r\n isSqftFromFeature,\r\n fromWizardGroupId,\r\n shouldShowEyeBall: featurePassed.shouldShowEyeBall !== undefined ? featurePassed.shouldShowEyeBall : true,\r\n shouldUseSlabPricing: featurePassed.shouldUseSlabPricing,\r\n })\r\n } else {\r\n console.log(\"No feature group added to the QuotingTool\", parentKey, featurePassed.partId);\r\n }\r\n });\r\n }\r\n });\r\n\r\n if (isSlabPricingEnabled && isRecalculateSlabNeeded(sqftFeatures)) {\r\n sqftFeatures = recalculateSlabs(sqftFeatures, true);\r\n console.log(\"stonePricing\", stonePricing);\r\n console.log(\"fabricatorData.pricingPreset\", fabricatorData.pricingPreset);\r\n }\r\n\r\n console.log(\"sqftFeatures\", sqftFeatures);\r\n return sqftFeatures\r\n}\r\n\r\n/**\r\n * Returns prepared slabFeatures that comes from sqft\r\n * @param slabImagesGrouped {object} // data that comes from sqft\r\n * @returns featuresPassed [array]\r\n */\r\nconst prepareSlabFeaturesPassed = (slabImagesGrouped) => {\r\n let featuresPassed = [];\r\n slabImagesGrouped\r\n .forEach(slabImagesGroup => {\r\n const quantity = Math.ceil(slabImagesGroup.totalArea);\r\n featuresPassed.push(Object.assign({...slabImagesGroup}, {\r\n partId: SQFT_FEATURES.slabs,\r\n squareFeet: quantity,\r\n pricePerArea: slabImagesGroup.pricePerArea,\r\n shouldUseSlabPricing: slabImagesGroup.shouldUseSlabPricing,\r\n }));\r\n });\r\n\r\n return featuresPassed;\r\n}\r\n\r\n/**\r\n * Returns prepared countertops that comes from sqft\r\n * @param sqftPassedData {object} // data that comes from sqft\r\n * @param layout {object} // layout\r\n * @param parentKey {string} // parentKey\r\n * @returns featuresPassed [array]\r\n */\r\nconst prepareCountertopFeaturesPassed = (sqftPassedData, layout, parentKey) => {\r\n const countertopExist = layout.getSubPartFromQtCategories(\"countertop\");\r\n const centerIslandExist = layout.getSubPartFromQtCategories(\"center_island_countertop\");\r\n let featuresPassed = []\r\n if (sqftPassedData.manualCalculate) {\r\n featuresPassed = sqftPassedData.countertops\r\n .filter(manCountertopObject => manCountertopObject.partId === parentKey)\r\n .map(manCountertopObject => {\r\n return {\r\n id: manCountertopObject.id,\r\n squareFeet: manCountertopObject.area,\r\n partId: manCountertopObject.partId\r\n }\r\n })\r\n } else if (sqftPassedData.countertops && sqftPassedData.countertops.length) {\r\n featuresPassed = sqftPassedData.countertops.filter(shape => {\r\n if (shape.partId === \"countertop\" || shape.partId === \"center_island_countertop\") {\r\n if (countertopExist && !centerIslandExist) {\r\n shape.partId = countertopExist.part.partId;\r\n } else if (centerIslandExist && !countertopExist) {\r\n shape.partId = centerIslandExist.part.partId;\r\n }\r\n }\r\n\r\n return shape.shapeType && (shape.partId === parentKey)\r\n && ![\"backsplash\", SHAPE_PART_ID.seamPiece, SHAPE_PART_ID.slabPlaceHolder].includes(shape.type)\r\n })\r\n }\r\n\r\n return featuresPassed;\r\n}\r\n\r\n// /**\r\n// * Returns other prepared countertops that comes from sqft\r\n// * @param sqftPassedDataCountertops {object} // data that comes from sqft\r\n// * @param parentKey {string} // parentKey\r\n// * @returns featuresPassed [array]\r\n// */\r\n// const prepareOtherCountertops = (sqftPassedDataCountertops, parentKey) => {\r\n// return sqftPassedDataCountertops\r\n// .filter(manCountertopObject => manCountertopObject.partId === parentKey)\r\n// .map(manCountertopObject => {\r\n// return {\r\n// id: manCountertopObject.id,\r\n// squareFeet: manCountertopObject.squareFeet,\r\n// partId: manCountertopObject.partId,\r\n// qtCatName: manCountertopObject.qtCatName,\r\n// featureId: manCountertopObject.featureId,\r\n// relatedParentFeatureId: manCountertopObject.relatedParentFeatureId,\r\n// }\r\n// });\r\n// }\r\n\r\n// /**\r\n// * Returns other prepared radius's that comes from sqft\r\n// * @param sqftPassedDataRadius {object} // data that comes from sqft\r\n// * @returns featuresPassed [array]\r\n// */\r\n// const prepareRadius = (sqftPassedDataRadius) => {\r\n// return sqftPassedDataRadius\r\n// .filter(radiusObject => radiusObject.featureId !== null)\r\n// .map(radiusObject => {\r\n// return {\r\n// id: radiusObject.id,\r\n// qtCatName: radiusObject.qtCatName,\r\n// partId: SQFT_FEATURES.radius,\r\n// featureId: radiusObject.featureId,\r\n// quantity: 1\r\n// }\r\n// });\r\n// }\r\n\r\n/**\r\n * Returns other dataObjects that comes from sqft\r\n * @param sqftPassedDataHandler {object} // data that comes from sqft\r\n * @param parentKey {string}\r\n * @returns featuresPassed [array]\r\n */\r\nconst prepareDefaultFeatureObject = (sqftPassedDataHandler, parentKey) => {\r\n return sqftPassedDataHandler\r\n .filter(passedObject => passedObject.partId === parentKey)\r\n .map(passedObject => {\r\n return {\r\n id: passedObject.id,\r\n partId: passedObject.partId,\r\n featureId: passedObject.featureId,\r\n relatedParentFeatureId: passedObject.relatedParentFeatureId,\r\n qtCatName: passedObject.qtCatName,\r\n quantity: passedObject.quantity,\r\n squareFeet: passedObject.squareFeet,\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Returns other dataObjects that comes from sqft\r\n * @param sqftPassedDataHandler {object} // data that comes from sqft\r\n * @param parentKey {string}\r\n * @param groupByKey {string} // key to group by (e.g., 'featureId' or 'relatedParentFeatureId')\r\n * @returns featuresPassed [array]\r\n */\r\nconst prepareDefaultFeatureObjectGrouped = (sqftPassedDataHandler, parentKey, groupByKey = 'featureId') => {\r\n const filteredData = sqftPassedDataHandler\r\n .filter(passedObject => passedObject[groupByKey] !== null && passedObject.partId === parentKey);\r\n\r\n // Grouping logic by the specified key\r\n const groupedByKey = filteredData.reduce((acc, passedObject) => {\r\n const groupKey = passedObject[groupByKey];\r\n const { id, quantity, squareFeet, ...rest } = passedObject;\r\n\r\n if (!acc[groupKey]) {\r\n acc[groupKey] = {\r\n ...rest,\r\n [groupByKey]: groupKey,\r\n ids: [],\r\n quantity: 0,\r\n squareFeet: 0,\r\n };\r\n }\r\n\r\n acc[groupKey].ids.push(id);\r\n acc[groupKey].quantity += quantity;\r\n acc[groupKey].squareFeet += squareFeet;\r\n\r\n return acc;\r\n }, {});\r\n\r\n // Apply rounding to quantity\r\n return Object.values(groupedByKey).map(group => ({\r\n ...group,\r\n quantity: Math.ceil10(group.quantity, -2),\r\n squareFeet: Math.ceil10(group.squareFeet, -2),\r\n }));\r\n};\r\n\r\n\r\n// /**\r\n// * Returns other prepared corner's that comes from sqft\r\n// * @param sqftPassedDataRadius {object} // data that comes from sqft\r\n// * @returns featuresPassed [array]\r\n// */\r\n// const prepareCorners = (sqftPassedDataRadius) => {\r\n// return sqftPassedDataRadius\r\n// .filter(radiusObject => radiusObject.featureId !== null)\r\n// .map(radiusObject => {\r\n// return {\r\n// id: radiusObject.id,\r\n// qtCatName: radiusObject.qtCatName,\r\n// partId: SQFT_FEATURES.corners,\r\n// featureId: radiusObject.featureId,\r\n// quantity: 1\r\n// }\r\n// });\r\n// }\r\n\r\n//\r\n\r\n/**\r\n * Parse quantity from sqft // todo rewrite and remove this\r\n * @param parentKey {object} // data that comes from sqft\r\n * @param featurePassed {object} // data that comes from sqft\r\n * @param sqftPassedData {object} // data that comes from sqft\r\n * @returns featuresPassed [array]\r\n */\r\nconst getQuantityFromCalculator = (parentKey, featurePassed, sqftPassedData) => {\r\n let quantity;\r\n switch (parentKey) {\r\n case \"edges\":\r\n case \"backsplashes\":\r\n case SQFT_FEATURES.crown_molding:\r\n quantity = sqftPassedData.measureUnit === MEASURE_UNITS.Metric\r\n ? +(+(featurePassed.length).toFixed(3)).toFixed(2)\r\n : featurePassed.length\r\n break\r\n case SQFT_FEATURES.radius:\r\n case SQFT_FEATURES.corners:\r\n case SQFT_FEATURES.handle:\r\n case SQFT_FEATURES.underlayment:\r\n quantity = featurePassed.quantity;\r\n break\r\n case \"countertop\":\r\n case \"center_island_countertop\":\r\n case \"slabs\":\r\n quantity = featurePassed.squareFeet;\r\n break\r\n default:\r\n if (Object.keys(COUNTERTOP_LABELS).includes(parentKey)) {\r\n quantity = featurePassed.squareFeet;\r\n } else {\r\n quantity = featurePassed.quantity ? featurePassed.quantity : featurePassed.squareFeet;\r\n }\r\n }\r\n\r\n return quantity\r\n}\r\n\r\n/**\r\n * Prepare Edges and Backsplashes from sqft\r\n * @param sqftPassedData {object} // data that comes from sqft\r\n * @param shapeType {string}\r\n * @param featuresPassed {array}\r\n * @returns featuresPassed [array]\r\n */\r\nconst prepareEdgesAndBacksplashes = (sqftPassedData, shapeType, featuresPassed) => {\r\n sqftPassedData.countertops\r\n .filter(shape => shape.type === shapeType)\r\n .forEach(edge => {\r\n const length = edge.length || edge.squareFeet;\r\n featuresPassed.push(Object.assign(\r\n edge, {\r\n partId: edge.partId || shapeType,\r\n fromWizardGroupId: edge.fromWizardGroupId, //todo[Anton] this one is not passing here\r\n length: length,\r\n qtCatName: edge.qtCatName,\r\n featureId: edge.backsplashFeatureId ? edge.backsplashFeatureId : edge.featureId,\r\n shouldShowEyeBall: edge.shouldShowEyeBall !== undefined ? edge.shouldShowEyeBall : true,\r\n }));\r\n });\r\n\r\n return featuresPassed\r\n}\r\n\r\n/**\r\n * Prepare CrownMoldings from sqft\r\n * @param sqftPassedData {object} // data that comes from sqft\r\n * @param shapeType {string}\r\n * @returns featuresPassed [array]\r\n */\r\nconst prepareCrownMoldings = (sqftPassedData, shapeType) => {\r\n const featuresPassed = [];\r\n sqftPassedData.countertops\r\n .filter(shape => shape.type === shapeType)\r\n .forEach(crownMolding => {\r\n const length = crownMolding.length || crownMolding.squareFeet;\r\n featuresPassed.push(Object.assign(\r\n crownMolding, {\r\n partId: crownMolding.partId || shapeType,\r\n length: length,\r\n qtCatName: crownMolding.qtCatName,\r\n }));\r\n });\r\n\r\n return featuresPassed\r\n}\r\n\r\n/**\r\n * Prepare Edges and Backsplashes from sqft\r\n * @param sqftPassedData {object} // data that comes from sqft\r\n * @param shapeType {string}\r\n * @param featuresPassed {array}\r\n * @returns featuresPassed [array]\r\n */\r\nconst prepareEdgesAndBacksplashesManual = (sqftPassedData, shapeType, featuresPassed) => {\r\n let sqftData = [];\r\n switch (shapeType) {\r\n case \"edge\":\r\n sqftData = sqftPassedData.edges;\r\n break\r\n case \"backsplash\":\r\n sqftData = sqftPassedData.backsplashes;\r\n break\r\n }\r\n sqftData\r\n .forEach(edge => {\r\n const edgeLength = edge.length;\r\n const alreadyAdded = featuresPassed.find(addedEdge => {\r\n return addedEdge.attachedToParentId && (addedEdge.featureId === edge.featureId)\r\n });\r\n if (alreadyAdded) {\r\n alreadyAdded.length += edgeLength;\r\n } else {\r\n featuresPassed.push(Object.assign(edge, {featureId: edge.featureId, partId: edge.partId, length: edgeLength}));\r\n }\r\n });\r\n\r\n return featuresPassed\r\n}\r\n\r\n/**\r\n * //todo it is better to rewrite this fake price logic and calculate the price right in the cart\r\n * Get fake price for display\r\n * @param parentKey {object} // data that comes from sqft\r\n * @param featurePassed {object} // data that comes from sqft\r\n * @param sqftPassedData {object} // data that comes from sqft\r\n * @param cartItems\r\n * @param quoteIndex\r\n * @returns featuresPassed [array]\r\n */\r\nconst getFakePriceFromCalculator = (parentKey, featurePassed, sqftPassedData, cartItems, quoteIndex) => {\r\n let fakePrice ;\r\n /** If the number of slabs is greater than one, set the price of all other materials to zero, as only the cost of slabs will be calculated. */\r\n if (FEATURES_WITH_0_VALUE_FOR_THE_SLABS[parentKey]) {\r\n const slabAlreadyInTheCart = cartItems.find(cartItem => {\r\n return (cartItem.sqftId) && (cartItem.partId === SQFT_FEATURES.slabs) && (cartItem.currentQuote === quoteIndex)\r\n })\r\n if (sqftPassedData.slabImagesTotalArea.length > 0 || slabAlreadyInTheCart) {\r\n const activeSlabsExist = sqftPassedData.slabImagesTotalArea.some(slabImageAreaGroup => !slabImageAreaGroup.isDisabledInPopup);\r\n if (activeSlabsExist) {\r\n fakePrice = 0;\r\n }\r\n }\r\n /** Applying the hardcoded price for slabs, which was set in the slab popup. */\r\n } else if (parentKey === SQFT_FEATURES.slabs) {\r\n if (featurePassed.pricePerArea) {\r\n fakePrice = parseFloat(featurePassed.pricePerArea) * getQuantityFromCalculator(parentKey, featurePassed, sqftPassedData);\r\n }\r\n }\r\n\r\n return fakePrice\r\n}\r\n\r\n/**\r\n * Returns parse sqft passed feature id and returns feature or null\r\n * @param featurePassed {object} // data that comes from sqft\r\n * @param parentKey {string} //\r\n * @param featureGroup {object} featureGroup\r\n * @param layout {object}\r\n * @returns feature {object}\r\n */\r\nconst getFeatureFromCalculatorPassedId = (featurePassed, parentKey, featureGroup, layout) => {\r\n let feature = null;\r\n let idToFind = null;\r\n switch (parentKey) {\r\n case \"edges\":\r\n case \"backsplashes\":\r\n case \"countertop\":\r\n case \"center_island_countertop\":\r\n case \"slabs\":\r\n case SHAPE_PART_ID.slabPlaceHolder:\r\n idToFind = +featurePassed.featureId;\r\n break\r\n default:\r\n idToFind = featurePassed.featureId ? featurePassed.featureId: null;\r\n }\r\n if (idToFind) {\r\n feature = layout.getFeatureById(idToFind, true);\r\n if (!feature && featurePassed.slabParentPartId) {\r\n const slabParentFeatureGroup = layout.getFeatureGroupByPartId(featurePassed.slabParentPartId);\r\n if (slabParentFeatureGroup) {\r\n feature = slabParentFeatureGroup.getFeatureById(featurePassed.featureId, true);\r\n }\r\n }\r\n if (!feature && featurePassed.partId) {\r\n const slabParentFeatureGroup = layout.getFeatureGroupByPartId(featurePassed.partId);\r\n if (slabParentFeatureGroup) {\r\n feature = slabParentFeatureGroup.getFeatureById(featurePassed.featureId, true);\r\n }\r\n }\r\n // const navFeatures = getNavItems(featureGroup);//layout.designNavigationItems(featureGroup, {}, \"\", false, true);\r\n //\r\n // const navFeature = navFeatures.find(navItem => navItem.part.dbFeature.id === idToFind);\r\n // if (navFeature) {\r\n // feature = navFeature.part;\r\n // } else if (parentKey === \"slabs\") {\r\n // feature = layout.getFeatureById(idToFind);\r\n // } else if (parentKey === \"top_cabinet\" || parentKey === \"bottom_cabinet\") {\r\n // feature = layout.getFeatureById(idToFind, true);\r\n // }\r\n }\r\n\r\n return feature;\r\n}\r\n\r\n/**\r\n * Returns parse sqft passed feature id and returns feature or null\r\n * @param featurePassed {object} // data that comes from sqft\r\n // * @param previouslyAddedSqftFeatures {object} //\r\n * @param previouslyAddedSqftFeatures\r\n * @param featureGroup {object} //\r\n * @param parentKey {string} //\r\n * @param activeQuoteIndex {number} //\r\n * @param isCountertop {boolean} //\r\n * @param sqftFromFeature {object} //\r\n * @param cartItems {object} //\r\n * @param layout {object} //\r\n * @param isFromCartFeatureAdded {boolean} //\r\n * @returns feature {object}\r\n */\r\nconst getFeatureFromSQFT = (\r\n featurePassed,\r\n previouslyAddedSqftFeatures,\r\n featureGroup,\r\n parentKey,\r\n activeQuoteIndex,\r\n isCountertop,\r\n sqftFromFeature,\r\n cartItems,\r\n layout,\r\n isFromCartFeatureAdded,\r\n) => {\r\n let isSqftFromFeature = false;\r\n const previouslyAddedSqftFeature = previouslyAddedSqftFeatures.find(existing => {\r\n return featurePassed.id && (existing.sqftId === featurePassed.id) && (existing.currentQuote === activeQuoteIndex)\r\n });\r\n let feature = getFeatureFromCalculatorPassedId(featurePassed, parentKey, featureGroup, layout);\r\n\r\n if (cartItems.length && !feature) {\r\n const alreadyAdded = cartItems.find(cartItem => {\r\n return (cartItem.sqftId) && (cartItem.sqftId === featurePassed.id) && (cartItem.currentQuote === activeQuoteIndex)\r\n })\r\n const hasSamePartIdWithCartFeature = alreadyAdded && featureGroup.part.partId === alreadyAdded.cartFeature.partId\r\n if (hasSamePartIdWithCartFeature) {\r\n feature = alreadyAdded.cartFeature;\r\n }\r\n }\r\n\r\n const hasSamePartIdWithPreviouslyAddedFeature = previouslyAddedSqftFeature && previouslyAddedSqftFeature.partId === featureGroup.part.partId\r\n if (!feature && hasSamePartIdWithPreviouslyAddedFeature) {\r\n feature = previouslyAddedSqftFeature.feature;\r\n }\r\n if (!feature && (isCountertop || parentKey === \"backsplashes\") && sqftFromFeature\r\n && (sqftFromFeature.cartFeature.partId === featureGroup.part.partId)) {\r\n feature = sqftFromFeature.cartFeature;\r\n if (!isFromCartFeatureAdded) {\r\n isSqftFromFeature = true;\r\n }\r\n isFromCartFeatureAdded = true;\r\n }\r\n\r\n const state = store.getState();\r\n const {wizardActiveItem, wizardIsActive} = state.wizardState;\r\n\r\n let fromWizardGroupId = featurePassed.fromWizardGroupId;\r\n\r\n if (!fromWizardGroupId && wizardIsActive && wizardActiveItem) {\r\n const featureGroup = layout.getFeatureGroupByPartId(featurePassed.partId);\r\n if (featureGroup) {\r\n const wizardSteps = getWizardGroupsFromTheWizard(featureGroup.dbName || featureGroup.partName);\r\n if (wizardSteps.length) {\r\n // we don't set it to featurePassed, as we need to have all navItems in the dropdown, here we just find\r\n // at least something from the wizard\r\n fromWizardGroupId = wizardSteps[0].stepGroups[0].id;\r\n }\r\n }\r\n }\r\n\r\n const allNavItems = fromWizardGroupId\r\n ? getNavItemsFromTheWizard(featureGroup, \"\", {}, fromWizardGroupId)\r\n : layout.designNavigationItems(featureGroup, {}, \"\", false, true);\r\n\r\n // console.log(\"allNavItems\", allNavItems);\r\n\r\n if (!feature && sqftFromFeature && (\r\n ((parentKey === \"backsplashes\") && sqftFromFeature.cartFeature.partId.includes(\"countertop\"))\r\n || (isCountertop && sqftFromFeature.cartFeature.partId.includes(\"backsplash\"))\r\n || (isCountertop && sqftFromFeature.cartFeature.partId.includes(\"countertop\")\r\n && featureGroup.part.partId !== sqftFromFeature.cartFeature.partId) // case if 2 countertops\r\n )) {\r\n const name1 = sqftFromFeature.cartFeature.getSplittedFeatureName();\r\n const navItem = allNavItems.find(navItem => {\r\n return navItem.part.getSplittedFeatureName() === name1;\r\n });\r\n if (navItem) {\r\n feature = navItem.part;\r\n }\r\n }\r\n if (!feature && featureGroup.part.activeFeature && (!fromWizardGroupId || allNavItems.some(navItem => {\r\n return navItem.part.dbFeature.sharedFeatureName === featureGroup.part.activeFeature.dbFeature.sharedFeatureName\r\n }))) {\r\n feature = featureGroup.part.activeFeature;\r\n }\r\n if (!feature && featurePassed.featureId) {\r\n // we added a real feature with id - go and find it - cases when we load feature from different visualizer\r\n const allNavItems2 = layout.designNavigationItems(featureGroup, {}, \"\", false, \"all\", [], {returnAllFeatures: true});\r\n const foundNavItem = allNavItems2.find(nItem => nItem.part.dbFeature.id === featurePassed.featureId);\r\n if (foundNavItem) {\r\n feature = foundNavItem.part;\r\n }\r\n }\r\n if (!feature && allNavItems.length) {\r\n feature = allNavItems[0].part;\r\n }\r\n\r\n return [feature, isSqftFromFeature, isFromCartFeatureAdded, featurePassed.fromWizardGroupId];\r\n}\r\n","import {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nconst QtCategoryName = (props) => {\r\n\r\n const {qtCategoryName, intl, fabricatorData} = props;\r\n\r\n return getQtCategoryName(qtCategoryName, intl, fabricatorData)\r\n};\r\n\r\nQtCategoryName.propTypes = {\r\n qtCategoryName: PropTypes.string,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(QtCategoryName)\r\n)\r\n\r\nexport const getQtCategoryName = (qtCategoryName, intl, fabricatorData) => {\r\n if ((fabricatorData.isLowes || fabricatorData.isCaesarStone) && intl.messages) {\r\n if (intl.locale === \"fr-FR\" && intl.messages[\"transDoc.customDisplayName_FR.\" + qtCategoryName]) {\r\n return intl.formatMessage({id: \"transDoc.customDisplayName_FR.\" + qtCategoryName})\r\n } else if (intl.locale === \"pl-PL\" && intl.messages[\"transDoc.customTranslateName_PL.\" + qtCategoryName]) {\r\n return intl.formatMessage({id: \"transDoc.customTranslateName_PL.\" + qtCategoryName})\r\n }\r\n }\r\n\r\n return qtCategoryName\r\n}\r\n","//********* FILTERS *********//\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const setAvailableFilterValues = (availableFilterValues) => ({\r\n type: types.SET_AVAILABLE_FILTER_VALUES,\r\n payload: {availableFilterValues}\r\n});\r\n\r\nexport const updateFiltersCount = () => ({\r\n type: types.UPDATE_FILTERS_COUNT\r\n})\r\n","import workspace from \"../workspace\";\r\n//import Point from \"../shapes/point\";\r\nimport EventManager from \"../../store/sqftEventManager\";\r\nimport sqftConfig from \"../../store/sqftConfig\";\r\nimport {\r\n getIntersectCordsBetweenLines,\r\n getMidPoint,\r\n getMousePositionOnField,\r\n getPointDistance,\r\n getPointOnTheLine, inchesToMm, mmToInches, parseImperialFractionToDecimal,\r\n} from \"../../../../helpers/sqftHelper\";\r\nimport ShapeHelper, {getCountertopPartNames, getLineLengthNumberText} from \"../../../../helpers/shapeHelper\";\r\nimport Config from \"../../store/sqftConfig\";\r\nimport {createShapeFromPoints, createWallFromPointsV2} from \"../../../../helpers/freeDrawHelper\";\r\nimport NumberText from \"../workspace/text/numberText\";\r\nimport store from \"../../../../../../store\";\r\nimport {setSQFTActiveButton, setSQFTMenuOpened} from \"../../../../../../actions/sqftMenuFunctions\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport RenderFreeDraw from \"../../helpers/renderFreeDraw\";\r\nimport COLOR_THEMES, {COLORS} from \"../../../../../../colorThemes\";\r\nimport {FREE_DRAW_TYPE, MEASURE_UNITS, SIDEBAR_NAVIGATION_CABINET_BUTTONS} from \"../../../../constants\";\r\nimport {getWallLockedPoint, getWallPoint} from \"../../helpers/wallHelper\";\r\nimport {getFreeDrawPoint, getLockedPoint, getLockPointPos} from \"../../helpers/freeDrawHelper\";\r\nimport sqftEventManager from \"../../store/sqftEventManager\";\r\nimport {\r\n isBackspaceKeyCode,\r\n isDeleteKeyCode,\r\n isLengthKeyCode,\r\n} from \"../../../../helpers/keyboardHelper\";\r\n\r\nconst MIN_DISTANCE_BETWEEN_POINTS = 1\r\n\r\nconst FreeDraw = function() {\r\n let state = {\r\n isDrawFinished: false,\r\n addedPoints: [],\r\n dimensions: [],\r\n dimensionToMouse: null,\r\n drawLineToMouse: false,\r\n lineWidth: 2,\r\n lineColor: COLOR_THEMES[sqftConfig.activeTheme].primary,\r\n outlineColor: COLOR_THEMES[sqftConfig.activeTheme].primary,\r\n minLineLength: 15,\r\n drawType: FREE_DRAW_TYPE.shape,\r\n useLockedPoints: true,\r\n currentNumericInput: \"\",\r\n lockedAngleStep: 45\r\n };\r\n\r\n this.clickedBackSplashButton = null;\r\n this.arcLength = 0;\r\n this.angle = 0;\r\n this.getState = () => state\r\n\r\n const onMouseMove = (mousePos, e) => {\r\n void e;\r\n\r\n if (state.addedPoints.length > 0) {\r\n state.drawLineToMouse = true;\r\n\r\n if (!state.dimensionToMouse) {\r\n this.createDimensionToMouse();\r\n }\r\n this.updateMeasurementToMousePosition(mousePos);\r\n }\r\n\r\n if (state.currentNumericInput.length >= 1 ) {\r\n state.currentNumericInput = \"\";\r\n }\r\n }\r\n\r\n const onKeyDown = (code, e) => {\r\n if (window.lineInputFocused) {\r\n return false;\r\n }\r\n\r\n if (isLengthKeyCode(e)) {\r\n const newValue = state.currentNumericInput + e.key;\r\n\r\n if (newValue !== null) {\r\n state.currentNumericInput = newValue;\r\n state.dimensionToMouse.value = newValue;\r\n }\r\n console.log(\"currentNumericInput\", state.currentNumericInput);\r\n return true;\r\n }\r\n\r\n if (isBackspaceKeyCode(e) || isDeleteKeyCode(e)) {\r\n state.currentNumericInput = state.currentNumericInput.slice(0, -1);\r\n state.dimensionToMouse.value = sqftConfig.measureUnit === MEASURE_UNITS.Metric\r\n ? mmToInches(state.currentNumericInput)\r\n : state.currentNumericInput;\r\n console.log(\"currentNumericInput\", state.currentNumericInput);\r\n return true;\r\n }\r\n\r\n if (code === EventManager.keyCode.ENTER || code === EventManager.keyCode.NumpadEnter) {\r\n if (state.addedPoints.length > 0 && state.currentNumericInput) {\r\n this.createPointFromCurrentNumericInput();\r\n } else {\r\n state.isDrawFinished = true;\r\n this.drawFinish();\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n const onMouseDown = (mousePos) => {\r\n // var hoverPoint = workspace.getHoverPoint();\r\n // var hoverShape = workspace.getHoverShape();\r\n // if (hoverPoint || hoverShape) {\r\n // return true; // return true; // block all mouse-down events // we need dragging workspace\r\n // }\r\n state.currentNumericInput = \"\";\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n //todo pointV2 priority should be higher\r\n // const hoverPoint = workspace.getHoverPointV2();\r\n // const wall = WallsManager.getWallByPoint(hoverPoint);\r\n if (activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.wall) {\r\n this.drawWall(mousePos);\r\n return true;\r\n }\r\n };\r\n\r\n const onMouseUp = (mousePos) => {\r\n void mousePos;\r\n\r\n // this.checkForRestoreCursor();\r\n //\r\n // var hoverPoint = workspace.getHoverPoint();\r\n // var hoverShape = workspace.getHoverShape();\r\n // if (hoverPoint && !hoverPoint.angleIsChanged) {\r\n //\r\n // if (this.arcLength) {\r\n // hoverPoint.arcLength = this.arcLength;\r\n // hoverPoint.angle = 0;\r\n // } else if (this.angle) {\r\n // hoverPoint.angle = this.angle;\r\n // hoverPoint.arcLength = 0;\r\n // }\r\n // return true;\r\n // } else if (hoverShape) {\r\n // Menu.openMenu();\r\n // return true; // if click on shape, block reseting cursor, because we still need it http://jira.mozidev.com/browse/QC-956\r\n // }/* else {\r\n // deregisterEvents();\r\n // elements.designDefault.click();\r\n // }*/\r\n };\r\n\r\n this.createPointFromCurrentNumericInput = () => {\r\n const mousePos = sqftEventManager.getMousePos();\r\n const lastPoint = state.addedPoints[state.addedPoints.length - 1];\r\n let distance = parseImperialFractionToDecimal(state.currentNumericInput);\r\n distance = config.measureUnit === \"Imperial\" ? distance : mmToInches(distance);\r\n let newPoint;\r\n if (state.useLockedPoints && this.isPointExist()) {\r\n newPoint = getLockedPoint(lastPoint, mousePos, state.lockedAngleStep);\r\n } else {\r\n newPoint = getFreeDrawPoint(mousePos);\r\n }\r\n\r\n //we take full distance and subtract existing point distance from it.\r\n const segmentLength = getPointDistance(newPoint, lastPoint);\r\n const newCordsAtDistance = getPointOnTheLine(newPoint, lastPoint, distance - segmentLength);\r\n newPoint.setPosition(newCordsAtDistance);\r\n this.drawStart(mousePos, newPoint);\r\n }\r\n\r\n this.updateMeasurementToMousePosition = (mousePos) => {\r\n if (state.addedPoints.length > 0) {\r\n const mPosOnField = getMousePositionOnField(mousePos.x, mousePos.y);\r\n const lastPoint = state.addedPoints[state.addedPoints.length - 1];\r\n const distance = getPointDistance(mPosOnField, lastPoint);\r\n const reduxState = store.getState();\r\n const isWallsLockMode = reduxState.sqftMenuState.isWallsLockMode;\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n let midPoint;\r\n\r\n if (isWallsLockMode && activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.wall) {\r\n const lockedPointPos = getLockPointPos(lastPoint);\r\n const lockPointOnField = getMousePositionOnField(lockedPointPos.x, lockedPointPos.y);\r\n midPoint = getMidPoint(lockPointOnField, lastPoint);\r\n state.dimensionToMouse.pos.betweenPoints.pointTo = lockPointOnField\r\n } else {\r\n if (state.useLockedPoints) {\r\n const lockedPointPos = getLockPointPos(lastPoint, state.lockedAngleStep);\r\n const lockPointOnField = getMousePositionOnField(lockedPointPos.x, lockedPointPos.y);\r\n midPoint = getMidPoint(lockPointOnField, lastPoint);\r\n } else {\r\n midPoint = getMidPoint(mPosOnField, lastPoint);\r\n }\r\n\r\n state.dimensionToMouse.pos.betweenPoints.pointTo = getMousePositionOnField(mousePos.x, mousePos.y);\r\n }\r\n state.dimensionToMouse.pos.betweenPoints.pointFrom = lastPoint;\r\n state.dimensionToMouse.pos.x = midPoint.x;\r\n state.dimensionToMouse.pos.y = midPoint.y;\r\n state.dimensionToMouse.value = sqftConfig.measureUnit === MEASURE_UNITS.Metric ? inchesToMm(distance) : distance;\r\n\r\n // console.log(\"state.dimensionToMouse\", state.dimensionToMouse);\r\n // debugger // eslint-disable-line no-debugger\r\n }\r\n }\r\n\r\n this.init = function() {\r\n if (!state.isInited) {\r\n state.isInited = true;\r\n this.createDimensionToMouse();\r\n this.registerEvents();\r\n }\r\n };\r\n\r\n this.createDimensionToMouse = () => {\r\n state.dimensionToMouse = new NumberText(\r\n 0,\r\n {x: 0, y: 0},\r\n {shouldRenderFrameBorder: true, isLength: false},\r\n workspace,\r\n Function(),\r\n true\r\n );\r\n }\r\n\r\n this.registerEvents = () => {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render,\r\n this,\r\n EventManager.priorities.SHAPE\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n onMouseDown,\r\n this,\r\n EventManager.priorities.WALL\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n onMouseMove,\r\n this,\r\n EventManager.priorities.IMAGE\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n onMouseUp,\r\n this,\r\n EventManager.priorities.OVERALL\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.KEYDOWN,\r\n onKeyDown,\r\n this,\r\n EventManager.priorities.OVERALL\r\n );\r\n };\r\n\r\n this.hide = function(e) {\r\n if (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n };\r\n\r\n this.deregisterEvents = () => {\r\n EventManager.resetCursor(this);\r\n EventManager.removeEvent(this);\r\n state.isInited = false\r\n }\r\n\r\n this.destroy = (protect, revertBackAfterMouseUp) => {\r\n if (revertBackAfterMouseUp) {\r\n EventManager.removeEvent(this, EventManager.events.RENDER);\r\n this.isWaitingToRestoreCursor = true;\r\n } else {\r\n this.deregisterEvents();\r\n }\r\n this.hide();\r\n };\r\n\r\n const checkIfFirstPointHovered = () => {\r\n return state.addedPoints.length > 2 && state.addedPoints[0].modelCorePoint.mixins.movable.isHovering();\r\n }\r\n // const checkIfLastPointHovered = () => {\r\n // return state.addedPoints.length > 2 && state.addedPoints[state.addedPoints.length - 1].modelCorePoint.mixins.movable.isHovering();\r\n // }\r\n const checkIfThisIsSecondPoint = () => {\r\n return state.addedPoints.length === 1;\r\n }\r\n\r\n this.isPointExist = () => {\r\n return state.addedPoints.length >= 1;\r\n }\r\n\r\n this.isFitDistanceWithLastPoint = (point) => {\r\n if (state.addedPoints.length < 1) {\r\n return true\r\n }\r\n const distance = getPointDistance(point, state.addedPoints[state.addedPoints.length - 1]);\r\n\r\n return distance > MIN_DISTANCE_BETWEEN_POINTS\r\n }\r\n this.isMousePosFitDistanceWithLastPoint = (mousePos) => {\r\n const mousePosOnField = getMousePositionOnField(mousePos.x, mousePos.y);\r\n return this.isFitDistanceWithLastPoint(mousePosOnField);\r\n }\r\n this.isFitDistanceWithLastPoint = (point) => {\r\n if (state.addedPoints.length < 1) {\r\n return true\r\n }\r\n const distance = getPointDistance(point, state.addedPoints[state.addedPoints.length - 1]);\r\n\r\n return distance > MIN_DISTANCE_BETWEEN_POINTS\r\n }\r\n\r\n this.initDraw = (useLockedPoints) => {\r\n state.useLockedPoints = useLockedPoints\r\n }\r\n\r\n this.drawShape = (mousePos) => {\r\n if (checkIfFirstPointHovered()) {\r\n this.drawFinish();\r\n return;\r\n }\r\n\r\n let point;\r\n if (state.useLockedPoints && this.isPointExist()) {\r\n const lastPoint = state.addedPoints[state.addedPoints.length - 1];\r\n point = getLockedPoint(lastPoint, mousePos, state.lockedAngleStep);\r\n } else {\r\n point = getFreeDrawPoint(mousePos);\r\n }\r\n\r\n this.drawStart(mousePos, point);\r\n }\r\n\r\n this.drawWall = (mousePos) => {\r\n state.lineWidth = 10;\r\n state.lineColor = COLORS.gray;\r\n state.outlineColor = COLORS.gray4;\r\n state.drawType = FREE_DRAW_TYPE.wall\r\n if (checkIfThisIsSecondPoint()) {\r\n const wallPointLocked = getWallLockedPoint(state.addedPoints[0], mousePos, state.lockedAngleStep);\r\n this.drawStart(mousePos, wallPointLocked);\r\n this.drawFinish();\r\n } else {\r\n const wallPoint = getWallPoint(mousePos);\r\n this.drawStart(mousePos, wallPoint);\r\n }\r\n };\r\n\r\n this.drawStart = (mousePos, pointV2) => {\r\n if (state.isDrawFinished || !this.isMousePosFitDistanceWithLastPoint(mousePos)) {\r\n return\r\n }\r\n\r\n if (state.addedPoints.length > 0) {\r\n this.addLineDimensions(pointV2);\r\n }\r\n state.addedPoints.push(pointV2);\r\n state.dimensionToMouse ? state.dimensionToMouse.destroy() : null;\r\n state.dimensionToMouse = null;\r\n };\r\n\r\n this.addLineDimensions = (pointTo) => {\r\n //const prevPoint = state.addedPoints[state.addedPoints.length - 2];\r\n const pointFrom = state.addedPoints[state.addedPoints.length - 1];\r\n const numberText = getLineLengthNumberText(pointFrom, pointTo, workspace, this.setSegmentLengthFromNumberValue);//new NumberText(thicknessValue, posThickness, {}, this, this.setSegmentThicknessFromNumberValue);\r\n\r\n state.dimensions.push(numberText);\r\n };\r\n\r\n this.setSegmentLengthFromNumberValue = (value, numberText) => {\r\n value = Math.round10(+value / Config.getMeasureMultiplier(), -3);\r\n let miteredSection = numberText.parent;\r\n let miteredSegments = miteredSection.getSegments();\r\n let miteredSegment = miteredSegments.find(seg => seg.length === numberText);\r\n\r\n this.setSegmentLength(value, miteredSegment, miteredSection);\r\n };\r\n\r\n this.resetState = (shouldResetPoints = true) => {\r\n state.isDrawFinished = false;\r\n state.currentNumericInput = \"\";\r\n if (shouldResetPoints) {\r\n for (const addedPoint of state.addedPoints) {\r\n addedPoint.destroy();\r\n }\r\n }\r\n for (const dimension of state.dimensions) {\r\n dimension.destroy();\r\n }\r\n if (state.dimensionToMouse) {\r\n state.dimensionToMouse.destroy();\r\n }\r\n\r\n state.addedPoints = [];\r\n state.dimensions = [];\r\n };\r\n\r\n this.drawFinish = () => {\r\n //this.addLineDimensions(state.addedPoints[0], state.addedPoints[1]);\r\n //const reduxState = store.getState();\r\n //const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (state.addedPoints.length > 2 || state.drawType === FREE_DRAW_TYPE.wall && state.addedPoints.length === 2) {\r\n const shapeCenter = ShapeHelper.getCenterPoint(state.addedPoints);\r\n let preparedPoints = [];\r\n switch (state.drawType) {\r\n case FREE_DRAW_TYPE.wall:\r\n this.createWall(state.addedPoints, shapeCenter);\r\n break;\r\n case FREE_DRAW_TYPE.shape:\r\n if (state.useLockedPoints) {\r\n this.changeFirstPointCoordinatesToCreate45or90DegAngleWithTheLastPoint();\r\n }\r\n for (const addedPoint of state.addedPoints) {\r\n addedPoint.x -= shapeCenter.x;\r\n addedPoint.y -= shapeCenter.y;\r\n preparedPoints.push(addedPoint);\r\n }\r\n\r\n this.createShape(preparedPoints, shapeCenter);\r\n store.dispatch(setSQFTMenuOpened(\"\"));\r\n store.dispatch(setSQFTActiveButton(\"\"));\r\n config.workspace.menuItemActive = \"\";\r\n this.deregisterEvents();\r\n break;\r\n }\r\n\r\n state.dimensionToMouse ? state.dimensionToMouse.destroy() : null;\r\n state.dimensionToMouse = null;\r\n }\r\n\r\n this.resetState(!(state.drawType === FREE_DRAW_TYPE.wall));\r\n // this.deregisterEvents();\r\n //\r\n // if (activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.wall) {\r\n // this.init();\r\n // }\r\n };\r\n\r\n this.changeFirstPointCoordinatesToCreate45or90DegAngleWithTheLastPoint = () => {\r\n if (state.addedPoints.length >= 2) {\r\n const firstPoint = state.addedPoints[0];\r\n const secondPoint = state.addedPoints[1];\r\n const lastPoint = state.addedPoints[state.addedPoints.length - 1];\r\n //const penultimatePoint = state.addedPoints[state.addedPoints.length - 2];\r\n const lockPointPos = getLockPointPos(lastPoint, state.lockedAngleStep, firstPoint.getPointField());\r\n const intersectionPoint = getIntersectCordsBetweenLines(\r\n firstPoint.getPointField(),\r\n secondPoint.getPointField(),\r\n lastPoint.getPointField(),\r\n lockPointPos,\r\n true,\r\n true\r\n );\r\n\r\n if (intersectionPoint) {\r\n const intersectionPointOnField = getMousePositionOnField(intersectionPoint.x, intersectionPoint.y);\r\n state.addedPoints[0].setPosition(intersectionPointOnField);\r\n }\r\n }\r\n }\r\n\r\n this.createShape = (preparedPoints, shapeCenter) => {\r\n const [countertopPartName] = getCountertopPartNames();\r\n const shapeId = createShapeFromPoints(\r\n preparedPoints,\r\n countertopPartName,\r\n false,\r\n shapeCenter,\r\n true,\r\n null,\r\n {},\r\n {\r\n minimumShapeArea: 25,\r\n maximumShapeArea: 100000,\r\n maximumLineDistance: 1000,\r\n }\r\n );\r\n void shapeId;\r\n }\r\n\r\n this.createWall = (preparedPoints, centerPoint) => {\r\n createWallFromPointsV2(preparedPoints, centerPoint, state.lockedAngleStep);\r\n }\r\n\r\n this.getOffset = function() {\r\n // //return {x: 0, y: 0};\r\n // var scale = sqftConfig.scale;\r\n // var workspacePos = workspace.getOffset();\r\n // debugger\r\n // if (parent) {\r\n // var _pos = parent.getPosition();\r\n // // if (sqftConfig.workspace.snapToGrid){\r\n // // _pos = parent.getSnappedPosition();\r\n // // }\r\n // var offset = {\r\n // x: workspacePos.x + (_pos.x * scale),\r\n // y: workspacePos.y + (_pos.y * scale)\r\n // }\r\n // } else {\r\n // return {x: 0, y: 0};\r\n // }\r\n // return offset;\r\n };\r\n this.render = (ctx) => RenderFreeDraw.render(ctx, this.getState())\r\n\r\n};\r\n\r\nexport default new FreeDraw()\r\n","import {AxiosInstance, leadApiGet, leadApiPost} from \"./api\";\r\nimport {IS_DEV_MODE} from \"../constants\";\r\n\r\nconst baseUrl = IS_DEV_MODE\r\n ? \"https://calendar.staging.labs.lixil.com\"\r\n : \"https://calendar.prod.labs.lixil.com\";\r\n\r\nconst postAuthData = {\r\n \"password\": \"QC@123\",\r\n \"username\": \"QC\"\r\n}\r\n\r\nexport const postSignInAuth = async () => {\r\n // return await leadApiPost(\"https://calendar.prod.labs.lixil.com/v1/sign-in\", postData);\r\n const postAuthResponse = await leadApiPost(baseUrl + \"/v1/sign-in\", postAuthData);\r\n if (postAuthResponse && postAuthResponse.data && postAuthResponse.data.data && postAuthResponse.data.data.jwtToken) {\r\n // dispatch(setAppJwtToken(postAuthResponse.data.data.jwtToken)); // just in case, we don't need it anymore\r\n AxiosInstance.defaults.headers.post['Authorization'] = postAuthResponse.data.data.jwtToken;\r\n AxiosInstance.defaults.headers.get['Authorization'] = postAuthResponse.data.data.jwtToken;\r\n }\r\n // console.log(\"AxiosInstance\", AxiosInstance);\r\n return postAuthResponse\r\n}\r\n\r\nconst withSignInRetryRequest = async (request) => {\r\n let mainResponse;\r\n\r\n const retryFunction = async () => {\r\n console.log(\"session expired, trying one more time...\", );\r\n // delete AxiosInstance.defaults.headers.post['Authorization']; // prevent status 400 bad request\r\n // delete AxiosInstance.defaults.headers.get['Authorization']; // prevent status 400 bad request\r\n await postSignInAuth();\r\n return await request();\r\n }\r\n\r\n try {\r\n mainResponse = await request();\r\n if (mainResponse && mainResponse.status === 401) {\r\n mainResponse = await retryFunction();\r\n }\r\n return mainResponse\r\n } catch (error) {\r\n if ((typeof error === \"object\") && error.response && (error.response.status === 401)) {\r\n mainResponse = await retryFunction();\r\n return mainResponse\r\n }\r\n console.log(\"response error\", error);\r\n return new Error(error)\r\n }\r\n}\r\n\r\n\r\nexport const checkLixilPostalCode = async (zipCode) => {\r\n try {\r\n const url = `${baseUrl}/availability/${zipCode}`;\r\n const request = leadApiGet.bind(this, url);\r\n const mainResponse = await withSignInRetryRequest(request);\r\n return mainResponse && mainResponse.data && mainResponse.data.serviceAvailable\r\n } catch (error) {\r\n console.log(\"availability/postalCode error\", error);\r\n return false\r\n }\r\n}\r\n\r\nexport const postLixilCalendar = async (postCalendarData) => {\r\n try {\r\n const url = `${baseUrl}/availability/calendar`;\r\n const request = leadApiPost.bind(this, url, postCalendarData);\r\n return await withSignInRetryRequest(request);\r\n } catch (error) {\r\n console.log(\"availability/calendar error\", error);\r\n return false\r\n }\r\n}\r\n\r\nexport const postLixilGetSalesRep = async (postData) => {\r\n try {\r\n const url = `${baseUrl}/availability/getSalesRep`;\r\n const request = leadApiPost.bind(this, url, postData);\r\n return await withSignInRetryRequest(request);\r\n } catch (error) {\r\n console.log(\"availability/getSalesRep error\", error);\r\n return false\r\n }\r\n}\r\n","import React from 'react';\r\nimport * as uuid from \"uuid\";\r\n\r\nimport NavigationItem from \"./navigationItem\";\r\nimport {UserPopupTypes} from \"../constants\";\r\nimport {getFeatureCost, getFeatureIsLocked, isIE} from \"../../../misc/helpers\";\r\nimport Walls from \"../../kvComponent/core/parts/walls\";\r\nimport Cabinet from \"../../kvComponent/core/parts/cabinet\";\r\nimport CountertopGroup from \"../../kvComponent/core/parts/countertopGroup\";\r\nimport CenterIsland from \"../../kvComponent/core/parts/centerIsland\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {getBvGroupFeatures} from \"../../../api/server-api\";\r\nimport LoadingBar from '../../../lib/react-redux-loading-bar';\r\nimport CommonFeatureItemsMethods from \"../commonFeatureItemsMethods\";\r\nimport {checkIfNeedToReceiveFeaturesIfFiltersApplied} from \"../../../misc/filtersFunctions\";\r\nimport {\r\n displayMaterialsWizardGroupAsFeature,\r\n getMissingWizardFeatures\r\n} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {getAdditionalFeaturesOnScroll} from \"../../../api/look-api\";\r\nimport Config from \"../../../config\";\r\n\r\nexport default class NavigationItemsList extends CommonFeatureItemsMethods { // this class is used for both Desktop & Mobile navigations to avoid method's duplicating\r\n\r\n constructor(props) {\r\n window.itemClickCount = window.itemClickCount || 0;\r\n window.allowClickLeadCapturePopup = true;\r\n super(props);\r\n }\r\n\r\n componentDidMount() {\r\n this.reorderItems(this.props);\r\n const childItem = this.props.childItem && this.props.childItem.part;\r\n if (childItem && childItem.partId.includes(\"countertop\") && this.props.selectedFilters.length && !this.props.activeNavigationFilter) {\r\n const checkPassed = checkIfNeedToReceiveFeaturesIfFiltersApplied(this.props.selectedFilters, childItem);\r\n if (checkPassed) {\r\n this.getFeaturesFromBackendWithFilters(childItem, checkPassed.arrayOfNeededFiltersToReceive, 1);\r\n }\r\n }\r\n }\r\n\r\n itemClick = (item, featureIsLocked, event) => {\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n if( !this.props.userIsLoggedIn && fabricatorSettings.clickLeadCapture && (++window.itemClickCount >= fabricatorSettings.clickLeadCount) && window.allowClickLeadCapturePopup) {\r\n this.handleUserLoginClick(UserPopupTypes.NewDesign);\r\n return;\r\n }\r\n this.props.onItemClick(item, false, featureIsLocked, event);\r\n this.forceUpdate();\r\n };\r\n\r\n getActiveFeatureName = (uniquePartNamesArray, parentId, childName, isCabinet = false) => {\r\n const layout = getCurrentLayout();\r\n const parent = layout.parts[parentId];\r\n const activeFeature = parent && parent[childName] && parent[childName].activeFeature;\r\n if (activeFeature) {\r\n uniquePartNamesArray.unshift(activeFeature.getSplittedFeatureName(isCabinet))\r\n }\r\n return uniquePartNamesArray\r\n };\r\n\r\n getSelectedWallIndexes = (childItem, features, selectedFirstItemIndex) => {\r\n if (this.props.isWizard && this.props.currentGroups && displayMaterialsWizardGroupAsFeature(this.props.currentGroups)) {\r\n return []\r\n }\r\n const layout = getCurrentLayout();\r\n let otherSelectedWallsIndexes = [];\r\n let uniquePartNamesArray = [];\r\n const kitchenCabinetPartIds = [\"top_cabinet\", \"bottom_cabinet\", \"center_island_cabinet\"];\r\n if (childItem && childItem.part && childItem.part.isStoneFeature) {\r\n uniquePartNamesArray = layout.getStonesActiveFeatures().map((activeFeature) => {\r\n return activeFeature.cartFeature.getSplittedFeatureName()\r\n });\r\n switch (childItem.part.partId) {\r\n case \"backsplash\": {\r\n const parentItem = childItem.part.getParent();\r\n const rightWall = parentItem && parentItem.rightWall;\r\n if (rightWall && rightWall.activeFeature) {\r\n uniquePartNamesArray.unshift(rightWall.activeFeature.getSplittedFeatureName())\r\n }\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, CenterIsland.id, \"countertop\");\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, CountertopGroup.id, \"countertop\");\r\n break;\r\n }\r\n case \"countertop\": {\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, Walls.id, \"backsplash\");\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, CenterIsland.id, \"countertop\");\r\n break;\r\n }\r\n case \"center_island_countertop\": {\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, Walls.id, \"backsplash\");\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, CountertopGroup.id, \"countertop\");\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n } else if (childItem && childItem.part && (kitchenCabinetPartIds.includes(childItem.part.partId))) {\r\n switch (childItem.part.partId) {\r\n case \"top_cabinet\": {\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, CenterIsland.id, \"cabinet\");\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, Cabinet.id, \"bottomCabinet\", true);\r\n break;\r\n }\r\n case \"bottom_cabinet\": {\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, CenterIsland.id, \"cabinet\");\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, Cabinet.id, \"topCabinet\", true);\r\n break;\r\n }\r\n case \"center_island_cabinet\": {\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, Cabinet.id, \"topCabinet\", true);\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, Cabinet.id, \"bottomCabinet\", true);\r\n break;\r\n }\r\n }\r\n }\r\n // console.log(\"uniquePartNamesArray\", uniquePartNamesArray);\r\n if (uniquePartNamesArray.length) {\r\n uniquePartNamesArray = isIE()\r\n ? uniquePartNamesArray.reduce(function(a,b){if(a.indexOf(b)<0)a.push(b);return a;},[])\r\n : [...uniquePartNamesArray.reduce((p,c) => p.set(c,true),new Map()).keys()]; //remove duplicates\r\n // console.log('uniquePartNamesArray', uniquePartNamesArray);\r\n uniquePartNamesArray.forEach((uniquePartName) => {\r\n let foundIndex = features.findIndex(feature => feature.part && (feature.part.getSplittedFeatureName() === uniquePartName));\r\n if (foundIndex < 0) {\r\n foundIndex = features.findIndex(feature => {\r\n if (!feature.part) {\r\n return false\r\n }\r\n if (childItem.part.partId === \"backsplash\") {\r\n // example: countertop - \"Dymo White 12X24 Glossy\", backsplash - \"Dymo White 12X24 Glossy 4in l\"\r\n return feature.part.partName.includes(uniquePartName)\r\n }\r\n return feature.part.partName === uniquePartName\r\n });\r\n }\r\n if (foundIndex > -1 && selectedFirstItemIndex !== foundIndex) {\r\n otherSelectedWallsIndexes.push(foundIndex);\r\n }\r\n });\r\n }\r\n // console.log(\"otherSelectedWallsIndexes\", otherSelectedWallsIndexes);\r\n return otherSelectedWallsIndexes\r\n };\r\n\r\n getLockedFeature = (activeFeature) => {\r\n const filterValues = activeFeature.part.dbFeature && activeFeature.part.dbFeature.filterValueIDs;\r\n if (filterValues) {\r\n return Object.keys(filterValues).some((filterKey) => {\r\n const filterGroup = this.props.filterGroups.find(group => group.id === +filterKey);\r\n const filterValue = filterGroup && filterGroup.values && filterGroup.values.find(value => value.id === filterValues[filterKey][0]);\r\n return filterValue && filterValue.lockedInWizard\r\n });\r\n }\r\n return false\r\n };\r\n\r\n getActiveItemIndex = (props) => {\r\n const showPlaceHolders = document.bvConfig ? document.bvConfig.showPlaceholders : false;\r\n let isActiveItemIndex = null;\r\n if (props.childItem && props.childItem.part.activeFeature) {\r\n isActiveItemIndex = props.features.findIndex((item) => {\r\n if(item && item.part)\r\n return props.childItem.part.activeFeatureId(showPlaceHolders) === item.part.id()\r\n })\r\n } else if (props.parentItem.part.activeFeature) {\r\n isActiveItemIndex = props.features.findIndex((item) => {\r\n if(item && item.part)\r\n return props.parentItem.part.activeFeatureId(showPlaceHolders) === item.part.id()\r\n })\r\n }\r\n return isActiveItemIndex\r\n };\r\n\r\n getReorderedItems = (indexesToReplace, props, selectedExist = false, isQuotingTool = false) => {\r\n let reOrderedFeatures = props.features;\r\n const featuresToPlaceFirst = indexesToReplace.map(index => reOrderedFeatures[index]).reverse();\r\n const sorted = this.getSortedFeatures(reOrderedFeatures, selectedExist, isQuotingTool);\r\n featuresToPlaceFirst.forEach((navItemToReplace) => {\r\n const currentIndex = sorted.findIndex(navItem => navItem.part.dbFeature.id === navItemToReplace.part.dbFeature.id)\r\n if (currentIndex > -1) {\r\n sorted.splice(currentIndex, 1);\r\n sorted.splice(0, 0, navItemToReplace);\r\n }\r\n });\r\n // console.log(\"sorted\", sorted);\r\n return sorted\r\n };\r\n\r\n checkForSelectedAccessories = (activeFeature, selected) => {\r\n const accessories = [\"large_corner_caddie\", \"corner_caddie\", \"small_corner_shelf\", \"large_corner_seat\"];\r\n if (accessories.includes(activeFeature.partId)) {\r\n if (activeFeature.partId === \"large_corner_seat\") {\r\n if (activeFeature.getParent().getParent().caddie_type === \"large_corner_caddie\") {\r\n selected = false\r\n }\r\n } else if (activeFeature.getParent().getParent().caddie_type !== activeFeature.partId) {\r\n selected = false\r\n }\r\n }\r\n return selected\r\n };\r\n\r\n getFeaturePropertyToSort = (navItem, property) => {\r\n if (property === \"name\") {\r\n return navItem.part.getFeatureName()\r\n }\r\n if (property === \"SortPositionNum\") {\r\n return navItem.part.metaData[property] || 99999;\r\n }\r\n return navItem.part[property];\r\n }\r\n\r\n getNavItemsSortedByProperty = (navItems, property, property2) => {\r\n const order = \"asc\";\r\n // console.log(\"navItems - navItems\", navItems);\r\n navItems = navItems.sort((a,b) => {\r\n let prop1 = this.getFeaturePropertyToSort(a, property);\r\n let prop2 = this.getFeaturePropertyToSort(b, property);\r\n let prop3 = this.getFeaturePropertyToSort(a, property2);\r\n let prop4 = this.getFeaturePropertyToSort(b, property2);\r\n return order === \"asc\"\r\n ? (prop1 > prop2) ? 1 : (prop1 < prop2) ? -1 : (prop3 > prop4) ? 1 : (prop3 < prop4) ? -1 : 0\r\n : (prop1 < prop2) ? 1 : (prop1 > prop2) ? -1 : (prop3 < prop4) ? 1 : (prop3 > prop4) ? -1 : 0\r\n })\r\n // console.log(\"navItems\", navItems);\r\n return navItems\r\n };\r\n\r\n getSortedFeatures = (features, selectedExist = false, isQuotingTool = false) => {\r\n if (this.props.isWizard && this.props.currentGroups && displayMaterialsWizardGroupAsFeature(this.props.currentGroups)) {\r\n return features\r\n }\r\n const {fabricatorData} = this.props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n let newFeatures = [...features.filter(feature => feature && feature.part && feature.part.dbFeature)];\r\n let selectedFeature = null;\r\n if (selectedExist && (!isQuotingTool || (newFeatures[0] && this.checkIfFeatureSelected(newFeatures[0].part, newFeatures[0].part.getParent())))) {\r\n selectedFeature = newFeatures[0];\r\n newFeatures.splice(0, 1);\r\n }\r\n if ((fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) && !this.props.isPhoneNumberValidated) {\r\n const unLockedFeatures = newFeatures\r\n .filter(navItem => !getFeatureIsLocked(navItem.part))\r\n .map(navItem => {\r\n navItem.part.featurePrice = getFeatureCost(navItem.part, 1);\r\n return navItem\r\n })\r\n const lockedFeatures = newFeatures\r\n .filter(navItem => getFeatureIsLocked(navItem.part))\r\n .map(navItem => {\r\n navItem.part.featurePrice = getFeatureCost(navItem.part, 1);\r\n return navItem\r\n })\r\n newFeatures = fabricatorSettings.showPricing ? [\r\n ...this.getNavItemsSortedByProperty(unLockedFeatures, \"featurePrice\", \"name\"),\r\n ...this.getNavItemsSortedByProperty(lockedFeatures, \"featurePrice\", \"name\")\r\n ] : [...unLockedFeatures, ...lockedFeatures];\r\n } else if (fabricatorSettings.showPricing && !fabricatorData.hideCheckoutBreakdownCost && !fabricatorData.hidePricesFromUser) {\r\n newFeatures = newFeatures.map(navItem => {\r\n navItem.part.featurePrice = getFeatureCost(navItem.part, 1);\r\n return navItem\r\n })\r\n newFeatures = this.getNavItemsSortedByProperty(newFeatures, \"featurePrice\", \"name\")\r\n } else {\r\n const propertyToSort = newFeatures.some(navItem => navItem.part.metaData[\"SortPositionNum\"]) ? \"SortPositionNum\" : \"name\";\r\n newFeatures = this.getNavItemsSortedByProperty(newFeatures, propertyToSort, \"\");\r\n if (!isQuotingTool && newFeatures.some(navItem => navItem.part.useMatchesFailedNavigation)) {\r\n newFeatures = this.getNavItemsSortedByProperty(newFeatures, \"matchesMetaFailed\");\r\n }\r\n }\r\n if (isQuotingTool) {\r\n // newFeatures = this.getNavItemsSortedByProperty(newFeatures, \"notAvailableInVisualizer\", \"_customDisplayName\")\r\n const inVisFeatures = newFeatures.filter(navFeature => !navFeature.part.notAvailableInVisualizer);\r\n const notInVisFeatures = newFeatures.filter(navFeature => navFeature.part.notAvailableInVisualizer);\r\n newFeatures = [\r\n ...inVisFeatures,\r\n // ...this.getNavItemsSortedByProperty(notInVisFeatures, \"featurePrice\", \"name\")\r\n ...notInVisFeatures\r\n ];\r\n }\r\n if (selectedExist && selectedFeature) {\r\n newFeatures.unshift(selectedFeature)\r\n }\r\n return newFeatures\r\n };\r\n\r\n getNavItemsList = (isMobile) => {\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n const showPlaceHolders = document.bvConfig ? document.bvConfig.showPlaceholders : false;\r\n const elements = [];\r\n\r\n const features = this.state.reorderedFeatures.filter(feature => feature);\r\n // console.log('features', features);\r\n\r\n for (let i = 0; i < features.length; i++ ) {\r\n const currentFeature = features[i];\r\n const currentParent = this.props.childItem || this.props.parentItem;\r\n\r\n let isActive = false;\r\n if (((fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) && !this.props.isPhoneNumberValidated)\r\n || (showPlaceHolders && currentParent.part.placeholderFeature && !currentParent.part.placeholderChanged)) {\r\n isActive = currentFeature && this.props.activeFeature && currentParent\r\n && currentParent.part.firstClick[this.props.activeQuoteIndex]\r\n && this.props.activeFeature.dbFeature.id === currentFeature.part.id();\r\n } else {\r\n isActive = currentFeature && this.props.activeFeature && this.props.activeFeature.dbFeature.id === currentFeature.part.id();\r\n }\r\n\r\n if (isActive) {\r\n isActive = this.checkForSelectedAccessories(this.props.activeFeature, isActive);\r\n }\r\n\r\n let isPulsating = false;\r\n if ((fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) && !this.props.isPhoneNumberValidated\r\n && currentFeature && currentFeature.part.dbFeature.unlocked\r\n && (!this.props.activeFeature || (this.props.childItem && (!this.props.childItem.part.firstClick[this.props.activeQuoteIndex] || !this.props.activeFeature.dbFeature.unlocked)))) {\r\n isPulsating = true\r\n }\r\n\r\n let currentFeatureCartItemsCount = 0;\r\n const currentFeatureId = currentFeature && currentFeature.part.dbFeature.id;\r\n const matchingCartItem = this.props.cartItems.find((cartItem) => {\r\n return currentFeatureId === (cartItem.cartFeature.dbFeature && cartItem.cartFeature.dbFeature.id)\r\n && (cartItem.currentQuote === this.props.activeQuoteIndex);\r\n });\r\n if (matchingCartItem) {\r\n currentFeatureCartItemsCount = matchingCartItem.quantity\r\n }\r\n\r\n elements.push(\r\n this.switchToFeatureInfo(\r\n currentFeature, \"nav-item-info-clicked\", \"visualizer\"\r\n )}\r\n fabricatorData={this.props.fabricatorData}\r\n largeThumbnail={!isMobile && (this.props.navigationViewType === 2)}\r\n currentFeatureCartItemsCount={currentFeatureCartItemsCount}\r\n existInQtCategory={this.props.existInQtCategory}\r\n />\r\n );\r\n }\r\n\r\n return elements\r\n\r\n };\r\n\r\n getLoadingFeatures = () => (\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n );\r\n\r\n // onDesktopNavigationScroll = ({clientHeight, clientWidth, scrollHeight, scrollLeft, scrollTop, scrollWidth}) => {\r\n onDesktopNavigationScroll = ({clientWidth, scrollLeft, scrollWidth}) => {\r\n // console.log(\"clientHeight\", clientHeight);\r\n // console.log(\"clientWidth\", clientWidth);\r\n // console.log(\"scrollHeight\", scrollHeight);\r\n // console.log(\"scrollLeft\", scrollLeft);\r\n // console.log(\"scrollTop\", scrollTop);\r\n // console.log(\"scrollWidth\", scrollWidth);\r\n // console.log(\"=================\");\r\n if ((scrollWidth - Math.ceil(scrollLeft) === clientWidth) || (scrollWidth - Math.floor(scrollLeft) === clientWidth)) {\r\n this.getNewFeaturesOnScroll(scrollLeft);\r\n }\r\n };\r\n\r\n onMobileNavigationScroll = ({clientHeight, scrollHeight, scrollTop}) => {\r\n if ((scrollHeight - Math.ceil(scrollTop) === clientHeight) || (scrollHeight - Math.floor(scrollTop) === clientHeight)) {\r\n this.getNewFeaturesOnScroll(scrollTop)\r\n }\r\n };\r\n\r\n getFeaturesFromBackendWithFilters = (childItem, counterTopFiltersIdsReceived, finalScrollPosition = 1, existingFilterObject = null) => {\r\n const filterObject = existingFilterObject || {\r\n uuid: uuid.v4(),\r\n filterIds: counterTopFiltersIdsReceived, // array of arrays, ex. [[56],[1122,1313]] etc.\r\n featuresReceived: 0,\r\n page: 0\r\n };\r\n if (!existingFilterObject) {\r\n childItem.filterIdsReceived.push(filterObject);\r\n }\r\n\r\n const featuresCountToReceive = 5000;\r\n\r\n if (!this.featureReceivingStarted) {\r\n this.setState({\r\n additionalFeaturesLoading: true\r\n });\r\n this.featureReceivingStarted = true;\r\n getBvGroupFeatures(\r\n childItem.dbName || childItem.partName,\r\n filterObject.page,\r\n featuresCountToReceive,\r\n counterTopFiltersIdsReceived\r\n )\r\n .then((response) => {\r\n if (response && response.length) {\r\n console.log(\"response.data with filters\", response);\r\n childItem.setGroupFeatures(response, featuresCountToReceive, false);\r\n childItem.filterIdsReceived = childItem.filterIdsReceived.map((filtersReceivedObject) => {\r\n if (filtersReceivedObject.uuid === filterObject.uuid) {\r\n filtersReceivedObject.featuresReceived += response.length;\r\n if (response.length < featuresCountToReceive) {\r\n filtersReceivedObject.allFeaturesWithFiltersReceived = true;\r\n } else {\r\n filtersReceivedObject.page++;\r\n }\r\n }\r\n return filtersReceivedObject\r\n });\r\n }\r\n this.finishScrollRequest(finalScrollPosition);\r\n });\r\n }\r\n };\r\n\r\n finishScrollRequest = (finalScrollPosition, shouldUpdateNavItems = true) => {\r\n this.setState({\r\n additionalFeaturesLoading: false\r\n }, () => {\r\n if (shouldUpdateNavItems) {\r\n this.needToUpdate = finalScrollPosition;\r\n this.props.parentUpdate();\r\n }\r\n this.featureReceivingStarted = false;\r\n });\r\n }\r\n\r\n getNewFeaturesOnScroll = async (finalScrollPosition, parentItemPassed = null) => {\r\n\r\n const {useNewWizardFeaturesRequestsLogic, wizardGroup, currentParent} = this.props;\r\n\r\n if (useNewWizardFeaturesRequestsLogic) {\r\n if (this.featureReceivingStarted || currentParent.requestInProgress) {\r\n return;\r\n }\r\n this.featureReceivingStarted = true;\r\n this.setState({\r\n additionalFeaturesLoading: true\r\n });\r\n getMissingWizardFeatures(this.state.reorderedFeatures, wizardGroup, currentParent)\r\n .then(shouldUpdateNavItems => this.finishScrollRequest(finalScrollPosition, shouldUpdateNavItems));\r\n return;\r\n }\r\n\r\n const parentItem = parentItemPassed || this.props.childItem || this.props.parentItem;\r\n if (!parentItem.part) {\r\n return\r\n }\r\n if (this.props.selectedFilters.length) {\r\n const checkPassed = checkIfNeedToReceiveFeaturesIfFiltersApplied(this.props.selectedFilters, parentItem.part, true);\r\n console.log(\"checkPassed\", checkPassed);\r\n if (checkPassed) {\r\n this.getFeaturesFromBackendWithFilters(parentItem.part, checkPassed.filterIds, finalScrollPosition, checkPassed);\r\n }\r\n return\r\n }\r\n if (!parentItem.part.getRealFeaturesReceivedProperty() && !this.featureReceivingStarted) {\r\n this.featureReceivingStarted = true;\r\n this.setState({\r\n additionalFeaturesLoading: true\r\n });\r\n\r\n const additionalFeaturesOnScroll = await getAdditionalFeaturesOnScroll(parentItem.part);\r\n if (Config.isDevMode()) {\r\n console.log(\"additionalFeaturesOnScroll\", additionalFeaturesOnScroll);\r\n }\r\n\r\n this.finishScrollRequest(finalScrollPosition);\r\n }\r\n };\r\n\r\n}\r\n","import {Component} from 'react';\r\nimport $ from \"jquery\";\r\n\r\nimport Analytics from \"../../analytics\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport {changeQTRoutePath, changeRoutePath} from \"../../misc/changeRoutePath\";\r\nimport store from \"../../store\";\r\nimport {featureIsMatchingQtCatName} from \"../../misc/categorySwitchingFunctions\";\r\nimport {showWizardInsteadOfQT} from \"../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {switchToWizardItem} from \"../qkbPages/materialsWizard/useChangeWizardStepRoute\";\r\n\r\nexport default class CommonFeatureItemsMethods extends Component {\r\n\r\n // this method is NOT used by SelectionMainList, only visualizers desktop & mobile navigations\r\n switchToFeatureInfo = (feature, analyticsLabel, setCameFromPage = \"shoppingcart\", scrollToRelatedFeatureId = null, fromCartItem = null) => {\r\n\r\n Analytics.sendClickEvent(analyticsLabel);\r\n const featureInfo = feature.part || feature;\r\n const featureParent = featureInfo.getParent();\r\n const selectionGroup = featureParent.getParent ? featureParent.getParent().partName : featureParent.partName;\r\n const {fabricatorState, wizardState} = store.getState();\r\n const {wizardList, wizardIsActive} = wizardState;\r\n\r\n const visType = fabricatorState.settings.allowVisualizerSwitching && fromCartItem && fromCartItem.fromVisualizerType\r\n ? fromCartItem.fromVisualizerType\r\n : document.kvConfig.visualizerType;\r\n const layout = getCurrentLayout(visType);\r\n\r\n const setCommonStuff = () => {\r\n this.props.toggleSelectionWindow(true, selectionGroup);\r\n this.props.toggleSelectionFeatureInfo(featureInfo, true);\r\n if (setCameFromPage === \"visualizer\") {\r\n this.props.toggleBathroomVisualizerOpen(false);\r\n }\r\n this.props.setCameFromPage(setCameFromPage);\r\n }\r\n\r\n if (showWizardInsteadOfQT(wizardList, wizardIsActive)) {\r\n if (fromCartItem && fromCartItem.fromWizardId) {\r\n const wizardItem = wizardList.find(wizItem => wizItem.id === fromCartItem.fromWizardId);\r\n if (wizardItem) {\r\n setCommonStuff();\r\n switchToWizardItem(wizardItem, fromCartItem.fromWizardStep, fromCartItem.currentQuote, fromCartItem.fromWizardGroupId);\r\n return;\r\n }\r\n }\r\n const wizardItem = wizardList[0];\r\n if (wizardItem) {\r\n setCommonStuff();\r\n switchToWizardItem(wizardItem);\r\n }\r\n return\r\n }\r\n\r\n let nextCatName = \"\";\r\n\r\n // /* set new index*/\r\n let nextSubPartIndex = 0;\r\n if (featureParent.getParent) {\r\n if (layout.qtCategories\r\n && fabricatorState.settings.useCategorySwitching\r\n && layout.qtCategories.filter(qtCat => qtCat.subParts.some(subPart => subPart.part.partId === featureInfo.partId)).length > 1\r\n && fromCartItem\r\n && layout.qtCategories.find(qtCategory => featureIsMatchingQtCatName(fromCartItem.cartFeature, qtCategory.name, true))) {\r\n const neededCat = layout.qtCategories.find(qtCategory => featureIsMatchingQtCatName(fromCartItem.cartFeature, qtCategory.name, true));\r\n nextCatName = neededCat.name;\r\n nextSubPartIndex = neededCat.subParts.findIndex(subPart => subPart.part.partId === featureInfo.partId);\r\n } else if (layout.qtCategories && fromCartItem && fromCartItem.fromQtCategory\r\n && layout.qtCategories.find(qtCategory => qtCategory.name === fromCartItem.fromQtCategory)) {\r\n nextCatName = fromCartItem.fromQtCategory;\r\n this.props.setQtActiveCategory(fromCartItem.fromQtCategory);\r\n const qtActiveCategory = layout.qtCategories.find(qtCategory => qtCategory.name === fromCartItem.fromQtCategory);\r\n nextSubPartIndex = qtActiveCategory.subParts.findIndex(subPart => {\r\n return (subPart.part.dbName === featureParent.partName) || (subPart.part.partName === featureParent.partName)\r\n });\r\n if ((!nextSubPartIndex || nextSubPartIndex < 0) && qtActiveCategory.qtCategoryHasBeenChanged) {\r\n [\"countertop\", \"edge\", \"faucet\", \"sink\", \"stovetop\"].forEach(partId => {\r\n if (featureParent.partId.includes(partId)) {\r\n nextSubPartIndex = qtActiveCategory.subParts.findIndex(subPart => subPart.part.partId.includes(partId));\r\n }\r\n })\r\n }\r\n } else if (layout.qtCategories && featureParent.qtCategoryName) {\r\n this.props.setQtActiveCategory(featureParent.qtCategoryName);\r\n const qtActiveCategory = layout.qtCategories.find(qtCategory => qtCategory.name === featureParent.qtCategoryName);\r\n nextSubPartIndex = qtActiveCategory.subParts.findIndex(subPart => {\r\n return (subPart.part.dbName === featureParent.partName) || (subPart.part.partName === featureParent.partName)\r\n });\r\n if ((!nextSubPartIndex || nextSubPartIndex < 0) && qtActiveCategory.qtCategoryHasBeenChanged) {\r\n [\"countertop\", \"edge\", \"faucet\", \"sink\", \"stovetop\"].forEach(partId => {\r\n if (featureParent.partId.includes(partId)) {\r\n nextSubPartIndex = qtActiveCategory.subParts.findIndex(subPart => subPart.part.partId.includes(partId));\r\n }\r\n })\r\n }\r\n } else {\r\n const subParts = featureParent.getParent().subParts(false); // we don't need not visible subParts on the materials page\r\n const featureParentName = featureParent.partName.replace(/ /g,\"-\").toLowerCase();\r\n nextSubPartIndex = subParts.findIndex(subPartItem => {\r\n return subPartItem.part.partName.replace(/ /g,\"-\").toLowerCase() === featureParentName\r\n });\r\n }\r\n }\r\n\r\n if (!nextSubPartIndex || nextSubPartIndex < 0) {\r\n nextSubPartIndex = 0;\r\n }\r\n\r\n this.props.changeActivePartRelatedItemIndex(nextSubPartIndex);\r\n setCommonStuff();\r\n if (!window.location.href.includes('materials')) {\r\n if (layout.qtCategories && nextCatName) {\r\n changeQTRoutePath(nextCatName, nextSubPartIndex);\r\n } else if (layout.qtCategories && featureParent.qtCategoryName) {\r\n changeQTRoutePath(featureParent.qtCategoryName, nextSubPartIndex);\r\n } else {\r\n changeRoutePath(featureParent.getParent ? featureParent.getParent() : featureParent, nextSubPartIndex)\r\n }\r\n }\r\n if (scrollToRelatedFeatureId) {\r\n setTimeout(() => {\r\n const $scrollableDiv = $(\".selection-main__info-scrollable\");\r\n const scrollToArea = document.querySelector(\".prod-associated\");\r\n const scrollToDiv = document.querySelector('[data-feature-id=\"'+scrollToRelatedFeatureId+'\"]');\r\n if ($scrollableDiv && scrollToArea && scrollToDiv) {\r\n const scrollTop = scrollToArea.offsetTop + scrollToDiv.offsetTop;\r\n // console.log(\"scrolling to div\", scrollTop);\r\n $scrollableDiv.animate({scrollTop}, 800);\r\n }\r\n }, 0);\r\n }\r\n };\r\n\r\n}\r\n","import React from 'react';\r\nimport {connect} from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport {getEventPosition} from \"../../../../misc/helpers\";\r\n\r\nclass BodySwipable extends React.Component {\r\n\r\n static propTypes = {\r\n className: PropTypes.string,\r\n scrollableSelector: PropTypes.string.isRequired,\r\n children: PropTypes.any.isRequired,\r\n }\r\n\r\n static defaultProps = {\r\n className: \"\",\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n // this.swipableElement = null;\r\n this.scrollableElement = null;\r\n this._isMounted = false;\r\n this.currentScrollLeft = 0;\r\n this.x = 0;\r\n this.y = 0;\r\n this.delta = 0;\r\n this.swipeActive = false;\r\n this.detectedSwipeLeft = false;\r\n this.detectedSwipeRight = false;\r\n this.state = {\r\n swipeActive: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this._isMounted = true;\r\n this.scrollableElement = this.getScrolllableElement();\r\n }\r\n componentWillUnmount() {\r\n this._isMounted = false;\r\n }\r\n getScrolllableElement = () => {\r\n return this.props.scrollableRef && this.props.scrollableRef.current\r\n ? this.props.scrollableRef.current\r\n : document.querySelector(this.props.scrollableSelector);\r\n }\r\n\r\n handleOnMouseDown = (event) => {\r\n const {x, y} = getEventPosition(event);\r\n setTimeout(() => {\r\n if (!this._isMounted) {\r\n return false\r\n }\r\n this.x = x;\r\n this.y = y;\r\n this.swipeActive = true;\r\n this.detectedSwipeLeft = false;\r\n this.detectedSwipeRight = false;\r\n this.setState({\r\n swipeActive: true\r\n });\r\n if (!this.scrollableElement) {\r\n this.scrollableElement = this.getScrolllableElement();\r\n }\r\n this.currentScrollLeft = this.scrollableElement.scrollLeft;\r\n }, 0);\r\n };\r\n\r\n handleOnMouseMove = (event) => {\r\n if (this.swipeActive) {\r\n const {x, y} = getEventPosition(event);\r\n const tX = parseFloat((x - this.x).toFixed(2));\r\n const tY = parseFloat((y - this.y).toFixed(2));\r\n // console.log('tX', tX);\r\n\r\n if (!this.detectedSwipeRight || !this.detectedSwipeLeft) {\r\n if (Math.abs(parseFloat(tX)) >= this.delta) {\r\n if (parseFloat(tX) > this.delta) {\r\n this.detectedSwipeRight = true;\r\n } else if (parseFloat(tX) < -this.delta) {\r\n this.detectedSwipeLeft = true;\r\n }\r\n }\r\n }\r\n\r\n if ((this.detectedSwipeLeft || this.detectedSwipeRight) && Math.abs(tX) > Math.abs(tY)) {\r\n // console.log(\"this.detectedSwipeLeft\", this.detectedSwipeLeft);\r\n // console.log(\"this.detectedSwipeRight\", this.detectedSwipeRight);\r\n // console.log('Math.abs(tX)', Math.abs(tX));\r\n const scrollLeft = this.detectedSwipeLeft\r\n ? this.currentScrollLeft + Math.abs(tX)\r\n : this.currentScrollLeft - Math.abs(tX);\r\n // this.$scrollableElement.animate({scrollLeft}, 500);\r\n this.scrollableElement.scrollLeft = scrollLeft;\r\n }\r\n }\r\n };\r\n\r\n handleOnMouseUp = () => {\r\n setTimeout(() => {\r\n if (!this._isMounted) {\r\n return false\r\n }\r\n this.x = 0;\r\n this.y = 0;\r\n this.swipeActive = false;\r\n this.detectedSwipeLeft = false;\r\n this.detectedSwipeRight = false;\r\n this.setState({\r\n swipeActive: false\r\n })\r\n }, 0)\r\n };\r\n\r\n render() {\r\n // const disallowSwipe = this.$scrollableElement && this.$scrollableElement[0] &&\r\n // (this.$scrollableElement[0].scrollWidth < this.$scrollableElement[0].clientWidth);\r\n if (this.props.isMobile) {\r\n return
    {this.props.children}
    \r\n }\r\n return (\r\n this.swipableElement = node}\r\n className={this.props.className + \" swipable\" + (this.state.swipeActive ? \" swipable--active\" : \"\")}\r\n onMouseDown={this.handleOnMouseDown}\r\n onMouseMove={this.handleOnMouseMove}\r\n onMouseLeave={this.handleOnMouseUp}\r\n onMouseUp={this.handleOnMouseUp}>\r\n {this.props.children}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n navigationLoadingActive: store.navigationState.navigationLoadingActive,\r\n isMobile: store.serverState.isMobile,\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BodySwipable);\r\n","import React, {useEffect, useState} from \"react\"\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {getImagePromiseFromLayout} from \"../../misc/getCanvasImageFromLayout\";\r\nimport LoadingSpinner from \"../ui/loadingSpinner\";\r\nimport {useIsMounted} from \"../../misc/helperHooks\";\r\nimport {createFakeLayout} from \"../appLayout\";\r\n\r\nconst LayoutNavigationItem = (props) => {\r\n\r\n const {keyType, layout, handleLayoutItemClick, isMobile, imageOnly} = props;\r\n const type = layout.layoutTypes[keyType];\r\n const [thumbnailUrl, setThumbnailUrl] = useState(\r\n layout.layoutThumbnails && layout.layoutThumbnails[keyType] ? layout.layoutThumbnails[keyType] : \"\"\r\n );\r\n const isMounted = useIsMounted();\r\n\r\n useEffect(() => {\r\n if (!thumbnailUrl) {\r\n const getLayoutThumbnail = async () => {\r\n const fakeLayout = layout.type === type ? layout : createFakeLayout(layout, keyType, layout.scene);\r\n if (layout.type !== type) {\r\n const currentState = layout.getActiveFeaturesAsObject(true, false, true); // get current selected features\r\n await fakeLayout.selectLayout(type, layout.type, currentState, layout.scene, null, true);\r\n }\r\n getImagePromiseFromLayout(fakeLayout)\r\n .then(response => {\r\n // console.log(\"response\", response);\r\n if (isMounted()) {\r\n setThumbnailUrl(response);\r\n }\r\n })\r\n\r\n }\r\n getLayoutThumbnail();\r\n }\r\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n if (imageOnly) {\r\n return \"item.type\"/\r\n }\r\n\r\n if (isMobile) {\r\n const layoutItemWidth = (window.innerWidth / 4 - 10);\r\n const persentageOfWidth = layoutItemWidth * 100 / 720;\r\n const height = 405 * persentageOfWidth / 100;\r\n\r\n return (\r\n
  • handleLayoutItemClick(type)}\r\n >\r\n
    \r\n {thumbnailUrl ? \"item.type\"/ : }\r\n
    \r\n
  • \r\n )\r\n }\r\n\r\n return (\r\n
  • handleLayoutItemClick ? handleLayoutItemClick(type) : null}\r\n style={{backgroundImage: `url(${thumbnailUrl})`}}>\r\n {thumbnailUrl ? null : }\r\n
  • \r\n );\r\n}\r\n\r\nLayoutNavigationItem.propTypes = {\r\n keyType: PropTypes.string.isRequired,\r\n layout: PropTypes.object.isRequired,\r\n handleLayoutItemClick: PropTypes.func,\r\n isMobile: PropTypes.bool,\r\n imageOnly: PropTypes.bool,\r\n}\r\n\r\nexport default LayoutNavigationItem\r\n","import React, {Component} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from 'prop-types';\r\nimport $ from \"jquery\";\r\nimport {\r\n // FacebookShareButton,\r\n TwitterShareButton,\r\n // PinterestShareButton,\r\n} from 'react-share';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport Analytics from './../../analytics';\r\nimport UserLoginButton from './../ui/userLoginButton';\r\nimport {shareImageRebath, shareImage} from \"../bvComponent/core/assets\";\r\nimport SaveButton from \"./saveButton\";\r\nimport {toggleUserPopup} from \"../../actions/actionFunctions\";\r\nimport Config from \"../../config\";\r\n\r\nexport class ShareButton extends Component {\r\n\r\n static propTypes = {\r\n renderList: PropTypes.bool\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n shareListOpened: false,\r\n };\r\n this.clickShareAfterLogin = null;\r\n this.elements = {\r\n email: React.createRef(),\r\n facebook: React.createRef(),\r\n twitter: React.createRef(),\r\n pinterest: React.createRef(),\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n $(document).on(ActionTypes.USER_IS_LOGGED_IN, async () => { // click on current active item after unlock\r\n if (this.clickShareAfterLogin) {\r\n console.log('this.clickShareAfterLogin', this.clickShareAfterLogin);\r\n const shareButton = this.elements[this.clickShareAfterLogin];\r\n if (shareButton) {\r\n shareButton.current.click();\r\n }\r\n this.clickShareAfterLogin = null;\r\n }\r\n });\r\n $(window).on(ActionTypes.USER_POPUP_CLOSED, () => { // reset saved\r\n if (this.clickShareAfterLogin) {\r\n this.clickShareAfterLogin = null;\r\n }\r\n });\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.visualizerTutorialStep === 3 && this.props.visualizerTutorialStep === 2) {\r\n this.toggleShareList();\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n $(document).off(ActionTypes.USER_IS_LOGGED_IN);\r\n $(window).off(ActionTypes.USER_POPUP_CLOSED);\r\n }\r\n\r\n renderImage = () => {\r\n // const canvas = document.getElementById(this.props.canvasId);\r\n // const imageUrl = canvas.toDataURL();\r\n const imageUrl = this.props.fabricatorData.isRebath\r\n ? encodeURIComponent(shareImageRebath)\r\n : encodeURIComponent(shareImage[document.kvConfig.visualizerType]);\r\n Analytics.sendClickEvent('share-button-pinterest');\r\n window.open(`//pinterest.com/pin/create/button/?url=${encodeURIComponent(this.props.shareUrl)}&media=${imageUrl}`, '_blank')\r\n };\r\n\r\n handleWrapperBlur = (e) => {\r\n if (!e.target.closest('.share-list__item .mobilebutton') && !e.target.closest('.share') && !this.clickShareAfterLogin) {\r\n this.toggleShareList();\r\n }\r\n };\r\n\r\n toggleShareList = () => {\r\n Analytics.sendClickEvent(this.state.shareListOpened ? 'share-list-toggle-closed' : 'share-list-toggle-opened');\r\n this.setState({\r\n shareListOpened: !this.state.shareListOpened\r\n }, () => {\r\n if (this.state.shareListOpened) {\r\n document.addEventListener('click', this.handleWrapperBlur);\r\n } else {\r\n document.removeEventListener('click', this.handleWrapperBlur);\r\n }\r\n })\r\n };\r\n\r\n checkForLoggedIn = (e) => {\r\n Analytics.sendClickEvent('share-button-' + e.target.dataset.share);\r\n if (!UserLoginButton.handleLoginClick({...this.props})) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n this.clickShareAfterLogin = e.target.closest(this.props.renderList ? \".menu-dropdown__list-item\" : \".mobilebutton\").dataset.share;\r\n return false;\r\n }\r\n return true;\r\n };\r\n\r\n faceBookButtonClick = (event) => {\r\n if (this.checkForLoggedIn(event)) {\r\n // const fbUrl = (Config.isMobile() || this.props.windowWidth < 991)\r\n // ? \"https://m.facebook.com/sharer/sharer.php?u=\"\r\n // : \"https://www.facebook.com/sharer/sharer.php?&p[url]=\";\r\n const fbUrl = \"https://facebook.com/sharer/sharer.php?u=\";\r\n const qfUrl = location.protocol + \"//\" + _.takeRight(window.location.hostname.split('.'), 2).join('.') + \"/url?u=\";\r\n const shareUrlSplitted = this.props.shareUrl.split(\".com\")\r\n if (Config.isDevMode()) {\r\n console.log(\"this.props.shareUrl\", this.props.shareUrl);\r\n console.log(\"shareUrlSplitted\", shareUrlSplitted);\r\n }\r\n window.open(\r\n fbUrl + qfUrl + shareUrlSplitted[0] + \".com\" + encodeURIComponent(shareUrlSplitted[1]),\r\n 'facebook-share-dialog',\r\n 'width=630,height=420'\r\n );\r\n\r\n // 'https://www.facebook.com/dialog/share?\\n' +\r\n // ' app_id=402959133605207&display=page&href='+this.props.shareUrl +\r\n // ' app_id=402959133605207&display=page&href=https%3A%2F%2Ffacebook.com%2Fdocs%2F&redirect_uri=https%3A%2F%2Fdevelopers.facebook.com%2Ftools%2Fexplorer',\r\n\r\n return false;\r\n }\r\n };\r\n\r\n getShareButtons = () => {\r\n const dashboardFramed = Config.isVisualizerManagement();\r\n const allPagesEnabled = !document.kvConfig.visualizerOnly;\r\n return (\r\n
      \r\n
    • \r\n \r\n email\r\n \r\n
    • \r\n
    • \r\n \r\n {/**/}\r\n {/**/}\r\n {/**/}\r\n
    • \r\n
    • \r\n \r\n
    • \r\n
    • \r\n \r\n \r\n \r\n
    • \r\n {this.props.windowWidth >= 991 || dashboardFramed\r\n || (this.props.fabricatorData.checkout && this.props.goToCart && allPagesEnabled) ? null : (\r\n
    • \r\n \r\n
    • \r\n )}\r\n {/*
    • */}\r\n {/**/}\r\n {/*
    • */}\r\n
    \r\n )\r\n };\r\n\r\n getShareList = () => {\r\n return (\r\n
      \r\n
    • \r\n Email\r\n
    • \r\n
    • \r\n facebook\r\n
    • \r\n
    • \r\n pinterest\r\n
    • \r\n \r\n
    • \r\n Twitter\r\n
    • \r\n
      \r\n {/*
    • */}\r\n {/*Houzz
    • */}\r\n
    \r\n )\r\n };\r\n\r\n render() {\r\n return (\r\n
    \r\n \r\n {this.props.renderList ? this.getShareList() : this.getShareButtons()}\r\n
    \r\n )\r\n }\r\n\r\n}\r\nconst mapStateToProps = (store) => ({\r\n fabricatorData: store.fabricatorState,\r\n windowWidth: store.serverState.windowWidth,\r\n visualizerTutorialStep: store.tutorialState.visualizerTutorialStep,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n shareUrl: store.serverState.shareUrl,\r\n});\r\nexport default connect(mapStateToProps, {\r\n toggleUserPopup\r\n})(ShareButton);\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {setMaterialsAgentTutorialFinished, showMaterialsAgentTutorial} from \"../../actions/tutorialFunctions\";\r\nimport WithPingPilotCheck from \"../look/hocs/withPingPilotCheck\";\r\n\r\nconst PingPilotButton = (props) => {\r\n\r\n const {design, showMaterialsAgentTutorial, setMaterialsAgentTutorialFinished, materialsAgentTutorialIsOpened,\r\n materialsAgentTutorialFinished, pingButton} = props;\r\n\r\n const pingButtonClick = () => {\r\n pingButton.click();\r\n if (materialsAgentTutorialIsOpened) {\r\n showMaterialsAgentTutorial(false);\r\n }\r\n if (!materialsAgentTutorialFinished) {\r\n setMaterialsAgentTutorialFinished(true);\r\n }\r\n }\r\n\r\n if (design === \"mainButton\") {\r\n return (\r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n \r\n
    \r\n ) : null}\r\n \r\n \r\n \r\n {/**/}\r\n
    \r\n ) : null}\r\n {this.props.fabricatorData.received ? (\r\n
    \r\n {hideLogo ? null : \"logo\"}\r\n
    \r\n ) : null}\r\n {this.props.fabricatorData.received && !this.props.hideTopButtons ? (\r\n
    \r\n {fabricatorSettings.enableSharing ? : null }\r\n \r\n \r\n {this.props.mobileNav && this.props.mobileNav.length\r\n ? \r\n : initialFlowIsRunning\r\n ? null\r\n : \r\n }\r\n {IS_SUPER_ADMIN ? : null}\r\n {/*{(fabricatorSettings.leadCaptureOnQuote && !initialFlowIsRunning && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) ? : null}*/}\r\n {fabricatorSettings.showPricing && !initialFlowIsRunning ? : null}\r\n {/*{true*/}\r\n {/* ? */}\r\n {/* : null}*/}\r\n {showInstallations && isShoppingCartPage && !initialFlowIsRunning ? : null}\r\n {isShoppingCartPage && !initialFlowIsRunning ? : null}\r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n
      \r\n {this.renderSubNav(this.props.mobileNav)}\r\n
    \r\n
    \r\n
    \r\n )\r\n }\r\n\r\n renderSubNav = (nav) => {\r\n var _nav = sortBy(nav, n => n.displayOrder);\r\n return _nav.map(n => (\r\n
  • \r\n {n.name}\r\n
  • \r\n ));\r\n }\r\n}\r\n\r\nconst DesktopHeaderWithRouter = withRouter(props => );\r\n\r\nconst mapStateToProps = (store) => {\r\n const {selectionState, cartState, instState} = store;\r\n return {\r\n selectionGroup: selectionState.selectionGroup,\r\n selectionFeatureInfo: selectionState.selectionFeatureInfo,\r\n selectionInfoQuantity: selectionState.selectionInfoQuantity,\r\n cartItems: cartState.cartItems,\r\n instList: instState.instList,\r\n mobileNav: store.navigationState.mobileNav,\r\n fabricatorData: store.fabricatorState,\r\n initialFlowStep: store.initialFlowState.initialFlowStep,\r\n showUnlockCalculations: store.unlockCalculationsState.showUnlockCalculations,\r\n unlockCalculationsStep: store.unlockCalculationsState.unlockCalculationsStep,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n toggleUserPopup,\r\n changeStateToQuote\r\n})(DesktopHeaderWithRouter);\r\n","import React, {useEffect, useState} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {setLookActiveFeature, updateNavigationCount} from \"../../../../../actions/lookFunctions\";\r\nimport {getFeatureOptions, getOptionStyles, navFeatureCLick} from \"../../lookFunctions\";\r\nimport {updateCanvasCount} from \"../../../../../actions/actionFunctions\";\r\nimport {allowCheckForCollection} from \"../../../grohe/groheNavigation/groheFunctions\";\r\nimport Config, {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\n\r\nimport WithClickCount from \"../../../hocs/withClickCount\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS, PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport {enableRelatedFeature} from \"../../lookFunctions2\";\r\nimport PropTypes from \"prop-types\";\r\nimport {setWizardSelectedValues} from \"../../../../../actions/wizardFunctions\";\r\nimport {wizardGroupInterface} from \"../../../../../interfaces/wizardItemInterface\";\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport WithUpdateLookCartItem from \"../../../hocs/withUpdateLookCartItem\";\r\nimport {getColorFilterValue} from \"../../../../../misc/filtersFunctions\";\r\n\r\nconst LookFeatureOptions = (props) => {\r\n\r\n const {lookActiveFeature, filterGroups, setLookActiveFeature, lookActiveFeatureCustomName, updateCanvasCount,\r\n lookActiveFeatureCollection, lookActiveFeatureMatchingFeature, lookActiveFeatureMountType, lookActiveFeatureMountHoles,\r\n lookActiveFeatureLixilSubCategory, isWizard, wizardActiveStep, wizardGroup, setWizardSelectedValues, fabricatorData,\r\n updateNavigationCount, navigationCount, lookActiveFeaturePositionInList} = props;\r\n const [availableOptions, setAvailableOptions] = useState([]);\r\n\r\n const checkCollectionName = lookActiveFeature && !allowCheckForCollection(lookActiveFeature) ? \"\" : lookActiveFeatureCollection;\r\n\r\n useEffect(() => {\r\n if (fabricatorData.isEncore) {\r\n return\r\n }\r\n const colorOptions = getFeatureOptions(lookActiveFeature, filterGroups, \"Color\");\r\n setAvailableOptions(colorOptions || [])\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [lookActiveFeatureCustomName, checkCollectionName, lookActiveFeatureMatchingFeature,\r\n lookActiveFeatureMountType, lookActiveFeatureLixilSubCategory, lookActiveFeatureMountHoles, navigationCount]);\r\n\r\n if (!availableOptions.length || fabricatorData.isEncore) {\r\n return null\r\n }\r\n\r\n const activeFilterGroupValue = getColorFilterValue(lookActiveFeature, filterGroups)\r\n\r\n const optionsButtonClick = (option, maxClickCountReached, updateLookCartItem) => {\r\n\r\n const featureLabel = Analytics.getSkuForAnalytics(lookActiveFeature);\r\n const analyticsLabel = IS_PRODUCT_JOURNEY\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureOptions + featureLabel\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeatureOptions + featureLabel;\r\n Analytics.sendClickEvent(analyticsLabel);\r\n\r\n if (maxClickCountReached()) { // fabricator settings click lead capture\r\n return false;\r\n }\r\n\r\n if (Config.isDevMode()) {\r\n console.log(\"option.feature\", option.feature);\r\n }\r\n\r\n if (isWizard) {\r\n setWizardSelectedValues({\r\n [wizardActiveStep]: {\r\n wizardGroup,\r\n selectedFeature: option.feature,\r\n partId: option.feature.partId\r\n }\r\n });\r\n }\r\n\r\n setLookActiveFeature(option.feature, lookActiveFeaturePositionInList);\r\n navFeatureCLick(option.feature);\r\n enableRelatedFeature(option.feature);\r\n updateLookCartItem(option.feature);\r\n updateNavigationCount();\r\n updateCanvasCount();\r\n };\r\n\r\n return (\r\n
    \r\n \r\n :\r\n {/*{IS_PRODUCT_JOURNEY ? \":\" : null}*/}\r\n {/*{activeFilterGroupValue && (IS_PRODUCT_JOURNEY) ? (*/}\r\n \r\n {activeFilterGroupValue ? (activeFilterGroupValue.displayText || activeFilterGroupValue.value).replace(\"GROHE \", \"\") : null}\r\n \r\n {/*) : null}*/}\r\n \r\n {/*{activeFilterGroupValue && !IS_PRODUCT_JOURNEY ? (*/}\r\n {/* */}\r\n {/* ({activeFilterGroupValue.displayText.replace(\"GROHE \", \"\")})*/}\r\n {/* */}\r\n {/*) : null}*/}\r\n \r\n {(maxClickCountReached) => (\r\n \r\n {(updateLookCartItem) => (\r\n
      \r\n {availableOptions.map(option => {\r\n const isActive = activeFilterGroupValue && (option.colorValue.id === activeFilterGroupValue.id);\r\n const styles = getOptionStyles(option.colorValue);\r\n return (\r\n
    • optionsButtonClick(option, maxClickCountReached, updateLookCartItem)}\r\n style={styles}/>\r\n )\r\n })}\r\n
    \r\n )}\r\n
    \r\n )}\r\n
    \r\n
    \r\n\r\n )\r\n};\r\n\r\nLookFeatureOptions.propTypes = {\r\n isWizard: PropTypes.bool,\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n activeFeature: PropTypes.shape(featureInterface),\r\n}\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n const {navigationCount, lookActiveFeaturePositionInList} = store.lookState;\r\n const storeActiveFeature = store.lookState.lookActiveFeature;\r\n const {filterGroups} = store.filterState;\r\n const {wizardActiveStep} = store.wizardState;\r\n const lookActiveFeature = ownProps.activeFeature || storeActiveFeature;\r\n const fabricatorData = store.fabricatorState;\r\n\r\n return {\r\n lookActiveFeature,\r\n lookActiveFeaturePositionInList,\r\n filterGroups,\r\n wizardActiveStep,\r\n lookActiveFeatureCustomName: lookActiveFeature ? lookActiveFeature.getMatchingOptionsName() : null,\r\n lookActiveFeatureMountHoles: lookActiveFeature && lookActiveFeature.partId === \"vanity_sink\"\r\n && Array.isArray(lookActiveFeature.dbFeature.metaData[\"MountHoles\"])\r\n ? lookActiveFeature.dbFeature.metaData[\"MountHoles\"].join(\",\") : null,\r\n lookActiveFeatureLixilSubCategory: lookActiveFeature ? lookActiveFeature.dbFeature.lixilProductSubCategory : null,\r\n lookActiveFeatureMatchingFeature: lookActiveFeature && Array.isArray(lookActiveFeature.dbFeature.metaData[\"MatchingFeature\"])\r\n ? lookActiveFeature.dbFeature.metaData[\"MatchingFeature\"].join(\",\")\r\n : null,\r\n lookActiveFeatureMountType: lookActiveFeature && Array.isArray(lookActiveFeature.dbFeature.metaData[\"MountType\"])\r\n ? lookActiveFeature.dbFeature.metaData[\"MountType\"].join(\",\")\r\n : null,\r\n lookActiveFeatureCollection: lookActiveFeature ? lookActiveFeature.getCollectionName(filterGroups) : null,\r\n navigationCount, // to update options after all features received\r\n fabricatorData,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookActiveFeature,\r\n updateCanvasCount,\r\n setWizardSelectedValues,\r\n updateNavigationCount,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LookFeatureOptions)\r\n","import React, {Fragment} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport GroheFeatureOptionsType from \"./groheFeatureOptionsType\";\r\nimport {VANITY_TYPES} from \"../../../core/constants\";\r\nimport GroheFeatureOptionsShelfSide from \"./groheFeatureOptionsShelfSide\";\r\nimport GroheFeatureOptionsSide from \"./groheFeatureOptionsSide\";\r\nimport GroheFeatureOptionsShowerPan from \"./groheFeatureOptionsShowerPan\";\r\nimport BacksplashSelect from \"../../../../selectionWindow/backsplashSelect\";\r\nimport {wizardGroupInterface} from \"../../../../../interfaces/wizardItemInterface\";\r\nimport {setWizardSelectedValues} from \"../../../../../actions/wizardFunctions\";\r\nimport GroheFeatureOptionsCabinetSide from \"./groheFeatureOptionsCabinetSide\";\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport GroheFeatureOptionsBodySpray from \"./groheFeatureOptionsBodySpray\";\r\nimport WithUpdateLookCartItem from \"../../../hocs/withUpdateLookCartItem\";\r\nimport GroheFeatureOptionsSlatWall from \"./groheFeatureOptionsSlatWall\";\r\n\r\nconst GroheFeatureOptions = (props) => {\r\n\r\n const {lookActiveFeature, isWizard, wizardGroup, setWizardSelectedValues, wizardActiveStep, isLixil,\r\n groheActiveFeatureQuantity, updateLookCartItem} = props;\r\n\r\n if (!lookActiveFeature) {\r\n return null\r\n }\r\n\r\n const wizardOptionClick = (optionFeature) => {\r\n if (!isWizard || !optionFeature) {\r\n return\r\n }\r\n setWizardSelectedValues({\r\n [wizardActiveStep]: {\r\n wizardGroup,\r\n selectedFeature: optionFeature,\r\n partId: optionFeature.partId,\r\n quantity: groheActiveFeatureQuantity,\r\n }\r\n });\r\n updateLookCartItem();\r\n }\r\n\r\n return (\r\n \r\n \r\n {lookActiveFeature.partId === \"vanity_cabinet\" && !(isLixil && isWizard) ? : null}\r\n \r\n {Object.keys(VANITY_TYPES).includes(lookActiveFeature.partId) ? : null}\r\n {lookActiveFeature.partId === \"vanity_sink\" && !(isLixil && isWizard) ? : null}\r\n {lookActiveFeature.partId === \"corner_shelf\" || (lookActiveFeature.partId === \"body_spray\" && !isWizard)\r\n ? \r\n : null}\r\n {lookActiveFeature.partId === \"shower_pan_combo\" ? : null}\r\n {/*{lookActiveFeature.partId === \"shower_head\" ? : null}*/}\r\n {lookActiveFeature.partId === \"backsplash\" ? : null}\r\n {lookActiveFeature.partId === \"body_spray\" && isWizard\r\n ? \r\n : null}\r\n {lookActiveFeature.partId === \"slat_wall\"\r\n ? \r\n : null}\r\n \r\n )\r\n};\r\n\r\nGroheFeatureOptions.propTypes = {\r\n isWizard: PropTypes.bool,\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n activeFeature: PropTypes.shape(featureInterface),\r\n}\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n const {lookActiveFeature} = store.lookState;\r\n const {wizardActiveStep} = store.wizardState;\r\n const {isLixil} = store.fabricatorState;\r\n const {groheActiveFeatureQuantity} = store.groheState;\r\n\r\n return {\r\n lookActiveFeature: ownProps.activeFeature || lookActiveFeature,\r\n wizardActiveStep,\r\n isLixil,\r\n groheActiveFeatureQuantity,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setWizardSelectedValues,\r\n}\r\n\r\nexport default (\r\n connect(mapStateToProps, mapDispatchToProps)((props) => {\r\n return (\r\n \r\n {(updateLookCartItem) => }\r\n \r\n )\r\n })\r\n)\r\n","'use strict';\r\n\r\nObject.defineProperty(exports, \"__esModule\", {\r\n value: true\r\n});\r\nexports.default = exports.LoadingBar = exports.TERMINATING_ANIMATION_DURATION = exports.ANIMATION_DURATION = exports.PROGRESS_INCREASE = exports.MAX_PROGRESS = exports.UPDATE_TIME = undefined;\r\n\r\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\r\n\r\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\r\n\r\nvar _react = require('react');\r\n\r\nvar _react2 = _interopRequireDefault(_react);\r\n\r\nvar _reactLifecyclesCompat = require('react-lifecycles-compat');\r\n\r\nvar _propTypes = require('prop-types');\r\n\r\nvar _reactRedux = require('react-redux');\r\n\r\nvar _loading_bar_ducks = require('./loading_bar_ducks');\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\r\n\r\nvar UPDATE_TIME = exports.UPDATE_TIME = 200;\r\nvar MAX_PROGRESS = exports.MAX_PROGRESS = 100;\r\nvar PROGRESS_INCREASE = exports.PROGRESS_INCREASE = 3;\r\nvar ANIMATION_DURATION = exports.ANIMATION_DURATION = UPDATE_TIME * 4;\r\nvar TERMINATING_ANIMATION_DURATION = exports.TERMINATING_ANIMATION_DURATION = UPDATE_TIME / 2;\r\n\r\nvar initialState = {\r\n percent: 0,\r\n status: 'hidden'\r\n};\r\n\r\nvar LoadingBar = function (_Component) {\r\n _inherits(LoadingBar, _Component);\r\n\r\n function LoadingBar() {\r\n var _ref;\r\n\r\n var _temp, _this, _ret;\r\n\r\n _classCallCheck(this, LoadingBar);\r\n\r\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\r\n args[_key] = arguments[_key];\r\n }\r\n\r\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = LoadingBar.__proto__ || Object.getPrototypeOf(LoadingBar)).call.apply(_ref, [this].concat(args))), _this), _this.state = _extends({}, initialState), _this.reset = function () {\r\n _this.terminatingAnimationTimeoutId = null;\r\n _this.setState(initialState);\r\n }, _this.newPercent = function (percent, progressIncrease) {\r\n // Use cosine as a smoothing function\r\n // It could be any function to slow down progress near the ending 100%\r\n var smoothedProgressIncrease = progressIncrease * Math.cos(percent * (Math.PI / 2 / 100));\r\n\r\n return percent + smoothedProgressIncrease;\r\n }, _this.simulateProgress = function () {\r\n _this.setState(function (prevState, _ref2) {\r\n var maxProgress = _ref2.maxProgress,\r\n progressIncrease = _ref2.progressIncrease;\r\n var percent = prevState.percent;\r\n\r\n var newPercent = _this.newPercent(percent, progressIncrease);\r\n\r\n if (newPercent <= maxProgress) {\r\n percent = newPercent;\r\n }\r\n\r\n return { percent: percent };\r\n });\r\n }, _temp), _possibleConstructorReturn(_this, _ret);\r\n }\r\n\r\n _createClass(LoadingBar, [{\r\n key: 'componentDidMount',\r\n value: function componentDidMount() {\r\n if (this.state.status === 'starting') {\r\n this.start();\r\n }\r\n }\r\n }, {\r\n key: 'componentDidUpdate',\r\n value: function componentDidUpdate(prevProps, prevState) {\r\n if (prevState.status !== this.state.status) {\r\n if (this.state.status === 'starting') {\r\n this.start();\r\n }\r\n\r\n if (this.state.status === 'stopping') {\r\n this.stop();\r\n }\r\n }\r\n }\r\n }, {\r\n key: 'componentWillUnmount',\r\n value: function componentWillUnmount() {\r\n clearInterval(this.progressIntervalId);\r\n clearTimeout(this.terminatingAnimationTimeoutId);\r\n }\r\n }, {\r\n key: 'start',\r\n value: function start() {\r\n this.progressIntervalId = setInterval(this.simulateProgress, this.props.updateTime);\r\n this.setState({ status: 'running' });\r\n }\r\n }, {\r\n key: 'stop',\r\n value: function stop() {\r\n clearInterval(this.progressIntervalId);\r\n this.progressIntervalId = null;\r\n\r\n var terminatingAnimationDuration = this.isShown() || this.props.showFastActions ? TERMINATING_ANIMATION_DURATION : 0;\r\n\r\n this.terminatingAnimationTimeoutId = setTimeout(this.reset, terminatingAnimationDuration);\r\n\r\n this.setState({ percent: 100 });\r\n }\r\n }, {\r\n key: 'isShown',\r\n value: function isShown() {\r\n return this.state.percent > 0 && this.state.percent <= 100;\r\n }\r\n }, {\r\n key: 'buildStyle',\r\n value: function buildStyle() {\r\n var animationDuration = this.state.status === 'stopping' ? TERMINATING_ANIMATION_DURATION : ANIMATION_DURATION;\r\n\r\n var style = {\r\n opacity: '1',\r\n transform: 'scaleX(' + this.state.percent / 100 + ')',\r\n transformOrigin: 'left',\r\n transition: 'transform ' + animationDuration + 'ms linear',\r\n width: '100%',\r\n willChange: 'transform, opacity'\r\n\r\n // Use default styling if there's no CSS class applied\r\n };if (!this.props.className) {\r\n style.height = '3px';\r\n style.backgroundColor = 'red';\r\n style.position = 'absolute';\r\n }\r\n\r\n if (this.isShown()) {\r\n style.opacity = '1';\r\n } else {\r\n style.opacity = '0';\r\n }\r\n\r\n return _extends({}, style, this.props.style);\r\n }\r\n }, {\r\n key: 'render',\r\n value: function render() {\r\n if (this.state.status === 'hidden') {\r\n return _react2.default.createElement('div', null);\r\n } else if (this.props.renderComponent) {\r\n return this.props.renderComponent(Math.round(this.state.percent))\r\n }\r\n\r\n return _react2.default.createElement(\r\n 'div',\r\n { className: this.props.className },\r\n Math.round(this.state.percent)\r\n );\r\n }\r\n }], [{\r\n key: 'shouldStart',\r\n value: function shouldStart(props, state) {\r\n return props.loading > 0 && ['hidden', 'stopping'].indexOf(state.status) >= 0;\r\n }\r\n }, {\r\n key: 'shouldStop',\r\n value: function shouldStop(props, state) {\r\n return props.loading === 0 && ['starting', 'running'].indexOf(state.status) >= 0;\r\n }\r\n }, {\r\n key: 'getDerivedStateFromProps',\r\n value: function getDerivedStateFromProps(nextProps, prevState) {\r\n if (LoadingBar.shouldStart(nextProps, prevState)) {\r\n return { status: 'starting' };\r\n }\r\n\r\n if (LoadingBar.shouldStop(nextProps, prevState)) {\r\n return { status: 'stopping' };\r\n }\r\n\r\n return null;\r\n }\r\n }]);\r\n\r\n return LoadingBar;\r\n}(_react.Component);\r\n\r\nLoadingBar.propTypes = {\r\n className: _propTypes.string,\r\n loading: _propTypes.number,\r\n maxProgress: _propTypes.number,\r\n progressIncrease: _propTypes.number,\r\n showFastActions: _propTypes.bool,\r\n updateTime: _propTypes.number,\r\n scope: _propTypes.string,\r\n style: _propTypes.object,\r\n renderComponent: _propTypes.func\r\n};\r\nLoadingBar.defaultProps = {\r\n className: '',\r\n loading: 0,\r\n maxProgress: MAX_PROGRESS,\r\n progressIncrease: PROGRESS_INCREASE,\r\n showFastActions: false,\r\n style: {},\r\n updateTime: UPDATE_TIME,\r\n scope: _loading_bar_ducks.DEFAULT_SCOPE,\r\n renderComponent: null,\r\n};\r\n\r\n\r\nvar mapStateToProps = function mapStateToProps(state, ownProps) {\r\n return {\r\n loading: state.loadingBar[ownProps.scope || _loading_bar_ducks.DEFAULT_SCOPE]\r\n };\r\n};\r\n\r\n(0, _reactLifecyclesCompat.polyfill)(LoadingBar);\r\nvar ConnectedLoadingBar = (0, _reactRedux.connect)(mapStateToProps)(LoadingBar);\r\n\r\nexports.LoadingBar = LoadingBar;\r\nexports.default = ConnectedLoadingBar;\r\n","import React, {useContext} from \"react\";\r\nimport {Text, View} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport PrintDocumentInfoFabricator from \"./printDocumentInfoFabricator\";\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\n\r\nexport const getAddressFromObject = (userInfo) => {\r\n let displayAddress = \"\";\r\n [userInfo.city, userInfo.state, userInfo.postal].forEach(addressPart => { // 1) city 2) provence 3) postal\r\n if (addressPart) {\r\n if (displayAddress) {\r\n displayAddress += \", \"\r\n }\r\n displayAddress += addressPart\r\n }\r\n });\r\n return displayAddress\r\n}\r\n\r\nconst PrintDocumentInfo = (props) => {\r\n const {styles, userInfo, fabricatorData, assignQuotePopupCustomer, employeeSelected} = props;\r\n const customerName = assignQuotePopupCustomer\r\n ? assignQuotePopupCustomer.fullName\r\n : userInfo.firstName + (userInfo.lastName ? (\" \" + userInfo.lastName) : \"\")\r\n const customerEmail = assignQuotePopupCustomer ? assignQuotePopupCustomer.email : userInfo.email || \"\"\r\n const customerPhone = userInfo.phoneNumber\r\n ? userInfo.country && !userInfo.phoneNumber.includes(`+${userInfo.country.dialCode} `)\r\n ? `+${userInfo.country.dialCode} ${userInfo.phoneNumber}`\r\n : userInfo.phoneNumber\r\n : \"\";\r\n const customerAddress = getAddressFromObject(userInfo);\r\n const customerHasShippingAddress = userInfo.shipping && ([\"address1\", \"city\", \"postal\"].some(key => {\r\n return userInfo.shipping[key] && (userInfo[key] !== userInfo.shipping[key])\r\n }));\r\n let shippingAddress = \"\";\r\n if (customerHasShippingAddress) {\r\n shippingAddress = getAddressFromObject(userInfo.shipping);\r\n }\r\n const threeColumns = (employeeSelected || (customerHasShippingAddress && !fabricatorData.isCaesarStone))\r\n && !fabricatorData.isAmericanStandard;\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n return (\r\n \r\n \r\n {printContext.messages[\"receipt.mainInfo.customerInformation\"]}\r\n {customerName}\r\n {userInfo.address1 ? {userInfo.address1} : null}\r\n {customerAddress ? {customerAddress} : null}\r\n {customerEmail}\r\n {customerPhone}\r\n \r\n {threeColumns ? (\r\n \r\n {!fabricatorData.isCaesarStone && (shippingAddress || userInfo.shipping.address1)\r\n ? {printContext.messages[\"receipt.mainInfo.billingAddress\"]}\r\n : null}\r\n {!fabricatorData.isCaesarStone && userInfo.shipping.address1\r\n ? {userInfo.shipping.address1}\r\n : null}\r\n {!fabricatorData.isCaesarStone && shippingAddress\r\n ? {shippingAddress}\r\n : null}\r\n {employeeSelected ? (\r\n \r\n {printContext.messages[\"receipt.mainInfo.salesPerson\"]}\r\n \r\n ) : null}\r\n {employeeSelected ? {employeeSelected.fullName} : null}\r\n \r\n ) : null}\r\n \r\n \r\n )\r\n};\r\n\r\nPrintDocumentInfo.propTypes = {\r\n userInfo: PropTypes.object.isRequired,\r\n fabricatorData: PropTypes.object.isRequired,\r\n assignQuotePopupCustomer: PropTypes.object,\r\n styles: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default PrintDocumentInfo\r\n","import React, {Fragment, useContext} from \"react\";\r\nimport {View, Text, Image} from \"@react-pdf/renderer\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {\r\n detectComplexLaborCartItem,\r\n getPriceWithCurrency,\r\n getTotalPrice,\r\n toFixedFeatureCost,\r\n toFixedPrice\r\n} from \"../../../misc/helpers\";\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\nimport {getCartItemName, getFeatureUnit} from \"./printDocumentFunctions\";\r\nimport {cartItemInterface} from \"../../shoppingCart/cartItemInterface\";\r\nimport {getPriceWithIncluded, getShowPrice} from \"../../../misc/priceFunctions\";\r\nimport PrintDocumentBodyBundledCartItems from \"./printDocumentBodyBundledCartItems\";\r\nimport {SQFT_FEATURES} from \"../../sqft/constants\";\r\n\r\nconst PrintDocumentBodyCartItem = (props) => {\r\n const {styles, cartItem, fabricatorData, locale, cartItems, sqftSlabState, cartItemsThumbnails} = props;\r\n\r\n const fabricatorSettings = fabricatorData.settings;\r\n const isComplexMultipliedUsed = detectComplexLaborCartItem(cartItem) && getTotalPrice().multipliedCostUsed;\r\n //const shouldUseSlabPricing = cartItem.shouldUseSlabPricing; // calculate shouldUseSlabPricing per cItem:\r\n const shouldUseSlabPricing = cartItem.partId === SQFT_FEATURES.slabs && sqftSlabState.isSlabPricingEnabled; // calculate shouldUseSlabPricing globally\r\n const priceTotal = isComplexMultipliedUsed || cartItem.displayFakePrice === 0\r\n ? null\r\n : toFixedFeatureCost(cartItem.cartFeature, cartItem.quantity, cartItem.fromQtCategory, true, cartItem, shouldUseSlabPricing, cartItem.currentQuote);\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n const getFeatureQuantity = () => {\r\n return printContext.messages[\"receipt.content.featureQuantity\"] || \"\"\r\n };\r\n\r\n const getPrice = () => {\r\n const showPrice = getShowPrice(fabricatorData);\r\n if (!showPrice) {\r\n return null\r\n }\r\n return getPriceWithIncluded(priceTotal, cartItem.cartFeature, fabricatorData, printContext.messages)\r\n };\r\n\r\n const featurePrice = toFixedFeatureCost(cartItem.cartFeature, 1, cartItem.fromQtCategory, false, null, shouldUseSlabPricing, cartItem.currentQuote);\r\n const price = getPrice();\r\n const hideUnitPrice = (cartItem.partId === \"room\" && !featurePrice) || !price;\r\n const isMinimumCharge = cartItem.isMinimumCharge && !cartItem.isMinimumChargeItems;\r\n const displayFake = cartItem.displayFakeQuantity && (typeof cartItem.displayFakeQuantity === \"number\") && (cartItem.displayFakeQuantity > 0);\r\n\r\n const bundleProducts = cartItems ? cartItems.filter(cItem => {\r\n return cItem.bundleParentId && (cItem.bundleParentId === cartItem.id)\r\n }) : [];\r\n\r\n const withThumbnail = fabricatorData.receiptSettings && fabricatorData.receiptSettings.showThumbnailsAndDescriptions\r\n && cartItemsThumbnails\r\n && cartItemsThumbnails[cartItem.id];\r\n\r\n if (withThumbnail) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {getCartItemName(cartItem.cartFeature, fabricatorData, printContext, locale)}\r\n \r\n {cartItem.cartFeature.dbFeature.sku && !fabricatorSettings.hideSku ? (\r\n \r\n {`${printContext.messages[\"receipt.content.featureSKU\"]}: ${cartItem.cartFeature.dbFeature.sku}`}\r\n \r\n ) : null}\r\n {cartItem.cartFeature.dbFeature.description ? (\r\n \r\n {cartItem.cartFeature.dbFeature.description}\r\n \r\n ) : null}\r\n \r\n {isMinimumCharge\r\n ? null\r\n : (\r\n \r\n {`${getFeatureQuantity()}: ${toFixedPrice(displayFake ? cartItem.displayFakeQuantity : cartItem.quantity)}`}\r\n \r\n )}\r\n \r\n {hideUnitPrice || isMinimumCharge\r\n ? null\r\n : `${getFeatureUnit(cartItem.cartFeature, fabricatorData, printContext, locale, cartItem.quantity)}: ${getPriceWithCurrency(fabricatorSettings, featurePrice, cartItem.cartFeature)}`}\r\n \r\n {price}\r\n \r\n {cartItem.noteText ? {cartItem.noteText} : null}\r\n \r\n \r\n {bundleProducts.length ? : null}\r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {getCartItemName(cartItem.cartFeature, fabricatorData, printContext, locale)}\r\n \r\n \r\n {cartItem.cartFeature.dbFeature.sku && !fabricatorSettings.hideSku ? (\r\n \r\n {`${printContext.messages[\"receipt.content.featureSKU\"]}: ${cartItem.cartFeature.dbFeature.sku}`}\r\n \r\n ) : null}\r\n {isMinimumCharge\r\n ? null\r\n : (\r\n \r\n {`${getFeatureQuantity()}: ${toFixedPrice(displayFake ? cartItem.displayFakeQuantity : cartItem.quantity)}`}\r\n \r\n )}\r\n \r\n {hideUnitPrice || isMinimumCharge\r\n ? null\r\n : `${getFeatureUnit(cartItem.cartFeature, fabricatorData, printContext, locale, cartItem.quantity)}: ${getPriceWithCurrency(fabricatorSettings, featurePrice, cartItem.cartFeature)}`}\r\n \r\n {price}\r\n \r\n {cartItem.noteText ? {cartItem.noteText} : null}\r\n \r\n \r\n {bundleProducts.length ? : null}\r\n \r\n\r\n )\r\n};\r\n\r\nPrintDocumentBodyCartItem.propTypes = {\r\n cartItem: PropTypes.shape(cartItemInterface),\r\n fabricatorData: PropTypes.object.isRequired,\r\n locale: PropTypes.string.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default PrintDocumentBodyCartItem\r\n\r\n","import PropTypes from \"prop-types\";\r\n\r\nexport const filterGroupInterface = {\r\n id: PropTypes.number.isRequired,\r\n name: PropTypes.string,\r\n type: PropTypes.string,\r\n values: PropTypes.array,\r\n visualType: PropTypes.string,\r\n}\r\n\r\nexport const filterValueInterface = {\r\n id: PropTypes.number.isRequired,\r\n additionalImages: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\r\n displayText: PropTypes.string,\r\n filterGroup_id: PropTypes.number,\r\n icon: PropTypes.string,\r\n lockedInWizard: PropTypes.bool,\r\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n}\r\n\r\nexport const navigationFilterValueInterface = {\r\n filterId: PropTypes.number.isRequired,\r\n filterGroupId: PropTypes.number.isRequired,\r\n}\r\n","import EventManager from \"../../../store/sqftEventManager\";\r\nimport workspace from \"../../workspace\";\r\nimport config from \"../../../store/sqftConfig\";\r\nimport {getMousePositionOnField} from \"../../../../../helpers/sqftHelper\";\r\nimport {pnpolyArray} from \"../../../../../lib/pnpoly\";\r\n\r\nexport default class Movable {\r\n\r\n state = {\r\n hoveringOnlyShape: false,\r\n mouseDown: false,\r\n mouseDownWithChildren: false,\r\n mouseDownPosition: null,\r\n hovering: false,\r\n hoveringWithChildren: false,\r\n handlerHold: null\r\n };\r\n _posX;\r\n _posY;\r\n _width;\r\n _height;\r\n isResizedByPoint = false;\r\n priority;\r\n parent;\r\n grandParent;\r\n moveCallback = null;\r\n mouseUpCallback = null;\r\n mouseDownCallback = null;\r\n\r\n constructor(posX,\r\n posY,\r\n width,\r\n height,\r\n priority = EventManager.priorities.IMAGE,\r\n parent = null,\r\n grandParent = null,\r\n moveCallback = null,\r\n mouseUpCallback = null,\r\n mouseDownCallback = null\r\n ) {\r\n this.priority = priority;\r\n this.parent = parent;\r\n this.grandParent = grandParent;\r\n this.moveCallback = moveCallback;\r\n this.mouseUpCallback = mouseUpCallback;\r\n this.mouseDownCallback = mouseDownCallback;\r\n\r\n this.initEvents();\r\n this._posX = posX;\r\n this._posY = posY;\r\n this._width = width;\r\n this._height = height;\r\n }\r\n\r\n get posX() {\r\n return this._posX;\r\n }\r\n\r\n set posX(value) {\r\n this._posX = value;\r\n }\r\n\r\n get posY() {\r\n return this._posY;\r\n }\r\n\r\n set posY(value) {\r\n this._posY = value;\r\n }\r\n\r\n get width() {\r\n return this._width;\r\n }\r\n\r\n set width(value) {\r\n this._width = value;\r\n }\r\n\r\n get height() {\r\n return this._height;\r\n }\r\n\r\n set height(value) {\r\n this._height = value;\r\n }\r\n\r\n initEvents() {\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n this.onMouseMove.bind(this),\r\n this,\r\n this.priority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n this.onMouseDown.bind(this),\r\n this,\r\n this.priority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n this.onMouseUp.bind(this),\r\n this,\r\n this.priority\r\n );\r\n }\r\n\r\n deregisterEvents() {\r\n EventManager.removeEvent(this);\r\n }\r\n\r\n reInitEvents = () => {\r\n this.initEvents();\r\n }\r\n\r\n onMouseMove(mousePos, e) {\r\n if (e.terminate && !this.state.mouseDown) {\r\n this.setHoveringOnlyShape(false);\r\n\r\n return this.setHovering(false);\r\n }\r\n\r\n if (this.state.mouseDown) {\r\n EventManager.setCursor('move', this, true);\r\n if (this.moveCallback) {\r\n this.moveCallback(mousePos, this);\r\n } else {\r\n this.movePosition(mousePos);\r\n }\r\n }\r\n\r\n if (this.isMouseOverArea(mousePos)) {\r\n this.setHovering(true);\r\n\r\n EventManager.setCursor('move', this);\r\n return this.state.mouseDown;\r\n }\r\n if (this.parent.points !== undefined) { // todo this should be children not points\r\n for (const point in this.parent.points) {\r\n if (this.parent.points.hasOwnProperty(point)) {\r\n if (this.parent.points[point].modelCorePoint.mixins.movable.state.hovering) {\r\n this.setHoveringWithChildren(true);\r\n\r\n return this.state.hoveringWithChildren\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.setHovering(false);\r\n this.setHoveringWithChildren(false);\r\n EventManager.resetCursor(this);\r\n\r\n return false;\r\n }\r\n\r\n onMouseUp(mousePos) {\r\n EventManager.releaseStealLock(self);\r\n this.state.mouseDown = false;\r\n this.state.mouseDownPosition = null;\r\n if (this.mouseUpCallback) {\r\n this.mouseUpCallback(mousePos, this);\r\n }\r\n }\r\n\r\n onMouseDown(mousePos, e) {\r\n void e;\r\n if (this.isHovering()) {\r\n //if (EventManager.getCursor().indexOf(\"move\") >= 0) {\r\n this.state.mouseDown = true;\r\n this.state.mouseDownPosition = mousePos;\r\n //}\r\n if (this.mouseDownCallback) {\r\n this.mouseDownCallback(mousePos, this);\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n isHovering () { return this.state.hovering === true; }\r\n setHoveringOnlyShape(value) { this.state.hoveringOnlyShape = value; return value; }\r\n setHovering(value) { this.state.hovering = value; return value; }\r\n setHoveringWithChildren(value) { this.state.hoveringWithChildren = value; return value; }\r\n\r\n movePosition(mousePos) {\r\n let scale = workspace.getScale();\r\n let xDiff = (this.state.mouseDownPosition.x - mousePos.x) / scale;\r\n let yDiff = (this.state.mouseDownPosition.y - mousePos.y) / scale;\r\n\r\n this.state.mouseDownPosition.x = mousePos.x;\r\n this.state.mouseDownPosition.y = mousePos.y;\r\n\r\n //todo this should be outside of the class\r\n if (this.parent.params.isResizedByPoint) {\r\n // 0 point\r\n // this.grandParent.posX -= xDiff;\r\n // this.grandParent.posY -= yDiff;\r\n\r\n //3 point\r\n // this.grandParent.posX -= xDiff;\r\n // this.grandParent.mixin.movable.width += xDiff;\r\n // this.posX -= xDiff;\r\n\r\n //4 point\r\n if (this.grandParent.width - xDiff >= this.grandParent.design.minimumWidth) {\r\n this.grandParent.width -= xDiff;\r\n this.grandParent.mixin.movable.width -= xDiff;\r\n this.posX -= xDiff;\r\n\r\n // change p7 x cord\r\n // todo grandParent setter\r\n this.grandParent.points.p7.modelCorePoint.mixins.movable.posX -= xDiff;\r\n\r\n // update textarea width\r\n // todo get from the parent class\r\n\r\n let textarea = document.querySelector('.i-text');\r\n if (textarea) {\r\n let width = textarea.offsetWidth;\r\n width -= xDiff * 4;\r\n textarea.style.width = width + 'px';\r\n }\r\n }\r\n } else if (this.parent.params.isScaledByPoint) {\r\n // 7 point (scaled)\r\n if (this.grandParent.height - (xDiff + yDiff) / 2 >= this.grandParent.design.minimumHeight\r\n && this.grandParent.width - (xDiff + yDiff) / 2 >= this.grandParent.design.minimumWidth\r\n ) {\r\n this.grandParent.width -= (xDiff + yDiff) / 2;\r\n this.grandParent.height -= (xDiff + yDiff) / 2;\r\n this.grandParent.mixin.movable.width -= (xDiff + yDiff) / 2;\r\n this.grandParent.mixin.movable.height -= (xDiff + yDiff) / 2;\r\n\r\n this.posX -= (xDiff + yDiff) / 2;\r\n this.posY -= (xDiff + yDiff) / 2;\r\n\r\n //change point 4 x cord\r\n //todo grandParent setter\r\n this.grandParent.points.p4.modelCorePoint.mixins.movable.posX -= (xDiff + yDiff) / 2;\r\n }\r\n } else {\r\n this.posX -= xDiff;\r\n this.posY -= yDiff;\r\n }\r\n }\r\n\r\n isMouseOverArea (mousePos) {\r\n let offset = this.grandParent && this.grandParent.getPosition && this.grandParent.isLastParent !== true\r\n ? this.grandParent.getPosition()\r\n : {x: 0, y: 0};\r\n\r\n let pointsArray;\r\n\r\n if (this.parent.design !== undefined && this.parent.design.layout === \"resize\") { // centered cords for points\r\n pointsArray = [\r\n [this.posX + offset.x - this.parent.design.radius / 2, this.posY + offset.y - this.parent.design.radius / 2],\r\n [this.posX + offset.x + this.parent.design.radius / 2, this.posY + offset.y - this.parent.design.radius / 2],\r\n [this.posX + offset.x + this.parent.design.radius / 2, this.posY + offset.y + this.parent.design.radius / 2],\r\n [this.posX + offset.x - this.parent.design.radius / 2, this.posY + offset.y + this.parent.design.radius / 2],\r\n ];\r\n } else if (this.parent.params && this.parent.params.isCenteredByY) { // centered cords for points\r\n pointsArray = [\r\n [this.posX + offset.x, this.posY + offset.y - this.parent.design.radius / 2],\r\n [this.posX + this.width + offset.x, this.posY + offset.y - this.parent.design.radius / 2],\r\n [this.posX + this.width + offset.x, this.posY + this.height + offset.y - this.parent.design.radius / 2],\r\n [this.posX + offset.x, this.posY + this.height + offset.y - this.parent.design.radius / 2],\r\n ];\r\n } else if (this.parent.params && this.parent.params.isCentered) { // centered cords for points\r\n pointsArray = [\r\n [this.posX + offset.x - this.width / 2, this.posY + offset.y - this.height / 2],\r\n [this.posX + offset.x + this.width / 2, this.posY + offset.y - this.height / 2],\r\n [this.posX + offset.x + this.width / 2, this.posY + offset.y + this.height / 2],\r\n [this.posX + offset.x - this.width / 2, this.posY + offset.y + this.height / 2],\r\n ];\r\n } else {\r\n pointsArray = [\r\n [this.posX + offset.x, this.posY + offset.y],\r\n [this.posX + this.width + offset.x, this.posY + offset.y],\r\n [this.posX + this.width + offset.x, this.posY + this.height + offset.y],\r\n [this.posX + offset.x, this.posY + this.height + offset.y],\r\n ];\r\n }\r\n\r\n let posOnField = getMousePositionOnField(mousePos.x, mousePos.y);\r\n\r\n return pnpolyArray(pointsArray, posOnField);\r\n }\r\n\r\n isMouseOverAreaByMousePOs (mousePos) {\r\n let scale = config.scale;\r\n let pointsArray = [\r\n [this.posX, this.posY],\r\n [this.posX + this.width * scale, this.posY],\r\n [this.posX + this.width * scale, this.posY + this.height * scale],\r\n [this.posX, this.posY + this.height * scale],\r\n ];\r\n\r\n return pnpolyArray(pointsArray, mousePos);\r\n }\r\n}\r\n","import eventManager from \"../../store/sqftEventManager\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport $ from \"jquery\";\r\n\r\nexport default class Cursor {\r\n cursorName = null;\r\n addedImages = [];\r\n\r\n registerEvents = () => {\r\n eventManager.addEvent(\r\n eventManager.events.RENDER,\r\n this.renderCursor,\r\n this,\r\n eventManager.priorities.OVERALL\r\n );\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_UP,\r\n this.onMouseUp,\r\n this,\r\n eventManager.priorities.OVERALL\r\n );\r\n };\r\n\r\n onMouseUp = () => {\r\n this.checkForRestoreCursor();\r\n };\r\n\r\n setCursorImage = (imgSrc) => {\r\n const alreadyAddedImage = this.addedImages.find(image => image.dataset.id === this.clickedEdgeButton.attr(\"data-id\"));\r\n if (alreadyAddedImage) {\r\n this.cursorImage = { image: alreadyAddedImage, width: alreadyAddedImage.width, height: alreadyAddedImage.height };\r\n eventManager.setCursor('edge-select', this, true);\r\n this.registerEvents();\r\n } else {\r\n this.addCursorImage(imgSrc);\r\n }\r\n };\r\n\r\n addCursorImage = (imgSrc) => {\r\n let item = this.clickedBackSplashButton, // remember it to restore after moving canvas cursor switch\r\n bounds = 18,\r\n imgWidth = bounds,\r\n imgHeight = bounds;\r\n void item;\r\n\r\n let domImg = document.createElement('img');\r\n domImg.crossOrigin = \"Anonymous\";\r\n domImg.dataset.name = \"cursor\";\r\n\r\n let $img = $(domImg);\r\n $img.css({\r\n position: 'absolute',\r\n width: '1px',\r\n height: '1px'\r\n });\r\n // $img.attr({\r\n // 'data-id': item.attr('data-id'),\r\n // 'data-name': item.attr('data-name').trim(),\r\n // 'data-name-metric': item.attr('data-name-metric').trim(),\r\n // });\r\n let imgOnLoad = () => {\r\n let bounds = 18, ratio;\r\n if (imgWidth > imgHeight) {\r\n ratio = imgHeight / imgWidth;\r\n imgWidth = bounds;\r\n imgHeight = bounds * ratio;\r\n } else {\r\n ratio = imgWidth / imgHeight;\r\n imgHeight = bounds;\r\n imgWidth = bounds * ratio;\r\n }\r\n eventManager.setCursor('edge-select', this, true);\r\n this.cursorImage = { image: domImg, width: imgWidth, height: imgHeight };\r\n this.registerEvents(); // only after image is load!\r\n };\r\n $img.on('load', imgOnLoad);\r\n $img.appendTo($('body'));\r\n\r\n config.highlight.type = 'backsplash';\r\n //todo\r\n $img.attr('src', imgSrc);\r\n\r\n // config.highlight.id = item.attr('data-id');\r\n };\r\n\r\n checkForRestoreCursor = () => {\r\n if (this.isWaitingToRestoreCursor) {\r\n this.isWaitingToRestoreCursor = false;\r\n eventManager.removeEvent(this, eventManager.events.MOUSE_UP); //remove mouse up, it will be added in setCursorImage\r\n\r\n //todo\r\n // this.setHighlighting();\r\n this.setCursorImage();\r\n }\r\n };\r\n\r\n renderCursor = function(ctx) {\r\n if(this.cursorImage.image && ($(window).width() > 768)) {\r\n let mPos = eventManager.LastKnownMousePos;\r\n if(mPos) {\r\n ctx.drawImage(this.cursorImage.image, mPos.x + 10, mPos.y + 10, 18, 18);\r\n }\r\n }\r\n };\r\n\r\n destroy = (protect, revertBackAfterMouseUp) => {\r\n if (revertBackAfterMouseUp) {\r\n //remove render only, but wait for mouse up to set cursor again\r\n //eventManager.removeEvent(this, eventManager.events.RENDER);\r\n\r\n //full remove event\r\n this.deregisterEvents();\r\n this.cursorImage = null;\r\n this.isWaitingToRestoreCursor = true;\r\n } else {\r\n this.deregisterEvents();\r\n this.cursorImage = null\r\n }\r\n this.hide();\r\n };\r\n\r\n hide = function(e) {\r\n if(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n //Menu.hideSideBarContent(); // hide sidebar menu\r\n };\r\n\r\n deregisterEvents = () => {\r\n eventManager.resetCursor(this);\r\n eventManager.removeEvent(this);\r\n config.highlight.lines = false;\r\n }\r\n}\r\n","import $ from 'jquery';\r\nimport _ from 'lodash';\r\n\r\nimport eventManager from \"../../store/sqftEventManager\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport workspace from \"../workspace\";\r\nimport {inchesToMm} from \"../../../../helpers/sqftHelper\";\r\nimport SqftStore from \"../../store/sqftStore\";\r\nimport {iconplusPurple} from \"../../../../assetsSQFT\";\r\nimport sqftShapeManager from \"../../store/sqftShapeManager\";\r\n//import TranslatesProvider from \"./../../translatesProvider\";\r\n\r\nexport default new function() {\r\n //private variables\r\n var self = this,\r\n //cursorImage = null,\r\n elements = {\r\n navRadius: $('#nav_radius'),\r\n overlay: $('#radius-overlay'),\r\n arcButtons: $('.lightbox-option-rectangular[data-arc]'),\r\n angleButtons: $('.lightbox-option-rectangular[data-angle]'),\r\n designDefault: $('#design-default'),\r\n closeButton: $('#radius-overlay .lightbox-cancel-button'),\r\n cornerContainer: $('#corner'),\r\n radiusContainer: $('#radius'),\r\n measure: $('[data-measure]')\r\n },\r\n maxRadius = 18,\r\n corners = 60;\r\n\r\n this.clickedBackSplashButton = null;\r\n this.cursorImage = null;\r\n this.isWaitingToRestoreCursor = false;\r\n\r\n //public variables\r\n this.arcLength = 0;\r\n this.angle = 0;\r\n //private events\r\n\r\n this.angleButton_onClick = function() {\r\n self.deregisterEvents();\r\n SqftStore.radius.arcLength = 0;\r\n SqftStore.radius.angle = $(this).attr('data-angle');\r\n self.handleButtonClick($(this));\r\n $('.lightbox-option-selected').removeClass('lightbox-option-selected');\r\n $(this).addClass('lightbox-option-selected');\r\n };\r\n this.arcButton_onClick = function() {\r\n this.deregisterEvents();\r\n SqftStore.radius.angle = 0;\r\n SqftStore.radius.arcLength = $(this).attr('data-arc');\r\n self.handleButtonClick($(this));\r\n $('.lightbox-option-selected').removeClass('lightbox-option-selected');\r\n $(this).addClass('lightbox-option-selected');\r\n };\r\n\r\n this.handleButtonClick = function(item) {\r\n\r\n self.setHighlighting();\r\n self.clickedEdgeButton = item;\r\n self.setCursorImage();\r\n\r\n if (window.innerWidth < 991 && !config.tutorialIsRunning) {\r\n //Menu.hideSideBarContent(); // hide sidebar menu\r\n }\r\n\r\n // elements.overlay.hide();\r\n };\r\n\r\n this.deregisterEvents = function() {\r\n eventManager.resetCursor(self);\r\n eventManager.removeEvent(self);\r\n elements.navRadius.removeClass('steps-scope-config-button-selected');\r\n // QCDES-1139 fix\r\n //SqftStore.radius.arcLength = 0;\r\n //SqftStore.radius.angle = 0;\r\n config.highlight.points = false;\r\n };\r\n\r\n function createRadiusElements() {\r\n let html = '';\r\n for (let i = 1; i <= maxRadius; i++) {\r\n html +=\r\n ('
    \\n' +\r\n '
    \\n' +\r\n ' \\n' +\r\n '
    ' +\r\n ' '+ i +'\" ' +\r\n ' '+ TranslatesProvider.translate(\"sqft.navigation.radius.radiusItem\") + '' +\r\n '
    \\n' +\r\n '
    ');\r\n }\r\n elements.radiusContainer.html(html);\r\n elements.arcButtons = $('.lightbox-option-rectangular[data-arc]');\r\n }\r\n\r\n function createCornerElements() {\r\n let html = '';\r\n for (let i = 3; i <= corners; i += 3) {\r\n html += ('
    \\n' +\r\n '
    \\n' +\r\n ' \\n' +\r\n ' \\n' +\r\n '
    \\n' +\r\n '
    '+ i +'\"
    \\n' +\r\n '
    ');\r\n }\r\n elements.cornerContainer.html(html);\r\n elements.angleButtons = $('.lightbox-option-rectangular[data-angle]');\r\n }\r\n this.onMeasureUnitChange = () => {\r\n //nodes.buttons.radius\r\n elements.arcButtons.each(function () {\r\n switch(config.measureUnit) {\r\n case \"Metric\":\r\n $(this).find('[data-value=\"radius\"]').html(inchesToMm(+this.dataset.arc) + config.getMeasureUnitPostfix());\r\n break;\r\n case \"Imperial\":\r\n default:\r\n $(this).find('[data-value=\"radius\"]').html(+this.dataset.arc + config.getMeasureUnitPostfix());\r\n }\r\n });\r\n\r\n // nodes.buttons.corner\r\n elements.angleButtons.each(function () {\r\n switch(config.measureUnit) {\r\n case \"Metric\":\r\n $(this).find('[data-value=\"corner\"]').html(inchesToMm(+this.dataset.angle) + config.getMeasureUnitPostfix());\r\n break;\r\n case \"Imperial\":\r\n default:\r\n $(this).find('[data-value=\"corner\"]').html(+this.dataset.angle + config.getMeasureUnitPostfix());\r\n }\r\n });\r\n\r\n elements.measure.each(function () {\r\n switch(config.measureUnit) {\r\n case \"Metric\":\r\n $(this).html($(this).data('metric'));\r\n break;\r\n case \"Imperial\":\r\n default:\r\n $(this).html($(this).data('imperial'));\r\n }\r\n });\r\n };\r\n\r\n this.setCursorImage = function () {\r\n var item = self.clickedEdgeButton, // remember it to restore after moving canvas cursor switch\r\n bounds = 18,\r\n imgWidth = bounds,\r\n imgHeight = bounds;\r\n\r\n var domImg = document.createElement('img');\r\n domImg.crossOrigin = \"Anonymous\";\r\n\r\n var $img = $(domImg);\r\n $img.css({\r\n position: 'absolute',\r\n width: '1px',\r\n height: '1px'\r\n });\r\n $img.attr({\r\n 'data-id': item//.attr('data-id')\r\n });\r\n $img.on('load', function() {\r\n setImage(domImg);\r\n });\r\n $img.appendTo($('body'));\r\n $img.attr('src', iconplusPurple);\r\n\r\n function setImage(domImg) {\r\n var bounds = 18;\r\n let ratio;\r\n if(imgWidth > imgHeight) {\r\n ratio = imgHeight / imgWidth;\r\n imgWidth = bounds;\r\n imgHeight = bounds * ratio;\r\n } else {\r\n ratio = imgWidth / imgHeight;\r\n imgHeight = bounds;\r\n imgWidth = bounds * ratio;\r\n }\r\n eventManager.setCursor('edge-select', self, true);\r\n self.cursorImage = { image: domImg, width: imgWidth, height: imgHeight };\r\n self.registerEvents();\r\n }\r\n };\r\n\r\n this.setHighlighting = function () {\r\n eventManager.stealCursor(true); // remove all other cursors\r\n workspace.setAllowEdges(false); // removing sizing lines\r\n workspace.setAllowBumpoutEdges(false); // removing bumpout lines\r\n workspace.setAllowMiteredEdges(false); // removing mitered lines\r\n config.highlight.lines = false; // disable lines highlighting\r\n config.highlight.type = ''; // disable lines highlighting\r\n config.highlight.id = null; // disable lines highlighting\r\n };\r\n\r\n this.registerEvents = function() {\r\n eventManager.setCursor('radius-select', self, true);\r\n config.highlight.points = true;\r\n eventManager.addEvent(\r\n eventManager.events.RENDER,\r\n self.renderCursor,\r\n self,\r\n eventManager.priorities.OVERALL\r\n );\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_DOWN,\r\n self.onMouseDown,\r\n self,\r\n eventManager.priorities.OVERALL\r\n );\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_UP,\r\n self.onMouseUp,\r\n self,\r\n eventManager.priorities.OVERALL\r\n );\r\n };\r\n this.onMouseDown = function() {\r\n let hoverPoint = workspace.getHoverPoint();\r\n //let hoverShape = workspace.getHoverShape();\r\n let hoverMiteredPoint = workspace.getHoverMiteredPoint();\r\n\r\n //update hoverPoint from miteredHoverPoint\r\n if(hoverMiteredPoint) {\r\n let miteredOverlay = hoverMiteredPoint.getParent();\r\n if(\r\n miteredOverlay && miteredOverlay.line && miteredOverlay.line.to\r\n && (miteredOverlay.line.to.isOverPointField()\r\n || miteredOverlay.line.from.isOverPointField())\r\n ){\r\n hoverPoint = miteredOverlay.line.to.isOverPointField() || miteredOverlay.line.from.isOverPointField()\r\n }\r\n }\r\n\r\n if (hoverPoint) {\r\n return true; // return true; // block all mouse-down events // we need dragging workspace\r\n }\r\n };\r\n this.checkForRestoreCursor = function() {\r\n if (self.isWaitingToRestoreCursor) {\r\n self.isWaitingToRestoreCursor = false;\r\n eventManager.removeEvent(self, eventManager.events.MOUSE_UP); //remove mouse up, it will be added in setCursorImage\r\n self.setHighlighting();\r\n self.setCursorImage();\r\n }\r\n };\r\n this.onMouseUp = function(mousePos) {\r\n void mousePos;\r\n self.checkForRestoreCursor();\r\n\r\n let hoverPoint = workspace.getHoverPoint(),\r\n hoverShape = workspace.getHoverShape(),\r\n hoverSegmentCorner;\r\n\r\n //click on purple line\r\n if (hoverShape) {\r\n hoverSegmentCorner = hoverShape.getHoverSegmentCorner();\r\n if (hoverSegmentCorner) {\r\n hoverPoint = hoverSegmentCorner.line.to\r\n }\r\n }\r\n\r\n if (hoverPoint && !hoverPoint.angleIsChanged && hoverPoint.isFitSize()) {\r\n if (SqftStore.radius.arcLength) {\r\n hoverPoint.arcLength = SqftStore.radius.arcLength;\r\n hoverPoint.featureId = _.clone(SqftStore.radius.featureId);\r\n hoverPoint.angle = 0;\r\n\r\n } else if (SqftStore.radius.angle) {\r\n hoverPoint.angle = SqftStore.radius.angle;\r\n hoverPoint.featureId = _.clone(SqftStore.radius.featureId);\r\n hoverPoint.arcLength = 0;\r\n }\r\n //update mitered points\r\n sqftShapeManager.updateMinMaxMiteredPoints(hoverShape);\r\n //reset seam shape changes in the slab mode\r\n sqftShapeManager.resetShapeChangesInTheSlabMode(hoverShape);\r\n //update hoverMiteredPoint position\r\n let hoverMiteredPoint = workspace.getHoverMiteredPoint();\r\n if (hoverMiteredPoint) {\r\n hoverMiteredPoint.getParent().movePoint(0, 0, hoverMiteredPoint);\r\n hoverMiteredPoint.getParent().moveMeasurements(hoverMiteredPoint);\r\n //todo sqft-react\r\n //Menu.miteredController.updateInfo();\r\n }\r\n return false;\r\n } else if (hoverShape) {\r\n //Menu.openMenu();\r\n //return true; // if click on shape, block reseting cursor, because we still need it http://jira.mozidev.com/browse/QC-956\r\n }/* else {\r\n deregisterEvents();\r\n elements.designDefault.click();\r\n }*/\r\n\r\n };\r\n this.destroy = function(protect, revertBackAfterMouseUp) {\r\n if (revertBackAfterMouseUp) {\r\n eventManager.removeEvent(self, eventManager.events.RENDER); //remove render only, but wait for mouse up to set cursor again\r\n this.isWaitingToRestoreCursor = true;\r\n } else {\r\n this.deregisterEvents();\r\n }\r\n this.hide();\r\n };\r\n this.hide = function(e) {\r\n if(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n //Menu.hideSideBarContent(); // hide sidebar menu\r\n };\r\n\r\n //public functions\r\n this.init = function() {\r\n // elements.navRadius.click(navRadius_onClick);\r\n createRadiusElements();\r\n createCornerElements();\r\n\r\n elements.arcButtons.click(self.arcButton_onClick);\r\n elements.angleButtons.click(self.angleButton_onClick);\r\n };\r\n\r\n this.renderCursor = function(ctx) {\r\n // if((this.arcLength > 0) && ($(window).width() > 768)) {\r\n // var mPos = eventManager.LastKnownMousePos;\r\n // if(mPos) {\r\n // ctx.save();\r\n // ctx.font = \"18px \" + config.activeFontBold;\r\n // ctx.fillStyle = \"#B263A8\";\r\n // ctx.fillText(\"r\" + new Fraction(this.arcLength) + \"\\\"\", mPos.x + (12 * config.scale), mPos.y + 9);\r\n // ctx.restore();\r\n // }\r\n // }\r\n if(self.cursorImage && self.cursorImage.image && (this.arcLength > 0 || this.angle > 0) && ($(window).width() > 768)) {\r\n var mPos = eventManager.LastKnownMousePos;\r\n if(mPos) {\r\n ctx.drawImage(self.cursorImage.image, mPos.x + 10, mPos.y + 10, self.cursorImage.width, self.cursorImage.height);\r\n }\r\n }\r\n };\r\n};\r\n","import workspace from \"../../workspace\";\r\nimport {findLowestRightmostPoint} from \"../../../../../helpers/coordinatesHelper\";\r\nimport {canShapeBeAutoShifted, getLineDirection} from \"../../../../../helpers/shapeHelper\";\r\nimport sqftShapeManager from \"../../../store/sqftShapeManager\";\r\nimport {getPointDistance} from \"../../../../../helpers/sqftHelper\";\r\nimport {isHorizontalDirection, isVerticalDirection} from \"../../../helpers/lineHelper\";\r\nimport workspaceControllers from \"../../../store/workspaceControllers\";\r\nimport sqftShapeIntersectionsManager from \"../../../store/sqftShapeIntersectionsManager\";\r\nimport sqftShape from \"../sqftShape\";\r\n\r\nexport default class ShapeAutoShuffle {\r\n __shape;\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n }\r\n\r\n handlePlaceShapeOnTheLine = () => {\r\n //Auto Shuffle\r\n const hoveredLines = workspace.getHoveredLines([this.__shape.id]);\r\n\r\n if (hoveredLines.length > 0) {\r\n // Get relevant shapes and lines\r\n const hoveredLine = this.getHoveredLine(hoveredLines);\r\n const hoveredShape = hoveredLine.getParent();\r\n\r\n if (canShapeBeAutoShifted(this.__shape, hoveredShape)) {\r\n const newPosition = this.calculateNewPosition(hoveredLine, hoveredShape);\r\n\r\n if (newPosition) {\r\n // Move shape to new positions\r\n this.moveShapeToPositionAndRotate(newPosition, hoveredLine);\r\n\r\n //set same snapped shape group before get shapes to shift\r\n workspaceControllers.snappedShapeGroups.setSameSnappedShapesGroup(this.__shape, hoveredShape);\r\n\r\n //Get shapes to shift\r\n const shapesToShift = this.getShapesToShift(hoveredShape, newPosition);\r\n //console.log(\"shapesToShift\", shapesToShift);\r\n\r\n // Calculate new positions\r\n const [xDiff, yDiff] = this.calculatePositionDiffForOtherShapes(hoveredLine);\r\n this.moveShapesToPositions(shapesToShift, xDiff, yDiff);\r\n\r\n this.__shape.resetState();\r\n sqftShapeIntersectionsManager.updateShapesIntersections();\r\n workspaceControllers.snappedShapeGroups.updateShapesSnappedGroups(true);\r\n workspace.getHoveredLines(); // update hovered lines\r\n return true\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Will return line for the lowest and rightmost shape\r\n * @param hoveredLines\r\n */\r\n getHoveredLine = (hoveredLines) => {\r\n const hoveredLinesShapes = hoveredLines.map(line => line.getParent());\r\n const lowestRightmostPoint = findLowestRightmostPoint(hoveredLinesShapes.map(shape => shape.getPosition()));\r\n const shapeToShift = hoveredLinesShapes.find(shape => {\r\n return shape.getPosition() === lowestRightmostPoint\r\n && shape.id !== this.__shape.id // skip current moving shape\r\n });\r\n\r\n return hoveredLines.find(line => line.getParent().id === shapeToShift.id);\r\n }\r\n\r\n /**\r\n * Will return all shapes that are lower or on the same line then point\r\n * @param hoveredShape\r\n * @param point\r\n */\r\n getShapesToShift = (hoveredShape, point) => {\r\n const snappedShapeGroup = hoveredShape.shapeAbsolute.getSnappedShapeGroup();\r\n if (snappedShapeGroup !== null && snappedShapeGroup !== undefined) {\r\n const snappedShapes = workspaceControllers.snappedShapeGroups.getSnappedShapes(snappedShapeGroup);\r\n if (snappedShapes) {\r\n const snappedShapesWithoutMovingShape = snappedShapes.filter(shape =>\r\n shape.id !== this.__shape.id\r\n && (hoveredShape.partId === shape.partId\r\n || hoveredShape.partId === shape.parentPartId\r\n || (hoveredShape.parentPartId && hoveredShape.parentPartId === shape.partId) //add spacers\r\n )\r\n )\r\n return this.findShapesRightAndBelow(snappedShapesWithoutMovingShape, point);\r\n } else {\r\n return this.findShapesRightAndBelow(hoveredShape, point);\r\n }\r\n }\r\n return []\r\n }\r\n\r\n /**\r\n * TODO diagonal\r\n */\r\n calculateNewPosition(hoveredLine, shapeToShift) {\r\n const shapeToShiftMeasurementPoints = sqftShapeManager.getMinMaxShapesPointsOnWorkspace([shapeToShift]);\r\n //console.log(\"shapeToShiftMeasurementPoints\", shapeToShiftMeasurementPoints);\r\n //console.log(\"shapeToShift\", shapeToShift);\r\n\r\n const hoveredLineDirection = getLineDirection(hoveredLine.from, hoveredLine.to);\r\n\r\n let newShapePosition = null;\r\n const hoveredLinePointFromPosOnWorkspace = hoveredLine.from.getPointPosOnWorkspace();\r\n if (isVerticalDirection(hoveredLineDirection)) {\r\n // Check whether it is shape start or end\r\n if (shapeToShiftMeasurementPoints[1].x === hoveredLinePointFromPosOnWorkspace.x) {\r\n newShapePosition = shapeToShiftMeasurementPoints[1];\r\n // Shift shape only if it is first line\r\n } else if (shapeToShiftMeasurementPoints[0].x === hoveredLinePointFromPosOnWorkspace.x) {\r\n newShapePosition = shapeToShiftMeasurementPoints[0];\r\n }\r\n } else if (isHorizontalDirection(hoveredLineDirection)) {\r\n // Check whether it is shape start or end\r\n if (shapeToShiftMeasurementPoints[0].y === hoveredLinePointFromPosOnWorkspace.y) {\r\n newShapePosition = shapeToShiftMeasurementPoints[0];\r\n // Shift shape only if it is first line\r\n } else if (shapeToShiftMeasurementPoints[3].y === hoveredLinePointFromPosOnWorkspace.y) {\r\n newShapePosition = shapeToShiftMeasurementPoints[3];\r\n }\r\n }\r\n\r\n return newShapePosition\r\n }\r\n\r\n /**\r\n *\r\n */\r\n calculatePositionDiffForOtherShapes(hoveredLine) {\r\n let xDiff = 0;\r\n let yDiff = 0;\r\n const thisShapeMeasurementPoints = sqftShapeManager.getMinMaxShapesPointsOnWorkspace([this.__shape]);\r\n const hoveredLineDirection = getLineDirection(hoveredLine.from, hoveredLine.to);\r\n if (isVerticalDirection(hoveredLineDirection)) {\r\n xDiff = getPointDistance(thisShapeMeasurementPoints[0], thisShapeMeasurementPoints[1]);\r\n } else if (isHorizontalDirection(hoveredLineDirection)) {\r\n yDiff = getPointDistance(thisShapeMeasurementPoints[3], thisShapeMeasurementPoints[0]);\r\n }\r\n\r\n return [xDiff, yDiff]\r\n }\r\n\r\n /**\r\n *\r\n */\r\n moveShapesToPositions(shapesToShift, xDiff, yDiff) {\r\n shapesToShift.forEach(shape => {\r\n const shapeCurrentPos = shape.getPosition();\r\n const shapeNewPos = {x: shapeCurrentPos.x + xDiff, y: shapeCurrentPos.y + yDiff};\r\n shape.setPosition(shapeNewPos);\r\n shape.shapeAbsolute.setAbsolutePos(shapeNewPos);\r\n })\r\n }\r\n\r\n /**\r\n * Moves and rotates the shape based on the line's orientation and the current rotation angle.\r\n */\r\n moveShapeToPositionAndRotate(newPosition, hoveredLine) {\r\n // Set the new position\r\n this.__shape.setPosition(newPosition);\r\n this.__shape.shapeAbsolute.setAbsolutePos(newPosition);\r\n\r\n // Determine the required rotation based on the line direction\r\n const hoveredLineDirection = getLineDirection(hoveredLine.from, hoveredLine.to);\r\n\r\n const isHorizontal = isHorizontalDirection(hoveredLineDirection);\r\n const isVertical = isVerticalDirection(hoveredLineDirection);\r\n const hoveredShape = hoveredLine.getParent();\r\n\r\n // Rotate by -90 degrees (right) if the current angle is 90 and the line is vertical\r\n if (hoveredShape.rotatedDegrees === 270 && isHorizontal) {\r\n let desiredAngle = 270;\r\n let normalizedCurrentAngle = ((this.__shape.rotatedDegrees % 360) + 360) % 360;\r\n let angleDifference = desiredAngle - normalizedCurrentAngle;\r\n this.__shape.rotate(angleDifference, this.__shape.Direction.LEFT, false);\r\n //todo\r\n //console.log(\"shape.getPosition()\", this.__shape.getPosition());\r\n //this.moveShapesToPositions([this.__shape], -this.__shape.getWidth(), -this.__shape.getHeight());\r\n //console.log(\"shape.getPosition()\", this.__shape.getPosition());\r\n //debugger // eslint-disable-line no-debugger\r\n }\r\n // Rotate by 90 degrees if the current angle is 0 and the line is horizontal\r\n else if (this.__shape.rotatedDegrees === 0 && isHorizontal) {\r\n this.__shape.rotate(90, this.__shape.Direction.LEFT, false);\r\n }\r\n // Rotate by -90 degrees (right) if the current angle is 90 and the line is vertical\r\n else if (this.__shape.rotatedDegrees === 90 && isVertical) {\r\n this.__shape.rotate(-90, this.__shape.Direction.LEFT, false);\r\n }\r\n\r\n // Calculate the new coordinates for the upper left corner after potential rotation\r\n if (isHorizontalDirection(hoveredLineDirection)) {\r\n // fix shape if position is in the top left corner\r\n // Calculate shift is not needed if the center remains in place\r\n const cos = Math.cos(this.__shape.rotatedDegrees * Math.PI / 180);\r\n const sin = Math.sin(this.__shape.rotatedDegrees * Math.PI / 180);\r\n const originalWidth = this.__shape instanceof sqftShape ? this.__shape.getWidth() : this.__shape.getHeight();\r\n const originalHeight = this.__shape instanceof sqftShape ? this.__shape.getHeight() : this.__shape.getWidth();\r\n\r\n // Calculate the center coordinates\r\n const centerX = newPosition.x + originalWidth / 2;\r\n const centerY = newPosition.y + originalHeight / 2;\r\n\r\n // Coordinates of the upper left corner after rotation\r\n const upperLeftX = centerX - (originalWidth / 2 * cos + originalHeight / 2 * sin);\r\n const upperLeftY = centerY - (originalWidth / 2 * sin - originalHeight / 2 * cos);\r\n\r\n // Set the new coordinates for the upper left corner\r\n this.__shape.setPosition({\r\n x: upperLeftX,\r\n y: upperLeftY\r\n });\r\n this.__shape.shapeAbsolute.setAbsolutePos({\r\n x: upperLeftX,\r\n y: upperLeftY\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Function for finding all shapes that are to the right and below a point\r\n * @param {Array} shapes\r\n * @param referencePosition\r\n * @returns {Array}\r\n */\r\n findShapesRightAndBelow(shapes, referencePosition) {\r\n const resultShapes = [];\r\n\r\n shapes.forEach(shape => {\r\n const shapeMeasurementPoints = sqftShapeManager.getMinMaxShapesPointsOnWorkspace([shape]);\r\n const shapeTopLeftPoint = shapeMeasurementPoints[0];\r\n\r\n if (shapeTopLeftPoint.x >= referencePosition.x && shapeTopLeftPoint.y >= referencePosition.y) {\r\n resultShapes.push(shape);\r\n }\r\n });\r\n\r\n return resultShapes;\r\n }\r\n}\r\n","import cloneDeep from \"lodash/cloneDeep\";\r\n\r\nimport EventManager from \"../../../store/sqftEventManager\";\r\nimport config from \"../../../store/sqftConfig\";\r\nimport {\r\n getPointDistance,\r\n measureDistanceToInches,\r\n getFontsize, getAngleBetweenTwoPoints, getParallelPoints, getPointField\r\n} from \"../../../../../helpers/sqftHelper\";\r\nimport {pnpolyArray} from \"../../../../../lib/pnpoly\";\r\nimport store from \"../../../../../../../store\";\r\nimport {setSQFTContextMenu} from \"../../../../../../../actions/sqftMenuFunctions\";\r\nimport {iconGreenClip} from \"../../../../../assetsSQFT\";\r\nimport sqftShape from \"../sqftShape\";\r\nimport {SIDEBAR_BUTTONS_MENU} from \"../../../../../constants\";\r\nimport {COLOR} from \"../../../store/colorThemes\";\r\n\r\nexport default function(initialState = {}) {\r\n let self = this,\r\n state = {\r\n ...{\r\n labelText: '',\r\n labelTextColor: '#3e3e3e',\r\n textWidth: 0,\r\n isHovered: false,\r\n imageSrc: iconGreenClip,\r\n lineOffset: 13,\r\n flagMargin: 2,\r\n partId: undefined,\r\n isTitle: false,\r\n midPoint: {\r\n x: 0,\r\n y: 0\r\n }\r\n },\r\n ...initialState\r\n },\r\n line = null,\r\n shape = null;\r\n\r\n const svgCache = {};\r\n\r\n function setLine(value) { line = value; }\r\n function setShape(value) { shape = value; }\r\n function getMidPoint(from, to) {\r\n return {\r\n x: from.x + (to.x - from.x)/2,\r\n y: from.y + (to.y - from.y)/2\r\n };\r\n }\r\n function onMouseMove(mousePos, e) {\r\n void e;\r\n const {isHovered, orientation} = isMouseOverText(mousePos);\r\n state.isHovered = isHovered;\r\n if (state.isHovered) {\r\n if (EventManager.getCursor().indexOf(\"move\") >= 0) {\r\n EventManager.stealCursor(true);\r\n EventManager.setCursor((orientation === \"horizontal\") ? \"text\" : \"text-vertical\", self);\r\n }\r\n } else {\r\n EventManager.resetCursor(self);\r\n }\r\n }\r\n function onMouseDown(mousePos, e) {\r\n if (state.isHovered) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n\r\n //Delete label\r\n if (activeButton !== SIDEBAR_BUTTONS_MENU.delete) {\r\n void e;\r\n window.lineInputFocused = false;\r\n EventManager.stealCursor();\r\n EventManager.resetCursor(self);\r\n\r\n store.dispatch(setSQFTContextMenu({isOpened: true, activeMenu: \"labels\", pos: mousePos, parent: shape}));\r\n }\r\n\r\n return true\r\n }\r\n }\r\n function isMouseOverText(mousePos) {\r\n const lineDirection = line.getLineDirection();\r\n let pointsArray = [];\r\n let lineOffset = [];\r\n if (lineDirection.orientation === \"horizontal\") {\r\n lineOffset = lineDirection.newDirection === \"west\" ? -state.lineOffset : state.lineOffset;\r\n pointsArray = [\r\n [state.midPoint.x - state.textWidth/2 - 10, state.midPoint.y - 15 + lineOffset],\r\n [state.midPoint.x + state.textWidth/2 + 10, state.midPoint.y - 15 + lineOffset],\r\n [state.midPoint.x + state.textWidth/2 + 10, state.midPoint.y + 10 + lineOffset],\r\n [state.midPoint.x - state.textWidth/2 - 10, state.midPoint.y + 10 + lineOffset],\r\n ]\r\n // pointsArray.forEach(p => {\r\n // var tempPoint = new point(p[0], p[1]);\r\n // tempPoint.init(line);\r\n // tempPoint.layout = 'white-circle';\r\n // debugger\r\n // })\r\n } else if (lineDirection.orientation === \"vertical\") {\r\n if (lineDirection.newDirection === \"south\") {\r\n pointsArray = [\r\n [state.midPoint.x + 40, state.midPoint.y - state.textWidth/2 - 10],\r\n [state.midPoint.x + 15, state.midPoint.y - state.textWidth/2 - 10],\r\n [state.midPoint.x + 15, state.midPoint.y + state.textWidth/2 - 5],\r\n [state.midPoint.x + 40, state.midPoint.y + state.textWidth/2 - 5],\r\n ];\r\n } else if (lineDirection.newDirection === \"north\") {\r\n pointsArray = [\r\n [state.midPoint.x - 40, state.midPoint.y - state.textWidth/2 - 10],\r\n [state.midPoint.x - 15, state.midPoint.y - state.textWidth/2 - 10],\r\n [state.midPoint.x - 15, state.midPoint.y + state.textWidth/2 - 5],\r\n [state.midPoint.x - 40, state.midPoint.y + state.textWidth/2 - 5],\r\n ];\r\n }\r\n } else {\r\n // todo rotation hover\r\n }\r\n return {isHovered: pnpolyArray(pointsArray, mousePos), orientation: lineDirection.orientation};\r\n }\r\n\r\n this.getState = () => { return state }\r\n this.isHovered = () => { return state.isHovered }\r\n this.destroy = function(protect) {\r\n if(!protect) {\r\n EventManager.removeEvent(self);\r\n }\r\n };\r\n this.getParent = () => {\r\n return line\r\n }\r\n this.setLabelText = (value) => {\r\n state.labelText = value;\r\n };\r\n this.setPartId = (value) => {\r\n state.partId = value;\r\n };\r\n this.import = function(data) {\r\n state = data.state;\r\n };\r\n this.export = function() {\r\n return { state: cloneDeep(state) }\r\n };\r\n this.init = function(line, text, partId) {\r\n setLine(line);\r\n //todo sqft-react\r\n setShape(line.getParent());\r\n void shape;\r\n\r\n this.setPartId(partId);\r\n this.setLabelText(text);\r\n this.initEvents(!state.isTitle);\r\n };\r\n this.initEvents = (editable = true) => {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render,\r\n this,\r\n EventManager.priorities.SHAPE_LABEL\r\n );\r\n if (editable) {\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n onMouseMove,\r\n this,\r\n EventManager.priorities.SHAPE_LABEL\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n onMouseDown,\r\n this,\r\n EventManager.priorities.SHAPE_LABEL\r\n );\r\n }\r\n }\r\n this.deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n };\r\n this.reInitEvents = () => {\r\n this.initEvents(!state.isTitle);\r\n };\r\n this.deregisterPartEvents = () => {\r\n EventManager.removeEvent(this);\r\n };\r\n this.reInitPartEvents = () => {\r\n this.initEvents(!state.isTitle);\r\n };\r\n this.getLineLength = function () {\r\n var distance = getPointDistance(line.from, line.to);\r\n return measureDistanceToInches(distance);\r\n };\r\n this.isIE = function() {\r\n return(/Trident/i).test(window.navigator.appVersion);\r\n };\r\n this.getSrc = function(img) {\r\n if(img) {\r\n let src = img.getAttribute('src');\r\n if(src) {\r\n return src;\r\n }\r\n src = img.getAttribute(\"style\");\r\n if(src) {\r\n return src.replace(/background-image: url\\(\"\\/api\\/SqFtCalc\\/GetImage\\?url=/g, \"\").replace(/\"\\);/g, \"\");\r\n }\r\n }\r\n return \"\";\r\n };\r\n\r\n this.renderImage = (ctx, x, y) => {\r\n if (state.isTitle) return;\r\n\r\n let scale = config.scale;\r\n let size = { width: 5, height: 5 };\r\n let posX = x - size.width * scale;\r\n let posY = y - size.height * scale;\r\n\r\n if (svgCache['iconGreenClip']) {\r\n let img = svgCache['iconGreenClip'];\r\n ctx.drawImage(img, posX, posY, size.width * scale, size.height * scale);\r\n } else {\r\n let img = new Image();\r\n let svg = document.getElementById('icon-label-flag');\r\n\r\n if (svg) {\r\n let xml = new XMLSerializer().serializeToString(svg);\r\n let svg64 = btoa(xml);\r\n\r\n img.src = 'data:image/svg+xml;base64,' + svg64;\r\n\r\n img.onload = () => {\r\n svgCache['iconGreenClip'] = img;\r\n ctx.drawImage(img, posX, posY, size.width * scale, size.height * scale);\r\n };\r\n\r\n img.onerror = () => {\r\n console.warn(\"Failed to load SVG image, using fallback.\");\r\n // ctx.fillStyle = '#FF0000'; // Фолбек в виде красного квадрата\r\n // ctx.fillRect(x - 10, y - 10, 20, 20);\r\n };\r\n }\r\n }\r\n };\r\n\r\n this.render = function(ctx) {\r\n let scale = config.scale,\r\n fontSize = getFontsize(),\r\n font = (fontSize).toString() + \"px \" + config.activeFontBold,\r\n lineDirection = line.getLineDirection(),\r\n offset = line.getOffset(),\r\n dString = state.labelText,\r\n midPoint = getMidPoint(line.from, line.to),\r\n mText,\r\n lineOffset = 0,\r\n xOffset = 0,\r\n marginTo = 0;\r\n\r\n ctx.beginPath();\r\n\r\n ctx.font = font;\r\n mText = ctx.measureText(dString);\r\n state.textWidth = Math.round(mText.width * 100) / 100;\r\n midPoint.y = midPoint.y * scale + offset.y;\r\n midPoint.x = midPoint.x * scale + offset.x;\r\n state.midPoint.x = midPoint.x;\r\n state.midPoint.y = midPoint.y;\r\n ctx.textAlign = \"center\";\r\n midPoint.y += fontSize / 2;\r\n\r\n ctx.beginPath();\r\n ctx.fillStyle = state.isHovered ? COLOR.red : state.labelTextColor;\r\n\r\n let moveFrom, moveTo;\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n lineOffset = lineDirection.newDirection === \"west\" ? -state.lineOffset : state.lineOffset;\r\n ctx.wrapText(dString, midPoint.x, midPoint.y + lineOffset, mText, fontSize);\r\n this.renderImage(ctx,midPoint.x - mText.width / 2 - state.flagMargin, midPoint.y + lineOffset);\r\n break;\r\n }\r\n case \"vertical\": {\r\n if (lineDirection.newDirection === \"south\") {\r\n marginTo = (lineDirection.cornerMargins.fromBottom) ? marginTo + 9 : marginTo;\r\n } else if (lineDirection.newDirection === \"north\") {\r\n marginTo = (lineDirection.cornerMargins.fromTop) ? marginTo + 9 : marginTo;\r\n }\r\n ctx.save();\r\n ctx.translate(\r\n lineDirection.newDirection === \"south\" ? midPoint.x + xOffset : midPoint.x + xOffset,\r\n lineDirection.newDirection === \"south\" ? midPoint.y - 5 : midPoint.y - 10\r\n );\r\n ctx.rotate(lineDirection.newDirection === \"south\" ? Math.PI / 2 : -Math.PI / 2);\r\n lineOffset = lineDirection.newDirection === \"south\" ? state.lineOffset : state.lineOffset ;\r\n\r\n ctx.wrapText(dString, marginTo,lineOffset + fontSize, mText, fontSize);\r\n this.renderImage(ctx,marginTo - mText.width / 2, lineOffset + fontSize);\r\n break;\r\n }\r\n //todo\r\n case \"NORTHWEST\":\r\n case \"NORTHEAST\":\r\n case \"SOUTHWEST\":\r\n case \"SOUTHEAST\": {\r\n ctx.save();\r\n const mText = ctx.measureText(dString);\r\n const angle = getAngleBetweenTwoPoints(line.from, line.to);\r\n [moveFrom, moveTo] = getParallelPoints(line.from, line.to, 6);\r\n const midPoint = getMidPoint(moveFrom, moveTo);\r\n //todo not sure why shape here becomes null after clicking on eyeball\r\n if (!(shape instanceof(sqftShape))) {\r\n shape = line.getParent();\r\n }\r\n const midPointPointField = getPointField(midPoint.x, midPoint.y, shape);\r\n ctx.save();\r\n ctx.translate(\r\n midPointPointField.x,\r\n midPointPointField.y,\r\n );\r\n ctx.rotate(angle * (Math.PI / 180));\r\n\r\n ctx.wrapText(dString, 0, 0, mText, fontSize);\r\n this.renderImage(ctx,0 - mText.width / 2, 0);\r\n\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n\r\n ctx.restore();\r\n };\r\n}\r\n","import * as uuid from \"uuid\";\r\n\r\nimport EventManager from \"../../store/sqftEventManager\";\r\nimport {FREE_DRAW_TYPE, SIDEBAR_BUTTONS_MENU, SIDEBAR_NAVIGATION_CABINET_BUTTONS} from \"../../../../constants\";\r\nimport RenderFreeDraw from \"../../helpers/renderFreeDraw\";\r\nimport {COLORS} from \"../../../../../../colorThemes\";\r\nimport NumberText from \"../workspace/text/numberText\";\r\nimport workspace from \"../workspace\";\r\nimport {getPointField} from \"../../../../helpers/sqftHelper\";\r\nimport eventManager from \"../../store/sqftEventManager\";\r\nimport store from \"../../../../../../store\";\r\nimport {getWallLockedPoint} from \"../../helpers/wallHelper\";\r\nimport {isPointInsidePolygon} from \"../../../../lib/pnpoly\";\r\nimport {getBordersOfTwoPoints, getLineBordersArrayV2} from \"../../helpers/lineHelper\";\r\nimport workspaceControllers from \"../../store/workspaceControllers\";\r\n\r\nexport default class Wall {\r\n dimensionToMouse = null;\r\n id;\r\n state = {\r\n addedPoints: [],\r\n dimensions: [],\r\n drawLineToMouse: false,\r\n lineThickness: 10,\r\n lineColor: COLORS.gray,\r\n outlineColor: COLORS.gray4,\r\n minLineLength: 15,\r\n drawType: FREE_DRAW_TYPE.wall,\r\n isHovering: false,\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n lockedAngleStep: 45,\r\n };\r\n editState = {\r\n editPoint: null,\r\n isInEditState: false,\r\n }\r\n\r\n getPoints() { return this.state.addedPoints }\r\n setEditMode(value) { this.editState.isInEditState = value}\r\n setEditPoint(point) { this.editState.editPoint = point}\r\n getOffset() { return workspace.getOffset() }\r\n getWallThickness() { return workspace.getOffset() }\r\n\r\n constructor(points, centerPoint, lockedAngleStep = 45) {\r\n this.id = uuid.v4();\r\n this.state.addedPoints = points\r\n this.state.centerPoint = centerPoint\r\n this.state.lockedAngleStep = lockedAngleStep\r\n this.initEvents();\r\n }\r\n\r\n initEvents() {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render.bind(this),\r\n this,\r\n EventManager.priorities.WALL\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n this.onMouseDown.bind(this),\r\n this,\r\n EventManager.priorities.OVERALL\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n this.onMouseMove.bind(this),\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n }\r\n\r\n export() {\r\n return {\r\n \"addedPoints\": this.state.addedPoints.map(point => point.exportData ? point.exportData() : null),\r\n \"centerPoint\": this.state.centerPoint,\r\n \"lockedAngleStep\": this.state.lockedAngleStep,\r\n }\r\n }\r\n\r\n destroy() {\r\n this.deregisterEvents();\r\n this.destroyPoints();\r\n }\r\n\r\n destroyPoints() {\r\n for (const addedPoints of this.state.addedPoints) {\r\n addedPoints.destroy()\r\n }\r\n }\r\n\r\n deregisterEvents() {\r\n eventManager.removeEvent(this);\r\n }\r\n\r\n editWall(point) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.wall) {\r\n this.setEditMode(true);\r\n this.setEditPoint(point);\r\n }\r\n }\r\n\r\n disableEditingWall() {\r\n this.setEditMode(false);\r\n this.setEditPoint(null);\r\n }\r\n\r\n createDimensionToMouse() {\r\n this.dimensionToMouse = new NumberText(\r\n 0,\r\n {x: 0, y: 0},\r\n {shouldRenderFrameBorder: true, isLength: true},\r\n workspace,\r\n Function(),\r\n true\r\n );\r\n }\r\n\r\n onMouseDown(mousePos) {\r\n if (this.editState.editPoint && this.editState.isInEditState) {\r\n this.addPoint(mousePos);\r\n this.disableEditingWall();\r\n return true\r\n }\r\n if (this.state.isHovering) {\r\n const reduxState = store.getState();\r\n if (reduxState.sqftMenuState.activeButton === SIDEBAR_BUTTONS_MENU.delete) {\r\n workspaceControllers.walls.destroyResource(this)\r\n }\r\n }\r\n }\r\n\r\n onMouseMove(mousePos) {\r\n this.state.isHovering = this.isMouseOverWall(mousePos) || this.state.mouseDown;\r\n }\r\n\r\n isMouseOverWall(mousePos) {\r\n for (const addedPointKey in this.state.addedPoints) {\r\n const nextPoint = this.state.addedPoints[+addedPointKey +1];\r\n if (nextPoint) {\r\n const currentPoint = this.state.addedPoints[+addedPointKey];\r\n const lineFieldArray = getLineBordersArrayV2(currentPoint, nextPoint, this.state.lineThickness + this.state.lineThickness * 0.1);\r\n if (isPointInsidePolygon(mousePos, lineFieldArray)) {\r\n return true\r\n }\r\n }\r\n }\r\n return false\r\n }\r\n\r\n addPoint(mousePos) {\r\n const wallLockedPoint = getWallLockedPoint(this.editState.editPoint, mousePos, this.state.lockedAngleStep);\r\n if (this.state.addedPoints.length > 0) {\r\n //todo\r\n //this.addLineDimensions(point, mousePos);\r\n }\r\n if (this.editState.editPoint.id === this.state.addedPoints[0].id) {\r\n this.state.addedPoints.unshift(wallLockedPoint);\r\n } else {\r\n this.state.addedPoints.push(wallLockedPoint);\r\n }\r\n }\r\n\r\n getLines() {\r\n let lines = [];\r\n const points = this.getPoints();\r\n for (const pointIndex in points) {\r\n const len = points.length;\r\n const current = points[+pointIndex];\r\n //const previous = points[(pointIndex + len - 1) % len];\r\n const next = points[(pointIndex + 1) % len];\r\n let line = {\r\n from: current,\r\n to: next,\r\n getOffset: () => {\r\n return this.getOffset()\r\n }\r\n }\r\n lines.push(line);\r\n }\r\n\r\n return lines\r\n }\r\n\r\n getBordersOfWallLines() {\r\n let virtualLines = [];\r\n const points = this.getPoints();\r\n for (const addedPointKey in points) {\r\n const nextPoint = points[+addedPointKey +1];\r\n if (nextPoint) {\r\n const currentPoint = points[+addedPointKey];\r\n virtualLines.push(...getBordersOfTwoPoints(currentPoint, nextPoint, this.state.lineThickness / 2));\r\n }\r\n }\r\n return virtualLines\r\n }\r\n\r\n render(ctx) {\r\n ctx.save();\r\n this.renderLines(ctx);\r\n ctx.restore();\r\n //this.updateDimensionToMouse(ctx);\r\n if (this.editState.editPoint && this.editState.isInEditState) {\r\n RenderFreeDraw.drawLineFromPointV2ToMouse(ctx, this.editState.editPoint, true);\r\n }\r\n }\r\n\r\n renderLines(ctx) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n ctx.lineWidth = this.state.lineThickness + 2;\r\n ctx.strokeStyle = this.state.outlineColor;\r\n RenderFreeDraw.renderLinesBetweenPoints(ctx, this.state);\r\n\r\n ctx.lineWidth = this.state.lineThickness;\r\n ctx.strokeStyle = this.state.isHovering && activeButton === SIDEBAR_BUTTONS_MENU.delete\r\n ? COLORS.red\r\n : this.state.lineColor;\r\n RenderFreeDraw.renderLinesBetweenPoints(ctx, this.state);\r\n }\r\n\r\n renderDimensionToMouseFromPoint = (ctx, point) => {\r\n let posX = point.modelCorePoint.mixins.movable.posX;\r\n let posY = point.modelCorePoint.mixins.movable.posY;\r\n let pointField = getPointField(posX, posY);\r\n ctx.moveTo(pointField.x, pointField.y);\r\n\r\n const mPos = EventManager.LastKnownMousePos;\r\n ctx.lineTo(mPos.x, mPos.y);\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n}\r\n","import {getPointField} from \"../../../helpers/sqftHelper\";\r\nimport EventManager from \"../store/sqftEventManager\";\r\nimport {FREE_DRAW_TYPE, SIDEBAR_NAVIGATION_CABINET_BUTTONS, SIDEBAR_SHAPE_BUTTONS} from \"../../../constants\";\r\nimport store from \"../../../../../store\";\r\nimport {getLockPointPos} from \"./freeDrawHelper\";\r\n\r\nexport default class RenderFreeDraw {\r\n\r\n static drawLines = (ctx, state) => {\r\n for (let i = 0; i < state.addedPoints.length; i++) {\r\n if (state.addedPoints[i + 1] !== undefined) {\r\n let posX = state.addedPoints[i].modelCorePoint.mixins.movable.posX;\r\n let posY = state.addedPoints[i].modelCorePoint.mixins.movable.posY;\r\n let pointField = getPointField(posX, posY);\r\n\r\n posX = state.addedPoints[i + 1].modelCorePoint.mixins.movable.posX;\r\n posY = state.addedPoints[i + 1].modelCorePoint.mixins.movable.posY;\r\n let nextPointField = getPointField(posX, posY);\r\n // let pointField = state.addedPoints[i].getPointCords();\r\n // let nextPointField = state.addedPoints[i + 1].getPointCords();\r\n if (i === 0) {\r\n ctx.moveTo(pointField.x, pointField.y);\r\n }\r\n ctx.lineTo(nextPointField.x, nextPointField.y);\r\n }\r\n }\r\n }\r\n\r\n static drawLastLine = (ctx, state) => {\r\n let posX = state.addedPoints[0].modelCorePoint.mixins.movable.posX;\r\n let posY = state.addedPoints[0].modelCorePoint.mixins.movable.posY;\r\n let pointField = getPointField(posX, posY);\r\n\r\n ctx.lineTo(pointField.x, pointField.y);\r\n }\r\n\r\n static drawLineFromPointV2ToMouse = (ctx, pointV2, shouldUseLockedMode = false) => {\r\n const reduxState = store.getState();\r\n const isWallsLockMode = reduxState.sqftMenuState.isWallsLockMode;\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n\r\n if ((shouldUseLockedMode && isWallsLockMode && activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.wall)\r\n || (shouldUseLockedMode && activeButton === SIDEBAR_SHAPE_BUTTONS.freeDraw)\r\n ) {\r\n RenderFreeDraw.drawLineFromPointV2ToMouseLocked(ctx, pointV2);\r\n } else {\r\n RenderFreeDraw.drawLineFromPointV2ToMouseFree(ctx, pointV2);\r\n }\r\n }\r\n\r\n static drawLineFromPointV2ToMouseFree = (ctx, pointV2) => {\r\n ctx.beginPath();\r\n let posX = pointV2.modelCorePoint.mixins.movable.posX;\r\n let posY = pointV2.modelCorePoint.mixins.movable.posY;\r\n let pointField = getPointField(posX, posY);\r\n ctx.moveTo(pointField.x, pointField.y);\r\n\r\n const mousePos = EventManager.LastKnownMousePos;\r\n ctx.lineTo(mousePos.x, mousePos.y);\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n\r\n static drawLineFromPointV2ToMouseLocked = (ctx, pointV2, lockedAngleStep = 45 ) => {\r\n const lockPointPos = getLockPointPos(pointV2, lockedAngleStep);\r\n\r\n ctx.beginPath();\r\n let posX = pointV2.modelCorePoint.mixins.movable.posX;\r\n let posY = pointV2.modelCorePoint.mixins.movable.posY;\r\n let pointField = getPointField(posX, posY);\r\n ctx.moveTo(pointField.x, pointField.y);\r\n\r\n ctx.lineTo(lockPointPos.x, lockPointPos.y);\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n\r\n // static renderCursor = (ctx) => {\r\n // if (RenderFreeDraw.cursorImage && this.cursorImage.image && (this.arcLength > 0 || this.angle > 0) && ($(window).width() > 768)) {\r\n // let mPos = EventManager.LastKnownMousePos;\r\n // if (mPos) {\r\n // ctx.drawImage(this.cursorImage.image, mPos.x + 10, mPos.y + 10, this.cursorImage.width, this.cursorImage.height);\r\n // }\r\n // }\r\n // };\r\n\r\n static renderLinesBetweenPoints = (ctx, state) => {\r\n ctx.beginPath();\r\n RenderFreeDraw.drawLines(ctx, state);\r\n ctx.stroke();\r\n // if (state.isDrawFinished) {\r\n // RenderFreeDraw.drawLastLine(ctx, state);\r\n // } else\r\n if (state.drawLineToMouse && state.addedPoints.length !== 0 ) {\r\n RenderFreeDraw.drawLineFromPointV2ToMouse(ctx, state.addedPoints[state.addedPoints.length -1], state.useLockedPoints)\r\n }\r\n };\r\n\r\n static render = (ctx, state) => {\r\n RenderFreeDraw.renderLines(ctx, state);\r\n //RenderFreeDraw.updateDimensionToMouse(ctx, state);\r\n };\r\n\r\n static renderLines = (ctx, state) => {\r\n //RenderFreeDraw.renderCursor(ctx);\r\n if (state.drawType === FREE_DRAW_TYPE.wall) {\r\n ctx.lineWidth = state.lineWidth + 2;\r\n ctx.strokeStyle = state.outlineColor;\r\n RenderFreeDraw.renderLinesBetweenPoints(ctx, state);\r\n }\r\n ctx.lineWidth = state.lineWidth;\r\n ctx.strokeStyle = state.lineColor;\r\n RenderFreeDraw.renderLinesBetweenPoints(ctx, state);\r\n };\r\n\r\n // static renderDimensionToMouse = (ctx, state) => {\r\n // if (state.dimensionToMouse.value > state.minLineLength) {\r\n // state.dimensionToMouse.pos.betweenPoints.pointFrom = state.addedPoints[state.addedPoints.length - 1]\r\n // state.dimensionToMouse.pos.betweenPoints.pointTo = getMousePositionOnField(\r\n // EventManager.LastKnownMousePos.x,\r\n // EventManager.LastKnownMousePos.y\r\n // );\r\n // //state.dimensionToMouse.render(ctx);\r\n // }\r\n // };\r\n}\r\n","import EventManager from \"../store/sqftEventManager\";\r\nimport store from \"../../../../../store\";\r\nimport PointV2, {CORE_POINT_LAYOUTS} from \"../core/shapes/pointV2\";\r\nimport workspace from \"../core/workspace\";\r\nimport sqftConfig from \"../store/sqftConfig\";\r\nimport {getLockPointPos} from \"./freeDrawHelper\";\r\nimport {getMousePositionOnField} from \"../../../helpers/sqftHelper\";\r\nimport workspaceControllers from \"../store/workspaceControllers\";\r\n\r\n/**\r\n * @param pos {{x: int, y: int}}\r\n * @return {PointV2}\r\n */\r\nexport const getWallPoint = (pos) => {\r\n let pointState = {\r\n priority: EventManager.priorities.BOX_POINT,\r\n movable: true,\r\n isCentered: true,\r\n isResizedByPoint: false,\r\n isScaledByPoint: false,\r\n isVisibleOnHover: true,\r\n moveCallback: (mousePos, movablePoint, xDiff, yDiff) => {\r\n void yDiff;\r\n const reduxState = store.getState();\r\n const isWallsUpMode = reduxState.sqftMenuState.isWallsUpMode;\r\n if (!isWallsUpMode) {\r\n movablePoint.movePosition(mousePos);\r\n }\r\n },\r\n mouseUpCallback: (mousePos, movablePoint) => {\r\n void mousePos;\r\n void movablePoint;\r\n //console.log('mousePos', mousePos);\r\n //console.log('movablePoint', movablePoint);\r\n },\r\n mouseDownCallback: (mousePos, movablePoint) => {\r\n //console.log('mouseDownCallback mousePos', mousePos);\r\n //console.log('mouseDownCallback movablePoint', movablePoint);\r\n void mousePos; void movablePoint;\r\n const reduxState = store.getState();\r\n const isWallsUpMode = reduxState.sqftMenuState.isWallsUpMode;\r\n if (isWallsUpMode) {\r\n const wall = workspaceControllers.walls.getWallByPoint(movablePoint.parent);\r\n wall.editWall(movablePoint.parent);\r\n return true\r\n }\r\n }\r\n };\r\n let pointDesign = {\r\n radius: 10,\r\n lineWidth: 1,\r\n layout: CORE_POINT_LAYOUTS.black\r\n };\r\n\r\n let wPos = workspace.getPosition();\r\n let scale = sqftConfig.scale;\r\n let offset = {\r\n x: (pos.x + wPos.x) / scale,\r\n y: (pos.y + wPos.y) / scale\r\n };\r\n\r\n return new PointV2(offset.x, offset.y, workspace, pointState, pointDesign);\r\n}\r\n\r\n/**\r\n * @param existingWallPoint {PointV2}\r\n * @param mousePos {{x: int, y: int}}\r\n * @param lockedAngleStep\r\n * @return {PointV2}\r\n */\r\nexport const getWallLockedPoint = (existingWallPoint, mousePos, lockedAngleStep = 45) => {\r\n const reduxState = store.getState();\r\n const isWallsLockMode = reduxState.sqftMenuState.isWallsLockMode;\r\n const newWallPoint = getWallPoint(mousePos);\r\n if (isWallsLockMode) {\r\n const lockedPosition = getLockPointPos(existingWallPoint, lockedAngleStep);\r\n const lockedPositionOnField = getMousePositionOnField(lockedPosition.x, lockedPosition.y);\r\n newWallPoint.setPosition(lockedPositionOnField);\r\n }\r\n\r\n return newWallPoint\r\n}\r\n","import workspace from \"../../workspace\";\r\nimport COLOR_THEMES, {COLOR} from \"../../../store/colorThemes\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport {\r\n CABINET_FILTER_NAMES,\r\n RENDER_TEMPLATES,\r\n SIDEBAR_BUTTONS_MENU, SIDEBAR_NAVIGATION_BUTTONS,\r\n SIDEBAR_NAVIGATION_CABINET_BUTTONS, SQFT_FEATURES\r\n} from \"../../../../../constants\";\r\nimport config from \"../../../store/sqftConfig\";\r\nimport sqftShapeManager from \"../../../store/sqftShapeManager\";\r\nimport RenderParts from \"../../../helpers/renderParts\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\nimport store from \"../../../../../../../store\";\r\nimport RenderCabinets from \"../../../helpers/renderCabinets\";\r\nimport {COLORS} from \"../../../../../../../colorThemes\";\r\nimport Config from \"../../../../../../../config\";\r\nimport {\r\n canShapeBeAutoShifted,\r\n getIsShapePlacedOnTheFloor,\r\n getIsShapePlacedOnTheWall\r\n} from \"../../../../../helpers/shapeHelper\";\r\nimport {getPointField} from \"../../../../../helpers/sqftHelper\";\r\nimport {LineHandlesModel} from \"../../../store/models/LineHandlesModel\";\r\nimport {getQtCatName} from \"../../../../../helpers/sqftQuotesHelper\";\r\nimport * as uuid from \"uuid\";\r\nimport {getHandleFeatureGroupFromShape} from \"../../../../../helpers/sqftHelperUi\";\r\nimport workspaceControllers from \"../../../store/workspaceControllers\";\r\nimport {getCurrentLayout} from \"../../../../../../appLayout\";\r\nimport {HingesModel} from \"../../../store/models/HingesModel\";\r\n\r\nclass ShapeCabinet {\r\n __shape;\r\n __crownMoldingFeatureId = null;\r\n //__attachedFeatures = new Map();\r\n __crownMoldingParams = {\r\n distance: 10\r\n }\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n }\r\n\r\n import = (data) => {\r\n void data;\r\n // if (data.attachedFeatures) {\r\n // const parsedFeatures = JSON.parse(data.attachedFeatures);\r\n // this.__attachedFeatures = new Map(Object.entries(parsedFeatures));\r\n // }\r\n }\r\n\r\n export = () => {\r\n return {\r\n width: this.getShapeWidth(),\r\n height: this.getShapeHeight(),\r\n depth: this.getShapeDepth(),\r\n //attachedFeatures: JSON.stringify(Object.fromEntries(this.__attachedFeatures)),\r\n }\r\n }\r\n\r\n generateAttachedFeatures = () => {\r\n const { filterGroups } = store.getState().filterState;\r\n const feature = this.__shape.getFeature();\r\n if (feature) {\r\n //for each of the cabinets\r\n for (const filterName of Object.keys(CABINET_FILTER_NAMES)) {\r\n const filterKey = CABINET_FILTER_NAMES[filterName];\r\n let quantity = 0;\r\n if (feature) {\r\n quantity = feature.getFeatureSavedFilterName(filterGroups, filterKey, filterKey);\r\n }\r\n\r\n if (quantity) {\r\n //let features = [];\r\n\r\n // create resource for each quantity\r\n for (let i = 0; i < +quantity; i++) {\r\n if (CABINET_FILTER_NAMES[filterName] === CABINET_FILTER_NAMES.knobs) {\r\n const handlesFeatureGroup = getHandleFeatureGroupFromShape(this.__shape);\r\n if (handlesFeatureGroup && handlesFeatureGroup.activeFeature) {\r\n const handlesFeature = handlesFeatureGroup.activeFeature;\r\n workspaceControllers.handles.addResource(new LineHandlesModel(\r\n null,\r\n handlesFeature.dbFeature.id,\r\n getQtCatName(),\r\n uuid.v4(),\r\n handlesFeatureGroup.partId,\r\n 1)\r\n );\r\n }\r\n }\r\n // const newObject = {\r\n // id: uuidv4(),\r\n // createdAt: new Date(),\r\n // };\r\n // features.push(newObject);\r\n }\r\n\r\n if (CABINET_FILTER_NAMES[filterName] === CABINET_FILTER_NAMES.hinges) {\r\n const layout = getCurrentLayout();\r\n const hingesFeatureGroup = layout.getFeatureGroupByPartId(SQFT_FEATURES.hinge);\r\n if (hingesFeatureGroup) {\r\n const handlesFeature = hingesFeatureGroup.activeFeature ? hingesFeatureGroup.activeFeature : hingesFeatureGroup.features[0]\r\n workspaceControllers.hinge.addResource(new HingesModel(\r\n this.__shape.id,\r\n handlesFeature.dbFeature.id,\r\n getQtCatName(),\r\n uuid.v4(),\r\n hingesFeatureGroup.partId,\r\n +quantity)\r\n );\r\n }\r\n\r\n }\r\n\r\n //this.__attachedFeatures.set(filterName, {features, quantity})\r\n }\r\n }\r\n }\r\n }\r\n\r\n getShapeWidth = () => {\r\n return this.__shape.getWidth(true);\r\n }\r\n\r\n getShapeDepth = () => {\r\n return this.__shape.getDepth(true);\r\n }\r\n\r\n getShapeHeight = () => {\r\n return this.__shape.getHeight(true);\r\n }\r\n\r\n addCrownMolding = () => {\r\n const state = store.getState();\r\n const selectedFeature = state.sqftResourceState.selectedFeature;\r\n this.__crownMoldingFeatureId = selectedFeature ? selectedFeature.part.dbFeature.id : null\r\n console.log(\"this.__crownMoldingFeatureId\", this.__crownMoldingFeatureId);\r\n }\r\n\r\n render = (ctx, staticOffset = null, template= RENDER_TEMPLATES.default) => {\r\n if (workspace && workspace.getState().loading) return;\r\n\r\n const fillTemplate = this.getFillColor(ctx);\r\n this.renderBorders(ctx, staticOffset, template, fillTemplate);\r\n this.renderDimensionsInsideShape(ctx);\r\n RenderParts.drawShapeCrownMoldings(ctx, staticOffset, this.__shape);\r\n RenderParts.drawShapeEndCap(ctx, staticOffset, this.__shape);\r\n this.renderHandles(ctx);\r\n //if (!this.__shape.shapeAbsolute.getAbsolutePosition() && !this.__shape.shapeAbsolute.getSnappedWithShape()) {\r\n if (this.__shape.shapeAbsolute.getSnappedShapeGroup() === null) {\r\n //this.renderCrownMolding(ctx);\r\n this.renderDimensionsOutsideShape(ctx);\r\n }\r\n if (Config.isDevMode()) {\r\n this.renderTestShapeLines(ctx, staticOffset, template);\r\n this.renderShapeSnappedGroup(ctx, staticOffset, template);\r\n }\r\n }\r\n\r\n renderMeasurementArrows = (ctx) => {\r\n const points = this.__shape.getPointsPointField();\r\n RenderFigures.drawArrowsAroundPoints(ctx, points, 10);\r\n }\r\n\r\n renderTestShapeLines = (ctx) => {\r\n if (this.__shape.testShapeLines) {\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.lineWidth = 2;\r\n ctx.strokeStyle = COLORS.gray;\r\n for (const testShapeLine of this.__shape.testShapeLines) {\r\n ctx.moveTo(testShapeLine.from.x, testShapeLine.from.y);\r\n ctx.lineTo(testShapeLine.to.x, testShapeLine.to.y);\r\n }\r\n ctx.stroke();\r\n ctx.closePath();\r\n ctx.restore();\r\n }\r\n }\r\n\r\n renderShapeSnappedGroup = (ctx) => {\r\n // render shape group\r\n let shapeCenter = this.__shape.getCenter();\r\n const pos = getPointField(shapeCenter.x, shapeCenter.y, this.__shape);\r\n const renderText = this.__shape.shapeAbsolute.getSnappedShapeGroup() + \".gr\";\r\n const mText = ctx.measureText(renderText);\r\n ctx.wrapText(renderText, pos.x, pos.y, mText, 22);\r\n }\r\n\r\n renderMeasurementLength = (ctx) => {\r\n const points = this.__shape.getPointsPointField();\r\n RenderParts.drawMeasurementAroundPoints(ctx, points);\r\n }\r\n\r\n renderDimensionsOutsideShape = (ctx) => {\r\n ctx.save();\r\n ctx.beginPath();\r\n this.renderMeasurementArrows(ctx);\r\n this.renderMeasurementLength(ctx);\r\n ctx.closePath();\r\n ctx.restore();\r\n }\r\n\r\n renderDimensionsInsideShape = (ctx) => {\r\n const shapeWidth = this.getShapeWidth();\r\n const shapeHeight = this.getShapeHeight();\r\n const textWidth = 'W: ' + shapeWidth;\r\n const textHeight = 'H: ' + shapeHeight;\r\n const fontSize = config.workspace.fontSizeSmallest;// * config.scale / config.defaultScale;\r\n const font = fontSize + \"px \" + config.activeFontRegular;\r\n const mTextWidth = ctx.measureText(textWidth);\r\n const mTextHeight = ctx.measureText(textWidth);\r\n const {minX, maxX, minY, maxY} = sqftShapeManager.getMinMaxShapePoints(this.__shape,true, true);\r\n void minY;\r\n //middle of the bottom line\r\n let pos = {\r\n x: minX + (maxX - minX) / 2 - mTextWidth.width / 2,\r\n y: maxY - fontSize\r\n };\r\n\r\n // center position\r\n // let shapeCenter = ShapeHelper.getCenterPoint(points);\r\n // let shapeCenterOnField = getPointField(shapeCenter.x, shapeCenter.y, this.__shape);\r\n // let pos = {\r\n // x: shapeCenterOnField.x - mTextWidth.width / 2,\r\n // y: shapeCenterOnField.y\r\n // };\r\n\r\n ctx.textAlign = \"start\";\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].primary_hover;\r\n\r\n const lineHeight = config.workspace.fontSizeSmallest;\r\n ctx.wrapText(textWidth, pos.x, pos.y - (fontSize / 2), mTextWidth, lineHeight, font);\r\n ctx.wrapText(textHeight, pos.x + 2, pos.y + (fontSize / 2), mTextHeight, lineHeight, font);\r\n }\r\n\r\n getFillColor = () => {\r\n // highlight shape on eyeball click\r\n if (this.__shape.shapeRender.blink.isHighlightedLightOn) {\r\n return RENDER_TEMPLATES.filledActive;\r\n } else {\r\n return RENDER_TEMPLATES.filledPrimary;\r\n }\r\n }\r\n\r\n renderBorders = (ctx,\r\n staticOffset = null,\r\n strokeTemplate= RENDER_TEMPLATES.default,\r\n fillTemplate = RENDER_TEMPLATES.filledPrimary\r\n ) => {\r\n RenderParts.drawShapeBorders(ctx, staticOffset, strokeTemplate, fillTemplate, this.__shape);\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.handles\r\n || activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.spacer\r\n || activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.crown\r\n || activeButton === SIDEBAR_NAVIGATION_BUTTONS.end_cap\r\n || activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.end_panel\r\n || activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.resize\r\n || activeButton === SIDEBAR_BUTTONS_MENU.delete\r\n ) {\r\n RenderParts.drawHoveredBorders(ctx, staticOffset, this.__shape);\r\n\r\n // Highlight possibility to insert shape between lines\r\n } else if (activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.upper\r\n || activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.lower\r\n || activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.tall\r\n || workspace.getMovingShape()\r\n ) {\r\n const movingShape = workspace.getMovingShape();\r\n const isTestShapePlacedOnTheFloor = getIsShapePlacedOnTheFloor(this.__shape);\r\n const isTestShapePlacedOnTheWall = getIsShapePlacedOnTheWall(this.__shape);\r\n //1. Highlight moving shape if their part ids are equal\r\n //2. Highlight upper shapes if we are dragging new upper cabinet shape\r\n //3. Highlight lower shapes if we are dragging new lower cabinet shape\r\n //4. Highlight lower shapes if we are dragging new tall cabinet shape\r\n if ((movingShape && canShapeBeAutoShifted(workspace.getMovingShape(), this.__shape))\r\n || (activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.upper && isTestShapePlacedOnTheWall)\r\n || (activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.lower && isTestShapePlacedOnTheFloor)\r\n || (activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.tall && isTestShapePlacedOnTheFloor)\r\n ) {\r\n const style = {\r\n lineWidth: 4,\r\n strokeStyle: COLOR.red,\r\n shadowBlur: 2,\r\n extendHoveredLine: 5\r\n };\r\n RenderParts.drawHoveredBorders(ctx, staticOffset, this.__shape, style);\r\n }\r\n }\r\n };\r\n\r\n renderHandles = (ctx) => {\r\n RenderParts.drawHandles(ctx, this.__shape)\r\n };\r\n\r\n getCrownMoldingPoints = () => {\r\n const points = this.__shape.getPointsPointField();\r\n\r\n return RenderCabinets.getDiagonalPointsForTheSquare(points, this.__crownMoldingParams.distance)\r\n }\r\n\r\n // renderCrownMolding = (ctx) => {\r\n // if (this.__crownMoldingFeatureId) {\r\n // const crownMoldingPoints = this.getCrownMoldingPoints();\r\n // RenderCabinets.renderCrownMolding(ctx, crownMoldingPoints);\r\n // }\r\n // };\r\n}\r\n\r\nexport default ShapeCabinet\r\n","import * as uuid from \"uuid\";\r\nimport {getQtCatName} from \"../../../../helpers/sqftQuotesHelper\";\r\n\r\nexport class LineHandlesModel {\r\n lineId;\r\n id;\r\n featureId;\r\n qtCatName;\r\n partId;\r\n\r\n constructor(lineId, featureId, qtCatName = null, id = uuid.v4(), partId = null, quantity = 1) {\r\n this.id = id;\r\n this.lineId = lineId;\r\n this.featureId = featureId;\r\n this.qtCatName = qtCatName ? qtCatName : getQtCatName();\r\n this.partId = partId;\r\n this.quantity = quantity;\r\n }\r\n}\r\n","import * as uuid from \"uuid\";\r\nimport {getQtCatName} from \"../../../../helpers/sqftQuotesHelper\";\r\n\r\nexport class HingesModel {\r\n id;\r\n shapeId\r\n featureId;\r\n qtCatName;\r\n partId;\r\n\r\n constructor(shapeId, featureId, qtCatName = null, id = uuid.v4(), partId = null, quantity = 1) {\r\n this.id = id;\r\n this.lineId = shapeId;\r\n this.featureId = featureId;\r\n this.qtCatName = qtCatName ? qtCatName : getQtCatName();\r\n this.partId = partId;\r\n this.quantity = quantity;\r\n }\r\n}\r\n","import {renderErrorPopup} from \"../../../../../api/api-popups\";\r\nimport workspace from \"../core/workspace\";\r\nimport sqftShape from \"../core/shapes/sqftShape\";\r\nimport sqftShapeManager from \"../store/sqftShapeManager\";\r\n\r\nexport const renderResetSeamPopup = (shape) => {\r\n if (shape instanceof sqftShape) {\r\n shape.setResetSlabModePopupWasDisplayed(true);\r\n sqftShapeManager.resetShapeChangesInTheSlabMode(shape);\r\n\r\n //state.mouseDown = false;\r\n //state.mouseDownPosition = null;\r\n shape.setIsPointsMovable(false);\r\n }\r\n renderErrorPopup(workspace.intl.formatMessage({id: \"sqft.popup.slab.resetChangesMessage\"}))\r\n}\r\n\r\nexport const shouldResetSlabModePopupOnPointMoveBeDisplayed = (shape) => {\r\n if (shape instanceof sqftShape\r\n && (shape.isWithShapePieces()) //|| SlabWorkspace.slabAdditionalShapes.getShapeAdditionalShapes(shape).length > 0\r\n ) {\r\n return !shape.getResetSlabModePopupWasDisplayed();\r\n }\r\n\r\n return false;\r\n}\r\n","export default class BlinkingHighlight {\r\n isHighlighted = false;\r\n isHighlightedLightOn = false;\r\n timer = true;\r\n highliteBlinkTime = 400;\r\n highliteBlinkTimeTotal = 2400;\r\n\r\n constructor() {\r\n }\r\n\r\n setHighlighting = (value) => {\r\n if (!this.isHighlighted && value) {\r\n this.startHighlightingLoop();\r\n } else if (this.isHighlighted && !value) {\r\n this.stopHighlightingLoop();\r\n }\r\n this.isHighlighted = value;\r\n setTimeout( () => {\r\n document.addEventListener(\"click\", this.stopHighlightingLoop)\r\n }, 50);\r\n setTimeout( () => {\r\n this.stopHighlightingLoop();\r\n }, this.highliteBlinkTimeTotal);\r\n };\r\n\r\n startHighlightingLoop = () => {\r\n this.isHighlightedLightOn = true;\r\n setTimeout( () => {\r\n this.isHighlightedLightOn = false\r\n }, this.highliteBlinkTime);\r\n this.timer = setTimeout( () => {\r\n this.startHighlightingLoop();\r\n }, this.highliteBlinkTime * 2);\r\n }\r\n\r\n stopHighlightingLoop = () => {\r\n clearTimeout(this.timer);\r\n this.isHighlighted = false;\r\n //this.isHighlightedLightOn = false; // this will be done in startHighlightingLoop\r\n document.removeEventListener(\"click\", this.stopHighlightingLoop);\r\n }\r\n}\r\n","import isEmpty from \"lodash/isEmpty\";\r\n\r\nimport {getCommonVisualizerType} from \"../../config\";\r\nimport store from \"../../store\";\r\nimport {dbFeatureFilterProperties, dbFeatureRelatedFeaturesProperties, otherMissingProperties} from \"./constants\";\r\n\r\n\r\n/**\r\n * Checks whether to show room feature as in visualizer in the navigation\r\n * @param feature {featureInterface}\r\n * @returns {featureInterface}\r\n */\r\nexport const setRoomNotInVisualizerProperty = (feature) => {\r\n const fabricatorSubscriptions = store.getState().fabricatorState.fabricatorSubscriptions;\r\n if (!feature || !feature.dbFeature || !feature.dbFeature.sharedFeatureName) {\r\n return feature\r\n }\r\n const name = feature.dbFeature.sharedFeatureName.toLowerCase();\r\n const visType = getCommonVisualizerType();\r\n if (name === visType) {\r\n feature.notAvailableInVisualizer = false;\r\n feature.dbFeature.unlocked = true;\r\n return feature\r\n }\r\n if (!Array.isArray(fabricatorSubscriptions)) {\r\n return feature\r\n }\r\n const subscription = fabricatorSubscriptions.find(subscr => subscr.service.toLowerCase() === name);\r\n if (subscription) {\r\n feature.notAvailableInVisualizer = false;\r\n feature.dbFeature.unlocked = true;\r\n if (subscription.thumbnail) {\r\n feature.customThumbnail = subscription.thumbnail\r\n }\r\n }\r\n return feature\r\n}\r\n\r\n/**\r\n * updates existing dbFeature\r\n * @param dbFeature {dbFeatureInterface} // new\r\n * @param existingDbFeature {dbFeatureInterface} // old (existing)\r\n * @param layout {object} // layout\r\n */\r\nexport const updateExistingFeature = (dbFeature, existingDbFeature, layout) => {\r\n if (!existingDbFeature[\"relatedFeatureIds\"] && Array.isArray(dbFeature[\"relatedFeatureIds\"])) {\r\n existingDbFeature[\"relatedFeatureIds\"] = dbFeature[\"relatedFeatureIds\"];\r\n }\r\n // loadRelatedFeatures(dbFeature, layout);\r\n dbFeatureRelatedFeaturesProperties.forEach(property => {\r\n if (!existingDbFeature[property] && Array.isArray(dbFeature[property])) {\r\n existingDbFeature[property] = dbFeature[property];\r\n const parentGroups = layout.getFeatures(true);\r\n dbFeature[property].forEach(dbFeature => {\r\n layout.loadDbFeature(dbFeature, parentGroups)\r\n })\r\n }\r\n })\r\n if ((!Array.isArray(existingDbFeature.stonePricingId) || !existingDbFeature.stonePricingId.length || existingDbFeature.stonePricingId[0] === -1)\r\n && (Array.isArray(dbFeature.stonePricingId) && dbFeature.stonePricingId.length && dbFeature.stonePricingId[0] !== -1)) {\r\n existingDbFeature.stonePricingId = dbFeature.stonePricingId\r\n }\r\n dbFeatureFilterProperties.forEach((key) => {\r\n if ((!existingDbFeature[key] || isEmpty(existingDbFeature[key])) && dbFeature[key] && !isEmpty(dbFeature[key])) {\r\n existingDbFeature[key] = dbFeature[key];\r\n dbFeature.wasUpdatedFromAnotherResponse = true; // to erase ._customDisplayName, because we need filters to create it again!\r\n existingDbFeature.wasUpdatedFromAnotherResponse = true; // to erase ._customDisplayName, because we need filters to create it again!\r\n }\r\n });\r\n otherMissingProperties.forEach((key) => {\r\n if ((!existingDbFeature[key] || isEmpty(existingDbFeature[key])) && dbFeature[key] && !isEmpty(dbFeature[key])) {\r\n existingDbFeature[key] = dbFeature[key];\r\n }\r\n });\r\n if (dbFeature.markUpString) {\r\n existingDbFeature.markUpString = dbFeature.markUpString;\r\n existingDbFeature.price = dbFeature.price;\r\n existingDbFeature.cost = dbFeature.cost;\r\n existingDbFeature.discount = dbFeature.discount;\r\n existingDbFeature.shippingCost = dbFeature.shippingCost;\r\n }\r\n}\r\n\r\n\r\nexport const loadRelatedFeatures = (dbFeature, layout) => {\r\n if (!Array.isArray(dbFeature.relatedFeatureIds) || !dbFeature.relatedFeatureIds.length) {\r\n return\r\n }\r\n dbFeature.relatedFeatureIds.forEach(relFeatureId => {\r\n if (!dbFeature.relatedFeatures) {\r\n dbFeature.relatedFeatures = [];\r\n }\r\n if (dbFeature.relatedFeatures.some(relFeature => relFeature.id === relFeatureId)) {\r\n return // already loaded\r\n }\r\n let loadedDbFeature = null;\r\n for (let i = 0; i < layout.allDbFeatures.length; i++) {\r\n if (layout.allDbFeatures[i].id === relFeatureId) {\r\n loadedDbFeature = layout.allDbFeatures[i];\r\n break;\r\n }\r\n }\r\n if (loadedDbFeature) {\r\n dbFeature.relatedFeatures.push(loadedDbFeature);\r\n } else {\r\n console.log(\"related feature wasn't loaded\"); // it it fires - then something is wrong, we should load related before main features\r\n }\r\n })\r\n // console.log(\"dbFeature.relatedFeatures\", dbFeature.relatedFeatures);\r\n}\r\n","export const getFeatureCropCoors = (feature) => {\r\n if (!feature.metaData[\"CropCoords\"]) {\r\n return null\r\n }\r\n if (!feature.metaData[\"ParsedCropCoords\"]) {\r\n if ((feature.metaData[\"CropCoords\"].length === 1) && (typeof feature.metaData[\"CropCoords\"][0] === \"string\")) {\r\n if (feature.metaData[\"CropCoords\"][0].includes(\", \")) {\r\n feature.metaData[\"ParsedCropCoords\"] = feature.metaData[\"CropCoords\"][0].split(\", \").map(coor => +coor)\r\n } else if (feature.metaData[\"CropCoords\"][0].includes(\",\")) {\r\n feature.metaData[\"ParsedCropCoords\"] = feature.metaData[\"CropCoords\"][0].split(\",\").map(coor => +coor)\r\n }\r\n } else {\r\n feature.metaData[\"ParsedCropCoords\"] = feature.metaData[\"CropCoords\"];\r\n }\r\n }\r\n return feature.metaData[\"ParsedCropCoords\"]\r\n}\r\n","import {LayoutAbbreviation, LayoutType} from \"./constants\";\r\nimport {UseFullSizeImages} from \"../../../config\";\r\n\r\nlet layouts = {};\r\nObject.keys(LayoutType).forEach(layoutName => {\r\n layouts[layoutName] = {\r\n Background: {\r\n ShowerWall: 50100,\r\n CenterWall: 50300,\r\n BackWall: 50600,\r\n Floor: 50700,\r\n BackgroundBG: 50800,\r\n },\r\n ShowerWallAccent: 1000,\r\n Window: {\r\n WindowBody: 45000,\r\n WindowKits: 1100\r\n },\r\n Accessories: {\r\n LargeCornerCaddie: 2010,\r\n LargeCornerCaddie2: 2020,\r\n Fixture: 2100,\r\n LargeCornerSeat: 2310,\r\n LargeCornerSeat2: 2320,\r\n CornerCaddie: 2410,\r\n CornerCaddie2: 2420,\r\n SoapDish: 2500,\r\n SoapDish2: 2510,\r\n SmallCornerShelf: 2600,\r\n GrabBar: 2700,\r\n GrabBar2: 2710,\r\n CornerShelf1: 2810,\r\n CornerShelf2: 2820,\r\n CornerShelf3: 2830,\r\n CornerShelf4: 2840,\r\n CornerShelf5: 2850,\r\n CornerShelf6: 2860,\r\n ShowerPod: 2900,\r\n Seats: 2950,\r\n ShowerRod: 4200,\r\n },\r\n Shower: {\r\n ShowerPan: 3200,\r\n ShowerFixture: 3410,\r\n ShowerFixture2: 3420,\r\n ShowerDoorHandle: 3600,\r\n // Threshold\r\n TubCombo: {\r\n WallConfiguration: 3600,\r\n Liner: 3700,\r\n WalkInTub: 3900,\r\n JettedTub: 4000,\r\n },\r\n },\r\n Walls: {\r\n LeftWall: 40120,\r\n },\r\n Globals: {\r\n ToiletPaper: 8000,\r\n ToiletPaperHolder: 8050,\r\n Towel: 8100,\r\n LightFixture: 8200,\r\n LampFixture: 8250,\r\n DecorWindow: 8300,\r\n DecorSeat: 8400,\r\n },\r\n Bathtub: {\r\n BathTubFixture: 9000,\r\n BathTubBody: 9100,\r\n },\r\n decor: 11111,\r\n skirting_board: 2500,\r\n shower_curb: 3000,\r\n bathtub_body: 5304,\r\n bathtub_fixture: 5300,\r\n window: 45000,\r\n vanity_cabinet: 6100,\r\n vanity_countertop: 6000,\r\n shower_arm: 7315,\r\n shower_head_bundle: 7456,\r\n split_wall: 7000,\r\n towel_bar: 2617,\r\n towel_ring: 2615,\r\n shower_glass: 3549,\r\n grab_bar: 2700,\r\n robe_hook: 5059,\r\n vanity_handle: 5200,\r\n vanity_backsplash: 5500,\r\n vanity_mirror: 5600,\r\n vanity_faucet: 5700,\r\n vanity_sink: 5800,\r\n shower_pan_combo: 6743,\r\n window_body: 7301,\r\n toilet_brush: 9816,\r\n toilet: 9960,\r\n paper_holder: 10004,\r\n shower_wall: 40020,\r\n left_wall_splitter: 40000,\r\n left_wall_crop: 40150,\r\n right_wall_crop: 48030,\r\n front_wall_crop: 49075,\r\n walls_ceiling: 50900,\r\n shower_wall_mirror: 50050,\r\n back_wall: 50100,\r\n front_wall: 50200,\r\n left_wall: 50500,\r\n right_wall: 54000,\r\n };\r\n});\r\n\r\n\r\nconst getLayerDimensions = (layer, currentLayout, canvasDimensions) => {\r\n const fullImagesFactor = UseFullSizeImages ? 177.77 : 100;\r\n const sizeFactor = fullImagesFactor / 100;\r\n\r\n if (layer.coords) {\r\n const COORDS_MAX = 1;\r\n\r\n const x1Percentage = (layer.coords.min_x * 100) / COORDS_MAX;\r\n const x2Percentage = (layer.coords.max_x * 100) / COORDS_MAX;\r\n const y1Percentage = (layer.coords.min_y * 100) / COORDS_MAX;\r\n const y2Percentage = (layer.coords.max_y * 100) / COORDS_MAX;\r\n let x1 = sizeFactor*((canvasDimensions.width * x1Percentage) / 100);\r\n let x2 = sizeFactor*((canvasDimensions.width * x2Percentage) / 100);\r\n let y1 = sizeFactor*((canvasDimensions.height * y1Percentage) / 100);\r\n let y2 = sizeFactor*((canvasDimensions.height * y2Percentage) / 100);\r\n\r\n return {\r\n polygonArray: [[x1, y1], [x2, y1], [x2, y2], [x1, y2]],\r\n width: (x2 - x1),\r\n height:(y2 - y1)\r\n };\r\n }\r\n\r\n // console.log(\"layer without coords\", layer);\r\n\r\n const {zIndex} = layer;\r\n switch (zIndex) {\r\n // case layouts[currentLayout].Background.ShowerWall:\r\n // return {\r\n // polygonArray: [[sizeFactor*350,sizeFactor*50],[sizeFactor*950,sizeFactor*50],[sizeFactor*950,sizeFactor*930],[sizeFactor*350,sizeFactor*930]],\r\n // width: sizeFactor*600,\r\n // height: sizeFactor*900\r\n // };\r\n case layouts[currentLayout].Walls.CenterWall:\r\n case layouts[currentLayout].Background.CenterWall: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return null;\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*360,0],[sizeFactor*760,0],[sizeFactor*760,sizeFactor*880],[sizeFactor*360,sizeFactor*880]],\r\n width: sizeFactor*400,\r\n height: sizeFactor*880\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Walls.RightWall:\r\n case layouts[currentLayout].Background.RightWall: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*750,0],[sizeFactor*1920,0],[sizeFactor*1920,sizeFactor*1080],[sizeFactor*750,sizeFactor*1080]],\r\n width: sizeFactor*1170,\r\n height: sizeFactor*1080\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*120,0],[sizeFactor*1920,0],[sizeFactor*1920,sizeFactor*930],[sizeFactor*120,sizeFactor*930]],\r\n width: sizeFactor*1900,\r\n height: sizeFactor*930\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Walls.LeftWall:\r\n case layouts[currentLayout].Background.LeftWall: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[0,0],[sizeFactor*600,0],[sizeFactor*600,sizeFactor*1080],[0,sizeFactor*1080]],\r\n width: sizeFactor*600,\r\n height: sizeFactor*1080\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[0,0],[sizeFactor*600,0],[sizeFactor*600,sizeFactor*1080],[0,sizeFactor*1080]],\r\n width: sizeFactor*600,\r\n height: sizeFactor*1080\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Background.Floor: {\r\n switch (currentLayout) {\r\n default: {\r\n // case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[0,sizeFactor*600],[sizeFactor*1920,sizeFactor*600],[sizeFactor*1920,sizeFactor*1080],[0,sizeFactor*1080]],\r\n width: sizeFactor*1920,\r\n height: sizeFactor*480\r\n };\r\n }\r\n }\r\n }\r\n case layouts[currentLayout].Background.ShowerWall:\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*350,0],[sizeFactor*1650,0],[sizeFactor*1650,sizeFactor*930],[sizeFactor*350,sizeFactor*930]],\r\n width: sizeFactor*1300,\r\n height: sizeFactor*930\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*250,0],[sizeFactor*1250,0],[sizeFactor*1250,sizeFactor*930],[sizeFactor*250,sizeFactor*930]],\r\n width: sizeFactor*1000,\r\n height: sizeFactor*930\r\n };\r\n }\r\n }\r\n return null;\r\n default:\r\n return null\r\n }\r\n};\r\n\r\nexport default {\r\n layouts,\r\n getLayerDimensions\r\n}\r\n\r\n\r\n","import {IntermediatePart} from \"../intermediatePart\";\r\nexport default class NonVisualizerSubPart extends IntermediatePart {\r\n constructor(isChild, partId, partName) {\r\n super(isChild);\r\n this.partId = partId;\r\n this.visible = true;\r\n this.partName = partName;\r\n // this.allFeaturesReceived = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new NonVisualizerSubPart(false, this.partId, dbFeature.groupName));\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationNoMetaSubItems(filters, searchText)\r\n }\r\n}\r\n","import {Part} from \"../part\";\r\nimport {toiletThumbnail} from '../../../bvComponent/core/assets';\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\nimport {removeLookPointFor} from \"../../lookNavigation/lookFunctions2\";\r\nimport {getCurrentRoomType} from \"../../../appLayout\";\r\nimport {LOOK_ROOM_TYPES} from \"../constants\";\r\n\r\nexport class Toilet extends Part {\r\n static id = 'Toilet';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Toilet';\r\n this.translateId = \"visualizer.bathroom.toilet\";\r\n this.homePageTitle = 'Toilets';\r\n this.partThumbnail = toiletThumbnail;\r\n this.toilet = null;\r\n this.relatedGroupNames = [\"Toilet\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n if (dbFeature.groupName === \"Toilet\") {\r\n if (!this.toilet) {\r\n this.toilet = new ToiletBody(true);\r\n this.relatedItems.push(this.toilet);\r\n this.toilet.getParent = () => this;\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n if (loadFeature) {\r\n this.toilet.load(dbFeature);\r\n }\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts() {\r\n return this.relatedItems.map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n return this.subParts()[0]\r\n }\r\n\r\n setDefault(layout) {\r\n this.relatedItems.forEach(_ => _.setDefault(layout));\r\n }\r\n}\r\n\r\nclass ToiletBody extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'toilet';\r\n this.partName = 'Toilet';\r\n this.translateId = \"visualizer.bathroom.toilet\";\r\n this.homePageTitle = 'Toilets';\r\n this.canBeDisabled = true;\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // let conditions = super.getArrayOfConditions(); //roomLayout\r\n // const layout = this.getParent().layout;\r\n // const showerParent = layout.parts[Shower.id];\r\n // const showerSize = showerParent.showerSize();\r\n // if (showerParent && showerSize && !IS_BATHROOM_OLD_BV_SCENE) {\r\n // conditions.push({\r\n // propName: \"ShowerSize\",\r\n // propValue: showerSize\r\n // });\r\n // }\r\n // return conditions\r\n // }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n return removeLookPointFor(parentObject, 6, \"1\")\r\n }\r\n return true\r\n }\r\n}\r\n\r\n\r\n","import {getMissingFeaturesAndClickThem} from \"./lookNavigation/lookNavigationFunctions\";\r\n\r\nexport const featureCanChangeShowerSize = (feature) => {\r\n if (!feature) {\r\n return false\r\n }\r\n return feature.partId === \"shower_pan_combo\" || feature.partId === \"walk_in_tub\" || feature.partId === \"shower_body\"\r\n}\r\n\r\nconst neededFeatureGroupsToCheckOnShowerSizeChange = document.kvConfig.toolVersion === 5\r\n ? [\"shower_pan_combo\", \"shower_interior_wall\", \"left_wall\", \"right_wall\", \"bathroom_floor\", \"shower_fixture\"]\r\n : [\"shower_wall\", \"split_wall\", \"left_wall_splitter\", \"bathroom_floor\", \"front_wall\", \"shower_fixture\"];\r\n\r\n/**\r\n * Checks needed features on ShowerSize change\r\n * @param clickedFeature {object}\r\n * @returns {promise}\r\n */\r\nexport const searchForSameNameWallsBeforeFeatureApply = async (clickedFeature) => {\r\n if (!clickedFeature.getParent) {\r\n return\r\n }\r\n const showerPanComboParent = clickedFeature.getParent();\r\n if (clickedFeature.metaData[\"ShowerSize\"] && clickedFeature.metaData[\"ShowerSize\"][0] && showerPanComboParent.activeFeature\r\n && showerPanComboParent.activeFeature.metaData[\"ShowerSize\"]\r\n && (showerPanComboParent.activeFeature.metaData[\"ShowerSize\"][0] !== clickedFeature.metaData[\"ShowerSize\"][0])) {\r\n\r\n const showerParent = showerPanComboParent.getParent();\r\n const layout = showerParent.layout;\r\n\r\n let missingFeatures = [];\r\n const newSizeCondition = {\r\n propName: \"ShowerSize\",\r\n propValue: clickedFeature.metaData[\"ShowerSize\"][0]\r\n };\r\n neededFeatureGroupsToCheckOnShowerSizeChange.forEach((partId) => {\r\n const featureGroup = layout.getFeatureGroupByPartId(partId);\r\n if (featureGroup && featureGroup.activeFeature && !featureGroup.activeFeature.matchesMetaForCondition(newSizeCondition)) {\r\n const navigationItemName = featureGroup.activeFeature.getSplittedFeatureName();\r\n const newConditions = featureGroup.getArrayOfConditions().map(condition => {\r\n if (condition.propName === \"ShowerSize\") {\r\n return newSizeCondition\r\n }\r\n return condition\r\n });\r\n const featureFound = featureGroup.features.find(feature => {\r\n return (feature.getSplittedFeatureName() === navigationItemName) && feature.matchesMetaForArrayOfConditions(newConditions)\r\n });\r\n if (!featureFound &&\r\n !(featureGroup && featureGroup.alreadyRequestedFeatureNames && featureGroup.alreadyRequestedFeatureNames.includes(navigationItemName))) {\r\n missingFeatures.push({\r\n relatedItem: featureGroup,\r\n navigationItemName,\r\n setCurrentFeature: false\r\n })\r\n }\r\n }\r\n });\r\n if (missingFeatures.length) {\r\n await getMissingFeaturesAndClickThem(missingFeatures, true)\r\n }\r\n }\r\n\r\n return Promise.resolve();\r\n}\r\n","import workspace from \"../workspace\";\r\nimport Box from \"./textBox/box\";\r\nimport IText from \"./textBox/iText\";\r\n\r\nexport default class TextBox {\r\n // holds all our labels\r\n _posOnField = {};\r\n _placeholder = '';\r\n _design = {\r\n width: 50,\r\n height: 20,\r\n fillStyle: 'rgba(255,255,255, 0.7)', // transparent\r\n };\r\n box = null;\r\n text = null;\r\n\r\n //Initialize a new Box, add it, and invalidate the canvas\r\n addRect() {\r\n this.box = new Box(this._posOnField, this._design);\r\n this.text = new IText(this._placeholder, 'playregular', 0, 0, 100, 25, 0, this.box);\r\n }\r\n\r\n constructor(posOnField, placeholder, design) {\r\n this._posOnField = posOnField;\r\n this._placeholder = placeholder ? placeholder : this._placeholder;\r\n this._design = design ? design : this._design;\r\n }\r\n\r\n init() {\r\n this.addRect(this._design);\r\n workspace.textBoxManager.addTextBox(this);\r\n }\r\n\r\n deregisterEvents = () => {\r\n this.box.deregisterEvents();\r\n this.text.deregisterEvents();\r\n }\r\n\r\n reInitEvents = () => {\r\n this.box.reInitEvents();\r\n this.text.reInitEvents();\r\n }\r\n\r\n export() {\r\n return {\r\n posOnField: {\r\n x: this.box.posX,\r\n y: this.box.posY,\r\n },\r\n placeholder: this.text.modelText.txt,\r\n design: this.box.design\r\n }\r\n }\r\n\r\n import() {\r\n\r\n }\r\n}\r\n\r\n\r\n","import uniqBy from \"lodash/uniqBy\";\r\n\r\nimport * as types from '../actions/actionTypes';\r\nimport {isSameVisualizerWizard} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\nimport {getCommonVisualizerType, IS_LIXIL_UI} from \"../config\";\r\n\r\nconst initialState = {\r\n wizardIsActive: false, // is used on the materials page instead of the quotingtool\r\n wizardIsActiveObject: [], // is used for visualizer switching {\"kvScene\": false, \"bvLook\": true}\r\n wizardConfig: [], // arrayOf wizardObjectInterface // this is not used for now, it is a regular quoting tool filters wizard\r\n// {\r\n// id: 1,\r\n// name: \"Count wiz\",\r\n// description: \"some desc\",\r\n// enableForVisualizer: false,\r\n// enableForQuoting: true,\r\n// featureGroupName: \"Countertop\", // empty input case\r\n// isFinished: false, // frontend property\r\n// filterGroups: [\r\n// {\r\n// id: 43,\r\n// name: \"Countertop Material\",\r\n// type: \"Single\",\r\n// values: [],\r\n// visualType: \"ListWithCheckBoxes\"\r\n// },\r\n// {\r\n// id: 35,\r\n// name: \"Manufacturer \",\r\n// type: \"Single\",\r\n// values: [],\r\n// visualType: \"ImageList\",\r\n// },\r\n// {\r\n// id: 15,\r\n// name: \"Stone Color\",\r\n// type: \"Single\",\r\n// values: [],\r\n// visualType: \"ColorsWithColumns\"\r\n// },\r\n// ]\r\n// }\r\n // wizardActiveFilterGroupIndex: 0\r\n wizardList: [],\r\n wizardActiveItem: null,\r\n // wizardActiveStep: 0, // was -1 do not show the welcome screen on QKB and Lixil too\r\n wizardActiveStep: IS_LIXIL_UI ? -1 : 0, // do not show the welcome screen on QKB // reverted per solid surface request\r\n wizardSelectedValues: {},\r\n allWizardsValues: [], // [wizardAllObjectInterface]\r\n wizardShowFeatureSection: null,\r\n wizardMissingFeatures: {}, // \"groupName\": [\"string1\", \"string2\", ...]\r\n wizardWasRestored: false, // for complete popup\r\n wizardConflictingSteps: [], // we need to show the flow was changed popup, {wizardConflictingObjectInterface}\r\n wizardConflictPopupOpened: false,\r\n wizardSqftCartItems: [], // we can't set cart items directly, but we need to set them in wizard\r\n};\r\n\r\nexport const getUpdatedAllWizardValues = (state, quoteIndex, wizardItemId, wizardSelectedValues) => {\r\n const newWizObject = {\r\n quoteIndex,\r\n wizardItemId,\r\n lastVisitedStep: state.wizardActiveStep,\r\n visualizer: getCommonVisualizerType(),\r\n wizardSelectedValues: Object.assign({}, wizardSelectedValues)\r\n };\r\n const existingIndex = state.allWizardsValues.findIndex(wizSelObject => {\r\n return wizSelObject.wizardItemId === newWizObject.wizardItemId\r\n && (wizSelObject.quoteIndex === newWizObject.quoteIndex) && isSameVisualizerWizard(wizSelObject)\r\n });\r\n existingIndex > -1\r\n ? state.allWizardsValues.splice(existingIndex, 1, newWizObject)\r\n : state.allWizardsValues.push(newWizObject);\r\n\r\n state.allWizardsValues = state.allWizardsValues.map(wizObject => {\r\n if (wizObject.quoteIndex === quoteIndex && isSameVisualizerWizard(wizObject)) {\r\n wizObject.isLastActiveWizard = wizObject.wizardItemId === wizardItemId // to return back and force correctly\r\n }\r\n return wizObject\r\n });\r\n\r\n return [...state.allWizardsValues]\r\n}\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.SET_WIZARD_IS_ACTIVE: {\r\n const newState = Object.assign({}, state, {wizardIsActive: action.payload.wizardIsActive});\r\n if (action.payload.visualizerType && !state.wizardIsActiveObject[action.payload.visualizerType]) {\r\n newState.wizardIsActiveObject = {\r\n ...state.wizardIsActiveObject,\r\n [action.payload.visualizerType]: action.payload.wizardIsActive\r\n }\r\n }\r\n return newState;\r\n }\r\n case types.SET_WIZARD_ACTIVE_FILTER_GROUP_INDEX: // NOT USED!\r\n case types.SET_WIZARD_CONFIG:\r\n case types.SET_WIZARD_SHOW_FEATURE_SECTION:\r\n case types.RESTORE_ALL_WIZARD_SELECTED_VALUES:\r\n case types.SET_WIZARD_CONFLICT_POPUP_OPENED:\r\n case types.SET_WIZARD_SQFT_CART_ITEMS:\r\n case types.SET_WIZARD_CONFLICT_STEPS:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_WIZARD_LIST:\r\n return Object.assign({}, state, {\r\n wizardList: uniqBy([...state.wizardList, ...action.payload.wizardList], wizItem => wizItem.id)\r\n });\r\n case types.SET_WIZARD_ACTIVE_ITEM:\r\n if (action.payload.wizardActiveItem) {\r\n const alreadySelectedWizard = state.allWizardsValues.find(wizard => {\r\n return wizard.wizardItemId === action.payload.wizardActiveItem.id && (wizard.quoteIndex === action.payload.quoteIndex)\r\n });\r\n if (alreadySelectedWizard) {\r\n action.payload.wizardSelectedValues = Object.assign({}, alreadySelectedWizard.wizardSelectedValues); // restore added data\r\n action.payload.wizardActiveStep = Number.isInteger(alreadySelectedWizard.lastVisitedStep)\r\n ? alreadySelectedWizard.lastVisitedStep // restore last step\r\n : Object.keys(alreadySelectedWizard.wizardSelectedValues).length // restore last step (just in case lastVisitedStep is missing)\r\n action.payload.wizardWasRestored = true // for complete popup\r\n } else if ((state.wizardActiveStep === -1) && action.payload.wizardActiveItem.skipStartStep) {\r\n action.payload.wizardActiveStep = 0;\r\n }\r\n action.payload.allWizardsValues = state.allWizardsValues.map(wizObject => {\r\n if (wizObject.quoteIndex === action.payload.quoteIndex && isSameVisualizerWizard(wizObject)) {\r\n wizObject.isLastActiveWizard = wizObject.wizardItemId === action.payload.wizardActiveItem.id // to return back and force correctly\r\n }\r\n return wizObject\r\n })\r\n }\r\n return Object.assign({}, state, {\r\n ...action.payload,\r\n });\r\n case types.SET_WIZARD_ACTIVE_STEP: {\r\n return Object.assign({}, state, {\r\n wizardActiveStep: action.payload.wizardActiveStep,\r\n wizardSelectedValues: action.payload.wizardSelectedValues,\r\n wizardConflictingSteps: action.payload.wizardConflictingSteps,\r\n wizardWasRestored: false,\r\n });\r\n }\r\n case types.SET_WIZARD_SELECTED_VALUES: {\r\n if (action.payload.allWizardsValues) {\r\n return Object.assign({}, state, {\r\n allWizardsValues: action.payload.allWizardsValues,\r\n wizardSelectedValues: action.payload.wizardSelectedValues,\r\n wizardConflictingSteps: action.payload.wizardConflictingSteps\r\n });\r\n }\r\n return Object.assign({}, state, {\r\n wizardSelectedValues: action.payload.wizardSelectedValues,\r\n wizardConflictingSteps: action.payload.wizardConflictingSteps\r\n });\r\n }\r\n case types.SET_WIZARD_MISSING_FEATURES: {\r\n const wizardMissingFeatures = {\r\n ...state.wizardMissingFeatures,\r\n [action.payload.groupName]: action.payload.wizardMissingFeatures\r\n }\r\n return Object.assign({}, state, {wizardMissingFeatures});\r\n }\r\n case types.SET_ALL_WIZARD_SELECTED_VALUES: {\r\n const {wizardSelectedValues, quoteIndex, wizardItemId} = action.payload;\r\n const existingAllObject = state.allWizardsValues.find(wizSelObject => {\r\n return wizSelObject.wizardItemId === wizardItemId && wizSelObject.quoteIndex === quoteIndex\r\n });\r\n const existingValues = existingAllObject ? existingAllObject.wizardSelectedValues : {};\r\n const updatedValues = Object.assign({}, existingValues, wizardSelectedValues)\r\n const allWizardsValues = getUpdatedAllWizardValues(state, quoteIndex, wizardItemId, updatedValues);\r\n return Object.assign({}, state, {allWizardsValues});\r\n }\r\n case types.SET_LOOK_OPENED:\r\n if (!action.payload.lookOpened && state.wizardActiveItem) {\r\n return Object.assign({}, state, { wizardActiveItem: null });\r\n }\r\n break;\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import {LOOK_ROOM_TYPES} from \"../bvcomponents/look/core/constants\";\r\n\r\n/**\r\n * @param preset {object} visualizer management preset\r\n * @param forVisualizerType {string} visualizer type\r\n * @return {object} visualizer management preset\r\n */\r\nexport const updatePresetRoomLayout = (preset, forVisualizerType = document.kvConfig.visualizerType) => {\r\n if (!preset.lookId) {\r\n preset.lookId = 0;\r\n }\r\n if ((forVisualizerType === \"bvLook\")) {\r\n if (preset.roomType === LOOK_ROOM_TYPES.as) {\r\n preset.layout_type = preset.layout_type > 20\r\n ? preset.layout_type - 10\r\n : preset.layout_type < 10\r\n ? preset.layout_type + 10\r\n : preset.layout_type;\r\n } else {\r\n preset.layout_type = preset.layout_type >= 10\r\n ? preset.layout_type - 10\r\n : preset.layout_type;\r\n }\r\n }\r\n return preset\r\n}\r\n\r\nexport const updatePresetsArray = (responseDefaults, forVisualizerType) => {\r\n let bvPresets = JSON.parse(responseDefaults) || [];\r\n const noPresetsAtAll = bvPresets.every(preset => !preset.id);\r\n return bvPresets.map((preset, presetIndex) => {\r\n if (noPresetsAtAll) {\r\n preset.id = presetIndex + 1;\r\n } else if (!Number.isInteger(preset.id)) {\r\n preset.id = presetIndex + 100 // 100 is to make id's really unique\r\n }\r\n preset = updatePresetRoomLayout(preset, forVisualizerType);\r\n return preset\r\n });\r\n}\r\n","import CountertopCommon from \"../countertopCommon\";\r\nimport Appliance from \"../../parts/appliance\";\r\nimport {LayoutAbbreviations, METADATA} from \"../../constants\";\r\n\r\nexport default class Countertop extends CountertopCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'countertop';\r\n this.partName = 'Countertop';\r\n this.translateId = \"visualizer.kitchen.countertop.countertop\";\r\n this.isStoneFeature = true;\r\n this.hasAdditionalParts = true;\r\n this.allWallsCanBeApplied = true;\r\n if (isChild) {\r\n this.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n this.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n this.fixEdgeMeta(dbFeature);\r\n if (dbFeature.metaData[\"MountType\"] && dbFeature.metaData[\"MountType\"].includes(\"0\")) {\r\n dbFeature.metaData[\"MountType\"] = [METADATA.ALL]\r\n }\r\n if (dbFeature.metaData[\"MountWidth\"] && dbFeature.metaData[\"MountWidth\"].includes(\"0\")) {\r\n dbFeature.metaData[\"MountWidth\"] = [METADATA.ALL]\r\n }\r\n const partNumber = (dbFeature.metaData[\"Part\"] && +dbFeature.metaData[\"Part\"][0]) === 1 ? 1 : 2;\r\n return super.load_(dbFeature, new Countertop(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n getCurrentSinkMetaData() {\r\n const sinkParent = this.getParent().sink;\r\n let metaObject = {};\r\n if (sinkParent && sinkParent.activeFeature) {\r\n const sinkMeta = sinkParent.activeFeature.metaData[\"MountType\"];\r\n if (sinkMeta && (sinkMeta !== \"0\") && !sinkMeta.includes(\"0\")) {\r\n metaObject[\"MountType\"] = Array.isArray(sinkMeta) ? sinkMeta[0] : sinkMeta\r\n }\r\n const mountWidthMeta = sinkParent.activeFeature.metaData[\"MountWidth\"];\r\n if (mountWidthMeta && (mountWidthMeta !== \"0\") && !mountWidthMeta.includes(\"0\")) { // if 0 - we are showing all faucets\r\n metaObject[\"MountWidth\"] = mountWidthMeta\r\n }\r\n }\r\n return metaObject\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const currentSinkMetaData = this.getCurrentSinkMetaData();\r\n [\"MountType\", \"MountWidth\"].forEach(propName => {\r\n if (currentSinkMetaData[propName]) {\r\n conditions.push({\r\n propName,\r\n propValue: currentSinkMetaData[propName]\r\n })\r\n }\r\n })\r\n // console.log(\"conditions\", conditions);\r\n return conditions;\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n\r\n const conditionsWithoutSink = arrayOfConditions.filter(condition => {\r\n return condition.propName !== \"MountType\" && condition.propName !== \"MountWidth\"\r\n })\r\n\r\n const countertopParent = this.getParent();\r\n const applianceParent = countertopParent.layout.parts[Appliance.id];\r\n // const sink = countertopParent.sink;\r\n\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")\r\n && applianceParent && applianceParent.stove && !applianceParent.stove.disabled && applianceParent.stove.activeFeature) {\r\n return false\r\n }\r\n // if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"4\")\r\n // && sink && !sink.disabled && sink.activeFeature && sink.activeFeature.metaData[\"MountType\"] && sink.activeFeature.metaData[\"MountType\"].includes(\"ST\")\r\n // && !feature.matchesMetaForCondition(\"MountType\", \"ST\")) {\r\n // return false\r\n // }\r\n if (feature.metaData[\"Part\"] && (feature.metaData[\"Part\"].includes(\"2\") || feature.metaData[\"Part\"].includes(\"3\"))) {\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions(conditionsWithoutSink)\r\n }\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n}\r\n","import uniqBy from \"lodash/uniqBy\";\r\n\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\nimport store from \"../../../../store\";\r\n\r\nexport default class CountertopCommon extends IntermediatePart {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n fixEdgeMeta(dbFeature) {\r\n if (dbFeature.metaData[\"Edge\"]) {\r\n const metaValue = Array.isArray(dbFeature.metaData[\"Edge\"]) ? dbFeature.metaData[\"Edge\"][0] : dbFeature.metaData[\"Edge\"];\r\n switch (metaValue) {\r\n case \"European Edge\":\r\n dbFeature.metaData[\"Edge\"] = \"Eased\";\r\n break;\r\n case \"Polished Edge\":\r\n dbFeature.metaData[\"Edge\"] = \"Pencil\";\r\n break;\r\n case \"Waterfall Edge\":\r\n dbFeature.metaData[\"Edge\"] = \"Waterfall\";\r\n break;\r\n default:\r\n dbFeature.metaData[\"Edge\"] = metaValue.split(\" Edge\")[0];\r\n break;\r\n }\r\n } else {\r\n // console.log(\"No Edge Metadata\", dbFeature);\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n\r\n let newFeatures = uniqBy(this.getSameEdgesFeatures(featuresToDisplay), (feature) => {\r\n return feature.dbFeature.id && feature.getSplittedFeatureName()\r\n });\r\n\r\n for (let i = 0; i < featuresToDisplay.length; i++) {\r\n const currentFeature = featuresToDisplay[i];\r\n const currentFeatureName = currentFeature.getSplittedFeatureName();\r\n if (!newFeatures.some(addedFeature => {\r\n return addedFeature.dbFeature.id === currentFeature.dbFeature.id\r\n || addedFeature.getSplittedFeatureName() === currentFeatureName\r\n })) {\r\n newFeatures.push(currentFeature)\r\n }\r\n }\r\n\r\n return this.returnNavItemsFromFeatures(newFeatures)\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n if (!this.hasAdditionalParts) {\r\n return []\r\n }\r\n let activeFeatureParts = this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n return activeFeatureParts\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n if (this.activeFeature) {\r\n return [...this.getArrayOfConditions(), {\r\n propName: \"Edge\",\r\n propValue: this.activeFeature.metaData[\"Edge\"]\r\n }]\r\n }\r\n return this.getArrayOfConditions()\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n this.checkIfFeaturePartIsMatching();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getSameEdgesFeatures(featuresToDisplay) {\r\n let currentEdgeMetaData = \"\";\r\n if (this.activeFeature && this.activeFeature.metaData[\"Edge\"]) {\r\n currentEdgeMetaData = Array.isArray(this.activeFeature.metaData[\"Edge\"]) ? this.activeFeature.metaData[\"Edge\"][0] : this.activeFeature.metaData[\"Edge\"];\r\n }\r\n if (!currentEdgeMetaData) {\r\n const edgeFeatureGroup = this.getParent().edge;\r\n if (edgeFeatureGroup && edgeFeatureGroup.activeFeature) {\r\n currentEdgeMetaData = edgeFeatureGroup.activeFeature.dbFeature.sharedFeatureName;\r\n }\r\n }\r\n if (currentEdgeMetaData) {\r\n featuresToDisplay = featuresToDisplay.filter((feature) => {\r\n return !feature.notAvailableInVisualizer && feature.metaData[\"Edge\"] && (\r\n Array.isArray(feature.metaData[\"Edge\"])\r\n ? feature.metaData[\"Edge\"].includes(currentEdgeMetaData)\r\n : feature.metaData[\"Edge\"] === currentEdgeMetaData\r\n )\r\n });\r\n }\r\n return featuresToDisplay\r\n }\r\n\r\n getFeatureEdgeFilter = (feature, edgeFilterGroup) => {\r\n if (!feature) {\r\n return null\r\n }\r\n if (!edgeFilterGroup) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n }\r\n return feature.dbFeature.fabFilterValueIDs[edgeFilterGroup.id] || feature.dbFeature.filterValueIDs[edgeFilterGroup.id]\r\n };\r\n\r\n tryToSetTheSameFeature(filteredFeatures = [], partName = \"\") {\r\n if (this.activeFeature && this.activeFeature.partName) {\r\n let splittedFromTheLayoutName = partName\r\n ? this.removeLayoutFromPartName(partName)\r\n : this.activeFeature.getMatchingFeatureName();\r\n const allEdgesCountertops = filteredFeatures.filter(feature => {\r\n return feature.getMatchingFeatureName() === splittedFromTheLayoutName\r\n });\r\n const sameEdgeCountertops = this.getSameEdgesFeatures(allEdgesCountertops);\r\n this.activeFeature = sameEdgeCountertops[0] || allEdgesCountertops[0] || null\r\n if (this.activeFeature) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {mergeFilterObjects} from \"../../../../misc/utils\";\r\nimport store from \"../../../../store\";\r\nimport {hardCodeIsCaesarStone} from \"../../../../misc/fabricatorHardcode\";\r\n\r\n// EDGE features:\r\n//\r\n// Full Bullnose\r\n// Triple Pencil\r\n// Eased\r\n// Half Bullnose\r\n// Quarter Bevel\r\n// Waterfall\r\n// Ogee\r\n//\r\n//\r\n// Ogee Bull\r\n// Pencil\r\n// Bevel Top and Bottom\r\n//\r\n// Caes hardcode - Bevel Top and Bottom - is Quarter Bevel\r\n//\r\n// ========================\r\n//\r\n// Countertop features:\r\n//\r\nconst countertopMetaDataValues = [\"Full Bullnose\", \"Triple Pencil\", \"Eased\", \"Half Bullnose\", \"Quarter Bevel\",\r\n \"Waterfall\", \"Ogee\"];\r\n//\r\n// Top and Bottom Round\r\n\r\n\r\nexport default class EdgeCommon extends IntermediatePart {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Edge\"] || (Array.isArray(dbFeature.metaData[\"Edge\"]) && !dbFeature.metaData[\"Edge\"].length)) {\r\n const edgeFilterGroup = this.getEdgeFilterGroup();\r\n const assignedEdgeFilter = this.getEdgeFilterGroupFilters({dbFeature}, edgeFilterGroup);\r\n dbFeature.metaData[\"Edge\"] = (dbFeature.sharedFeatureName || \"\").split(\" Edge\")[0];\r\n if (Array.isArray(assignedEdgeFilter) && assignedEdgeFilter[0] && edgeFilterGroup && edgeFilterGroup.values) {\r\n const fValue = edgeFilterGroup.values.find(filter => filter.id === assignedEdgeFilter[0]);\r\n if (fValue && fValue.value) {\r\n const metaDataMatchName = fValue.value.split(\" Edge\")[0];\r\n if (countertopMetaDataValues.includes(metaDataMatchName)) {\r\n dbFeature.metaData[\"Edge\"] = metaDataMatchName;\r\n }\r\n }\r\n }\r\n if (document.kvConfig.isCaesarStone || hardCodeIsCaesarStone()) {\r\n if (dbFeature.metaData[\"Edge\"] === \"Edge Profile – Ogee (Linear Feet)\") {\r\n dbFeature.metaData[\"Edge\"] = \"Ogee\"\r\n } else if (dbFeature.metaData[\"Edge\"] === \"Bevel Top and Bottom\") {\r\n dbFeature.metaData[\"Edge\"] = \"Quarter Bevel\"\r\n }\r\n }\r\n }\r\n return super.load(dbFeature);\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n const edgeFilterGroup = this.getEdgeFilterGroup();\r\n const parentGroup = this.getParent();\r\n const countertop = parentGroup.countertop;\r\n\r\n // here we check if some countertop has the same name as currently active countertop & it has edge filter\r\n if (edgeFilterGroup && countertop && countertop.activeFeature) {\r\n if (this.partId === \"center_island_edge\" && parentGroup.layout.type === 3) {\r\n return []\r\n }\r\n featuresToDisplay = featuresToDisplay.map((feature) => {\r\n feature.notAvailableInVisualizer = !(this.getMatchingCounterTop(feature)).matchingFeature;\r\n return feature\r\n });\r\n }\r\n\r\n return featuresToDisplay.map(_ => {\r\n const featurePart = new DesignNavigationItem(_.featureName, _);\r\n featurePart.notAvailableInVisualizer = featurePart.part.notAvailableInVisualizer;\r\n return featurePart\r\n });\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked); // set active edge feature\r\n const matchCounterTopObject = this.getMatchingCounterTop();\r\n console.log(\"matchCounterTopObject\", matchCounterTopObject);\r\n if (matchCounterTopObject.matchingFeature) {\r\n matchCounterTopObject.matchingFeature.handleClick(true);\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n /***\r\n * @returns {object}\r\n * **/\r\n getMatchingCounterTop = (feature = this) => {\r\n const parent = feature.getParent();\r\n const countertop = parent.getParent().countertop;\r\n\r\n if (!countertop) {\r\n return {matchingFeature: null, hasSameName: false}\r\n }\r\n\r\n if (countertop.activeFeature && (countertop.activeFeature.metaData[\"Edge\"] === feature.metaData[\"Edge\"])) {\r\n return {matchingFeature: countertop.activeFeature, hasSameName: true} // no need to do anything\r\n }\r\n\r\n let matchingByName = [];\r\n let matchingFeatures = [];\r\n const allCountertopFeatures = countertop.features;\r\n let currentActiveName = countertop.activeFeature ? countertop.activeFeature.getCountertopGroupsSplittedFeatureName() : \"\";\r\n for (let i = 0; i < allCountertopFeatures.length; i++) {\r\n const countertopFeature = allCountertopFeatures[i];\r\n if (countertopFeature.notAvailableInVisualizer) {\r\n continue;\r\n }\r\n if (countertopFeature.metaData[\"Edge\"] === feature.metaData[\"Edge\"]) {\r\n matchingFeatures.push(countertopFeature);\r\n if (currentActiveName && (currentActiveName === countertopFeature.getCountertopGroupsSplittedFeatureName())) {\r\n matchingByName.push(countertopFeature);\r\n }\r\n }\r\n }\r\n if (matchingByName.length) {\r\n return {matchingFeature: matchingByName[0], hasSameName: true}\r\n }\r\n return {matchingFeature: matchingFeatures[0] || null, hasSameName: false}\r\n };\r\n\r\n getEdgeFilterGroupFilters = (feature, edgeFilterGroup) => {\r\n if (!feature._allEdgeFilters) {\r\n const allEdgeFilters = mergeFilterObjects(feature.dbFeature.filterValueIDs, feature.dbFeature.fabFilterValueIDs);\r\n feature._allEdgeFilters = allEdgeFilters && edgeFilterGroup ? allEdgeFilters[edgeFilterGroup.id] : [];\r\n }\r\n return feature._allEdgeFilters;\r\n };\r\n\r\n getMatchingCounterTopFeaturesBySplittedName = (countertop, matchingFeatures = []) => { // array of sorted by filter features\r\n if (!countertop.activeFeature) {\r\n return []\r\n }\r\n let currentActiveName = countertop.activeFeature.getCountertopGroupsSplittedFeatureName();\r\n return matchingFeatures.filter(feature => {\r\n const currentFeatureName = feature.getCountertopGroupsSplittedFeatureName();\r\n return currentFeatureName === currentActiveName\r\n })\r\n };\r\n\r\n getEdgeFilterGroup = () => {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n return filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n };\r\n\r\n getArrayOfConditions(forNavigation = false) {\r\n const countertop = this.getParent().countertop;\r\n if (!forNavigation && countertop && countertop.activeFeature && countertop.activeFeature.metaData[\"Edge\"]) {\r\n return [{\r\n propName: \"Edge\",\r\n propValue: countertop.activeFeature.metaData[\"Edge\"]\r\n }]\r\n }\r\n return [];\r\n }\r\n\r\n canUseNavigationFilterSteps() {\r\n return true\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (!this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n this.setDefault(layout);\r\n }\r\n return false\r\n }\r\n\r\n setZIndex() {\r\n return false\r\n }\r\n\r\n setEdgeNotInVisualizer = () => {\r\n // console.log(\"setEdgeNotInVisualizer\", );\r\n const countertop = this.getParent().countertop;\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const edgeGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n if (edgeGroup && countertop) {\r\n Object.keys(this.featuresList).forEach(layoutType => {\r\n for (let i = 0; i < this.featuresList[layoutType].length; i++) {\r\n const feature = this.featuresList[layoutType][i];\r\n if (feature.dbFeature.filterValueIDs[edgeGroup.id]) {\r\n const edgeValue = feature.dbFeature.filterValueIDs[edgeGroup.id][0];\r\n const edgeExist = countertop.featuresList[layoutType].some(countertopFeature => {\r\n return countertopFeature.dbFeature.filterValueIDs[edgeGroup.id]\r\n && countertopFeature.dbFeature.filterValueIDs[edgeGroup.id].includes(edgeValue)\r\n });\r\n if (edgeExist) {\r\n feature.notAvailableInVisualizer = false\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n}\r\n","import React, {useContext} from \"react\";\r\nimport {View, Text, Image} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\nimport {LOWES_DISCLAIMER_EN} from \"../../../misc/fabricatorHardcode\";\r\n\r\nconst warningIcon = `https://qc-cdn.s3.amazonaws.com/receipt/icon-warning-red.jpg`;\r\n\r\nconst PrintDocumentDisclaimer = (props) => {\r\n const {fabricatorData, locale, styles, withTotal} = props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n if (!fabricatorSettings.depositDisclaimer || !fabricatorSettings.enableDisclaimer) {\r\n return null\r\n }\r\n if (withTotal && fabricatorSettings.depositDisclaimer.length >= 1500\r\n || !withTotal && fabricatorSettings.depositDisclaimer.length < 1500) {\r\n return null\r\n }\r\n\r\n const getDisclaimerMessage = () => {\r\n if ((fabricatorData.isLowes || fabricatorData.isCaesarStone)) {\r\n if (locale === \"fr-FR\" && printContext.messages[\"transDoc.description_FR._disclaimer\"]) {\r\n return printContext.messages[\"transDoc.description_FR._disclaimer\"]\r\n } else if (locale === \"pl-PL\" && printContext.messages[\"transDoc.customTranslateDescription_PL._disclaimer\"]) {\r\n return printContext.messages[\"transDoc.customTranslateDescription_PL._disclaimer\"]\r\n } else if (printContext.messages[\"transDoc.customDisplayName_FR._disclaimer\"]) { // it is actually EN ! hardcoded for lowes profiles\r\n return printContext.messages[\"transDoc.customDisplayName_FR._disclaimer\"]\r\n } else if (fabricatorData.isLowes) {\r\n return LOWES_DISCLAIMER_EN\r\n }\r\n }\r\n return fabricatorSettings.depositDisclaimer\r\n }\r\n\r\n const disclaimerMessage = getDisclaimerMessage();\r\n\r\n // if (withTotal) {\r\n // return (\r\n // \r\n // \r\n // {disclaimerMessage}\r\n // \r\n // )\r\n // }\r\n\r\n return (\r\n \r\n \r\n {disclaimerMessage}\r\n \r\n )\r\n\r\n};\r\n\r\nPrintDocumentDisclaimer.propTypes = {\r\n fabricatorData: PropTypes.object.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n withTotal: PropTypes.bool,\r\n};\r\n\r\nexport default PrintDocumentDisclaimer\r\n","import React, {useEffect, useState} from 'react';\r\nimport axios from \"axios\";\r\nimport {connect} from \"react-redux\";\r\nimport {IntlProvider} from 'react-intl';\r\n// import en from \"react-intl/locale-data/en\";\r\nimport Papa from \"papaparse\";\r\nimport Config, {AVAILABLE_LANGUAGES, IS_LIXIL_SERVERS} from \"./config\";\r\nimport {baseNewImagesPath} from \"./bvcomponents/assets\";\r\nimport {\r\n hardCodeIsAmericanImport, hardCodeIsAmericanStandard,\r\n hardCodeIsCaesarStone,\r\n hardCodeIsEncore,\r\n hardCodeIsGraniteTransformationUK,\r\n hardCodeIsLowes, hardCodeIsMcDermott, hardCodeIsModerno\r\n} from \"./misc/fabricatorHardcode\";\r\nimport {usePrevious} from \"./misc/helperHooks\";\r\n// addLocaleData([...en]);\r\n\r\nexport let TRANSLATES = {};\r\n\r\nexport const isEnglish = (locale) => {\r\n return (locale !== \"fr-FR\") && (locale !== \"pl-PL\") && (locale !== \"es-ES\")\r\n}\r\n\r\nconst getCustomJson = async (fileName = \"\") => {\r\n try {\r\n const customJsonResponse = await axios.get(`${baseNewImagesPath}/translates/custom/${fileName}.json?v=1.0.0`);\r\n if (customJsonResponse && customJsonResponse.data) {\r\n return customJsonResponse.data\r\n }\r\n return {}\r\n } catch (e) {\r\n console.log(\"couldn't set translate\", e);\r\n return {}\r\n }\r\n}\r\n\r\nconst TranslatesProvider = (props) => {\r\n const {language, children, wasCreatedFromFabricator} = props;\r\n const [translations, setTranslations] = useState(null);\r\n const [renderLanguage, setRenderLanguage] = useState(language);\r\n\r\n const prevLanguage = usePrevious(language);\r\n const prevWasCreatedFromFabricator = usePrevious(wasCreatedFromFabricator);\r\n\r\n const parseTranslatesResponse = (response) => {\r\n // handle success\r\n let trans = {}\r\n Papa.parse(response.data, {\r\n complete: (results) => {\r\n // console.log(\"Finished:\", results.data);\r\n results.data[0].forEach((locale) => {\r\n if (locale !== \"key\") {\r\n trans[locale] = {}; // simple create an empty objects for each locale\r\n }\r\n });\r\n results.data.forEach((translatesArray, translatesArrayIndex) => { // vertical forEach\r\n if (translatesArrayIndex) { // not 0 (the first key line)\r\n const key = translatesArray[0]; // key, for ex. login.email\r\n translatesArray.forEach((translateValue, translateValueIndex) => { // horizontal forEach\r\n if (translateValueIndex) { // skip first key\r\n const locale = results.data[0][translateValueIndex]; // get first line and locale index\r\n trans[locale][key] = translateValue || translatesArray[1] // translate from column or english column\r\n }\r\n });\r\n }\r\n });\r\n }\r\n });\r\n return trans\r\n }\r\n\r\n const getCustomTranslates = (transDoc, localeString) => {\r\n let trans = {};\r\n Object.keys(transDoc)\r\n .filter(key => key.includes(localeString))\r\n .forEach(key => {\r\n Object.keys(transDoc[key]).forEach((sharedName) => {\r\n if (sharedName) {\r\n trans[`transDoc.${key}.${sharedName.trim()}`] = transDoc[key][sharedName]\r\n }\r\n })\r\n });\r\n return trans\r\n };\r\n\r\n const loadTranslates = async () => {\r\n const responseMain = await axios.get(`${baseNewImagesPath}translates/translates.csv?v=2.0.1`);\r\n let trans = parseTranslatesResponse(responseMain);\r\n let customTranslates = {};\r\n if (language === \"en-AU\") {\r\n trans[\"en-AU\"] = {...trans[\"en-US\"]}\r\n customTranslates = await getCustomJson( \"en-AU\");\r\n }\r\n if (hardCodeIsLowes()) {\r\n customTranslates = await getCustomJson( \"Lowes\");\r\n const responseLowes = await axios.get(`${baseNewImagesPath}translates/translates_lowes.csv?v=1.13.1`)\r\n const doc = parseTranslatesResponse(responseLowes);\r\n trans[\"fr-FR\"] = {...trans[\"fr-FR\"], ...getCustomTranslates(doc, \"_FR\")};\r\n trans[\"pl-PL\"] = {...trans[\"pl-PL\"], ...getCustomTranslates(doc, \"_PL\")};\r\n } else if (hardCodeIsCaesarStone()) {\r\n console.log(\"fabricatorData.wasCreatedFromFabricator\", wasCreatedFromFabricator);\r\n const jsonFile = wasCreatedFromFabricator === \"QC Master Account CAN\" ? \"Caesarstone(CAN)\" : \"Caesarstone\";\r\n customTranslates = await getCustomJson( jsonFile);\r\n const responseCaes = await axios.get(`${baseNewImagesPath}translates/translates_caes_v1.csv`)\r\n const doc = parseTranslatesResponse(responseCaes);\r\n trans[\"fr-FR\"] = {...trans[\"fr-FR\"], ...getCustomTranslates(doc, \"_FR\")};\r\n } else if (hardCodeIsAmericanImport() || hardCodeIsAmericanStandard() || IS_LIXIL_SERVERS) {\r\n customTranslates = await getCustomJson( \"Lixil\");\r\n } else if (hardCodeIsGraniteTransformationUK()) {\r\n customTranslates = await getCustomJson( \"GT_UK\");\r\n } else if (hardCodeIsModerno()) {\r\n customTranslates = await getCustomJson( \"Moderno\");\r\n } else if (hardCodeIsMcDermott()) {\r\n customTranslates = await getCustomJson( \"McDermott\");\r\n } else if (hardCodeIsEncore()) {\r\n customTranslates = await getCustomJson( \"Encore\");\r\n }\r\n const responseSqft = await axios.get(`${baseNewImagesPath}translates/translates_sqft_v1.csv?ver=1.1.0`);\r\n const transSqft = parseTranslatesResponse(responseSqft);\r\n for (let columnName in trans) {\r\n trans[columnName] = {...trans[columnName], ...transSqft[columnName]}\r\n }\r\n // delete trans[\"Location\"];\r\n // delete trans[\"Description & Context\"];\r\n TRANSLATES = {...trans[language], ...customTranslates[language]};\r\n setTranslations(TRANSLATES);\r\n if (Config.isDevMode()) {\r\n console.log(\"all translates:\", trans);\r\n console.log(\"current translates:\", trans[language]);\r\n }\r\n setRenderLanguage(language); // change frontend after load\r\n }\r\n\r\n useEffect(() => {\r\n if ((language && (prevLanguage !== language)) || (wasCreatedFromFabricator && (prevWasCreatedFromFabricator !== wasCreatedFromFabricator))) {\r\n if(document.kvConfig.kioskMode) {\r\n KioskApp.PostMessage({type: 'getTranslates'}).then(res => loadTranslates({data: res})).catch(console.error);\r\n } else {\r\n loadTranslates().catch(console.error);\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [language, wasCreatedFromFabricator])\r\n\r\n return translations ? (\r\n console.info(error)}>\r\n {children}\r\n \r\n ) : null\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n wasCreatedFromFabricator: store.fabricatorState.wasCreatedFromFabricator,\r\n language: store.serverState.language,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(TranslatesProvider)\r\n","import {IntermediatePart} from \"../parts/intermediatePart\";\r\n\r\nexport default class Shadow extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'part_shadow';\r\n this.visible = false;\r\n this.partName = 'Part Shadow';\r\n }\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Shadow());\r\n }\r\n}","import {Part} from \"./part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {wallsThumbnail} from \"../assets\";\r\n\r\nimport {Shower} from \"./shower\";\r\nimport {ShowerTubCombo} from \"./showerTubCombo\";\r\nimport Shadow from \"../subparts/shadow\";\r\nimport PonyWall from \"../subparts/wall/ponyWall\";\r\n\r\nimport WallA from \"../subparts/wall/wallA\";\r\nimport WallB from \"../subparts/wall/wallB\";\r\nimport WallC from \"../subparts/wall/wallC\";\r\nimport WallExR from \"../subparts/wall/wallExR\";\r\nimport WallExL from \"../subparts/wall/wallExL\";\r\nimport ExternallWall from \"../subparts/wall/externallWall\";\r\nimport VanityAccent from \"../subparts/wall/vanityAccent\";\r\nimport store from \"../../../../store\";\r\n\r\nexport class Wall extends Part {\r\n static id = 'Walls';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Walls';\r\n this.translateId = \"visualizer.bathroom.walls\";\r\n this.partThumbnail = wallsThumbnail;\r\n\r\n // related items\r\n this.vanityAccent = null;\r\n this.wallExR = null;\r\n this.wallExL = null;\r\n this.wallA = null;\r\n this.wallB = null;\r\n this.wallC = null;\r\n this.ponyWall = null;\r\n this.allWallsApplied = true;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"VanityAccent\":\r\n relatedItemName = \"vanityAccent\";\r\n RelatedItemClass = VanityAccent;\r\n break;\r\n case \"WallExtrusion\":\r\n case \"EX R\":\r\n relatedItemName = \"wallExR\";\r\n RelatedItemClass = WallExR;\r\n break;\r\n case \"ShowerDivider\":\r\n case \"EX L\":\r\n relatedItemName = \"wallExL\";\r\n RelatedItemClass = WallExL;\r\n break;\r\n case \"Wall A\":\r\n relatedItemName = \"wallA\";\r\n RelatedItemClass = WallA;\r\n break;\r\n case \"Wall B\":\r\n relatedItemName = \"wallB\";\r\n RelatedItemClass = WallB;\r\n break;\r\n case \"Wall C\":\r\n relatedItemName = \"wallC\";\r\n RelatedItemClass = WallC;\r\n break;\r\n case \"Pony Wall\":\r\n relatedItemName = \"ponyWall\";\r\n RelatedItemClass = PonyWall;\r\n break;\r\n case \"Shower Shadow\":\r\n if (\r\n dbFeature.displayName.includes(\"Shower Shadow - Divider Wall\")\r\n || dbFeature.displayName.includes(\"Shower Shadow - EX L\")\r\n || dbFeature.displayName.includes(\"Shower Shadow - EX R\")\r\n || dbFeature.displayName.includes(\"Shower Shadow - Popout\")\r\n || dbFeature.displayName.includes(\"Shower Shadow - Pony Wall\")\r\n ) {\r\n relatedItemName = \"shadows\";\r\n RelatedItemClass = Shadow;\r\n }\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n if (relatedItemName === \"ponyWall\") {\r\n this[relatedItemName].type = Shower.Type.Custom;\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n let res = [];\r\n this.relatedItems.forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n ? relatedItem.placeholderFeature.layer.addTo(res)\r\n : relatedItem.activeFeature ? relatedItem.activeFeature.layer.addTo(res) : null;\r\n if (relatedItem.shadowFeature) {\r\n relatedItem.shadowFeature.layer.addTo(res)\r\n }\r\n });\r\n return res.length ? res : null;\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Walls', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts() {\r\n\r\n const activeShowerGroup = this.getActiveShowerGroup();\r\n const ponyWallIsActive = activeShowerGroup.showerDimensions() === \"Pony\";\r\n\r\n const shower = this.layout.parts[Shower.id];\r\n // const vanityAccent = this.layout.parts[Vanity.id].vanityAccent;\r\n return this.relatedItems.filter(item => {\r\n if (item.isPonyWallPart) {\r\n item.visible = ponyWallIsActive\r\n }\r\n return item.visible\r\n }).filter(item => item && item.visible).filter((relatedItem) => {\r\n return !(shower.isComplete() &&\r\n (relatedItem instanceof WallExL\r\n || (relatedItem instanceof WallExR && shower.showerBody && !shower.showerBody.activeFeature.partName.includes(\"Complete\"))))\r\n }).map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n setDefault(layout) {\r\n this.relatedItems.forEach(_ => _.setDefault(layout));\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n recoverPrevioslySelected(activeRelatedPart) {\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n this.relatedItems.forEach(relatedItem => {\r\n if (relatedItem.partId !== activeRelatedPart.partId && relatedItem.activeFeatureBeforeAllWalls) {\r\n if (relatedItem.activeFeatureBeforeAllWalls === \"placeholder\") {\r\n relatedItem.placeholderChanged = false;\r\n relatedItem.firstClick[activeQuoteIndex] = false;\r\n if (relatedItem instanceof ExternallWall) { // there shouldn't be cases for this, but nevertheless, just in case\r\n relatedItem.selectedByUser = false\r\n }\r\n } else {\r\n if (!(relatedItem instanceof ExternallWall && relatedItem.selectedByUser)) {\r\n relatedItem.activeFeatureBeforeAllWalls.clickFromAllWalls();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n showerTubComboIsActive() {\r\n const comboPart = this.layout.parts[ShowerTubCombo.id];\r\n return comboPart && comboPart.showerTubComboIsActive\r\n }\r\n\r\n getActiveShowerGroup() {\r\n return this.showerTubComboIsActive() ? this.layout.parts[ShowerTubCombo.id] : this.layout.parts[Shower.id];\r\n }\r\n\r\n}\r\n","import uniqBy from \"lodash/uniqBy\";\r\n\r\nimport {IntermediatePart} from \"../parts/intermediatePart\";\r\n\r\nexport default class NonVisualizerSubPart extends IntermediatePart {\r\n constructor(isChild, partId, partName) {\r\n super(isChild);\r\n this.partId = partId;\r\n this.visible = true;\r\n this.partName = partName;\r\n // this.allFeaturesReceived = true;\r\n }\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new NonVisualizerSubPart(false, this.partId, dbFeature.groupName));\r\n }\r\n navigationSubItems(filters, searchText) {\r\n const navSubItems = super.navigationSubItems(filters, searchText)\r\n return uniqBy(navSubItems, (navItem) => navItem.part.dbFeature.sharedFeatureName);\r\n }\r\n}\r\n","import {Part} from \"./part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport { showerAccessoriesThumbnail } from '../assets';\r\nimport LargeCornerSeat from \"../subparts/showerAccessories/largeCornerSeat\";\r\nimport SoapDish from \"../subparts/showerAccessories/soapDish\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport SmallCornerShelf from \"../subparts/showerAccessories/smallCornerShelf\";\r\nimport CornerCaddie from \"../subparts/showerAccessories/cornerCaddie\";\r\nimport LargeCornerCaddie from \"../subparts/showerAccessories/largeCornerCaddie\";\r\nimport GrabBar from \"../subparts/showerAccessories/grabBar\";\r\n\r\nexport class ShowerAccessories extends Part {\r\n static id = 'Shower Accessories';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partThumbnail = showerAccessoriesThumbnail;\r\n this.partName = 'Shower Accessories';\r\n this.translateId = \"visualizer.bathroom.accessories\";\r\n this.relatedItems = [];\r\n\r\n // related items\r\n this.soapDish = null;\r\n this.largeCornerSeat = null;\r\n this.largeCornerCaddie = null;\r\n this.cornerCaddie = null;\r\n this.smallCornerShelf = null;\r\n this.grabBar = null;\r\n\r\n //current active caddie type\r\n this.caddie_type = \"large_corner_caddie\";\r\n\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Soap Dish\":\r\n relatedItemName = \"soapDish\";\r\n RelatedItemClass = SoapDish;\r\n break;\r\n case \"Large Corner Seat\":\r\n relatedItemName = \"largeCornerSeat\";\r\n RelatedItemClass = LargeCornerSeat;\r\n break;\r\n case \"Large Corner Caddie\":\r\n relatedItemName = \"largeCornerCaddie\";\r\n RelatedItemClass = LargeCornerCaddie;\r\n break;\r\n case \"Corner Caddie\":\r\n relatedItemName = \"cornerCaddie\";\r\n RelatedItemClass = CornerCaddie;\r\n break;\r\n case \"Small Corner Shelf\":\r\n relatedItemName = \"smallCornerShelf\";\r\n RelatedItemClass = SmallCornerShelf;\r\n break;\r\n case \"Grab Bar\":\r\n relatedItemName = \"grabBar\";\r\n RelatedItemClass = GrabBar;\r\n break;\r\n\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n const layers = [];\r\n this.getRelatedItems().forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n ? relatedItem.placeholderFeature.layer.addTo(layers)\r\n : relatedItem.activeFeature && relatedItem.activeFeature.layer.addTo(layers)\r\n });\r\n\r\n return layers;\r\n }\r\n\r\n subParts() {\r\n return this.getRelatedItems().map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem(this.partName, this)\r\n }\r\n\r\n}\r\n\r\n","import React from 'react';\r\nimport classNames from 'classnames';\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport Analytics from './../../analytics';\r\nimport COLOR_THEMES from \"../../colorThemes\";\r\n\r\nconst CheckBox = (props) => {\r\n const {checked, text, onChecked, disabled, textOnly, activeTheme} = props;\r\n return (\r\n
    !disabled && !textOnly && Analytics.sendClickEvent(\"checkbox - \" + text, checked) && onChecked(!checked)}>\r\n
    \r\n {textOnly ? null :\r\n \r\n \r\n \r\n }\r\n {checked ?\r\n
    \r\n :
    }\r\n
    \r\n
    {text}
    \r\n
    \r\n );\r\n};\r\n\r\nCheckBox.displayName = 'CheckBox';\r\n\r\nCheckBox.propTypes = {\r\n checked: PropTypes.bool,\r\n disabled: PropTypes.bool,\r\n textOnly: PropTypes.bool,\r\n text: PropTypes.any,\r\n onChecked: PropTypes.func,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n activeTheme: store.serverState.activeTheme,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(CheckBox)\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\n// import {Layout} from \"../../core/layout\";\r\n// import {PartMenuType} from \"../../constants\";\r\nimport SelectionMobileViewSwitchers from '../mobile/selectionMobileViewSwitchers';\r\nimport BodyPanelRadio from \"./bodyPanelRadio\";\r\nimport BodyPanelCheckbox from \"./bodyPanelCheckbox\";\r\nimport BodyPanelWizardSteps from \"./bodyPanelWizardSteps\";\r\n// import Analytics from \"../../../../analytics\";\r\nimport FilterSwitchers from \"../newFilters/filterSwitchers\";\r\nimport BodyPanelNavigationFiltersSteps from \"./bodyPanelNavigationFiltersSteps\";\r\nimport BacksplashSelect from \"../../../selectionWindow/backsplashSelect\";\r\nimport {CABINET_GROUP, COUNTERTOP_GROUP} from \"../../../kvComponent/core/constants\";\r\nimport CountertopSwitchers from \"../../../kvComponent/navigation/countertopSwitchers\";\r\nimport CabinetSwitchers from \"../../../kvComponent/navigation/cabinetSwitchers\";\r\nimport {CABINET_GROUP_BATHROOM, COUNTERTOP_GROUP_BATHROOM} from \"../../../bvSceneComponent/core/constants\";\r\nimport LookAllWallsRadioButton from \"../../../look/lookNavigation/lookMain/lookAllWallsRadioButton\";\r\nimport {getCurrentLayout} from \"../../../appLayout\";\r\nimport {featureInterface} from \"../../../../interfaces/featureInterface\";\r\n\r\nclass BodyPanel extends Component {\r\n\r\n static propTypes = {\r\n // layout: PropTypes.instanceOf(Layout),\r\n activePart: PropTypes.object.isRequired,\r\n activeSubPart: PropTypes.object,\r\n activeFeature: PropTypes.shape(featureInterface),\r\n toggleApplyWallsCheckbox: PropTypes.func,\r\n isWallItem: PropTypes.func,\r\n handleSubTypeClick: PropTypes.func,\r\n useWizard: PropTypes.bool,\r\n showFeatureWizard: PropTypes.bool,\r\n exitFeatureWizard: PropTypes.func,\r\n enableFeatureWizard: PropTypes.func,\r\n wizardGroups: PropTypes.array,\r\n filters: PropTypes.array,\r\n getFilterDisplayName: PropTypes.func.isRequired,\r\n toggleWizardFilterSelection: PropTypes.func,\r\n refreshCB: PropTypes.func,\r\n showFilterSelection: PropTypes.bool,\r\n showWizardGroupsSelection: PropTypes.bool,\r\n setStateActiveFeature: PropTypes.func,\r\n };\r\n\r\n backsplashSelectClick = (feature) => {\r\n this.props.refreshCB(); // update canvas\r\n this.props.refreshItems(); // update nav items\r\n if (this.props.setStateActiveFeature) {\r\n this.props.setStateActiveFeature(feature);\r\n }\r\n };\r\n\r\n renderAllWallsCheckbox = (showFilterSelection) => {\r\n const layout = getCurrentLayout();\r\n if (layout.isNewLayout) {\r\n return \r\n } else if (!showFilterSelection && this.props.activeSubPart && this.props.isWallItem(this.props.activeSubPart)\r\n && this.props.activeSubPart.partName !== \"Accent Wall\") {\r\n return \r\n }\r\n return null\r\n }\r\n\r\n render() {\r\n\r\n const showFilterSelection = this.props.showFilterSelection || this.props.showWizardGroupsSelection;\r\n const activeNavPart = this.props.activeSubPart || this.props.activePart;\r\n\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n const useWizard = fabricatorSettings &&\r\n (fabricatorSettings.wizardConsumers || (fabricatorSettings.wizardClients && document.kvConfig.isBackend));\r\n\r\n let showNavigationFilters = useWizard && this.props.activeNavigationFilter\r\n && (this.props.activeNavigationFilter !== \"inlay_type\") && activeNavPart\r\n && activeNavPart.canUseNavigationFilter && activeNavPart.canUseNavigationFilter();\r\n\r\n if (useWizard && activeNavPart && activeNavPart.canUseNavigationFilterSteps\r\n && activeNavPart.canUseNavigationFilterSteps()) {\r\n showNavigationFilters = true;\r\n }\r\n\r\n const isCountertop = this.props.activeSubPart && (\r\n COUNTERTOP_GROUP.includes(this.props.activeSubPart.partId)\r\n || ((document.kvConfig.visualizerType === \"bvScene\" || document.kvConfig.visualizerType === \"Bathroom\")\r\n && COUNTERTOP_GROUP_BATHROOM.includes(this.props.activeSubPart.partId))\r\n );\r\n\r\n const isCabinet = this.props.activeSubPart && (CABINET_GROUP.includes(this.props.activeSubPart.partId)\r\n || (document.kvConfig.visualizerType === \"bvScene\" && CABINET_GROUP_BATHROOM.includes(this.props.activeSubPart.partId)));\r\n\r\n const layout = getCurrentLayout();\r\n\r\n return (\r\n
    \r\n

    {activeNavPart ? : null}

    \r\n
    \r\n {!showFilterSelection && this.props.activeSubPart && this.props.activeSubPart.canBeDisabled\r\n ? \r\n : null}\r\n {this.renderAllWallsCheckbox(showFilterSelection)}\r\n
    \r\n {/*{this.props.activePart.menuType === PartMenuType.Complex && this.props.activePart.subTypes().length && !showFilterSelection*/}\r\n {/* ? (*/}\r\n {/*
    */}\r\n {/*
    */}\r\n {/* {this.props.activePart.subTypes().map(subType => (*/}\r\n {/* */}\r\n {/* ))}*/}\r\n {/*
    */}\r\n {/*
    */}\r\n {/* ) : null}*/}\r\n {!showFilterSelection ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n {this.props.useWizard && !this.props.showWizardGroupsSelection ? (\r\n \r\n ) : null}\r\n {activeNavPart.partId === \"backsplash\" ? : null}\r\n {isCountertop && !layout.isNewLayout ? : null}\r\n {isCabinet && !layout.isNewLayout ? : null}\r\n {showNavigationFilters ? (\r\n \r\n ) : null}\r\n {this.props.useFilters && !showFilterSelection ? (\r\n \r\n ) : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n fabricatorData: store.fabricatorState,\r\n };\r\n};\r\nconst mapDispatchToProps = () => {\r\n return {};\r\n};\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BodyPanel);\r\n","import {Part} from \"../part\";\r\nimport {wallsThumbnail} from \"../assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport Ceiling from \"../subparts/walls/ceiling\";\r\nimport LeftWall from \"../subparts/walls/leftWall\";\r\nimport RightWall from \"../subparts/walls/rightWall\";\r\nimport PopoutWall from \"../subparts/walls/popoutWall\";\r\nimport Backsplash from \"../subparts/walls/backsplash\";\r\nimport store from \"../../../../store\";\r\n\r\nexport default class Walls extends Part {\r\n static id = 'Walls';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Walls';\r\n this.partThumbnail = wallsThumbnail;\r\n this.translateId = \"visualizer.kitchen.walls\";\r\n\r\n // related items\r\n this.leftWall = null;\r\n this.rightWall = null;\r\n this.popoutWall = null;\r\n this.ceiling = null;\r\n this.backsplash = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Left Wall\":\r\n relatedItemName = \"leftWall\";\r\n RelatedItemClass = LeftWall;\r\n break;\r\n case \"Right Wall\":\r\n relatedItemName = \"rightWall\";\r\n RelatedItemClass = RightWall;\r\n break;\r\n case \"Popout Wall\":\r\n relatedItemName = \"popoutWall\";\r\n RelatedItemClass = PopoutWall;\r\n break;\r\n case \"Backsplash\":\r\n case \"backsplash\":\r\n relatedItemName = \"backsplash\";\r\n RelatedItemClass = Backsplash;\r\n break;\r\n case \"Ceiling\":\r\n relatedItemName = \"ceiling\";\r\n RelatedItemClass = Ceiling;\r\n break;\r\n // case \"Shower Shadow\":\r\n // if (\r\n // dbFeature.displayName.includes(\"Shower Shadow - Divider Wall\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - EX L\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - EX R\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - Popout\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - Pony Wall\")\r\n // ) {\r\n // relatedItemName = \"shadows\";\r\n // RelatedItemClass = Shadow;\r\n // }\r\n // break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Walls', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts(withHidden = true) {\r\n return this.relatedItems\r\n .filter(item => {\r\n if (item.partId === \"popout_wall\") {\r\n item.visible = item.getParent().layout.getCurrentLayoutAbbreviation().includes(\"P\")\r\n }\r\n return this.filterRelatedItem(item, withHidden)\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n recoverPrevioslySelected(activeRelatedPart) {\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n this.relatedItems.forEach(relatedItem => {\r\n if (relatedItem.partId !== activeRelatedPart.partId && relatedItem.activeFeatureBeforeAllWalls) {\r\n if (relatedItem.activeFeatureBeforeAllWalls === \"placeholder\") {\r\n relatedItem.placeholderChanged = false;\r\n relatedItem.firstClick[activeQuoteIndex] = false;\r\n } else if (!relatedItem.selectedByUser) {\r\n relatedItem.activeFeatureBeforeAllWalls.clickFromAllWalls();\r\n }\r\n }\r\n });\r\n }\r\n\r\n}\r\n","import uniqBy from \"lodash/uniqBy\";\r\n\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\nimport store from \"../../../../store\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nexport default class CountertopCommon extends IntermediatePart {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n\r\n let newFeatures = this.getSameEdgesFeatures(featuresToDisplay);\r\n\r\n const featuresThatLeft = featuresToDisplay.filter(feature => {\r\n return !newFeatures.some(newFeature => newFeature.dbFeature.customDisplayName === feature.dbFeature.customDisplayName)\r\n });\r\n\r\n featuresThatLeft.forEach(feature => {\r\n let currentFeatureName = feature.getCountertopGroupsSplittedFeatureName();\r\n if (newFeatures.every(countertopFeature => {\r\n let customDisplayName = countertopFeature.getCountertopGroupsSplittedFeatureName();\r\n return customDisplayName !== currentFeatureName\r\n })) {\r\n newFeatures.push(feature);\r\n }\r\n });\r\n\r\n return uniqBy(newFeatures, (feature) => feature.dbFeature.id)\r\n .map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n getSameEdgesFeatures(featuresToDisplay) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n if (edgeFilterGroup) {\r\n let activeFeatureEdgeFilter = this.getFeatureEdgeFilter(this.activeFeature, edgeFilterGroup); // 1) take edge filter from active feature\r\n if (!activeFeatureEdgeFilter) { // 2) try to set it from active edge feature group active feature\r\n const edgeFeatureGroup = this.getParent().edge;\r\n if (edgeFeatureGroup && edgeFeatureGroup.activeFeature) {\r\n activeFeatureEdgeFilter = this.getFeatureEdgeFilter(edgeFeatureGroup.activeFeature, edgeFilterGroup);\r\n }\r\n }\r\n if (!activeFeatureEdgeFilter) { // 3) find at least some feature with edge filter\r\n for (let i = 0; i < featuresToDisplay.length; i++) {\r\n const edgeFilters = this.getFeatureEdgeFilter(featuresToDisplay[i], edgeFilterGroup);\r\n if (edgeFilters) {\r\n activeFeatureEdgeFilter = edgeFilters;\r\n break;\r\n }\r\n }\r\n }\r\n if (activeFeatureEdgeFilter) {\r\n const activeEdgeFilter = activeFeatureEdgeFilter[0];\r\n const activeEdgeFilter2 = activeFeatureEdgeFilter[1];\r\n featuresToDisplay = featuresToDisplay.filter((feature) => {\r\n if (feature.notAvailableInVisualizer) {\r\n return false\r\n }\r\n const currentFeatureFilters = this.getFeatureEdgeFilter(feature, edgeFilterGroup);\r\n return currentFeatureFilters && (currentFeatureFilters.includes(activeEdgeFilter) || (\r\n activeEdgeFilter2 && currentFeatureFilters.includes(activeEdgeFilter2)\r\n ))\r\n });\r\n }\r\n }\r\n return featuresToDisplay\r\n }\r\n\r\n getFeatureEdgeFilter = (feature, edgeFilterGroup) => {\r\n if (!feature) {\r\n return null\r\n }\r\n if (!edgeFilterGroup) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n }\r\n return feature.dbFeature.fabFilterValueIDs[edgeFilterGroup.id] || feature.dbFeature.filterValueIDs[edgeFilterGroup.id]\r\n };\r\n\r\n tryToSetTheSameFeature(filteredFeatures = [], partName = \"\") {\r\n if (this.activeFeature && this.activeFeature.partName) {\r\n let splittedFromTheLayoutName = partName\r\n ? this.removeLayoutFromPartName(partName)\r\n : this.activeFeature.getMatchingFeatureName();\r\n const allEdgesCountertops = filteredFeatures.filter(feature => {\r\n return feature.getMatchingFeatureName() === splittedFromTheLayoutName\r\n });\r\n const sameEdgeCountertops = this.getSameEdgesFeatures(allEdgesCountertops);\r\n this.activeFeature = sameEdgeCountertops[0] || allEdgesCountertops[0] || null\r\n if (this.activeFeature) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.getArrayOfConditions\r\n ? this.features.filter(f => f.dbFeature.s3Bindings && f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))\r\n : this.features;\r\n const matchingFeatureExist = this.tryToSetTheSameFeature(filteredFeatures, null);\r\n if (!matchingFeatureExist) {\r\n const edge = this.getParent().edge;\r\n let matchingEdgeFeature = null;\r\n if (edge && edge.activeFeature) {\r\n matchingEdgeFeature = edge.getMatchingCounterTop(edge.activeFeature, filteredFeatures);\r\n }\r\n this.activeFeature = matchingEdgeFeature || filteredFeatures[0];\r\n }\r\n if (this.setActiveFeatureParts) {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../intermediatePart\";\r\nimport store from \"../../../../store\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {getFilterGroupValueByName, getFilterGroupValues} from \"../../../../misc/utils\";\r\n\r\nexport default class EdgeCommon extends IntermediatePart {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n const edgeFilterGroup = this.getEdgeFilterGroup();\r\n const countertop = this.getParent().countertop;\r\n\r\n // here we check if some countertop has the same name as currently active countertop & it has edge filter\r\n if (edgeFilterGroup && countertop && countertop.activeFeature) {\r\n featuresToDisplay = featuresToDisplay.map((feature) => {\r\n feature.notAvailableInVisualizer = !this.getMatchingCounterTop(feature);\r\n return feature\r\n });\r\n }\r\n\r\n if (edgeFilterGroup && (this.partId === \"edge_profile\")) { // Waterfall check for back countertop\r\n const waterFallFilter = getFilterGroupValueByName(\"Waterfall\", edgeFilterGroup);\r\n if (waterFallFilter) {\r\n featuresToDisplay = featuresToDisplay.filter(feature => {\r\n const edgeFilters = getFilterGroupValues(feature, edgeFilterGroup)\r\n return !edgeFilters || !edgeFilters.includes(waterFallFilter.id)\r\n })\r\n }\r\n }\r\n\r\n return featuresToDisplay.map(_ => {\r\n const featurePart = new DesignNavigationItem(_.featureName, _);\r\n featurePart.notAvailableInVisualizer = featurePart.part.notAvailableInVisualizer;\r\n return featurePart\r\n });\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked); // set active edge feature\r\n this.matchingCounterTop = this.getMatchingCounterTop();\r\n console.log(\"this.matchingCounterTop\", this.matchingCounterTop);\r\n if (this.matchingCounterTop) {\r\n this.matchingCounterTop.handleClick(true);\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n getMatchingCounterTop = (feature = this, countertopFeatures) => {\r\n const parent = feature.getParent();\r\n const countertop = parent.getParent().countertop;\r\n const edgeFilterGroup = feature.getEdgeFilterGroup();\r\n\r\n if (countertop && edgeFilterGroup) {\r\n const edgeFilterValue = feature.getEdgeFilterGroupFilters(feature, edgeFilterGroup);\r\n if (edgeFilterValue) {\r\n let matchingFeatures = (countertopFeatures || countertop.features).filter((feature) => {\r\n return (feature.dbFeature.filterValueIDs[edgeFilterGroup.id]\r\n && feature.dbFeature.filterValueIDs[edgeFilterGroup.id].some(edgeFilterId => {\r\n return edgeFilterValue.some(currentEdgeFilterId => currentEdgeFilterId === edgeFilterId)\r\n })) ||\r\n (feature.dbFeature.fabFilterValueIDs[edgeFilterGroup.id]\r\n && feature.dbFeature.fabFilterValueIDs[edgeFilterGroup.id].some(edgeFilterId => {\r\n return edgeFilterValue.some(currentEdgeFilterId => currentEdgeFilterId === edgeFilterId)\r\n }))\r\n });\r\n matchingFeatures = matchingFeatures.filter(feature => !feature.notAvailableInVisualizer)\r\n let matchingByName = feature.getMatchingCounterTopFeaturesBySplittedName(countertop, matchingFeatures);\r\n return matchingByName.length\r\n ? matchingByName[0]\r\n : matchingFeatures.length\r\n ? matchingFeatures[0]\r\n : null\r\n }\r\n }\r\n return null\r\n };\r\n\r\n getEdgeFilterGroupFilters = (feature, edgeFilterGroup) => {\r\n edgeFilterGroup = edgeFilterGroup || this.getEdgeFilterGroup();\r\n return getFilterGroupValues(feature, edgeFilterGroup)\r\n };\r\n\r\n getMatchingCounterTopFeaturesBySplittedName = (countertop, matchingFeatures = []) => { // array of sorted by filter features\r\n if (!countertop.activeFeature) {\r\n return []\r\n }\r\n let currentActiveName = countertop.activeFeature.getCountertopGroupsSplittedFeatureName();\r\n return matchingFeatures.filter(feature => {\r\n const currentFeatureName = feature.getCountertopGroupsSplittedFeatureName();\r\n return currentFeatureName === currentActiveName\r\n })\r\n };\r\n\r\n getEdgeFilterGroup = () => {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n return filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n };\r\n\r\n getArrayOfConditions() {\r\n return []\r\n }\r\n\r\n canUseNavigationFilterSteps() {\r\n return true\r\n }\r\n\r\n setLayers() {\r\n return false\r\n }\r\n\r\n setZIndex() {\r\n return false\r\n }\r\n\r\n}\r\n","import React, {Component} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport FilterSelection from \"./filterSelection\";\r\nimport PropTypes from \"prop-types\";\r\nimport {CABINET_WIZARD_BUTTONS, COUNTERTOP_WIZARD_BUTTONS} from \"../../../kvComponent/core/constants\";\r\nimport {\r\n setActiveNavigationFilter,\r\n setCountertopWizard,\r\n setActiveNavigationFilterStepIndex,\r\n setNavigationViewType\r\n} from \"../../../../actions/navigationFunctions\";\r\nimport {wizardAllButton} from \"../../../kvComponent/core/constants\";\r\nimport {setSelectedFilters} from \"../../../../actions/actionFunctions\";\r\nimport {replaceFilterArrayValue, toggleFilterArrayValue} from \"./filterSwitchers\";\r\nimport {getBvGroupFilterValues} from \"../../../../api/server-api\";\r\nimport {setAvailableFilterValues} from \"../../../../actions/filtersFunctions\";\r\nimport {s3FilterImagePath} from \"../../../../misc/utils\";\r\nimport {getAllFilterGroupValuesFromGroup} from \"../../../../misc/helpers\";\r\n\r\nclass NavigationFilters extends Component {\r\n\r\n static propTypes = {\r\n isMobile: PropTypes.bool,\r\n activePart: PropTypes.object.isRequired,\r\n onItemClick: PropTypes.func.isRequired,\r\n refreshCB: PropTypes.func.isRequired,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n availableFilterValues: [],\r\n isLoading: false,\r\n filterGroup: {}\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.setAvailableFiltersValues(this.props);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if ((nextProps.activePart && this.props.activePart && nextProps.activePart.partName !== this.props.activePart.partName)\r\n || (nextProps.activeNavigationFilter !== this.props.activeNavigationFilter)) {\r\n this.setAvailableFiltersValues(nextProps);\r\n }\r\n this.resetFilters(nextProps);\r\n }\r\n\r\n componentWillUnmount() {\r\n this.removeNavigationFiltersAndSetCommonView();\r\n }\r\n\r\n resetFilters(nextProps) {\r\n if ((nextProps.activeNavigationFilter !== this.props.activeNavigationFilter)\r\n && (nextProps.activeNavigationFilter === COUNTERTOP_WIZARD_BUTTONS[1].buttonId)\r\n && nextProps.selectedFilters.length\r\n ) {\r\n this.props.setSelectedFilters([]); // reset filters on color step\r\n }\r\n }\r\n\r\n getFilterGroupNameByButtonId(nextProps) {\r\n let activeButton = null;\r\n switch (nextProps.activePart.partId) {\r\n case \"top_cabinet\":\r\n case \"bottom_cabinet\":\r\n activeButton = CABINET_WIZARD_BUTTONS.find(button => button.buttonId === nextProps.activeNavigationFilter);\r\n break;\r\n case \"countertop\":\r\n case \"center_island_countertop\":\r\n activeButton = COUNTERTOP_WIZARD_BUTTONS.find(button => button.buttonId === nextProps.activeNavigationFilter);\r\n break;\r\n default:\r\n break;\r\n }\r\n return activeButton ? activeButton.filtersGroupName : \"\";\r\n }\r\n\r\n setAvailableFiltersValues(nextProps = this.props) {\r\n const filterGroupName = this.getFilterGroupNameByButtonId(nextProps);\r\n const filterGroup = nextProps.filterGroups.find(group => group.name === filterGroupName);\r\n if (filterGroup) {\r\n const selectedFilters = (filterGroup.name === COUNTERTOP_WIZARD_BUTTONS[2].filtersGroupName)\r\n ? nextProps.selectedFilters : []; // filter by selected filters only on 2nd(Material step)\r\n const availableFilterValues = FilterSelection.getAvailableFilterValues(\r\n nextProps.filterGroups, filterGroupName, nextProps.activePart, this.props.fabricatorData, selectedFilters\r\n );\r\n // console.log(\"availableFilterValues::\", availableFilterValues);\r\n const reorderedFilterValues = this.reorderFilterItems(nextProps, availableFilterValues);\r\n const countertopMaterialOrColor = (\r\n nextProps.activeNavigationFilter === COUNTERTOP_WIZARD_BUTTONS[1].buttonId\r\n || nextProps.activeNavigationFilter === COUNTERTOP_WIZARD_BUTTONS[2].buttonId\r\n );\r\n if (countertopMaterialOrColor ) {\r\n if (this.props.availableFilterValues[filterGroup.id]) {\r\n this.setToStateFilterValues([\"All\", ...this.props.availableFilterValues[filterGroup.id]], filterGroup);\r\n } else {\r\n this.setState({\r\n isLoading: true\r\n });\r\n getBvGroupFilterValues(nextProps.activePart.dbName || nextProps.activePart.partName, filterGroup.id)\r\n .then((response) => {\r\n this.props.setAvailableFilterValues({\r\n [filterGroup.id]: response.data\r\n });\r\n this.setToStateFilterValues([\"All\", ...response.data], filterGroup);\r\n })\r\n }\r\n } else {\r\n this.setToStateFilterValues(reorderedFilterValues, filterGroup);\r\n }\r\n }\r\n }\r\n\r\n setToStateFilterValues = (availableFilterValues, filterGroup) => {\r\n this.setState({\r\n isLoading: false,\r\n availableFilterValues,\r\n filterGroup\r\n })\r\n };\r\n\r\n setParentFilterValues = (filterValues) => {\r\n const nextProps = this.props;\r\n const filterGroupName = this.getFilterGroupNameByButtonId(nextProps);\r\n const filterGroup = nextProps.filterGroups.find(group => group.name === filterGroupName);\r\n const selectedFilters = (filterGroup.name === COUNTERTOP_WIZARD_BUTTONS[2].filtersGroupName)\r\n ? nextProps.selectedFilters : []; // filter by selected filters only on 2nd(Material step)\r\n\r\n let availableFilterValues = [];\r\n if (selectedFilters.length) {\r\n const colorFilterName = COUNTERTOP_WIZARD_BUTTONS[1].filtersGroupName;\r\n const colorFilterGroup = nextProps.filterGroups.find(group => {\r\n return group.name === colorFilterName\r\n });\r\n if (colorFilterGroup) {\r\n const selectedColorFilter = selectedFilters.find(filterG => filterG.filterGroupId === colorFilterGroup.id);\r\n const selectedColorValue = selectedColorFilter && selectedColorFilter.filterId;\r\n if (selectedColorValue || selectedColorValue === 0) {\r\n filterValues.forEach(filterValue => {\r\n if (nextProps.activePart.features.some(feature => {\r\n return feature.dbFeature\r\n && feature.dbFeature.filterValueIDs[filterGroup.id]\r\n && feature.dbFeature.filterValueIDs[filterGroup.id].includes(filterValue)\r\n && feature.dbFeature.filterValueIDs[colorFilterGroup.id]\r\n && feature.dbFeature.filterValueIDs[colorFilterGroup.id].includes(selectedColorValue)\r\n })) {\r\n availableFilterValues.push(filterValue)\r\n }\r\n })\r\n } else {\r\n availableFilterValues = filterValues;\r\n }\r\n } else {\r\n availableFilterValues = filterValues;\r\n }\r\n } else {\r\n availableFilterValues = filterValues;\r\n }\r\n const reorderedFilterValues = this.reorderFilterItems(this.props, availableFilterValues);\r\n this.setState({\r\n availableFilterValues: reorderedFilterValues\r\n })\r\n };\r\n\r\n reorderFilterItems = (nextProps, availableFilterValues) => {\r\n const currentActiveFilters = nextProps.activePart.activeFeature\r\n ? nextProps.activePart.activeFeature.dbFeature.filterValueIDs\r\n : {};\r\n // console.log(\"currentActiveFilters\", currentActiveFilters);\r\n return availableFilterValues.sort((a,b) => {\r\n const activeA = this.filterValueIsActive(currentActiveFilters, a);\r\n const activeB = this.filterValueIsActive(currentActiveFilters, b);\r\n return activeA !== activeB ? activeA < activeB ? -1 : 1 : 0;\r\n })\r\n };\r\n\r\n getFeatureBodyItemThumbnail = (currentFilterValue) => { // we have the logic with additionalImages in the FeatureWizardBody component\r\n const additionalImages = currentFilterValue.additionalImages;\r\n if (Array.isArray(additionalImages) && additionalImages.length) {\r\n return additionalImages[0].imageUrl\r\n }\r\n return s3FilterImagePath(currentFilterValue.icon);\r\n };\r\n\r\n filterValueIsActive = (currentActiveFilters, currentFilterValue) => {\r\n const activeNavigationFilter = this.props.activeNavigationFilter;\r\n const countertopMaterialOrColor = (\r\n activeNavigationFilter === COUNTERTOP_WIZARD_BUTTONS[1].buttonId\r\n || activeNavigationFilter === COUNTERTOP_WIZARD_BUTTONS[2].buttonId\r\n );\r\n if (countertopMaterialOrColor) {\r\n return false\r\n }\r\n if (activeNavigationFilter === \"inlay_type\" && this.state.filterGroup && this.state.filterGroup.values) {\r\n const modulePartJoined = this.props.moduleContextMenuModule + \"_\" + this.props.moduleContextMenuModulePart; //\"2_3\"\r\n for (let i = 0; i <= this.props.activePart.inlayTypes.length - 1; i++) {\r\n const inlayTypeObject = this.props.activePart.inlayTypes[i];\r\n const existingMJoined = inlayTypeObject.moduleParts.find(mJoined => mJoined === modulePartJoined);\r\n if (existingMJoined) { // not default!\r\n const fValue = this.state.filterGroup.values.find(val => val.value === inlayTypeObject.name);\r\n return fValue.id === currentFilterValue.id\r\n }\r\n }\r\n return currentFilterValue.value === this.props.activePart.defaultInlayType\r\n // } else if ((activeNavigationFilter === COUNTERTOP_WIZARD_BUTTONS[2].buttonId)\r\n // || (activeNavigationFilter === COUNTERTOP_WIZARD_BUTTONS[3].buttonId)) {\r\n // // return this.props.counterTopWizard[activeNavigationFilter] === currentFilterValue.id\r\n // const selectedFilter = this.props.selectedFilters.find(selectedF => {\r\n // return selectedF.filterGroupId === this.state.filterGroup.id\r\n // });\r\n // return (currentFilterValue.id === \"All\")\r\n // ? !selectedFilter\r\n // : selectedFilter && (selectedFilter.filterId === currentFilterValue.id)\r\n }\r\n\r\n return this.state.filterGroup && currentActiveFilters[this.state.filterGroup.id]\r\n && currentActiveFilters[this.state.filterGroup.id].includes(currentFilterValue.id);\r\n };\r\n\r\n removeNavigationFiltersAndSetCommonView = () => {\r\n const commonView = (this.props.windowWidth < 991) ? 4 : 3;\r\n if ((this.props.activeNavigationFilter === COUNTERTOP_WIZARD_BUTTONS[2].buttonId)\r\n && this.props.navigationViewType !== commonView) {\r\n this.props.setNavigationViewType(commonView);\r\n }\r\n this.props.setActiveNavigationFilter(null);\r\n };\r\n\r\n handleFilterValueClick = (currentFilterValue) => {\r\n // if (isActive) {\r\n // return // we don't need to do anything on active item click\r\n // }\r\n // console.log(\"currentFilterValue\", currentFilterValue);\r\n switch (this.props.activeNavigationFilter) {\r\n case \"inlay_type\": {\r\n const modulePartJoined = this.props.moduleContextMenuModule + \"_\" + this.props.moduleContextMenuModulePart; //\"2_3\"\r\n let neededInlayTypesObject = this.props.activePart.inlayTypes.find(obj => obj.name === currentFilterValue.value);\r\n if (currentFilterValue.value !== this.props.activePart.defaultInlayType) {\r\n if (!neededInlayTypesObject) {\r\n neededInlayTypesObject = {name: currentFilterValue.value, moduleParts: []}; // create new & push\r\n this.props.activePart.inlayTypes.push(neededInlayTypesObject);\r\n }\r\n if (!neededInlayTypesObject.moduleParts.includes(modulePartJoined)) {\r\n neededInlayTypesObject.moduleParts.push(modulePartJoined);\r\n this.props.activePart.activeFeatureParts = this.props.activePart.setActiveFeatureParts();\r\n this.props.refreshCB();\r\n }\r\n } else { // it is default type, we need to remove it from the not-default inlayTypes\r\n this.props.activePart.inlayTypes.forEach(inlayTypeObj => {\r\n const existingMJoinedIndex = inlayTypeObj.moduleParts.findIndex(mJoined => mJoined === modulePartJoined);\r\n if (existingMJoinedIndex > -1) {\r\n inlayTypeObj.moduleParts.splice(existingMJoinedIndex, 1);\r\n this.props.activePart.activeFeatureParts = this.props.activePart.setActiveFeatureParts();\r\n this.props.refreshCB();\r\n }\r\n });\r\n }\r\n this.forceUpdate(); // re-render to set new active item\r\n break;\r\n }\r\n case COUNTERTOP_WIZARD_BUTTONS[1].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[2].buttonId: {\r\n // this.props.setCountertopWizard({ // not needed for now, but probably we would need this logic in future\r\n // [this.props.activeNavigationFilter] : currentFilterValue.id\r\n // });\r\n if (currentFilterValue.id === \"All\") {\r\n const selectedFilter = this.props.selectedFilters.find(selectedF => {\r\n return selectedF.filterGroupId === this.state.filterGroup.id\r\n });\r\n if (selectedFilter) { // should work always, but just in case\r\n this.props.setSelectedFilters(toggleFilterArrayValue([...this.props.selectedFilters], {\r\n filterId: selectedFilter.filterId,\r\n filterGroupId: this.state.filterGroup.id\r\n })); // remove selected filter\r\n }\r\n this.removeNavigationFiltersAndSetCommonView();\r\n } else if (Array.isArray(currentFilterValue.items) && currentFilterValue.items.length) {\r\n this.setParentFilterValues(currentFilterValue.items.map(fValue => fValue.id))\r\n } else {\r\n this.props.setSelectedFilters(replaceFilterArrayValue([...this.props.selectedFilters], {\r\n filterId: currentFilterValue.id,\r\n filterGroupId: this.state.filterGroup.id\r\n }));\r\n this.removeNavigationFiltersAndSetCommonView();\r\n }\r\n break;\r\n }\r\n default: {\r\n let matchingFeatures = this.props.activePart.features.filter((feature) => {\r\n return this.state.filterGroup && feature.dbFeature.filterValueIDs[this.state.filterGroup.id]\r\n && feature.dbFeature.filterValueIDs[this.state.filterGroup.id].includes(currentFilterValue.id)\r\n });\r\n if (this.props.activePart.partId === \"top_cabinet\" && this.props.activePart.activeFeature.metaData[\"Module\"]) {\r\n const activeFeatureNameSplitted = this.props.activePart.activeFeature.partName.split(\" M \");\r\n matchingFeatures = matchingFeatures.filter((feature) => {\r\n const featureNameSplitted = feature.partName.split(\" M \");\r\n return (featureNameSplitted.length > 1) && (activeFeatureNameSplitted.length > 1)\r\n && featureNameSplitted[1] === activeFeatureNameSplitted[1]\r\n })\r\n } else if (this.props.activePart.partId === \"bottom_cabinet\" && this.props.activePart.activeFeature.metaData[\"Module\"]) {\r\n matchingFeatures = matchingFeatures.filter((feature) => feature.metaData[\"Appliance\"]\r\n && feature.metaData[\"Appliance\"].includes(\"Range\"))\r\n } else if (this.props.activePart.partId === \"countertop\" || this.props.activePart.partId === \"center_island_countertop\") {\r\n matchingFeatures = this.getMatchingFeaturesBySplittedName(matchingFeatures);\r\n }\r\n if (matchingFeatures.length) {\r\n this.props.onItemClick({part:matchingFeatures[0]}, true);\r\n this.forceUpdate(); // re-render to set new active item\r\n }\r\n break;\r\n }\r\n }\r\n\r\n };\r\n\r\n getMatchingFeaturesBySplittedName = (matchingFeatures = []) => { // array of sorted by filter features\r\n let currentActiveName = this.props.activePart.activeFeature.partName;\r\n const filterGroupName = this.getFilterGroupNameByButtonId(this.props);\r\n const filterGroup = this.props.filterGroups.find(group => group.name === filterGroupName);\r\n if (filterGroup && filterGroup.values && filterGroup.values.length) {\r\n filterGroup.values.forEach((filterGroupValue) => { // arrayOf {id: 293, value: \"Eased\", displayText: \"Eased\", parent_id: null, icon: \"\", …}\r\n currentActiveName = currentActiveName.split(\" \"+filterGroupValue.value).join(\"\");\r\n });\r\n }\r\n return matchingFeatures.filter(feature => {\r\n let featureName = feature.partName;\r\n filterGroup.values.forEach((filterGroupValue) => { // arrayOf {id: 293, value: \"Eased\", displayText: \"Eased\", parent_id: null, icon: \"\", …}\r\n featureName = featureName.split(\" \"+filterGroupValue.value).join(\"\");\r\n });\r\n return featureName === currentActiveName\r\n })\r\n };\r\n\r\n getFilterFeatureItem = (filterValue, currentIndex, currentActiveFilters) => {\r\n const currentFilterValue = filterValue === \"All\"\r\n ? wizardAllButton\r\n : getAllFilterGroupValuesFromGroup(this.state.filterGroup).find(val => val.id === filterValue); // Object\r\n if (!currentFilterValue) {\r\n // console.log(\"NO filterValue!\", filterValue, currentIndex, this.state.availableFilterValues);\r\n return;\r\n }\r\n let thumbnail = this.getFeatureBodyItemThumbnail(currentFilterValue);\r\n\r\n const styles = {\r\n backgroundSize: this.props.activeNavigationFilter === \"color\" ? \"cover\" : \"inherit\"\r\n };\r\n if (thumbnail) {\r\n styles.backgroundImage = \"url(\" + thumbnail + \")\";\r\n }\r\n if (!thumbnail && currentFilterValue && this.props.activeNavigationFilter === \"color\") {\r\n styles.backgroundColor = currentFilterValue.value;\r\n }\r\n if (filterValue === \"All\") {\r\n styles.backgroundSize = (this.props.windowWidth < 991) ? \"70%\" : \"50%\";\r\n styles.backgroundPosition = \"top 30% center\";\r\n }\r\n const isActive = this.filterValueIsActive(currentActiveFilters, currentFilterValue);\r\n\r\n return this.props.isMobile ? (\r\n
  • \r\n
    this.handleFilterValueClick(currentFilterValue)}\r\n style={styles}>\r\n
    \r\n {currentFilterValue.displayText}\r\n
    \r\n
    \r\n
  • \r\n ) : (\r\n
    this.handleFilterValueClick(currentFilterValue)}\r\n style={styles}>\r\n
    \r\n {currentFilterValue.displayText}\r\n
    \r\n
    \r\n )\r\n };\r\n\r\n renderMobileFiltersList = () => {\r\n\r\n if (this.state.isLoading) {\r\n return this.renderLoadingList();\r\n }\r\n\r\n const currentActiveFilters = this.props.activePart.activeFeature\r\n ? this.props.activePart.activeFeature.dbFeature.filterValueIDs\r\n : {};\r\n\r\n if (!this.state.filterGroup || !this.state.filterGroup.values) {\r\n return [];\r\n }\r\n\r\n return this.state.availableFilterValues.map((filterValue, filterValueIndex) => {\r\n return this.getFilterFeatureItem(filterValue, filterValueIndex, currentActiveFilters)\r\n })\r\n };\r\n\r\n renderFiltersList = () => {\r\n\r\n const currentActiveFilters = this.props.activePart.activeFeature\r\n ? this.props.activePart.activeFeature.dbFeature.filterValueIDs\r\n : {};\r\n\r\n const navigationViewType = this.props.navigationViewType === 3 ? 2 : 1;\r\n const elements = [];\r\n for (let i = 0; i <= Math.ceil(this.state.availableFilterValues.length - 1 / navigationViewType); i++ ) { // for ex. 28/3 = 10 columns\r\n const innerElements = [];\r\n for (let j = 0; j < navigationViewType;j++ ) {\r\n const currentIndex = j+(i*navigationViewType);\r\n // console.log(\"currentIndex\", currentIndex);\r\n const filterValue = this.state.availableFilterValues[currentIndex]; // Number, for example 1031\r\n if (!this.state.filterGroup || !this.state.filterGroup.values) {\r\n break;\r\n }\r\n innerElements.push(this.getFilterFeatureItem(filterValue, currentIndex, currentActiveFilters));\r\n }\r\n elements.push(\r\n
  • \r\n {innerElements}\r\n
  • \r\n );\r\n }\r\n\r\n return elements\r\n };\r\n\r\n renderLoadingList() {\r\n return
    \r\n }\r\n\r\n render() {\r\n return this.props.isMobile ? this.renderMobileFiltersList() : (\r\n
      \r\n {this.state.isLoading ? this.renderLoadingList() : this.renderFiltersList()}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n filterGroups: store.filterState.filterGroups,\r\n fabricatorData: store.fabricatorState,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n moduleContextMenuModule: store.navigationState.moduleContextMenuModule,\r\n moduleContextMenuModulePart: store.navigationState.moduleContextMenuModulePart,\r\n counterTopWizard: store.navigationState.counterTopWizard,\r\n navigationViewType: store.navigationState.navigationViewType,\r\n selectedFilters: store.filterState.selectedFilters,\r\n availableFilterValues: store.filterState.availableFilterValues,\r\n windowWidth: store.serverState.windowWidth,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n setCountertopWizard,\r\n setSelectedFilters,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setNavigationViewType,\r\n setAvailableFilterValues,\r\n})(NavigationFilters);\r\n","import React, {Component} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport $ from \"jquery\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport SelectionMobileViewSwitchers from '../mobile/selectionMobileViewSwitchers';\r\nimport FeatureWizardSteps from './featureWizardSteps';\r\nimport FeatureWizardBody from './featureWizardBody';\r\nimport UserLoginButton from './../../../ui/userLoginButton';\r\nimport BodyPanel from \"../desktop/bodyPanel\";\r\nimport ActionTypes from \"../../../../misc/actionTypes\";\r\nimport {NotQCVanityDoorStylesFilters} from \"../../../bvComponent/core/constants\";\r\nimport {UserPopupTypes} from \"../../constants\";\r\n\r\nclass FeatureWizard extends Component {\r\n\r\n static propTypes = {\r\n features: PropTypes.array.isRequired,\r\n exitFeatureWizard: PropTypes.func.isRequired,\r\n handleNavigationItemClick: PropTypes.func.isRequired,\r\n isMobile: PropTypes.bool.isRequired,\r\n wizardGroups: PropTypes.array.isRequired,\r\n setWizardGroups: PropTypes.func.isRequired,\r\n changeMessageBoxState: PropTypes.func.isRequired,\r\n setWizardLockedItem: PropTypes.func,\r\n isPhoneNumberValidated: PropTypes.bool,\r\n userIsLoggedIn: PropTypes.bool,\r\n toggleUserPopup: PropTypes.func,\r\n searchText: PropTypes.string,\r\n // bodyPanelNeededProps\r\n activePart: PropTypes.object,\r\n activeSubPart: PropTypes.object,\r\n toggleApplyWallsCheckbox: PropTypes.func,\r\n isWallItem: PropTypes.func,\r\n handleSubTypeClick: PropTypes.func,\r\n getFilterDisplayName: PropTypes.func,\r\n showerWallWizardGroupsSelected: PropTypes.bool,\r\n toggleWizardFilterSelection: PropTypes.func,\r\n handleSearchInputChange: PropTypes.func,\r\n // bodyPanelNeededProps end\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n window.itemClickCount = window.itemClickCount || 0;\r\n window.allowClickLeadCapturePopup = true;\r\n this.state = {\r\n availableSteps: [],\r\n defaultSteps: [],\r\n featureWizardStep: 0,\r\n showMobileGroups: false,\r\n mounted: false,\r\n finishClicked: true,\r\n filteredFeatures: [],\r\n reload: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n let availableSteps = [];\r\n // const fabricatorSettings = this.props.fabricatorData.settings;\r\n const filteredFeatures = this.getFilteredFeatures();\r\n const itemIsSelected = this.activeItemIsSelected();\r\n\r\n filteredFeatures.forEach((feature) => {\r\n this.props.wizardGroups.forEach((wizardGroup) => {\r\n // console.log('wizardGroup', wizardGroup);\r\n const filter = this.props.filterGroups.find(filterGroup => filterGroup.name.trim() === wizardGroup.filterName);\r\n if (filter) {\r\n const filterId = filter.id;\r\n\r\n let currentFilter = availableSteps.find(step => step.filterName === wizardGroup.filterName);\r\n if (!currentFilter) {\r\n currentFilter = {\r\n filterName: wizardGroup.filterName,\r\n values: wizardGroup.values || [],\r\n id: filterId,\r\n selectedValueId: wizardGroup.selectedValueId,\r\n selectedValueName: wizardGroup.selectedValueName,\r\n hidden: this.checkStepForHidden(filter.name),\r\n hasValues: false\r\n };\r\n availableSteps.push(currentFilter);\r\n }\r\n\r\n const sizeIds = feature.dbFeature.filterValueIDs[filterId];\r\n if (sizeIds) {\r\n if (!currentFilter.hasValues) {\r\n currentFilter.hasValues = true;\r\n }\r\n sizeIds.forEach(filterValue => {\r\n const filterValueExist = currentFilter.values.find(wizardValueObject => +wizardValueObject.filterValue === +filterValue);\r\n if (!filterValueExist) {\r\n let doNotPush = false;\r\n if (currentFilter.filterName === \"DoorStyle\" || currentFilter.filterName === \"Material\") {\r\n const fValue = filter.values.find(val => val.id === filterValue);\r\n if (fValue) {\r\n if (fValue.value === \"QC Hermosa\" || (fValue.value === \"Slab\" && this.props.fabricatorData.isRebath)) {\r\n doNotPush = true\r\n }\r\n }\r\n }\r\n if (!doNotPush) {\r\n currentFilter.values.push({\r\n selectionAvailable: true,\r\n filterValue\r\n })\r\n }\r\n }\r\n });\r\n }\r\n }\r\n });\r\n });\r\n\r\n availableSteps = availableSteps.filter(currentFilter => currentFilter.hasValues); // we might have no filter values\r\n\r\n const allStepsCompleted = availableSteps.every(step => step.selectedValueId);\r\n if (itemIsSelected && this.props.activeSubPart.activeFeature) { // set active filters from the active item\r\n // if (this.props.activeSubPart.activeFeature && this.props.activeSubPart.firstClick[this.props.activeQuoteIndex] && this.props.activeSubPart.placeholderChanged) {\r\n const currentActiveFilters = this.props.activeSubPart.activeFeature.dbFeature.filterValueIDs;\r\n availableSteps = availableSteps.map(step => {\r\n const filterGroup = this.props.filterGroups.find(filterGroup => {\r\n return filterGroup.id === step.id\r\n });\r\n let filterGroupValue = {};\r\n if (currentActiveFilters[step.id]) {\r\n const selectedFilterValueId = currentActiveFilters[step.id][0];\r\n filterGroupValue = filterGroup && filterGroup.values.find(filterGroupValue => {\r\n return filterGroupValue.id === selectedFilterValueId\r\n });\r\n }\r\n if (filterGroupValue) {\r\n step.selectedValueName = filterGroupValue.displayText;\r\n step.selectedValueId = filterGroupValue.id;\r\n }\r\n step.selectedItemIsLocked = this.getLockedPropertyValueObjectById(filterGroupValue, filterGroupValue.id, step.id, filteredFeatures);\r\n return step\r\n })\r\n }\r\n\r\n this.setState({\r\n filteredFeatures,\r\n defaultSteps: availableSteps.map(a => Object.assign({}, a)), // they need to be different\r\n availableSteps: availableSteps.map(b => Object.assign({}, b)),\r\n // showMobileGroups: allStepsCompleted,\r\n featureWizardStep: this.props.wizardStepIndex <= availableSteps.filter(step => !step.hidden).length - 1 ? this.props.wizardStepIndex : 0,\r\n finishClicked: allStepsCompleted\r\n }, () => {\r\n if (this.activeItemIsSelected()) {\r\n this.updateStepValues(availableSteps);\r\n }\r\n this.setLockedView();\r\n setTimeout(() => {\r\n this.setState({\r\n mounted: true\r\n });\r\n }, 0)\r\n });\r\n $(document).on(ActionTypes.USER_IS_LOGGED_IN, this.userHasLoggedIn);\r\n }\r\n\r\n componentWillUnmount = () => {\r\n this.props.setWizardGroups(this.state.availableSteps, this.props.activeSubPart.partId);\r\n $(document).off(ActionTypes.USER_IS_LOGGED_IN, this.userHasLoggedIn);\r\n };\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.activeSubPart && this.props.activeSubPart && (nextProps.activeSubPart.partId !== this.props.activeSubPart.partId)) {\r\n this.componentDidMount();\r\n }\r\n }\r\n\r\n updateStepValues = (availableSteps = this.state.availableSteps, forceClick = false) => {\r\n this.setState({\r\n reload: forceClick,\r\n availableSteps: availableSteps.map((step, stepIndex) => {\r\n step.values = this.setStepValues(step, stepIndex);\r\n return step\r\n })\r\n }, () => {\r\n if (forceClick) {\r\n this.setState({\r\n reload: false\r\n })\r\n }\r\n })\r\n };\r\n\r\n getFilteredFeatures = () => {\r\n const activePart = this.props.activeSubPart;\r\n if (activePart.partId === \"shower_interior_wall\") {\r\n return activePart.navigationSubItemsWithFilterMultipleConditions(activePart.getArrayOfConditions())\r\n }\r\n return this.props.features.filter(feature => {\r\n return !feature.dbFeature.displayName.includes(\"Hermosa\")\r\n })\r\n };\r\n\r\n getLockedPropertyValueObjectById = (currentFilterValue, filterValueId, stepId, filteredFeatures = this.state.filteredFeatures) => {\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n filteredFeatures = filteredFeatures.filter(feature => {\r\n return !feature.dbFeature.displayName.includes(\"laceholder\")\r\n });\r\n let itemIsLocked = false;\r\n if (fabricatorSettings.leadCapture && !this.props.isPhoneNumberValidated && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) {\r\n if (currentFilterValue.lockedInWizard || !filteredFeatures.some(feature => {\r\n // console.log('bject.keys(feature.dbFeature.filterValueIDs)', Object.keys(feature.dbFeature.filterValueIDs));\r\n const filterToFind = feature.dbFeature.filterValueIDs[stepId];\r\n return filterToFind && filterToFind.includes(filterValueId) && feature.dbFeature.unlocked;\r\n })) {\r\n itemIsLocked = true\r\n }\r\n }\r\n return itemIsLocked\r\n };\r\n\r\n userHasLoggedIn = () => {\r\n const currentStep = this.state.availableSteps.filter(step => !step.hidden)[this.state.featureWizardStep];\r\n if (currentStep.selectedValueId) {\r\n const selectedValue = currentStep.values.find(val => val.filterValue === currentStep.selectedValueId);\r\n if (selectedValue) { // just in case, we might remove this check\r\n this[selectedValue.selectionAvailable ? \"onItemClick\" : \"onItemClickDisabled\"](\r\n {\r\n id:currentStep.selectedValueId,\r\n value: currentStep.selectedValueName,\r\n displayText: currentStep.selectedValueName\r\n },\r\n false,\r\n currentStep.filterName\r\n )\r\n }\r\n }\r\n };\r\n\r\n activeItemIsSelected = () => {\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n const activeSubPart = this.props.activeSubPart;\r\n return (!fabricatorSettings.leadCapture\r\n || (activeSubPart.activeFeature && !activeSubPart.activeFeature.partName.includes(\"WizardPlaceholder\")\r\n && activeSubPart.firstClick[this.props.activeQuoteIndex] && activeSubPart.placeholderChanged));\r\n };\r\n\r\n checkStepForHidden = (filterGroupName) => {\r\n let hidden = false;\r\n filterGroupName = filterGroupName.trim().toLowerCase();\r\n if (this.activeItemIsSelected() && this.props.activeSubPart.activeFeature) {\r\n\r\n const currentActiveFilters = this.props.activeSubPart.activeFeature.dbFeature.filterValueIDs;\r\n\r\n if (this.props.activeSubPart.partId === \"shower_interior_wall\") {\r\n const materialFilter = this.props.filterGroups.find(filterGroup => filterGroup.name.trim() === \"Material\");\r\n if (materialFilter && currentActiveFilters[materialFilter.id]) { // check for existing BV filters\r\n const materialValueId = currentActiveFilters[materialFilter.id][0];\r\n const materialValue = materialFilter.values.find(val => val.id === materialValueId);\r\n if (materialValue && (\r\n (materialValue.value !== \"DuraBath\" && filterGroupName === \"durabathcolor\")\r\n || (materialValue.value !== \"DuraBath\" && materialValue.value !== \"Tile\" && filterGroupName === \"tilepattern\")\r\n || (materialValue.value !== \"Acrylic\" && filterGroupName === \"acrylicpattern\")\r\n || (materialValue.value !== \"Acrylic\" && filterGroupName === \"acryliccolor\")\r\n || (materialValue.value !== \"Tile\" && filterGroupName === \"tilecolor\")\r\n || (materialValue.value !== \"Slab\" && materialValue.value !== \"DuraBath Natural Stone\" && filterGroupName === \"slabcolor\")\r\n )) {\r\n hidden = true;\r\n }\r\n }\r\n } else if (this.props.activeSubPart.partId === \"vanity_cabinet\") {\r\n const doorStyleFilter = this.props.filterGroups.find(filterGroup => filterGroup.name.trim() === \"DoorStyle\");\r\n if (doorStyleFilter && currentActiveFilters[doorStyleFilter.id]) { // check for existing BV filters\r\n const doorStyleValueId = currentActiveFilters[doorStyleFilter.id][0];\r\n const doorStyleValue = doorStyleFilter.values.find(val => val.id === doorStyleValueId);\r\n if (doorStyleValue && (\r\n (!NotQCVanityDoorStylesFilters.includes(doorStyleValue.value) && filterGroupName === \"material\")\r\n )) {\r\n hidden = true;\r\n }\r\n }\r\n }\r\n } else if (this.props.activeSubPart.partId === \"shower_interior_wall\") {\r\n const wizardFilters = [\"slabcolor\", \"tilecolor\", \"tilepattern\", \"acrylicpattern\", \"acryliccolor\"];\r\n hidden = wizardFilters.includes(filterGroupName);\r\n } else if (this.props.activeSubPart.partId === \"vanity_cabinet\") {\r\n hidden = filterGroupName === \"material\"\r\n }\r\n return hidden\r\n };\r\n\r\n setLockedView = () => {\r\n\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n\r\n const currentStep = this.state.availableSteps.filter(step => !step.hidden)[this.state.featureWizardStep];\r\n if (currentStep && currentStep.selectedValueId && fabricatorSettings.leadCapture && !this.props.isPhoneNumberValidated) {\r\n const currentGroup = this.props.filterGroups.find((filterGroup) => {\r\n return filterGroup.id === currentStep.id\r\n });\r\n const currentFilterValue = currentGroup.values.find(currentGroupValue => {\r\n return currentGroupValue.id === currentStep.selectedValueId\r\n });\r\n const filteredFeatures = this.state.filteredFeatures.filter(feature => {\r\n return !feature.dbFeature.displayName.includes(\"laceholder\")\r\n });\r\n\r\n let itemIsLocked = false;\r\n if (currentFilterValue.lockedInWizard || !filteredFeatures.some(feature => {\r\n // console.log('bject.keys(feature.dbFeature.filterValueIDs)', Object.keys(feature.dbFeature.filterValueIDs));\r\n const filterToFind = feature.dbFeature.filterValueIDs[currentStep.id];\r\n return filterToFind && filterToFind.includes(currentStep.selectedValueId) && feature.dbFeature.unlocked;\r\n })) {\r\n itemIsLocked = true\r\n }\r\n\r\n this.props.setWizardLockedItem(itemIsLocked);\r\n }\r\n };\r\n\r\n // getCurrentFilterObject = (stepIndex) => {\r\n getCurrentFilterObject = () => {\r\n const selectedFilterObject = {};\r\n // const availableSteps = (stepIndex || stepIndex === 0)\r\n // ? this.state.availableSteps.slice(0, stepIndex) // we need to get only previous selected values if index is passed\r\n // : this.state.availableSteps;\r\n this.state.availableSteps.filter(step => !step.hidden).forEach((availableStep) => {\r\n if (availableStep.selectedValueId) {\r\n selectedFilterObject[availableStep.id] = availableStep.selectedValueId\r\n }\r\n });\r\n return selectedFilterObject\r\n };\r\n\r\n setFeatureWizardStep = (featureWizardStep) => {\r\n const availableSteps = !featureWizardStep && !this.state.availableSteps[0].selectedValueId\r\n ? this.state.defaultSteps\r\n : this.state.availableSteps.map((availableStep, index) => {\r\n availableStep.values = this.setStepValues(availableStep, index);\r\n return availableStep\r\n });\r\n this.setState({\r\n featureWizardStep: availableSteps.filter(step => !step.hidden)[featureWizardStep] ? featureWizardStep : 0,\r\n showMobileGroups: false,\r\n availableSteps\r\n }, () => {\r\n this.setLockedView();\r\n });\r\n this.props.handleSearchInputChange({target: {value: ''}});\r\n };\r\n\r\n setStepValues = (step, stepIndex) => {\r\n const selectedFilterObject = this.getCurrentFilterObject(stepIndex); // get only previous selected values\r\n // console.log('selectedFilterObject111', selectedFilterObject);\r\n return this.state.defaultSteps[stepIndex].values.map((wizardValueObject) => {\r\n let allFiltersObject = Object.assign({}, selectedFilterObject);\r\n\r\n // if (this.props.activeSubPart.partId === \"vanity_cabinet\" && step.filterName === \"Color\" && selectedFilterObject) {\r\n // const doorStyleFilter = this.props.filterGroups.find(filterGroup => filterGroup.name.trim() === \"DoorStyle\");\r\n // if (doorStyleFilter && selectedFilterObject[doorStyleFilter.id] === 661) {\r\n // selectedFilterObject[doorStyleFilter.id] = 660 // TODO[Artem] REMOVE THIS HARDCODE (QC HERMOZA HAS WRONG FILTER ID!)\r\n // }\r\n // }\r\n\r\n allFiltersObject[step.id] = +wizardValueObject.filterValue;\r\n // console.log('allFiltersObject', allFiltersObject);\r\n wizardValueObject.selectionAvailable = this.state.filteredFeatures.some(feature => {\r\n const featureFilters = feature.dbFeature.filterValueIDs;\r\n if (featureFilters && Object.keys(allFiltersObject).every((filterKey) => {\r\n return featureFilters[filterKey] && featureFilters[filterKey].includes(allFiltersObject[filterKey])\r\n })) {\r\n // console.log('feature', feature);\r\n return true\r\n }\r\n return false\r\n });\r\n return wizardValueObject\r\n });\r\n };\r\n\r\n getFilterValue = (step, filterValue) => {\r\n const filterGroup = this.props.filterGroups.find(filterGroup => {\r\n return filterGroup.id === this.state.availableSteps.filter(step => !step.hidden)[step].id\r\n });\r\n const filterGroupValue = filterGroup && filterGroup.values.find(filterGroupValue => {\r\n return filterGroupValue.id === +filterValue.id\r\n });\r\n return filterGroupValue\r\n };\r\n\r\n onItemClick = (filterValue, itemIsLocked, currentStepFilterName, forceClick = false) => {\r\n\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n if( !this.props.userIsLoggedIn && fabricatorSettings.clickLeadCapture\r\n && ++window.itemClickCount >= fabricatorSettings.clickLeadCount && window.allowClickLeadCapturePopup) {\r\n this.handleUserLoginClick(UserPopupTypes.NewDesign);\r\n return;\r\n }\r\n\r\n let resetStepValues = false;\r\n if (this.props.activeSubPart.partId === \"vanity_cabinet\" && (currentStepFilterName === \"Size\") && !itemIsLocked) {\r\n resetStepValues = true\r\n }\r\n\r\n /*** 1) just set new filter value ***/\r\n const availableSteps = this.state.availableSteps.map((availableStep) => {\r\n if (availableStep.filterName === currentStepFilterName) {\r\n availableStep.selectedValueId = filterValue.id;\r\n const filterGroupValue = this.getFilterValue(this.state.featureWizardStep, filterValue);\r\n availableStep.selectedValueName = filterGroupValue ? filterGroupValue.displayText : \"\";\r\n availableStep.selectedItemIsLocked = itemIsLocked;\r\n }\r\n /*** 2) add for filter steps hidden values & clear selected values ***/\r\n availableStep = this.setHiddenStateToStep(availableStep, currentStepFilterName, filterValue, forceClick || resetStepValues);\r\n // if (availableStep.needToRefresh) {\r\n // forceReload = true;\r\n // delete availableStep.needToRefresh\r\n // }\r\n return availableStep\r\n });\r\n\r\n /*** 3) if it is SelectionNotAvailableClick & clicked on a DoorStyle - check if current Vanity support it ***/\r\n if (this.props.activeSubPart.partId === \"vanity_cabinet\" && forceClick && currentStepFilterName === \"DoorStyle\") {\r\n\r\n const sizeStep = this.state.availableSteps.find(step => step.filterName === \"Size\");\r\n const doorStyleStep = this.state.availableSteps.find(step => step.filterName === currentStepFilterName);\r\n\r\n let existingIdeallyFeature = this.state.filteredFeatures.find(feature => {\r\n const doorStyleMatch = feature.dbFeature.filterValueIDs[doorStyleStep.id]\r\n && feature.dbFeature.filterValueIDs[doorStyleStep.id][0] === filterValue.id;\r\n const sizeMatch = sizeStep.selectedValueId && feature.dbFeature.filterValueIDs[sizeStep.id]\r\n && feature.dbFeature.filterValueIDs[sizeStep.id][0] === sizeStep.selectedValueId;\r\n return doorStyleMatch && sizeMatch\r\n });\r\n if (!existingIdeallyFeature) {\r\n existingIdeallyFeature = this.state.filteredFeatures.find(feature => {\r\n const doorStyleMatch = feature.dbFeature.filterValueIDs[doorStyleStep.id]\r\n && feature.dbFeature.filterValueIDs[doorStyleStep.id][0] === filterValue.id;\r\n return doorStyleMatch\r\n });\r\n }\r\n // console.log('existingIdeallyFeature', existingIdeallyFeature);\r\n if (existingIdeallyFeature) {\r\n const sizeValue = existingIdeallyFeature.dbFeature.filterValueIDs[sizeStep.id][0];\r\n if (sizeValue && sizeStep.selectedValueId !== sizeValue) {\r\n sizeStep.selectedValueId = sizeValue;\r\n const filterGroup = this.props.filterGroups.find(filterGroup => filterGroup.id === sizeStep.id);\r\n const filterGroupValue = filterGroup && filterGroup.values.find(filterGroupValue => {\r\n return filterGroupValue.id === sizeValue\r\n });\r\n sizeStep.selectedValueName = filterGroupValue ? filterGroupValue.displayText : \"\";\r\n sizeStep.selectedItemIsLocked = sizeStep.values.find(val => val.filterValue === sizeValue.itemIsLocked);\r\n }\r\n }\r\n } else if (this.props.activeSubPart.partId === \"shower_interior_wall\" && !itemIsLocked) {\r\n if (currentStepFilterName === \"DuraBathColor\") {\r\n const patternStep = this.state.availableSteps.find(step => step.filterName === \"TilePattern\");\r\n if (!patternStep.selectedValueId) {\r\n const patternGroup = this.props.filterGroups.find(filterGroup => filterGroup.id === patternStep.id);\r\n const patternGroupSlabValue = patternGroup.values.find(step => step.value === \"Smooth\");\r\n if (patternGroupSlabValue) {\r\n patternStep.selectedValueId = patternGroupSlabValue.id;\r\n patternStep.selectedValueName = patternGroupSlabValue.displayText;\r\n const smoothFilterObject = patternStep.values.find(val => val.filterValue === patternGroupSlabValue.id);\r\n patternStep.selectedItemIsLocked = smoothFilterObject ? smoothFilterObject.itemIsLocked : false\r\n }\r\n }\r\n }\r\n }\r\n this.setState({\r\n availableSteps,\r\n }, () => {\r\n this.tryToClickOnMatchingFiltersItem(itemIsLocked, forceClick)\r\n });\r\n };\r\n\r\n setHiddenStateToStep = (availableStep, currentStepFilterName, filterValue, resetStepValues) => {\r\n const filterValueName = filterValue.value.toLowerCase();\r\n const stepName = availableStep.filterName.toLowerCase();\r\n if (this.state.featureWizardStep === 0 && this.props.activeSubPart.partId === \"shower_interior_wall\") {\r\n availableStep.hidden =\r\n (filterValueName !== \"durabath\" && stepName === \"durabathcolor\")\r\n || (filterValueName !== \"durabath\" && filterValueName !== \"tile\" && stepName === \"tilepattern\")\r\n || (filterValueName !== \"acrylic\" && stepName === \"acrylicpattern\")\r\n || (filterValueName !== \"acrylic\" && stepName === \"acryliccolor\")\r\n || (filterValueName !== \"slab\" && filterValueName !== \"durabath natural stone\" && stepName === \"slabcolor\")\r\n || (filterValueName !== \"tile\" && stepName === \"tilecolor\")\r\n } else if (this.props.activeSubPart.partId === \"vanity_cabinet\") {\r\n if (currentStepFilterName === \"DoorStyle\") { // clicked on a door style step value\r\n const withoutDoorStyle = !NotQCVanityDoorStylesFilters.includes(filterValue.value);\r\n availableStep.hidden = (withoutDoorStyle && stepName === \"material\");\r\n\r\n const wizardIsFinished = this.state.availableSteps.filter(step => !step.hidden).every(step => step.selectedValueId);\r\n\r\n if ((stepName === \"material\" || stepName === \"color\") && (resetStepValues || !wizardIsFinished)) {\r\n availableStep.selectedValueId = null;\r\n availableStep.selectedValueName = \"\";\r\n availableStep.selectedItemIsLocked = false;\r\n // availableStep.needToRefresh = true;\r\n }\r\n } else if (resetStepValues && currentStepFilterName === \"Size\" && stepName !== \"size\") { // clicked on a Size step value\r\n availableStep.selectedValueId = null;\r\n availableStep.selectedValueName = \"\";\r\n availableStep.selectedItemIsLocked = false;\r\n }\r\n }\r\n return availableStep\r\n };\r\n\r\n getPlaceholdersFeatures = () => {\r\n return this.state.filteredFeatures.filter(feature => feature.dbFeature.displayName.includes(\"WizardPlaceholder\"));\r\n };\r\n\r\n tryToClickOnMatchingFiltersItem = (itemIsLocked, forceClick) => {\r\n this.props.setWizardLockedItem(itemIsLocked);\r\n\r\n const selectedFilterObject = this.getCurrentFilterObject();\r\n // console.log('selectedFilterObject', selectedFilterObject);\r\n // console.log('=========');\r\n const arrayOfSelectedKeys = Object.keys(selectedFilterObject);\r\n const wizardIsFinished = this.state.availableSteps.filter(step => !step.hidden).every(step => step.selectedValueId);\r\n const filteredFeatures = wizardIsFinished ? this.state.filteredFeatures : this.getPlaceholdersFeatures();\r\n\r\n const foundFeaturesFromFilters = filteredFeatures.filter(feature => {\r\n const featureFilters = feature.dbFeature.filterValueIDs;\r\n const arrayOfCurrentKeys = Object.keys(featureFilters);\r\n // console.log('featureFilters', featureFilters, feature.dbFeature.displayName);\r\n if (wizardIsFinished) {\r\n if (Object.keys(selectedFilterObject).every((filterKey) => {\r\n return featureFilters[filterKey] && featureFilters[filterKey].includes(selectedFilterObject[filterKey])\r\n })) {\r\n // console.log('feature', feature);\r\n return true\r\n }\r\n return false\r\n } else {\r\n if ((arrayOfCurrentKeys.length === arrayOfSelectedKeys.length) && Object.keys(selectedFilterObject).every((filterKey) => {\r\n return featureFilters[filterKey] && featureFilters[filterKey][0] === selectedFilterObject[filterKey]\r\n })) {\r\n // console.log('feature found', feature);\r\n return true\r\n }\r\n return false\r\n }\r\n });\r\n let foundFeature = null;\r\n if (Array.isArray(foundFeaturesFromFilters) && foundFeaturesFromFilters.length) {\r\n if (this.props.activeSubPart.partId === \"vanity_cabinet\" && foundFeaturesFromFilters.length > 1) {\r\n foundFeature = foundFeaturesFromFilters.find(feature => feature.metaData[\"VanityHandle\"]);\r\n }\r\n if (!foundFeature) {\r\n foundFeature = foundFeaturesFromFilters[0];\r\n }\r\n }\r\n if (foundFeature && !itemIsLocked) {\r\n this.props.handleNavigationItemClick({part:foundFeature}, true);\r\n }\r\n this.updateStepValues(this.state.availableSteps, forceClick);\r\n };\r\n\r\n onItemClickDisabled = (filterValue, itemIsLocked, currentStepFilterName) => {\r\n if (itemIsLocked) {\r\n this.onItemClick(filterValue, itemIsLocked, currentStepFilterName);\r\n return;\r\n }\r\n // Size is unreachable code since it is always enabled // Alan wants to show them !disabled (26.02.2019)\r\n const askQuestion = this.props.activeSubPart.partId === \"vanity_cabinet\"\r\n && (currentStepFilterName === \"DoorStyle\" || currentStepFilterName === \"Size\");\r\n\r\n const message = {\r\n id: askQuestion ? \"messageBox.wizard.itemIsNotAvailableWithQuestion\" : \"messageBox.wizard.itemIsNotAvailable\",\r\n filterValueClicked: filterValue.displayText,\r\n filterName: this.state.availableSteps.filter(step => !step.hidden)[this.state.featureWizardStep].filterName\r\n };\r\n const buttons = [{\r\n text: askQuestion ? \"messageBox.buttonNo\" : \"messageBox.buttonOk\",\r\n color: \"blue\",\r\n click: () => {\r\n this.props.changeMessageBoxState({visible:false});\r\n }\r\n }];\r\n if (askQuestion) {\r\n buttons.push({\r\n text: \"messageBox.buttonYes\",\r\n color: \"green\",\r\n click: () => {\r\n this.onItemClick(filterValue, itemIsLocked, currentStepFilterName, true);\r\n this.props.changeMessageBoxState({visible:false});\r\n }\r\n })\r\n }\r\n this.props.changeMessageBoxState({\r\n visible: true,\r\n message,\r\n buttons\r\n });\r\n };\r\n\r\n handleUserLoginClick = (userPopupType = UserPopupTypes.Unlock) => {\r\n UserLoginButton.handleLoginClick({...this.props, userPopupType});\r\n };\r\n\r\n exitFeatureWizard = () => {\r\n if (this.props.isMobile) {\r\n this.props.exitFeatureWizard(\r\n this.state.availableSteps,\r\n this.props.activeSubPart.partId\r\n )\r\n } else {\r\n this.setState({\r\n mounted: false,\r\n finishClicked: true\r\n });\r\n setTimeout(() => {\r\n this.props.exitFeatureWizard(\r\n this.state.availableSteps,\r\n this.props.activeSubPart.partId\r\n )\r\n }, 300);\r\n }\r\n };\r\n\r\n render() {\r\n // console.log('features top', this.state.filteredFeatures);\r\n // console.log('this.state.availableSteps', this.state.availableSteps);\r\n const availableSteps = this.state.availableSteps.filter(step => !step.hidden);\r\n const allStepsCompleted = availableSteps.every(step => step.selectedValueId);\r\n const interiorShowerWallWizard = this.props.activeSubPart.partId === \"shower_interior_wall\";\r\n const itemIsSelected = this.activeItemIsSelected();\r\n\r\n return this.props.isMobile ?\r\n this.state.showMobileGroups ? (\r\n
    \r\n
      \r\n {availableSteps.map((wizardStep, wizardStepIndex) => {\r\n const name = wizardStep.filterName.replace(/ /g,\"\").toLowerCase();\r\n return (\r\n
    • this.setFeatureWizardStep(wizardStepIndex)}\r\n key={\"wizardStepIndex\"+wizardStepIndex}>\r\n {wizardStep.filterName}\r\n
    • \r\n )\r\n })}\r\n
    \r\n
    \r\n ) : (\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n {availableSteps.length && !this.state.reload ? (\r\n \r\n ) :
    }\r\n
    \r\n
    \r\n {!(interiorShowerWallWizard && !this.props.showerWallWizardGroupsSelected) ? (\r\n \r\n ) : null}\r\n
    \r\n )\r\n : ( // desktop\r\n
    \r\n \r\n {availableSteps.length && !this.state.reload ? (\r\n \r\n ) :
    }\r\n {interiorShowerWallWizard && !this.props.showerWallWizardGroupsSelected ? null : (\r\n
    \r\n
    \r\n \r\n {availableSteps[this.state.featureWizardStep]\r\n ? `Select a ${this.props.getFilterDisplayName(availableSteps[this.state.featureWizardStep].filterName, this.props.intl)} for your ${this.props.activeSubPart.partId === \"shower_interior_wall\" ? \"Wall\" : \"Vanity\"}.`\r\n : null}\r\n \r\n \r\n
    \r\n \r\n
    \r\n )}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n fabricatorData: store.fabricatorState,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n navigationViewType: store.navigationState.navigationViewType,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n});\r\n\r\nconst mapDispatchToProps = () => ({});\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(FeatureWizard)\r\n);\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport Z from \"../core/parts/zIndex\";\r\nimport {ShowerTubCombo} from \"../core/parts/showerTubCombo\";\r\nimport {Vanity} from \"../core/parts/vanity\";\r\nimport {Shower} from \"../core/parts/shower\";\r\nimport {Wall} from \"../core/parts/wall\";\r\nimport {BathTubType, VanityTypes, ShowerTypes, ShowerComboTubType} from \"../core/constants\";\r\nimport {getMetadataByDimensions, reorder} from \"../../../misc/utils\";\r\nimport Analytics from \"../../../analytics\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {ShowerAccessories} from \"../core/parts/showerAccessories\";\r\n\r\nclass ContextMenu extends Component {\r\n\r\n static propTypes = {\r\n designNavigationItems: PropTypes.array,\r\n contextMenuOpen: PropTypes.string,\r\n hoveredLayer: PropTypes.object,\r\n handleContextMenuClick: PropTypes.func,\r\n contextMenuPosition: PropTypes.object,\r\n contextMenuPonyWall: PropTypes.bool,\r\n renderGreenLayerByZindex: PropTypes.func,\r\n closeContextMenu: PropTypes.func,\r\n };\r\n\r\n state = {\r\n contextMenuButtons: []\r\n };\r\n\r\n componentDidMount() {\r\n this.setContextMenuButtons();\r\n if (this.props.closeContextMenu) {\r\n document.addEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n contextMenuBlur = (e) => {\r\n if (!e.target.closest('.contextmenu-buttons')\r\n && !e.target.closest('.contextmenu-buttons__button')\r\n && !e.target.closest('.sprocket-container') && !e.target.closest('.canvas')) {\r\n this.props.closeContextMenu();\r\n }\r\n };\r\n\r\n componentWillUnmount() {\r\n if (this.props.closeContextMenu) {\r\n document.removeEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n setShowerBodySelectionButtons = () => {\r\n const layout = getCurrentLayout();\r\n const shower = layout.parts[Shower.id];\r\n const vanity = layout.parts[Vanity.id];\r\n const counterTopSize = vanity.counterTopSize();\r\n const showerTubCombo = layout.parts[ShowerTubCombo.id];\r\n\r\n const showerSubParts = shower.subParts();\r\n const showerBody = showerSubParts.find((menuItem) => {\r\n return menuItem.part.partId === \"shower_body\"\r\n });\r\n const currentShowerSize = shower.showerSize();\r\n let contextMenuButtons = [];\r\n\r\n if (showerTubCombo.showerTubComboIsActive) {\r\n const showerTubComboSubParts = showerTubCombo.subParts();\r\n const wallConfiguration = showerTubComboSubParts.find((menuItem) => {\r\n return menuItem.part.partId === \"wall_configuration\"\r\n });\r\n showerTubCombo.wallConfiguration.features.forEach((wallConfigurationFeature) => {\r\n contextMenuButtons.push(Object.assign({}, wallConfiguration, {\r\n subMenuParent: \"Walls\",\r\n subMenuText: wallConfigurationFeature.partName,\r\n intlTranslate: this.props.intl.formatMessage({id: showerTubCombo.wallConfiguration.translateId}),\r\n bgImageText: wallConfigurationFeature.partName,\r\n clickFeature: true,\r\n text: wallConfigurationFeature.partName.includes(\"Pony\") ? \"Pony Wall\" : \"Left Shower Wall\"\r\n }))\r\n })\r\n } else if (showerBody && showerBody.part.features.length) {\r\n showerBody.part.features.forEach((showerBodyFeature) => {\r\n if (showerBodyFeature.partName.includes(currentShowerSize)) {\r\n // console.log('showerBodyFeature.partName', showerBodyFeature.partName);\r\n if (!(counterTopSize === \"72in\" && layout.type === 1 && showerBodyFeature.partName.includes(\"15X4\"))) {\r\n const isPony = showerBodyFeature.partName.includes(\"Pony\");\r\n contextMenuButtons.push(Object.assign({}, showerBody, {\r\n subMenuParent: \"Walls\",\r\n subMenuText: showerBodyFeature.partName,\r\n intlTranslate: this.props.intl.formatMessage({id: isPony\r\n ? \"visualizer.bathroom.walls.pony_wall\"\r\n : \"visualizer.bathroom.walls.left_shower_wall\"\r\n }),\r\n bgImageText: showerBodyFeature.partName,\r\n clickFeature: true,\r\n text: isPony ? \"Pony Wall\" : \"Left Shower Wall\"\r\n }))\r\n }\r\n }\r\n })\r\n }\r\n\r\n const clickedItemIndex = contextMenuButtons.findIndex(item => {\r\n return showerTubCombo.showerTubComboIsActive\r\n ? item.subMenuText === showerTubCombo.wallConfiguration.activeFeature.partName\r\n : item.subMenuText === showerBody.part.activeFeature.partName\r\n });\r\n\r\n if (clickedItemIndex > 0) {\r\n contextMenuButtons = reorder(contextMenuButtons, clickedItemIndex, 0); // swap items in array start\r\n }\r\n\r\n this.setState({\r\n contextMenuButtons\r\n })\r\n };\r\n\r\n setWallBButtons = () => {\r\n const layout = getCurrentLayout();\r\n let contextMenuButtons = [];\r\n\r\n const wallParent = layout.parts[Wall.id];\r\n const wallParts = wallParent.subParts().filter((menuItem) => {\r\n return (menuItem.part.partId === \"wall_b\") || (menuItem.part.partId === \"accent_wall\")\r\n });\r\n wallParts.forEach((wallPart) => {\r\n contextMenuButtons.push(Object.assign({}, wallPart, {\r\n subMenuParent: \"Walls\",\r\n subMenuText: wallPart.part.partName,\r\n bgImageText: wallPart.part.partName,\r\n text: wallPart.text,\r\n intlTranslate: this.props.intl.formatMessage({id: wallPart.part.translateId})\r\n }));\r\n });\r\n\r\n const vanity = layout.parts[Vanity.id];\r\n const vanityBacksplash = vanity.subParts().find((menuItem) => {\r\n return menuItem.part.partId === \"vanity_backsplash\"\r\n });\r\n if (vanityBacksplash) {\r\n contextMenuButtons.push(Object.assign({}, vanityBacksplash, {\r\n subMenuParent: \"Vanity\",\r\n subMenuText: vanityBacksplash.part.partName,\r\n bgImageText: vanityBacksplash.part.partName,\r\n text: vanityBacksplash.text,\r\n intlTranslate: this.props.intl.formatMessage({id: vanityBacksplash.part.translateId})\r\n }));\r\n }\r\n\r\n let zIndexToFind = this.props.hoveredLayer.zIndex;\r\n\r\n const clickedItem = contextMenuButtons.find(item => {\r\n return item.part.activeFeature && item.part.activeFeature.layer && item.part.activeFeature.layer.zIndex === zIndexToFind;\r\n });\r\n if (clickedItem && clickedItem.part && clickedItem.part.partId === \"vanity_backsplash\") {\r\n const vanityFaucet = vanity.subParts().find((menuItem) => {\r\n return menuItem.part.partId === \"vanity_faucet\"\r\n });\r\n if (vanityFaucet) {\r\n contextMenuButtons.push(Object.assign({}, vanityFaucet, {\r\n subMenuParent: \"Vanity\",\r\n subMenuText: vanityFaucet.part.partName,\r\n bgImageText: vanityFaucet.part.partName,\r\n text: vanityFaucet.text,\r\n intlTranslate: this.props.intl.formatMessage({id: vanityFaucet.part.translateId})\r\n }));\r\n }\r\n }\r\n\r\n const clickedItemIndex = contextMenuButtons.findIndex(item => {\r\n return item.part.activeFeature && item.part.activeFeature.layer && item.part.activeFeature.layer.zIndex === zIndexToFind;\r\n });\r\n\r\n if (clickedItemIndex > 0) {\r\n contextMenuButtons = reorder(contextMenuButtons, clickedItemIndex, 0); // swap items in array start\r\n }\r\n\r\n this.setState({\r\n contextMenuButtons\r\n })\r\n };\r\n\r\n setContextMenuButtons() {\r\n\r\n const layout = getCurrentLayout();\r\n\r\n if (this.props.contextMenuOpen === \"Shower Body Selection\") {\r\n this.setShowerBodySelectionButtons();\r\n return\r\n } else if (this.props.contextMenuOpen === \"wall_b_custom\") {\r\n this.setWallBButtons();\r\n return\r\n }\r\n\r\n const hoveredParent = this.props.designNavigationItems.find(navItem => {\r\n return navItem.text === this.props.contextMenuOpen\r\n });\r\n\r\n let relatedItems = hoveredParent.part.relatedItems;\r\n if (this.props.contextMenuOpen === \"Shower Tub Combo\") {\r\n relatedItems = [...hoveredParent.part.relatedItems, ...hoveredParent.part.getShowerRelatedItems()]\r\n }\r\n\r\n const clickedItem = this.props.hoveredLayer.zIndex === Z.layouts[layout.getCurrentLayoutName()].Shower.Steam60in.Body[\"2\"]\r\n ? relatedItems[0]\r\n : relatedItems.find((item) => {\r\n let zIndexToFind = this.props.hoveredLayer.zIndex;\r\n if (this.props.hoveredLayer.zIndex === Z.layouts[layout.getCurrentLayoutName()].Shower.Custom60in.Wall2) {\r\n zIndexToFind = Z.layouts[layout.getCurrentLayoutName()].Shower.Custom60in.Wall\r\n }\r\n if (\r\n this.props.hoveredLayer.zIndex === Z.layouts[layout.getCurrentLayoutName()].Shower.Custom60in.WallAccent2\r\n ) {\r\n zIndexToFind = Z.layouts[layout.getCurrentLayoutName()].Shower.Custom60in.WallAccent\r\n }\r\n return item.activeFeature && item.activeFeature.layer.zIndex === zIndexToFind\r\n });\r\n\r\n let itemsToRender = this.getItemsToRender(hoveredParent);\r\n\r\n // console.log('clickedItem', clickedItem);\r\n // console.log('relatedItems', relatedItems);\r\n // console.log('itemsToRender', itemsToRender);\r\n\r\n const clickedItemIndex = itemsToRender.findIndex(item => item.text === clickedItem.partName);\r\n if (clickedItemIndex > 0) {\r\n itemsToRender = reorder(itemsToRender, clickedItemIndex, 0); // swap items in array start\r\n }\r\n\r\n this.setState({\r\n contextMenuButtons: itemsToRender\r\n })\r\n }\r\n\r\n getItemsToRender = (hoveredParent) => {\r\n const layout = getCurrentLayout();\r\n let itemsToRender = hoveredParent.part.subParts();\r\n\r\n if ((this.props.contextMenuOpen === \"Shower\" || this.props.contextMenuOpen === \"Shower Tub Combo\") && hoveredParent.text !== \"Shower Accessories\") {\r\n itemsToRender = itemsToRender.filter(menuButton => {\r\n return this.props.contextMenuPonyWall\r\n ? menuButton.part.isPonyWallPart && menuButton.part.partId !== \"pony_wall\"\r\n : !menuButton.part.isPonyWallPart\r\n });\r\n const accessoriesParent = layout.parts[ShowerAccessories.id];\r\n if (accessoriesParent && accessoriesParent.categoryEnabled && !this.props.contextMenuPonyWall) {\r\n itemsToRender = itemsToRender.filter(menuButton => menuButton.part.partId !== \"shower_interior_wall_accent\");\r\n itemsToRender.push({\r\n text: \"Accessories\",\r\n part: {},\r\n subNav: true,\r\n intlTranslate: this.props.intl.formatMessage({id: \"visualizer.bathroom.accessories\"})\r\n })\r\n }\r\n itemsToRender = itemsToRender.filter(menuButton => menuButton.part.partId !== \"shower_head\");\r\n if (layout.parts[ShowerTubCombo.id] && !this.props.contextMenuPonyWall) {\r\n itemsToRender.push({\r\n text: \"Configure Layout\",\r\n part: {},\r\n subNav: true,\r\n intlTranslate: this.props.intl.formatMessage({id: \"visualizer.bathroom.contextmenu.configureLayout\"})\r\n })\r\n }\r\n }\r\n\r\n if (this.props.contextMenuOpen === \"Shower\") {\r\n itemsToRender = itemsToRender.filter(menuButton => menuButton.part.partId !== \"threshold\");\r\n }\r\n if (this.props.contextMenuOpen === \"Shower Tub Combo\") {\r\n itemsToRender = this.removeNotUsedTubItemsFromContextMenu(itemsToRender, hoveredParent.part.bottomTub);\r\n }\r\n if (this.props.contextMenuOpen === \"Vanity\") {\r\n itemsToRender = itemsToRender.filter((itemToRender) => {\r\n return itemToRender.part.partId !== \"vanity_mirror\" && itemToRender.part.partId !== \"vanity_backsplash\";\r\n });\r\n }\r\n\r\n return itemsToRender\r\n };\r\n\r\n removeNotUsedTubItemsFromContextMenu = (itemsToRender, activeTub) => {\r\n return itemsToRender.filter((itemToRender) => {\r\n let keepThisItem = true;\r\n Object.keys(ShowerComboTubType).forEach((key) => {\r\n if (itemToRender.part.partId === ShowerComboTubType[key] && itemToRender.part.partId !== activeTub\r\n && itemToRender.part.partId !== ShowerComboTubType.replacement_tub\r\n && itemToRender.part.partId !== ShowerComboTubType.bathtub_liner\r\n ) {\r\n keepThisItem = false\r\n }\r\n });\r\n if (itemToRender.text === \"Wall Configuration\") {\r\n keepThisItem = false\r\n }\r\n return keepThisItem\r\n });\r\n };\r\n\r\n handleSubNavClick = (menuItem) => {\r\n const layout = getCurrentLayout();\r\n\r\n if (menuItem.text === \"Accessories\") {\r\n const hoveredParent = this.props.designNavigationItems.find(navItem => {\r\n return navItem.text === \"Shower Accessories\"\r\n });\r\n this.setState({\r\n contextMenuButtons: this.getItemsToRender(hoveredParent)\r\n .map(button => {\r\n button.subMenuParent = \"Shower Accessories\";\r\n return button\r\n })\r\n });\r\n return false\r\n }\r\n\r\n const showerSubParts = layout.parts[Shower.id].subParts();\r\n\r\n const shower = showerSubParts.find((menuItem) => {\r\n return menuItem.part.partId === \"shower_body\"\r\n });\r\n shower.subMenuText = \"Shower\";\r\n shower.subMenuParent = \"Shower\";\r\n shower.intlTranslate = this.props.intl.formatMessage({id: \"visualizer.bathroom.shower\"});\r\n\r\n const showerTubCombo = layout.parts[ShowerTubCombo.id];\r\n const showerTubComboSubParts = showerTubCombo.subParts();\r\n\r\n const activeTubMenuItems = showerTubComboSubParts.filter(menuItem => menuItem.part.bottomTubId);\r\n activeTubMenuItems.forEach(menuItem => menuItem.subMenuParent = \"Shower Tub Combo\");\r\n\r\n const wallConfiguration = showerTubComboSubParts.find((menuItem) => {\r\n return menuItem.part.partId === \"wall_configuration\"\r\n });\r\n wallConfiguration.subMenuText = \"Shower Tub Combo\";\r\n wallConfiguration.subMenuParent = \"Shower Tub Combo\";\r\n wallConfiguration.intlTranslate = this.props.intl.formatMessage({id: \"visualizer.bathroom.shower_tub_combo\"});\r\n\r\n this.setState({\r\n contextMenuButtons: [\r\n shower,\r\n wallConfiguration,\r\n ...activeTubMenuItems,\r\n ]\r\n })\r\n };\r\n\r\n handleContextMenuHover = (menuItem) => {\r\n const layout = getCurrentLayout();\r\n const hoveredButton = menuItem.text === \"Countertop\" ? \"CounterTop\" : menuItem.text;\r\n const hoveredParent = menuItem.subMenuParent || this.props.contextMenuOpen;\r\n\r\n const layoutType = layout.getCurrentLayoutName();\r\n\r\n // console.log('hoveredButton', hoveredButton);\r\n // console.log('hoveredParent', hoveredParent);\r\n\r\n if (hoveredButton && hoveredParent) {\r\n\r\n let hoveredZindex = \"\";\r\n\r\n if (hoveredParent === \"Shower\") {\r\n const shower = layout.parts.Shower;\r\n if (shower.activeSubType_ === ShowerTypes.Complete) {\r\n switch (hoveredButton) {\r\n case \"Fixture\":\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].Steam60in[hoveredButton];\r\n break;\r\n default:\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].Steam60in.Body[\"1\"]; // 1st part of shower\r\n break;\r\n }\r\n } else {\r\n switch (hoveredButton) {\r\n case \"Shower Walls\":\r\n hoveredZindex = Z.layouts[layoutType].Shower.Custom60in.Wall;\r\n break;\r\n case \"Shower Body\":\r\n if (shower.showerDoor && shower.showerDoor.features.length) {\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].Custom60in.ShowerDoor;\r\n } else {\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].Custom60in.Glass;\r\n }\r\n break;\r\n case \"Shower Door\":\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].Custom60in.ShowerDoor;\r\n break;\r\n case \"Handle\":\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].Custom60in.ShowerDoorHandle;\r\n break;\r\n case \"Shower Pan\":\r\n case \"Shower Pans\":\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].Custom60in.ShowerPanCombo;\r\n break;\r\n case \"Shower Walls Accent\":\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].Custom60in.WallAccent;\r\n break;\r\n case \"Pony Wall Glass\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].Custom60in.PonyWallGlass;\r\n break;\r\n case \"Pony Wall Cap\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].Custom60in.PonyWallCap;\r\n break;\r\n case \"Floor\":\r\n hoveredZindex = shower.showerFloorIsActive\r\n ? Z.layouts[layoutType][hoveredParent].Custom60in[hoveredButton]\r\n : Z.layouts[layoutType][hoveredParent].Custom60in.ShowerPanCombo;\r\n break;\r\n default:\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].Custom60in[hoveredButton];\r\n break;\r\n }\r\n }\r\n } else if (hoveredParent === \"Shower Tub Combo\") {\r\n switch (hoveredButton) {\r\n case \"Shower Door\":\r\n hoveredZindex = Z.layouts[layoutType].Shower.Custom60in.ShowerDoor;\r\n break;\r\n case \"Shower Walls\":\r\n hoveredZindex = Z.layouts[layoutType].Shower.Custom60in.Wall;\r\n break;\r\n case \"Shower Walls Accent\":\r\n hoveredZindex = Z.layouts[layoutType].Shower.Custom60in.WallAccent;\r\n break;\r\n case \"Fixture\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].Custom60in.Fixture;\r\n break;\r\n case \"Handle\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].Custom60in.ShowerDoorHandle;\r\n break;\r\n case \"Wall Configuration\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].Custom60in.ShowerDoor;\r\n break;\r\n case \"Jetted Tub\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].TubCombo.JettedTub;\r\n break;\r\n case \"Tub Liner\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].TubCombo.Liner;\r\n break;\r\n case \"Walk In Tub\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].TubCombo.WalkInTub;\r\n break;\r\n case \"Replacement Tub\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].TubCombo.ReplacementTub;\r\n break;\r\n case \"Pony Wall Glass\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].Custom60in.PonyWallGlass;\r\n break;\r\n case \"Pony Wall Cap\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].Custom60in.PonyWallCap;\r\n break;\r\n default:\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].TubCombo[hoveredButton.replace(/ /g, \"\")];\r\n break;\r\n }\r\n } else if (hoveredParent === \"Vanity\") { // Vanity\r\n if (layout.parts.Vanity.activeSubType_ === VanityTypes.Complete) {\r\n switch (hoveredButton) {\r\n case \"Vanity\":\r\n hoveredZindex = Z.layouts[layoutType].Vanity.Complete.Cabinet;\r\n break;\r\n case \"Accent Wall\":\r\n hoveredZindex = Z.layouts[layoutType].Wall_A_Accent_Mask;\r\n break;\r\n default:\r\n hoveredZindex = Z.layouts[layoutType].Vanity.Custom[hoveredButton]; // Mirror\r\n break;\r\n }\r\n } else {\r\n switch (hoveredButton) {\r\n case \"Accent Wall\":\r\n hoveredZindex = Z.layouts[layoutType].Wall_A_Accent_Mask;\r\n break;\r\n case \"Backsplash\":\r\n hoveredZindex = Z.layouts[layoutType].Vanity.Custom.VanityBacksplash;\r\n break;\r\n default:\r\n hoveredZindex = Z.layouts[layoutType].Vanity.Custom[hoveredButton];\r\n break;\r\n }\r\n }\r\n } else if (hoveredParent === \"Bathtub\") { // Bathtub\r\n if (layout.parts.Bathtub.activeSubType_ === BathTubType.FreeStanding) {\r\n if (hoveredButton === \"Bathtub\") {\r\n hoveredZindex = Z.layouts[layoutType].BathTub.FreeStanding.Base\r\n } else {\r\n hoveredZindex = Z.layouts[layoutType].BathTub.FreeStanding[hoveredButton]\r\n }\r\n } else {\r\n if (hoveredButton === \"Rim\") {\r\n hoveredZindex = Z.layouts[layoutType].BathTub.Custom60in.Top\r\n } else {\r\n hoveredZindex = Z.layouts[layoutType].BathTub.Custom60in[hoveredButton]\r\n }\r\n }\r\n } else if (hoveredParent === \"Walls\") { // Bathtub\r\n switch (hoveredButton) {\r\n case \"Pony Wall\":\r\n hoveredZindex = Z.layouts[layoutType].Shower.Custom60in.PonyWall;\r\n break;\r\n case \"Left Shower Wall\": {\r\n const wallParent = layout.parts[hoveredParent];\r\n const activeShowerGroup = wallParent.getActiveShowerGroup();\r\n const showerDimensions = getMetadataByDimensions(activeShowerGroup.showerDimensions());\r\n hoveredZindex = showerDimensions === \"Half\"\r\n ? Z.layouts[layoutType].Shower.Custom60in.ExtrusionWallLeftHalfWall\r\n : Z.layouts[layoutType].Shower.Custom60in.ExtrusionWallLeft;\r\n break;\r\n }\r\n default:\r\n hoveredZindex = Z.layouts[layoutType].Vanity.Custom[hoveredButton];\r\n break;\r\n }\r\n }\r\n\r\n this.props.renderGreenLayerByZindex(hoveredZindex);\r\n }\r\n\r\n };\r\n\r\n render() {\r\n\r\n let contextMenuStyles = this.props.contextMenuPosition || {};\r\n if (this.state.contextMenuButtons.length === 4) {\r\n contextMenuStyles = Object.assign({}, contextMenuStyles, {maxWidth:\"210px\"} )\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n {this.state.contextMenuButtons.map((menuItem) => {\r\n return menuItem ? (\r\n \r\n ) : null\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nexport default injectIntl(ContextMenu)\r\n","import React, { Component } from 'react';\r\nimport PropTypes from \"prop-types\";\r\nimport {connect} from \"react-redux\";\r\nimport $ from \"jquery\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport Analytics from './../../analytics';\r\n\r\nexport class HomeMenu extends Component {\r\n\r\n static propTypes = {\r\n mobileNav: PropTypes.array\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n toggle: false,\r\n };\r\n }\r\n\r\n componentWillUnmount() {\r\n $(document).off('click', this.handleMobileBlur);\r\n }\r\n\r\n handleItemClick = () => {\r\n\r\n };\r\n\r\n handleBack = () => {\r\n this.handleToggleDropdown();\r\n };\r\n\r\n handleToggleDropdown = () => {\r\n Analytics.sendClickEvent('home-button-dropdown', !this.state.toggle);\r\n this.setState({\r\n toggle: !this.state.toggle,\r\n }, () => {\r\n this.state.toggle\r\n ? $(document).on('click', this.handleMobileBlur)\r\n : $(document).off('click', this.handleMobileBlur)\r\n })\r\n };\r\n\r\n handleMobileBlur = (e) => {\r\n const navClick = e.target.closest('[class*=\"mobile-home-menu\"]');\r\n const backButtonClick = e.target.closest('.ui-back');\r\n if (!navClick && !backButtonClick) {\r\n this.handleToggleDropdown();\r\n }\r\n };\r\n\r\n render() {\r\n // let menu = [{\r\n // name: \"Return to Website\",\r\n // url: document.referrer || document.location.href\r\n // }, ...this.props.mobileNav];\r\n\r\n return (\r\n
    \r\n {this.props.windowWidth >= 991 ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n mobileNav: store.navigationState.mobileNav,\r\n windowWidth: store.serverState.windowWidth,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n})(HomeMenu);\r\n","import React, {Component} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport $ from \"jquery\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport Analytics from './../../analytics';\r\nimport UserLoginButton from './../ui/userLoginButton';\r\nimport {toggleUserPopup, changeMessageBoxState} from \"../../actions/actionFunctions\";\r\nimport {SaveIcon} from \"./icons\";\r\nimport {loaderDisable, loaderEnable} from \"../ui/loaderView\";\r\nimport {saveQuote} from \"../../api/server-api\";\r\nimport {UserPopupTypes} from \"../visComponents/constants\";\r\nimport {showQuoteSavedNotification} from \"../ui/successNotification\";\r\n\r\nexport class SaveButton extends Component {\r\n\r\n saving = false;\r\n\r\n handleSaveQuote = () => {\r\n if (!UserLoginButton.handleLoginClick({\r\n ...this.props,\r\n saveQuoteAfterLogin: true,\r\n userPopupType: UserPopupTypes.NewDesign\r\n })) {\r\n Analytics.sendClickEvent(\"save-button-show-login\");\r\n } else if (!this.saving) {\r\n Analytics.sendClickEvent(\"save-button\");\r\n this.saveQuoteSubmit();\r\n }\r\n // const fabricatorSettings = this.props.fabricatorData.settings;\r\n // if ((fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) && !this.props.isPhoneNumberValidated) {\r\n // Analytics.sendClickEvent(\"save-button-show-login\");\r\n // this.props.toggleUserPopup({\r\n // userPopupOpened: true,\r\n // saveQuoteAfterLogin: true\r\n // });\r\n // } else {\r\n // Analytics.sendClickEvent(\"save-button\");\r\n // this.saveQuoteSubmit();\r\n // }\r\n };\r\n\r\n saveQuoteSubmit = () => {\r\n $(document).trigger(ActionTypes.REMOVE_GREEN_ZONE_ON_CANVAS, () => {\r\n if (!this.saving) {\r\n this.saving = true;\r\n loaderEnable(\"loader.savingQuoteText\");\r\n saveQuote(true)\r\n .then((response) => {\r\n if (response) {\r\n let responseDataBase = response;\r\n if (response.data) {\r\n responseDataBase = response.data;\r\n }\r\n const responseData = typeof responseDataBase === 'object' ? responseDataBase : JSON.parse(responseDataBase);\r\n console.log('saveButton saveQuote response:', responseData);\r\n loaderDisable();\r\n }\r\n showQuoteSavedNotification();\r\n this.saving = false;\r\n // downloadCanvasImageById(this.props.canvasId);\r\n })\r\n .catch((error) => {\r\n console.log('saveButton saveQuote error:', error);\r\n loaderDisable();\r\n this.saving = false;\r\n })\r\n }\r\n });\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n )\r\n }\r\n\r\n}\r\nconst mapStateToProps = (store) => ({\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n fabricatorData: store.fabricatorState\r\n});\r\nexport default connect(mapStateToProps, {\r\n toggleUserPopup,\r\n changeMessageBoxState\r\n})(SaveButton);\r\n","import {Component} from 'react';\r\n\r\nexport default class Tutorial extends Component {\r\n\r\n changeHighlightRingPosition = (selector, stateProperty = \"ringStyles\") => {\r\n const highlightElement = document.querySelector(selector);\r\n if (highlightElement) {\r\n const rect = highlightElement.getBoundingClientRect();\r\n this.setState({\r\n [stateProperty]: {\r\n left: rect.left,\r\n top: rect.top,\r\n }\r\n })\r\n }\r\n };\r\n\r\n}\r\n","import values from 'lodash/values';\r\nimport invert from 'lodash/invert';\r\nimport snakeCase from 'lodash/snakeCase';\r\n\r\nimport LayoutCommon from \"../../visComponents/layoutCommon\";\r\n\r\nimport Appliance from \"./parts/appliance\";\r\nimport Cabinet from \"./parts/cabinet\";\r\nimport CenterIsland from \"./parts/centerIsland\";\r\nimport CountertopGroup from \"./parts/countertopGroup\";\r\nimport Walls from \"./parts/walls\";\r\nimport FloorNew from \"./parts/floorNew\";\r\nimport Globals from \"./parts/globals\";\r\n\r\nimport {LayoutType, LayoutAbbreviation} from \"./constants\";\r\nimport {LayoutThumbnails} from \"./assets\";\r\nimport Z from \"./zIndex\";\r\nimport store from \"../../../store\";\r\nimport * as types from \"../../../actions/actionTypes\";\r\nimport Other from \"./parts/other\";\r\nimport NonVisualizerSubPart from \"./subparts/nonVisualizerSubPart\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport Layer from \"../../visComponents/layer\";\r\nimport {largeLayoutShadow, SmallLayoutShadow} from \"./assets\";\r\n// import {featureThumbnailUrl} from \"../../../misc/helpers\";\r\nimport {AVAILABLE_VISUALIZER_TYPES} from \"../../../config\";\r\n\r\nexport class Layout extends LayoutCommon {\r\n\r\n /**\r\n * @type {int}\r\n */\r\n defaultType = LayoutType.LShapeWithPeninsulaWithIsland;\r\n type = this.defaultType;\r\n visualizerType = AVAILABLE_VISUALIZER_TYPES.Kitchen;\r\n localStorageKey = \"kvState\";\r\n layersBinding = \"Kitchen\";\r\n layoutNames = LayoutAbbreviation;\r\n layoutTypes = LayoutType;\r\n layoutThumbnails = LayoutThumbnails;\r\n zIndexes = Z.layouts;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.parts[Appliance.id] = new Appliance();\r\n this.parts[Cabinet.id] = new Cabinet();\r\n this.parts[CenterIsland.id] = new CenterIsland();\r\n this.parts[CountertopGroup.id] = new CountertopGroup();\r\n this.parts[Walls.id] = new Walls();\r\n this.parts[FloorNew.id] = new FloorNew();\r\n this.parts[Globals.id] = new Globals();\r\n this.parts[Other.id] = new Other();\r\n\r\n values(this.parts).forEach(part => part.layout = this);\r\n }\r\n\r\n addCustomLayers = (res) => {\r\n // add global shadow\r\n const globalShadowParent = this.parts[Globals.id]; // if no global shadow uploaded - take the hardcoded one\r\n if (!globalShadowParent.categoryEnabled || !globalShadowParent.globalShadow || !globalShadowParent.globalShadow.activeFeature) {\r\n if (this.getCurrentLayoutAbbreviation().includes(\"L\")) {\r\n res.push(new Layer(\"kv\", Z.layouts.LShape.Globals.GlobalShadow, largeLayoutShadow, false));\r\n } else if (this.type === LayoutType.Small) {\r\n res.push(new Layer(\"kv\", Z.layouts.Small.Globals.GlobalShadow, SmallLayoutShadow, false));\r\n }\r\n }\r\n return res\r\n }\r\n\r\n getCurrentLayoutName(type = this.type) {\r\n return invert(LayoutType)[type];\r\n }\r\n\r\n getCurrentLayoutAbbreviation() {\r\n return LayoutAbbreviation[this.getCurrentLayoutName()]\r\n }\r\n\r\n // getActiveFeatures(returnAllFeatures) { // removed, we have common now\r\n // let activeFeatures = [];\r\n // const receiveAllFeatures = returnAllFeatures || !!(this.qtCategories && this.qtCategories.length);\r\n // this.getFeatures(receiveAllFeatures).forEach((parentGroup) => {\r\n // // let subParts = parentGroup.subParts().filter(subPart => !subPart.part.disabled); // we need to store every item!\r\n // if (parentGroup.menuType === 0) { // FLOOR\r\n // if (!parentGroup.disabled && parentGroup.activeFeature\r\n // && !parentGroup.activeFeature.partName.includes(\"laceholder\")) {\r\n // activeFeatures.push({\r\n // selectionGroup: parentGroup.partName,\r\n // partId: parentGroup.partId,\r\n // quantity: 0,\r\n // cartFeature: parentGroup.activeFeature\r\n // });\r\n // }\r\n // } else {\r\n // let subItems = parentGroup.relatedItems;\r\n // const excluded = [\"fridge_shadow\"];\r\n // if (!returnAllFeatures) {\r\n // subItems = subItems.filter(subItem => !excluded.includes(subItem.partId) && subItem.activeFeature\r\n // && subItem.activeFeature.partName && !subItem.activeFeature.partName.includes(\"laceholder\"));\r\n // }\r\n // subItems.forEach((subItem) => {\r\n // //adding top cabinet parts to cart features //Alan 25.07.2019\r\n // if (subItem.partId === \"top_cabinet\" && subItem.activeFeature && subItem.activeFeature.metaData[\"Module\"]) {\r\n // let uniqueModuleParts = []; // arrayOf: {width: \"\", height: \"\", inlayTypeName: \"\", quantity: 0}\r\n // for (let i = 1; i <= subItem.moduleSystem.length; i++ ) {\r\n // const currentModuleSystemNumber = i - 1;\r\n // for (let k = 0; k <= subItem.moduleSystem[currentModuleSystemNumber].length - 1; k++ ) {\r\n // const modulePart = subItem.moduleSystem[currentModuleSystemNumber][k];\r\n // const modulePartSplitted = modulePart.split(\"_\");\r\n //\r\n // let inlayTypeName = subItem.defaultInlayType;\r\n // subItem.inlayTypes.forEach(inlayType => {\r\n // if (inlayType.moduleParts.includes(i + \"_\" + modulePartSplitted[2])) {\r\n // inlayTypeName = inlayType.name\r\n // }\r\n // });\r\n //\r\n // const existingModulePart = uniqueModuleParts.find((uniqueModulePart) => {\r\n // return uniqueModulePart.width === modulePartSplitted[0]\r\n // && uniqueModulePart.height === modulePartSplitted[1]\r\n // && uniqueModulePart.inlayTypeName === inlayTypeName\r\n // });\r\n // if (existingModulePart) {\r\n // existingModulePart.quantity++;\r\n // } else {\r\n // const cartFeature = subItem.findFeatureByModuleAndModulePart(modulePart, inlayTypeName);\r\n // if (cartFeature) {\r\n // uniqueModuleParts.push({\r\n // width: modulePartSplitted[0],\r\n // height: modulePartSplitted[1],\r\n // inlayTypeName,\r\n // cartFeature,\r\n // quantity: 1,\r\n // partName: subItem.activeFeature.partName\r\n // })\r\n // }\r\n // }\r\n // }\r\n // }\r\n // // console.log(\"uniqueModuleParts\", uniqueModuleParts);\r\n // uniqueModuleParts.forEach((uniqueModulePart, uniqueModulePartIndex) => {\r\n // activeFeatures.push({\r\n // selectionGroup: parentGroup.partName,\r\n // partId: subItem.partId + \"_module_\" + uniqueModulePartIndex,\r\n // // partId: subItem.partId,\r\n // cartFeature: uniqueModulePart.cartFeature,\r\n // thumbnail: featureThumbnailUrl(subItem.activeFeature),\r\n // partName: uniqueModulePart.partName,\r\n // description: `Width: ${uniqueModulePart.width} Height: ${uniqueModulePart.height} Inlay Type: ${uniqueModulePart.inlayTypeName}`,\r\n // quantity: uniqueModulePart.quantity\r\n // });\r\n // });\r\n // }\r\n // if (subItem.activeFeature) {\r\n // activeFeatures.push({\r\n // selectionGroup: parentGroup.partName,\r\n // partId: subItem.partId,\r\n // quantity: 0,\r\n // cartFeature: subItem.activeFeature\r\n // });\r\n // }\r\n // })\r\n // }\r\n // });\r\n // // console.log('activeFeatures', activeFeatures);\r\n // if (!returnAllFeatures && this.qtCategories && this.qtCategories.length) {\r\n // activeFeatures = activeFeatures.filter(activeFeature => {\r\n // return this.qtCategories.some(qtCategory => qtCategory.subParts.some(subPart => {\r\n // return subPart.part.partId === activeFeature.partId\r\n // }))\r\n // })\r\n // }\r\n // return activeFeatures\r\n // }\r\n\r\n /**\r\n *\r\n * @param bvState {object}\r\n * @param setCartAndUserState {boolean | array} // only in the parseResponse function (when job is opened in the dashboard)\r\n * @param useNames {boolean}\r\n * @param needToChangeLayout {boolean}\r\n * @param firstLoad {boolean}\r\n */\r\n setActiveFeaturesFromObject(bvState, setCartAndUserState = false, useNames = false, needToChangeLayout = true, firstLoad = false) {\r\n if (bvState) {\r\n\r\n const cabinetParent = this.parts[Cabinet.id];\r\n const countertopGroupParent = this.parts[CountertopGroup.id];\r\n\r\n const layout_type = +bvState.layout_type;\r\n needToChangeLayout = needToChangeLayout && (layout_type || layout_type === 0) && (layout_type !== +this.type);\r\n\r\n if (needToChangeLayout) {\r\n this.type = layout_type;\r\n }\r\n\r\n // to avoid checks below\r\n bvState.disabled_parts = bvState.disabled_parts || [];\r\n\r\n this.getFeatures()\r\n .forEach((parentGroup) => {\r\n if (parentGroup.menuType === 0) {\r\n const partId = parentGroup.partId;\r\n const hasPreviouslySavedItem = this.selectedLayoutFeatures[layout_type]\r\n && this.selectedLayoutFeatures[layout_type][partId];\r\n if (bvState.hasOwnProperty(partId) || hasPreviouslySavedItem) {\r\n if (useNames) {\r\n parentGroup.activeFeature = parentGroup.getFeatureByPartName(bvState[partId]);\r\n if (!parentGroup.activeFeature && hasPreviouslySavedItem) {\r\n parentGroup.activeFeature = parentGroup.getFeatureByPartName(hasPreviouslySavedItem);\r\n }\r\n } else {\r\n parentGroup.activeFeature = parentGroup.getFeatureById(bvState[partId])\r\n || parentGroup.getDefaultFeature();\r\n }\r\n parentGroup.placeholderChanged = !!parentGroup.activeFeature;\r\n // const {activeQuoteIndex} = store.getState().quotesState;\r\n // parentGroup.firstClick[activeQuoteIndex] = !!parentGroup.activeFeature;\r\n }\r\n if (parentGroup.activeFeature && firstLoad && !parentGroup.activeFeature.notAvailableInVisualizer) { // Leave non in vis features locked\r\n parentGroup.activeFeature.dbFeature.unlocked = true;\r\n }\r\n if (bvState.disabled_parts.includes(partId)) {\r\n parentGroup.disabled = true\r\n }\r\n } else {\r\n let relatedItems = parentGroup.getRelatedItems();\r\n relatedItems.forEach((subPart) => {\r\n const partId = subPart.partId;\r\n let previouslySelectedItem = null;\r\n subPart.selectedFeaturesHistory.some(featureName => {\r\n previouslySelectedItem = subPart.getFeatureByPartName(featureName);\r\n return previouslySelectedItem\r\n });\r\n if (bvState.hasOwnProperty(partId) || previouslySelectedItem) {\r\n if (useNames) {\r\n const matchingFeature = (partId === \"backsplash\" && bvState[\"backsplash_type\"])\r\n ? subPart.getFeatureByBacksplashType(bvState[\"backsplash_type\"], bvState[\"backsplash\"])\r\n : subPart.getFeatureByPartName(bvState[partId]);\r\n if (matchingFeature) {\r\n subPart.activeFeature = matchingFeature;\r\n } else if (previouslySelectedItem) {\r\n subPart.activeFeature = previouslySelectedItem;\r\n }\r\n } else {\r\n subPart.activeFeature = subPart.getFeatureById(bvState[partId]) || parentGroup.getDefaultFeature();\r\n }\r\n subPart.placeholderChanged = !!subPart.activeFeature;\r\n // const {activeQuoteIndex} = store.getState().quotesState;\r\n // subPart.firstClick[activeQuoteIndex] = !!subPart.activeFeature;\r\n // if (subPart.firstClick) {\r\n // console.log(\"subPart.firstClick\", subPart);\r\n // }\r\n }\r\n if (subPart.activeFeature && firstLoad && !subPart.activeFeature.notAvailableInVisualizer) {\r\n subPart.activeFeature.dbFeature.unlocked = true;\r\n }\r\n if (bvState.disabled_parts.includes(partId)) {\r\n subPart.disabled = true\r\n }\r\n })\r\n }\r\n });\r\n\r\n const partPredicate = (part, value) => useNames ? part.partName === value : +part.dbFeature.id === +value;\r\n Object.keys(bvState)\r\n .forEach((bvStateKey) => {\r\n let partId, parent, relatedName;\r\n switch(bvStateKey) {\r\n case \"top_cabinet_parts\":\r\n partId = \"top_cabinet_parts\";\r\n parent = cabinetParent;\r\n relatedName = \"topCabinet\";\r\n break;\r\n case \"bottom_cabinet_parts\":\r\n partId = \"bottom_cabinet_parts\";\r\n parent = cabinetParent;\r\n relatedName = \"bottomCabinet\";\r\n break;\r\n case \"crown_molding\":\r\n partId = \"crown_molding_parts\";\r\n parent = cabinetParent;\r\n relatedName = \"crownMolding\";\r\n break;\r\n case \"countertop_parts\":\r\n partId = \"countertop_parts\";\r\n parent = countertopGroupParent;\r\n relatedName = \"countertop\";\r\n break;\r\n default:\r\n break;\r\n }\r\n if (parent && bvState[partId] && bvState[partId].length && parent[relatedName]) {\r\n const relatedItem = parent[relatedName];\r\n // if (bvStateKey === \"top_cabinet_parts\" || bvStateKey === \"bottom_cabinet_parts\") {\r\n // bvState[partId] = Array.isArray(bvState[bvStateKey])\r\n // ? bvState[bvStateKey]\r\n // : JSON.parse(decodeURIComponent(bvState[bvStateKey]));\r\n // }\r\n const matchingParts = bvState[partId]\r\n .map((featureId) => {\r\n const arrayOfItems = (relatedItem.moduleParts)\r\n ? [...relatedItem.featuresParts, ...relatedItem.moduleParts]\r\n : relatedItem.featuresParts;\r\n return arrayOfItems.find(_ => partPredicate(_, featureId));\r\n })\r\n .filter((featuresPart) => {\r\n return featuresPart && featuresPart.matchesMetaForArrayOfConditions(relatedItem.getArrayOfConditions());\r\n });\r\n if (matchingParts.length) {\r\n relatedItem.activeFeatureParts = matchingParts\r\n }\r\n if (bvStateKey === \"top_cabinet_parts\" && bvState[\"top_module_system\"]) {\r\n relatedItem.moduleSystem = Array.isArray(bvState[\"top_module_system\"])\r\n ? bvState[\"top_module_system\"]\r\n : JSON.parse(decodeURIComponent(bvState[\"top_module_system\"]));\r\n if (bvState[\"inlay_types\"]) {\r\n relatedItem.inlayTypes = Array.isArray(bvState[\"inlay_types\"])\r\n ? bvState[\"inlay_types\"]\r\n : JSON.parse(decodeURIComponent(bvState[\"inlay_types\"]));\r\n }\r\n relatedItem.activeFeatureParts = relatedItem.setActiveFeatureParts();\r\n } else if (bvStateKey === \"bottom_cabinet_parts\" && bvState[\"bottom_module_system\"]) {\r\n relatedItem.moduleSystem = Array.isArray(bvState[\"bottom_module_system\"])\r\n ? bvState[\"bottom_module_system\"]\r\n : JSON.parse(decodeURIComponent(bvState[\"bottom_module_system\"]));\r\n relatedItem.activeFeatureParts = relatedItem.setActiveFeatureParts();\r\n }\r\n }\r\n });\r\n\r\n if (needToChangeLayout) {\r\n this.changeLayout(this.getFeatures());\r\n }\r\n\r\n if (setCartAndUserState) {\r\n this.setCartStateAndUserStateFromBvState(bvState, setCartAndUserState);\r\n }\r\n\r\n const layoutParts = this.designNavigationItems()\r\n .filter(parentGroup => parentGroup.part.categoryEnabled)\r\n .map((parentGroup) => parentGroup.part.partName);\r\n\r\n if (!this.isFakeLayout) {\r\n store.dispatch({\r\n type: types.SET_LAYOUT_DATA_PARTS,\r\n payload: {layoutParts}\r\n });\r\n }\r\n\r\n }\r\n }\r\n\r\n /**\r\n * Sets bv features from url\r\n */\r\n\r\n parseUrl(bvState) {\r\n if (bvState.disabled_parts) {\r\n bvState.disabled_parts = bvState.disabled_parts.split(\",\");\r\n }\r\n if (bvState.top_cabinet_parts) {\r\n bvState.top_cabinet_parts = Number.isInteger(bvState.top_cabinet_parts)\r\n ? [bvState.top_cabinet_parts]\r\n : bvState.top_cabinet_parts.split(\",\")\r\n // bvState.top_cabinet_parts = JSON.parse(decodeURIComponent(bvState.top_cabinet_parts));\r\n }\r\n if (bvState.bottom_cabinet_parts) {\r\n bvState.bottom_cabinet_parts = Number.isInteger(bvState.bottom_cabinet_parts)\r\n ? [bvState.bottom_cabinet_parts]\r\n : bvState.bottom_cabinet_parts.split(\",\")\r\n // bvState.bottom_cabinet_parts = JSON.parse(decodeURIComponent(bvState.bottom_cabinet_parts));\r\n }\r\n if (bvState.crown_molding_parts) {\r\n bvState.crown_molding_parts = Number.isInteger(bvState.crown_molding_parts)\r\n ? [bvState.crown_molding_parts]\r\n : bvState.crown_molding_parts.split(\",\")\r\n }\r\n if (bvState.countertop_parts) {\r\n bvState.countertop_parts = Number.isInteger(bvState.countertop_parts)\r\n ? [bvState.countertop_parts]\r\n : bvState.countertop_parts.split(\",\")\r\n }\r\n if (bvState.top_module_system) {\r\n bvState.top_module_system = JSON.parse(decodeURIComponent(bvState.top_module_system))\r\n }\r\n if (bvState.inlay_types) {\r\n bvState.inlay_types = JSON.parse(decodeURIComponent(bvState.inlay_types))\r\n }\r\n if (bvState.bottom_module_system) {\r\n bvState.bottom_module_system = JSON.parse(decodeURIComponent(bvState.bottom_module_system))\r\n }\r\n console.log('restoring bvState from url...', bvState);\r\n return bvState\r\n }\r\n\r\n /**\r\n *\r\n * @param bvState {object}\r\n * @param useNames {boolean}\r\n * @returns bvState {object}\r\n */\r\n addSpecificPropertiesToLocalStorage(bvState, useNames = false) {\r\n const cabinetParent = this.parts[Cabinet.id];\r\n const countertopGroupParent = this.parts[CountertopGroup.id];\r\n const wallsParent = this.parts[Walls.id];\r\n\r\n bvState.layout_type = this.type;\r\n Object.keys(bvState).forEach((bvStateKey) => {\r\n // console.log('bvStateKey', bvStateKey);\r\n switch(bvStateKey) {\r\n case \"top_cabinet\":\r\n // bvState[\"top_cabinet_parts\"] = encodeURIComponent(JSON.stringify(cabinetParent.topCabinet.activeFeatureParts\r\n // .filter(activeFeaturePart => activeFeaturePart)\r\n // .map(activeFeaturePart => {\r\n // return useNames ? activeFeaturePart.partName : activeFeaturePart.dbFeature.id\r\n // })));\r\n if (!cabinetParent.topCabinet || !cabinetParent.topCabinet.activeFeatureParts) {\r\n break;\r\n }\r\n bvState[\"top_cabinet_parts\"] = cabinetParent.topCabinet.activeFeatureParts\r\n .filter(activeFeaturePart => activeFeaturePart)\r\n .map(activeFeaturePart => {\r\n return useNames ? activeFeaturePart.partName : activeFeaturePart.dbFeature.id\r\n });\r\n if (cabinetParent.topCabinet.features.some(feature => feature.metaData[\"Module\"])) { // disabled for now, but in case they are needed - change this condition!\r\n bvState[\"top_module_system\"] = encodeURIComponent(JSON.stringify(cabinetParent.topCabinet.moduleSystem));\r\n bvState[\"inlay_types\"] = encodeURIComponent(JSON.stringify(cabinetParent.topCabinet.inlayTypes));\r\n }\r\n break;\r\n case \"bottom_cabinet\":\r\n if (!cabinetParent.bottomCabinet || !cabinetParent.bottomCabinet.activeFeatureParts) {\r\n break;\r\n }\r\n // bvState[\"bottom_cabinet_parts\"] = encodeURIComponent(JSON.stringify(cabinetParent.bottomCabinet.activeFeatureParts\r\n // .filter(activeFeaturePart => activeFeaturePart)\r\n // .map(activeFeaturePart => {\r\n // return useNames ? activeFeaturePart.partName : activeFeaturePart.dbFeature.id\r\n // })));\r\n bvState[\"bottom_cabinet_parts\"] = cabinetParent.bottomCabinet.activeFeatureParts\r\n .filter(activeFeaturePart => activeFeaturePart)\r\n .map(activeFeaturePart => {\r\n return useNames ? activeFeaturePart.partName : activeFeaturePart.dbFeature.id\r\n });\r\n if (cabinetParent.bottomCabinet.features.some(feature => feature.metaData[\"Module\"])) {\r\n bvState[\"bottom_module_system\"] = encodeURIComponent(JSON.stringify(cabinetParent.bottomCabinet.moduleSystem));\r\n }\r\n break;\r\n case \"crown_molding\":\r\n if (!cabinetParent.crownMolding || !cabinetParent.crownMolding.activeFeatureParts) {\r\n break;\r\n }\r\n bvState[\"crown_molding_parts\"] = cabinetParent.crownMolding.activeFeatureParts\r\n .filter(activeFeaturePart => activeFeaturePart)\r\n .map(activeFeaturePart => {\r\n return useNames ? activeFeaturePart.partName : activeFeaturePart.dbFeature.id\r\n });\r\n break;\r\n case \"countertop\":\r\n if (!countertopGroupParent.countertop || !countertopGroupParent.countertop.activeFeatureParts) {\r\n break;\r\n }\r\n bvState[\"countertop_parts\"] = countertopGroupParent.countertop.activeFeatureParts\r\n .filter(activeFeaturePart => activeFeaturePart)\r\n .map(activeFeaturePart => {\r\n return useNames ? activeFeaturePart.partName : activeFeaturePart.dbFeature.id\r\n });\r\n break;\r\n case \"backsplash\":\r\n if (!wallsParent.backsplash) {\r\n break;\r\n }\r\n bvState[\"backsplash_type\"] = wallsParent.backsplash.getCurrentActiveFeatureType();\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n // console.log('bvState', bvState);\r\n return bvState\r\n }\r\n\r\n addNonVisualizerSubPart(featureGroupName){\r\n const otherParent = this.parts[Other.id];\r\n const partId = snakeCase(featureGroupName);\r\n let relatedItem = otherParent.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, featureGroupName);\r\n relatedItem.getParent = () => otherParent;\r\n otherParent.relatedItems.push(relatedItem);\r\n }\r\n return new DesignNavigationItem(relatedItem.partName, relatedItem)\r\n }\r\n\r\n get qtCategories() {\r\n\r\n if (!(Array.isArray(this.qtCategoriesList) && this.qtCategoriesList.length)) {\r\n return this.qtCategoriesList\r\n }\r\n\r\n // if (document.kvConfig.visualizerType === \"Kitchen\" || document.kvConfig.visualizerType === \"KV\") { // no need\r\n const currentLayoutAbbreviation = this.getCurrentLayoutAbbreviation();\r\n if (!currentLayoutAbbreviation.includes(\"I\")) {\r\n const countertopParent = this.parts[CountertopGroup.id];\r\n const countertopSubParts = countertopParent && countertopParent.subParts();\r\n return this.qtCategoriesList.map(qtCategory => {\r\n let qtCategoryHasBeenChanged = false;\r\n const changedSubParts = qtCategory._subParts\r\n .map(subPart => {\r\n if (countertopSubParts) {\r\n switch (subPart.part.partId) {\r\n case \"center_island_countertop\":\r\n qtCategoryHasBeenChanged = true;\r\n return this.getChangedSubPart(countertopSubParts, subPart, \"countertop\");\r\n case \"center_island_sink\":\r\n qtCategoryHasBeenChanged = true;\r\n return this.getChangedSubPart(countertopSubParts, subPart, \"sink\");\r\n case \"center_island_faucet\":\r\n qtCategoryHasBeenChanged = true;\r\n return this.getChangedSubPart(countertopSubParts, subPart, \"faucet\");\r\n case \"center_island_edge\":\r\n qtCategoryHasBeenChanged = true;\r\n return this.getChangedSubPart(countertopSubParts, subPart, \"edge_profile\");\r\n case \"center_island_stovetop\":\r\n qtCategoryHasBeenChanged = true;\r\n return this.getChangedSubPart(countertopSubParts, subPart, \"stovetop\");\r\n default:\r\n return subPart\r\n }\r\n }\r\n return subPart\r\n })\r\n .filter((subPart) => {\r\n return subPart && this.designNavigationItems(subPart, {}, \"\", false, true).length\r\n });\r\n if (qtCategoryHasBeenChanged) {\r\n qtCategory.subParts = changedSubParts;\r\n qtCategory.qtCategoryHasBeenChanged = true;\r\n }\r\n return qtCategory\r\n });\r\n }\r\n return this.qtCategoriesList.map((qtCategory) => {\r\n if (qtCategory.qtCategoryHasBeenChanged) {\r\n qtCategory.subParts = [...qtCategory.defaultSubParts];\r\n qtCategory.qtCategoryHasBeenChanged = false;\r\n }\r\n return qtCategory\r\n })\r\n }\r\n\r\n getChangedSubPart(allSubParts, currentSubPart, partId) {\r\n const newSubPart = allSubParts.find(cPart => cPart.part.partId === partId);\r\n if (!newSubPart) {\r\n return currentSubPart\r\n }\r\n // newSubPart.part.customGroupDisplayName = newSubPart.part.customGroupDisplayName || currentSubPart.part.customGroupDisplayName;\r\n return newSubPart\r\n }\r\n\r\n excludedIndexesFromHover = (layoutType) => {\r\n return [\r\n this.zIndexes[layoutType].Globals.Baseboard, // exclude Globals\r\n this.zIndexes[layoutType].Globals.CeilingHighlights, // exclude Globals\r\n this.zIndexes[layoutType].Globals.CeilingLights, // exclude Globals\r\n this.zIndexes[layoutType].Globals.GlobalShadow, // exclude Globals\r\n this.zIndexes[layoutType].Globals.Decor1, // exclude Globals\r\n this.zIndexes[layoutType].Globals.Decor2, // exclude Globals\r\n this.zIndexes[layoutType].Globals.Decor3, // exclude Globals\r\n this.zIndexes[layoutType].Globals.Decor4, // exclude Globals\r\n this.zIndexes[layoutType].Cabinet.TopCabinetShadow, // exclude TopCabinetShadow\r\n this.zIndexes[layoutType].Cabinet.TopCabinetShadowPart2, // exclude TopCabinetShadow\r\n this.zIndexes[layoutType].Cabinet.BottomCabinetShadow, // exclude BottomCabinetShadow\r\n this.zIndexes[layoutType].CenterIsland.CenterIslandShadow, // exclude CenterIslandShadow\r\n this.zIndexes[layoutType].CenterIsland.ChairsShadow, // exclude CenterIslandShadow\r\n this.zIndexes[layoutType].Appliances.FridgeShadow, // exclude FridgeShadow\r\n this.zIndexes[layoutType].Cabinet.TopCabinetModuleBox, // exclude TopCabinetModuleBox\r\n this.zIndexes[layoutType].Cabinet.TopCabinetModuleBox2, // exclude TopCabinetModuleBox2\r\n this.zIndexes[layoutType].Cabinet.BottomCabinetModuleBox, // exclude BottomCabinetModuleBox\r\n this.zIndexes[layoutType].Cabinet.BottomCabinetModuleBox2, // exclude BottomCabinetModuleBox2\r\n ]\r\n }\r\n\r\n}\r\n","import uniqBy from \"lodash/uniqBy\";\r\n\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\n\r\nexport default class NonVisualizerSubPart extends IntermediatePart {\r\n constructor(isChild, partId, partName) {\r\n super(isChild);\r\n this.partId = partId;\r\n this.visible = true;\r\n this.partName = partName;\r\n // this.allFeaturesReceived = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new NonVisualizerSubPart(false, this.partId, dbFeature.groupName));\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const navSubItems = super.navigationSubItems(filters, searchText)\r\n return uniqBy(navSubItems, (navItem) => navItem.part.dbFeature.sharedFeatureName);\r\n }\r\n}\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport Z from \"../core/zIndex\";\r\nimport {reorder} from \"../../../misc/utils\";\r\nimport Analytics from \"../../../analytics\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nimport {BACKSPLASH_TYPES} from \"../core/constants\";\r\n\r\nclass ContextMenuSimple extends Component {\r\n\r\n static propTypes = {\r\n contextMenuOpen: PropTypes.string.isRequired,\r\n hoveredLayer: PropTypes.object,\r\n handleContextMenuClick: PropTypes.func,\r\n contextMenuPosition: PropTypes.object,\r\n contextMenuPonyWall: PropTypes.bool,\r\n renderGreenLayerByZindex: PropTypes.func,\r\n closeContextMenu: PropTypes.func,\r\n };\r\n\r\n state = {\r\n contextMenuButtons: []\r\n };\r\n\r\n componentDidMount() {\r\n this.setContextMenuButtons();\r\n if (this.props.closeContextMenu) {\r\n document.addEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n contextMenuBlur = (e) => {\r\n if (!e.target.closest('.contextmenu-buttons')\r\n && !e.target.closest('.contextmenu-buttons__button')\r\n && !e.target.closest('.sprocket-container') && !e.target.closest('.canvas')) {\r\n this.props.closeContextMenu();\r\n }\r\n };\r\n\r\n componentWillUnmount() {\r\n if (this.props.closeContextMenu) {\r\n document.removeEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n setContextMenuButtons() {\r\n const layout = getCurrentLayout();\r\n const contextMenuOpen = this.props.contextMenuOpen;\r\n if (contextMenuOpen === \"backsplash_custom\"\r\n || contextMenuOpen === \"backsplash_custom_left\"\r\n || contextMenuOpen === \"backsplash_custom_right\"\r\n || contextMenuOpen === \"right_wall_custom\"\r\n || contextMenuOpen === \"left_wall_custom\") {\r\n this.setBacksplashButtons();\r\n return\r\n }\r\n\r\n const hoveredParent = layout.designNavigationItems().find(navItem => {\r\n return navItem.text === contextMenuOpen\r\n });\r\n\r\n let relatedItems = hoveredParent.part.relatedItems;\r\n\r\n const clickedItem = relatedItems.find((item) => {\r\n let zIndexToFind = this.props.hoveredLayer.zIndex;\r\n const currentLayoutName = layout.getCurrentLayoutName();\r\n if (zIndexToFind === Z.layouts[currentLayoutName].CountertopGroup.Countertop2) {\r\n return item.partId === \"countertop\"\r\n }\r\n return item.activeFeature && item.activeFeature.layer.zIndex === zIndexToFind\r\n });\r\n\r\n let itemsToRender = this.getItemsToRender(hoveredParent);\r\n\r\n // console.log('clickedItem', clickedItem);\r\n // console.log('relatedItems', relatedItems);\r\n // console.log('itemsToRender', itemsToRender);\r\n\r\n const clickedItemIndex = itemsToRender.findIndex(item => item.text === clickedItem.partName);\r\n if (clickedItemIndex > 0) {\r\n itemsToRender = reorder(itemsToRender, clickedItemIndex, 0); // swap items in array start\r\n }\r\n\r\n itemsToRender = itemsToRender.map(item => {\r\n if (item.text === \"Island Countertop\") {\r\n // item.subMenuText = \"Countertop\";\r\n item.bgImageText = \"Countertop\";\r\n }\r\n return item\r\n });\r\n\r\n this.setState({\r\n contextMenuButtons: itemsToRender\r\n })\r\n }\r\n\r\n getItemsToRender = (hoveredParent) => {\r\n let itemsToRender = hoveredParent.part.subParts();\r\n let availablePartIds = [];\r\n switch (this.props.contextMenuOpen) {\r\n case \"Center Island\":\r\n availablePartIds = [\"center_island_sink\", \"center_island_faucet\", \"center_island_countertop\",\r\n \"center_island_stovetop\", \"center_island_range\", \"center_island_edge\"];\r\n break;\r\n case \"Countertop\":\r\n availablePartIds = [\"countertop\", \"faucet\", \"sink\", \"edge_profile\"];\r\n break;\r\n case \"Walls\":\r\n availablePartIds = [\"right_wall\", \"backsplash\"];\r\n break;\r\n default:\r\n break;\r\n }\r\n return itemsToRender.filter(menuButton => availablePartIds.includes(menuButton.part.partId));\r\n };\r\n\r\n getBackSplashButtons = () => {\r\n return BACKSPLASH_TYPES.map(bType => {\r\n const button = {\r\n text: bType,\r\n };\r\n switch (bType) {\r\n case \"4in\":\r\n button.subMenuText = \"visualizer.kitchen.contextmenu.backsplash.4in\"\r\n break;\r\n case \"6in\":\r\n button.subMenuText = \"visualizer.kitchen.contextmenu.backsplash.6in\"\r\n break;\r\n case \"18in\":\r\n button.subMenuText = \"visualizer.kitchen.contextmenu.backsplash.18in\"\r\n break;\r\n }\r\n return button\r\n })\r\n };\r\n\r\n setBacksplashButtons = () => {\r\n const layout = getCurrentLayout();\r\n const hoveredParent = layout.designNavigationItems().find(navItem => {\r\n return navItem.text === \"Walls\"\r\n });\r\n const subParts = hoveredParent.part.subParts();\r\n\r\n let contextMenuButtons = [];\r\n const backSplashButtons = this.getBackSplashButtons();\r\n const rightWall = subParts.find(menuButton => menuButton.part.partId === \"right_wall\");\r\n const leftWall = subParts.find(menuButton => menuButton.part.partId === \"left_wall\");\r\n if (rightWall) {\r\n rightWall.subMenuParent = \"Walls\";\r\n }\r\n if (leftWall) {\r\n leftWall.subMenuParent = \"Walls\";\r\n }\r\n switch (this.props.contextMenuOpen) {\r\n case \"right_wall_custom\": {\r\n contextMenuButtons = rightWall ? [rightWall, ...backSplashButtons] : backSplashButtons;\r\n break;\r\n }\r\n case \"left_wall_custom\": {\r\n contextMenuButtons = leftWall ? [leftWall, ...backSplashButtons] : backSplashButtons;\r\n break;\r\n }\r\n case \"backsplash_custom_left\": {\r\n contextMenuButtons = [...backSplashButtons, leftWall];\r\n break;\r\n }\r\n case \"backsplash_custom_right\": {\r\n contextMenuButtons = [...backSplashButtons, rightWall];\r\n break;\r\n }\r\n case \"backsplash_custom\": {\r\n contextMenuButtons = backSplashButtons; // just in case, we should not have these cases\r\n break;\r\n }\r\n }\r\n this.setState({\r\n contextMenuButtons\r\n })\r\n };\r\n\r\n handleContextMenuHover = () => {\r\n //TODO[Artem] add here rendering green zones on hover\r\n };\r\n\r\n render() {\r\n\r\n let contextMenuStyles = this.props.contextMenuPosition || {};\r\n if (this.state.contextMenuButtons.length <= 4) {\r\n contextMenuStyles = Object.assign({}, contextMenuStyles, {maxWidth:\"210px\"} )\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n {this.state.contextMenuButtons.map((menuItem) => {\r\n if (!menuItem) {\r\n return null\r\n }\r\n return (\r\n \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = () => {\r\n return {};\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ContextMenuSimple)\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from 'react-redux';\r\n\r\nimport Analytics from \"../../../analytics\";\r\nimport {getModuleCombinations} from \"../core/subparts/cabinet/cabinetModuleSystem\";\r\nimport {MODULE_CONTEXT_MENU_TYPES, MODULE_CONTEXT_MENU_DIRECTIONS, CABINET_WIZARD_BUTTONS} from \"../core/constants\";\r\nimport Cabinet from \"../core/parts/cabinet\";\r\nimport {\r\n setModuleContextMenuType,\r\n setModuleContextMenuDirection,\r\n setModuleContextMenuModule,\r\n setModuleContextMenuModulePart,\r\n setActiveNavigationFilter, setActiveNavigationFilterStepIndex\r\n} from \"../../../actions/navigationFunctions\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nclass CabinetContextMenu extends Component {\r\n\r\n static propTypes = {\r\n updateCanvas: PropTypes.func,\r\n contextMenuOpen: PropTypes.object,\r\n hoveredLayer: PropTypes.object,\r\n handleContextMenuClick: PropTypes.func,\r\n contextMenuPosition: PropTypes.object,\r\n closeContextMenu: PropTypes.func,\r\n };\r\n\r\n state = {\r\n contextMenuButtons: [],\r\n };\r\n\r\n componentDidMount() {\r\n if (this.props.closeContextMenu) {\r\n document.addEventListener('click', this.contextMenuBlur)\r\n }\r\n const moduleSplitted = this.props.contextMenuOpen.module.split(\"_\"); // example: \"4_4\"\r\n this.props.setModuleContextMenuModule(moduleSplitted[0]);\r\n this.props.setModuleContextMenuModulePart(moduleSplitted[1]);\r\n }\r\n\r\n contextMenuBlur = (e) => {\r\n if (!e.target.closest('.contextmenu-buttons')\r\n && !e.target.closest('.contextmenu-buttons__button')\r\n && !e.target.closest('.contextmenu-slice')\r\n && !e.target.closest('.canvas')) {\r\n this.props.closeContextMenu();\r\n }\r\n };\r\n\r\n componentWillUnmount() {\r\n if (this.props.closeContextMenu) {\r\n document.removeEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n resetModule = () => {\r\n const layout = getCurrentLayout();\r\n const cabinetParent = layout.parts[Cabinet.id];\r\n if (this.props.contextMenuOpen.contextMenuPartId === \"top_cabinet\") {\r\n const moduleSplitted = this.props.contextMenuOpen.module.split(\"_\"); // example: \"4_4\"\r\n const arrayNumber = +moduleSplitted[0] - 1;\r\n cabinetParent.topCabinet.moduleSystem[arrayNumber] = (arrayNumber === 0 || arrayNumber === 5)\r\n ? [\"36_18_19\"] // copy array since it might be overwritten\r\n : [\"36_36_1\"];\r\n cabinetParent.topCabinet.activeFeatureParts = cabinetParent.topCabinet.setActiveFeatureParts();\r\n this.props.updateCanvas();\r\n } else if (this.props.contextMenuOpen.contextMenuPartId === \"bottom_cabinet\") {\r\n const moduleSplitted = this.props.contextMenuOpen.module.split(\"_\"); // example: \"4_4\"\r\n const arrayNumber = +moduleSplitted[0] - 1;\r\n cabinetParent.bottomCabinet.moduleSystem[arrayNumber] = [\"36_36_1\"];\r\n cabinetParent.bottomCabinet.activeFeatureParts = cabinetParent.bottomCabinet.setActiveFeatureParts();\r\n this.props.updateCanvas();\r\n }\r\n this.props.closeContextMenu();\r\n };\r\n\r\n setCabinetModule = (buttonId) => {\r\n const layout = getCurrentLayout();\r\n console.log(\"buttonId\", buttonId);\r\n console.log(\"this.props.contextMenuOpen\", this.props.contextMenuOpen);\r\n const moduleParts = buttonId.split(\"-\"); // example: \"12_36_4-12_36_57-12_36_58\" // width-height-id\r\n const cabinetParent = layout.parts[Cabinet.id];\r\n let subPartName = \"\";\r\n if (this.props.contextMenuOpen.contextMenuPartId === \"top_cabinet\") {\r\n subPartName = \"topCabinet\";\r\n } else if (this.props.contextMenuOpen.contextMenuPartId === \"bottom_cabinet\") {\r\n subPartName = \"bottomCabinet\";\r\n }\r\n if (this.props.contextMenuOpen.contextMenuPartId === \"top_cabinet\"\r\n || this.props.contextMenuOpen.contextMenuPartId === \"bottom_cabinet\") {\r\n const moduleSplitted = this.props.contextMenuOpen.module.split(\"_\"); // example: \"4_4\"\r\n cabinetParent[subPartName].inlayTypes.forEach(inlayTypeObj => {\r\n const existingMJoinedIndex = inlayTypeObj.moduleParts.findIndex(mJoined => {\r\n return mJoined === this.props.contextMenuOpen.module\r\n });\r\n if (existingMJoinedIndex > -1) { // it is not a default! push new spliced\r\n // inlayTypeObj.moduleParts.splice(existingMJoinedIndex, 1);\r\n moduleParts.forEach((modulePart) => {\r\n inlayTypeObj.moduleParts.push(moduleSplitted[0] + \"_\" + modulePart.split(\"_\")[2]);\r\n });\r\n }\r\n });\r\n const moduleSystemPart = cabinetParent[subPartName].moduleSystem[+moduleSplitted[0] - 1];\r\n // 1) remove old\r\n const oldIndex = moduleSystemPart.findIndex(modulePart => {\r\n // example: \"12_36_4-12_36_57-12_36_58\" // width-height-id\r\n return modulePart.split(\"_\")[2] === this.props.moduleContextMenuModulePart\r\n });\r\n moduleSystemPart.splice(oldIndex,1);\r\n // 2) add new ones\r\n moduleParts.forEach((modulePart) => {\r\n moduleSystemPart.push(modulePart);\r\n });\r\n cabinetParent[subPartName].activeFeatureParts = cabinetParent[subPartName].setActiveFeatureParts();\r\n this.props.updateCanvas();\r\n layout.updateLocalStorage();\r\n }\r\n\r\n };\r\n\r\n getSliceButtons = () => {\r\n const availableSplitButtons = getModuleCombinations(this.props.moduleContextMenuModulePart, this.props.moduleContextMenuDirection);\r\n return availableSplitButtons.map(buttonId => {\r\n return {\r\n text: \"\",\r\n buttonId,\r\n onClick: () => {\r\n this.setCabinetModule(buttonId);\r\n this.props.closeContextMenu();\r\n }\r\n }\r\n })\r\n };\r\n getResetButton = () => {\r\n return {\r\n text: \"Reset Module\",\r\n buttonId: \"reset\",\r\n onClick: this.resetModule\r\n }\r\n };\r\n getExitButton = () => {\r\n return {\r\n text: \"Exit config\",\r\n buttonId: \"exit_config\",\r\n onClick: () => this.props.setModuleContextMenuType(MODULE_CONTEXT_MENU_TYPES.Filters)\r\n }\r\n };\r\n openNavigationMenu = (e) => {\r\n const layout = getCurrentLayout();\r\n const cabinetParent = layout.parts[Cabinet.id];\r\n const subParts = cabinetParent.subParts();\r\n const subPart = subParts.find(menuItem => menuItem.part.partId === this.props.contextMenuOpen.contextMenuPartId);\r\n this.props.handleContextMenuClick(subPart); // top cabinet\r\n this.props.setActiveNavigationFilter(e.target.dataset.id);\r\n this.props.setActiveNavigationFilterStepIndex(e.target.dataset.index);\r\n this.props.closeContextMenu();\r\n };\r\n getCabinetConfigurationButtons = () => {\r\n const cabinetConfigurationButtons = CABINET_WIZARD_BUTTONS\r\n .filter(wizardButton => wizardButton.buttonId !== CABINET_WIZARD_BUTTONS[0].buttonId)\r\n .map((wizardButton) => {\r\n wizardButton.onClick = this.openNavigationMenu;\r\n return wizardButton\r\n });\r\n const availableModuleCombinations = getModuleCombinations(this.props.moduleContextMenuModulePart);\r\n if (availableModuleCombinations && availableModuleCombinations.length) {\r\n cabinetConfigurationButtons.push({\r\n text: \"Door config\",\r\n buttonId: \"door_config\",\r\n onClick: () => this.props.setModuleContextMenuType(MODULE_CONTEXT_MENU_TYPES.SliceButtons)\r\n })\r\n }\r\n return cabinetConfigurationButtons\r\n };\r\n getContextMenuButtons = () => {\r\n switch (this.props.moduleContextMenuType) {\r\n case MODULE_CONTEXT_MENU_TYPES.Filters:\r\n return (this.props.moduleContextMenuModulePart === \"1\") //remove reset button if there is nowhere to split\r\n ? this.getCabinetConfigurationButtons()\r\n : [...this.getCabinetConfigurationButtons(), this.getResetButton()];\r\n case MODULE_CONTEXT_MENU_TYPES.SliceButtons:\r\n default: {\r\n const sliceButtons = this.getSliceButtons();\r\n return sliceButtons.length\r\n ? [...sliceButtons, this.getExitButton(), this.getResetButton()]\r\n : [...this.getCabinetConfigurationButtons(), this.getResetButton()]\r\n }\r\n }\r\n };\r\n\r\n render() {\r\n\r\n let contextMenuStyles = (this.props.windowWidth > 991 && this.props.contextMenuPosition)\r\n ? this.props.contextMenuPosition\r\n : {};\r\n if (this.state.contextMenuButtons.length === 4) {\r\n contextMenuStyles = Object.assign({}, contextMenuStyles, {maxWidth:\"210px\"} )\r\n }\r\n const availableHorizontalAndVertical = [\"1\", \"2\", \"3\", \"9\", \"10\"]; // show buttons for available splits\r\n const firstSliceIsActve = (this.props.moduleContextMenuType === MODULE_CONTEXT_MENU_TYPES.SliceButtons)\r\n && availableHorizontalAndVertical.includes(this.props.moduleContextMenuModulePart);\r\n\r\n return (\r\n
    \r\n {firstSliceIsActve ? (\r\n
    \r\n {Object.keys(MODULE_CONTEXT_MENU_DIRECTIONS).map((direction) => (\r\n \r\n ))}\r\n
    \r\n ) : null}\r\n
    \r\n {this.getContextMenuButtons().map((contextButton, contextButtonIndex) => {\r\n return (\r\n \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n moduleContextMenuType: store.navigationState.moduleContextMenuType,\r\n moduleContextMenuDirection: store.navigationState.moduleContextMenuDirection,\r\n moduleContextMenuModulePart: store.navigationState.moduleContextMenuModulePart,\r\n windowWidth: store.serverState.windowWidth,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setModuleContextMenuType,\r\n setModuleContextMenuDirection,\r\n setModuleContextMenuModule,\r\n setModuleContextMenuModulePart,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(CabinetContextMenu);\r\n","import snakeCase from 'lodash/snakeCase';\r\nimport invert from 'lodash/invert';\r\n\r\nimport LayoutCommonNew from \"../../visComponents/layoutCommonNew\";\r\n\r\nimport Globals from \"./parts/globals\";\r\n\r\nimport {LayoutType, LayoutAbbreviation} from \"./constants\";\r\nimport zIndexes from \"./zIndex\";\r\nimport Other from \"./parts/other\";\r\nimport NonVisualizerSubPart from \"./subparts/nonVisualizerSubPart\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport Background from \"./parts/background\";\r\nimport Appliance from \"./parts/appliance\";\r\nimport CountertopGroup from \"./parts/countertopGroup\";\r\nimport Cabinet from \"./parts/cabinet\";\r\nimport Floor from \"./parts/floor\";\r\nimport Walls from \"./parts/walls\";\r\nimport CenterIsland from \"./parts/centerIsland\";\r\nimport {AVAILABLE_VISUALIZER_TYPES} from \"../../../config\";\r\n\r\nexport class Layout extends LayoutCommonNew {\r\n\r\n /**\r\n * @type {int}\r\n */\r\n defaultType = LayoutType.Layout1;\r\n type = this.defaultType;\r\n scene = \"1\";\r\n visualizerType = AVAILABLE_VISUALIZER_TYPES.kvScene;\r\n localStorageKey = \"kvSceneState\";\r\n layersBinding = \"KitchenV5\";\r\n layoutNames = LayoutAbbreviation;\r\n layoutTypes = LayoutType;\r\n zIndexes = zIndexes.layouts;\r\n excludedPartIdsFromHover = [\"decor_\", \"background_bg\", \"walls_ceiling\", \"attachment\"];\r\n\r\n constructor(props) {\r\n super(props);\r\n this.parts[Background.id] = new Background();\r\n this.parts[CenterIsland.id] = new CenterIsland();\r\n this.parts[CountertopGroup.id] = new CountertopGroup();\r\n this.parts[Appliance.id] = new Appliance();\r\n this.parts[Cabinet.id] = new Cabinet();\r\n this.parts[Walls.id] = new Walls();\r\n this.parts[Floor.id] = new Floor();\r\n this.parts[Globals.id] = new Globals();\r\n this.parts[Other.id] = new Other();\r\n Object.values(this.parts).forEach(part => part.layout = this);\r\n }\r\n\r\n getCurrentLayoutName(type = this.type) {\r\n return invert(LayoutType)[type];\r\n }\r\n\r\n getCurrentLayoutAbbreviation() {\r\n return LayoutAbbreviation[this.getCurrentLayoutName()]\r\n }\r\n\r\n addNonVisualizerSubPart(featureGroupName){\r\n const otherParent = this.parts[Other.id];\r\n const partId = snakeCase(featureGroupName);\r\n let relatedItem = otherParent.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, featureGroupName);\r\n relatedItem.getParent = () => otherParent;\r\n otherParent.relatedItems.push(relatedItem);\r\n }\r\n return new DesignNavigationItem(relatedItem.partName, relatedItem)\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../intermediatePart\";\r\n\r\nexport default class NonVisualizerSubPart extends IntermediatePart {\r\n constructor(isChild, partId, partName) {\r\n super(isChild);\r\n this.partId = partId;\r\n this.visible = true;\r\n this.partName = partName;\r\n // this.allFeaturesReceived = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new NonVisualizerSubPart(false, this.partId, dbFeature.groupName));\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationNoMetaSubItems(filters, searchText)\r\n }\r\n}\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport {reorder} from \"../../../misc/utils\";\r\nimport Analytics from \"../../../analytics\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {BACKSPLASH_TYPES} from \"../../kvComponent/core/constants\";\r\nimport CenterIsland from \"../core/parts/centerIsland\";\r\nimport {getFeatureGroupName} from \"../../../misc/helpers\";\r\n\r\nclass ContextMenuSimple extends Component {\r\n\r\n static propTypes = {\r\n contextMenuOpen: PropTypes.string.isRequired,\r\n hoveredLayer: PropTypes.object,\r\n handleContextMenuClick: PropTypes.func,\r\n contextMenuPosition: PropTypes.object,\r\n contextMenuPonyWall: PropTypes.bool,\r\n renderGreenLayerByZindex: PropTypes.func,\r\n closeContextMenu: PropTypes.func,\r\n };\r\n\r\n state = {\r\n contextMenuButtons: []\r\n };\r\n\r\n componentDidMount() {\r\n this.setContextMenuButtons();\r\n if (this.props.closeContextMenu) {\r\n document.addEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n contextMenuBlur = (e) => {\r\n if (!e.target.closest('.contextmenu-buttons')\r\n && !e.target.closest('.contextmenu-buttons__button')\r\n && !e.target.closest('.sprocket-container') && !e.target.closest('.canvas')) {\r\n this.props.closeContextMenu();\r\n }\r\n };\r\n\r\n componentWillUnmount() {\r\n if (this.props.closeContextMenu) {\r\n document.removeEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n setContextMenuButtons() {\r\n const layout = getCurrentLayout();\r\n const contextMenuOpen = this.props.contextMenuOpen;\r\n if (contextMenuOpen === \"backsplash_custom\"\r\n || contextMenuOpen === \"backsplash_custom_left\"\r\n || contextMenuOpen === \"backsplash_custom_right\"\r\n || contextMenuOpen === \"right_wall_custom\"\r\n || contextMenuOpen === \"left_wall_custom\") {\r\n this.setBacksplashButtons();\r\n return\r\n }\r\n\r\n const hoveredParent = layout.designNavigationItems().find(navItem => {\r\n return navItem.text === contextMenuOpen\r\n });\r\n\r\n let relatedItems = hoveredParent.part.relatedItems;\r\n\r\n const clickedItem = relatedItems.find((item) => {\r\n return item.activeFeature && (item.partId === this.props.hoveredLayer.partId)\r\n });\r\n\r\n let itemsToRender = this.getItemsToRender(hoveredParent);\r\n\r\n // console.log('clickedItem', clickedItem);\r\n // console.log('relatedItems', relatedItems);\r\n // console.log('itemsToRender', itemsToRender);\r\n\r\n const clickedItemIndex = itemsToRender.findIndex(item => item.text === clickedItem.partName);\r\n if (clickedItemIndex > 0) {\r\n itemsToRender = reorder(itemsToRender, clickedItemIndex, 0); // swap items in array start\r\n }\r\n\r\n itemsToRender = itemsToRender.map(item => {\r\n if (item.text === CenterIsland.id) {\r\n // item.subMenuText = \"Countertop\";\r\n item.bgImageText = \"Countertop\";\r\n }\r\n return item\r\n });\r\n\r\n this.setState({\r\n contextMenuButtons: itemsToRender\r\n })\r\n }\r\n\r\n getItemsToRender = (hoveredParent) => {\r\n let itemsToRender = hoveredParent.part.subParts();\r\n let availablePartIds = [];\r\n switch (this.props.contextMenuOpen) {\r\n case CenterIsland.id:\r\n availablePartIds = [\"center_island_sink\", \"center_island_faucet\", \"center_island_countertop\",\r\n \"center_island_stovetop\", \"center_island_range\", \"center_island_edge\"];\r\n break;\r\n case \"Countertop\":\r\n availablePartIds = [\"countertop\", \"faucet\", \"sink\", \"edge_profile\"];\r\n break;\r\n case \"Walls\":\r\n availablePartIds = [\"right_wall\", \"backsplash\"];\r\n break;\r\n default:\r\n break;\r\n }\r\n return itemsToRender.filter(menuButton => {\r\n if ((document.kvConfig.visualizerType === \"kvScene\") && (menuButton.part.partId === \"center_island_edge\")) {\r\n const layout = getCurrentLayout();\r\n if (layout.type === 3) {\r\n return false\r\n }\r\n }\r\n if ((document.kvConfig.visualizerType === \"kvScene\") && (menuButton.part.partId === \"center_island_stovetop\")) {\r\n const layout = getCurrentLayout();\r\n if (layout.type === 6) {\r\n return false\r\n }\r\n }\r\n // return availablePartIds.includes(menuButton.part.partId) && hoveredParent.part.layout.hasNavItemsLength(menuButton)\r\n return availablePartIds.includes(menuButton.part.partId)\r\n });\r\n };\r\n\r\n getBackSplashButtons = () => {\r\n return BACKSPLASH_TYPES.map(bType => {\r\n const button = {\r\n text: bType,\r\n };\r\n switch (bType) {\r\n case \"4in\":\r\n button.subMenuText = \"visualizer.kitchen.contextmenu.backsplash.4in\"\r\n break;\r\n case \"6in\":\r\n button.subMenuText = \"visualizer.kitchen.contextmenu.backsplash.6in\"\r\n break;\r\n case \"Full\":\r\n button.subMenuText = \"visualizer.kitchen.contextmenu.backsplash.18in\"\r\n break;\r\n }\r\n return button\r\n })\r\n };\r\n\r\n setBacksplashButtons = () => {\r\n const layout = getCurrentLayout();\r\n const hoveredParent = layout.designNavigationItems().find(navItem => {\r\n return navItem.text === \"Walls\"\r\n });\r\n const subParts = hoveredParent.part.subParts();\r\n\r\n let contextMenuButtons = [];\r\n const backSplashButtons = this.getBackSplashButtons();\r\n const rightWall = subParts.find(menuButton => menuButton.part.partId === \"right_wall\");\r\n const leftWall = subParts.find(menuButton => menuButton.part.partId === \"left_wall\");\r\n if (rightWall) {\r\n rightWall.subMenuParent = \"Walls\";\r\n }\r\n if (leftWall) {\r\n leftWall.subMenuParent = \"Walls\";\r\n }\r\n switch (this.props.contextMenuOpen) {\r\n case \"right_wall_custom\": {\r\n contextMenuButtons = rightWall ? [rightWall, ...backSplashButtons] : backSplashButtons;\r\n break;\r\n }\r\n case \"left_wall_custom\": {\r\n contextMenuButtons = leftWall ? [leftWall, ...backSplashButtons] : backSplashButtons;\r\n break;\r\n }\r\n case \"backsplash_custom_left\": {\r\n contextMenuButtons = [...backSplashButtons, leftWall];\r\n break;\r\n }\r\n case \"backsplash_custom_right\": {\r\n contextMenuButtons = [...backSplashButtons, rightWall];\r\n break;\r\n }\r\n case \"backsplash_custom\": {\r\n contextMenuButtons = backSplashButtons; // just in case, we should not have these cases\r\n break;\r\n }\r\n }\r\n this.setState({\r\n contextMenuButtons\r\n })\r\n };\r\n\r\n handleContextMenuHover = () => {\r\n //TODO[Artem] add here rendering green zones on hover\r\n };\r\n\r\n render() {\r\n\r\n let contextMenuStyles = this.props.contextMenuPosition || {};\r\n if (this.state.contextMenuButtons.length <= 4) {\r\n contextMenuStyles = Object.assign({}, contextMenuStyles, {maxWidth:\"210px\"} )\r\n }\r\n\r\n const {intl, fabricatorData} = this.props;\r\n\r\n return (\r\n
    \r\n
    \r\n {this.state.contextMenuButtons.map((menuItem) => {\r\n if (!menuItem) {\r\n return null\r\n }\r\n return (\r\n \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(ContextMenuSimple)\r\n)\r\n","import {IntermediatePart} from \"../intermediatePart\";\r\n\r\nexport default class NonVisualizerSubPart extends IntermediatePart {\r\n constructor(isChild, partId, partName) {\r\n super(isChild);\r\n this.partId = partId;\r\n this.visible = true;\r\n this.partName = partName;\r\n // this.allFeaturesReceived = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new NonVisualizerSubPart(false, this.partId, dbFeature.groupName));\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationNoMetaSubItems(filters, searchText)\r\n }\r\n}\r\n","import {Part} from \"../part\";\r\nimport {wallsThumbnail} from \"../../../bvComponent/core/assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport store from \"../../../../store\";\r\nimport LeftWall from \"../subparts/walls/leftWall\";\r\nimport RightWall from \"../subparts/walls/rightWall\";\r\nimport CenterWall from \"../subparts/walls/centerWall\";\r\nimport CeilingPanels from \"../subparts/walls/ceilingPanels\";\r\n\r\nexport default class Walls extends Part {\r\n static id = 'Walls';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Walls';\r\n this.translateId = \"visualizer.bathroom.walls\";\r\n this.partThumbnail = wallsThumbnail;\r\n\r\n // related items\r\n this.leftWall = null;\r\n this.rightWall = null;\r\n this.centerWall = null;\r\n this.popoutWall = null;\r\n this.ceiling = null;\r\n this.ceilingPanels = null;\r\n\r\n this.allWallsApplied = true;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Left Wall\":\r\n relatedItemName = \"leftWall\";\r\n RelatedItemClass = LeftWall;\r\n break;\r\n case \"Right Wall\":\r\n relatedItemName = \"rightWall\";\r\n RelatedItemClass = RightWall;\r\n break;\r\n case \"Center Wall\":\r\n relatedItemName = \"centerWall\";\r\n RelatedItemClass = CenterWall;\r\n break;\r\n case \"Ceiling Panels\":\r\n relatedItemName = \"ceilingPanels\";\r\n RelatedItemClass = CeilingPanels;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts(withHidden = true) {\r\n return this.relatedItems\r\n .filter(item => {\r\n if (item.partId === \"popout_wall\") {\r\n item.visible = item.getParent().layout.getCurrentLayoutAbbreviation().includes(\"P\")\r\n }\r\n return this.filterRelatedItem(item, withHidden)\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n recoverPrevioslySelected(activeRelatedPart) {\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n this.relatedItems.forEach(relatedItem => {\r\n if (relatedItem.partId !== activeRelatedPart.partId && relatedItem.activeFeatureBeforeAllWalls) {\r\n if (relatedItem.activeFeatureBeforeAllWalls === \"placeholder\") {\r\n relatedItem.placeholderChanged = false;\r\n relatedItem.firstClick[activeQuoteIndex] = false;\r\n } else if (!relatedItem.selectedByUser) {\r\n relatedItem.activeFeatureBeforeAllWalls.clickFromAllWalls();\r\n }\r\n }\r\n });\r\n }\r\n\r\n}\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Z from \"../core/zIndex\";\r\nimport {ShowerTubCombo} from \"../core/parts/showerTubCombo\";\r\nimport {Vanity} from \"../core/parts/vanity\";\r\nimport {Shower} from \"../core/parts/shower\";\r\nimport Walls from \"../core/parts/walls\";\r\nimport {VanityTypes, ShowerComboTubType} from \"../core/constants\";\r\nimport {getMetadataByDimensions, reorder} from \"../../../misc/utils\";\r\nimport Analytics from \"../../../analytics\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {ShowerAccessories} from \"../core/parts/showerAccessories\";\r\n\r\nexport default class ContextMenu extends Component {\r\n\r\n static propTypes = {\r\n designNavigationItems: PropTypes.array,\r\n contextMenuOpen: PropTypes.string,\r\n hoveredLayer: PropTypes.object,\r\n handleContextMenuClick: PropTypes.func,\r\n contextMenuPosition: PropTypes.object,\r\n contextMenuPonyWall: PropTypes.bool,\r\n renderGreenLayerByZindex: PropTypes.func,\r\n closeContextMenu: PropTypes.func,\r\n };\r\n\r\n state = {\r\n contextMenuButtons: []\r\n };\r\n\r\n componentDidMount() {\r\n this.setContextMenuButtons();\r\n if (this.props.closeContextMenu) {\r\n document.addEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n contextMenuBlur = (e) => {\r\n if (!e.target.closest('.contextmenu-buttons')\r\n && !e.target.closest('.contextmenu-buttons__button')\r\n && !e.target.closest('.sprocket-container') && !e.target.closest('.canvas')) {\r\n this.props.closeContextMenu();\r\n }\r\n };\r\n\r\n componentWillUnmount() {\r\n if (this.props.closeContextMenu) {\r\n document.removeEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n getShowerBodySelectionButtons = () => {\r\n const shower = this.state.designNavigationItems.find(desItem => desItem.text === \"Shower\");\r\n const currentShowerSize = shower.part.showerSize();\r\n const showerBody = shower && shower.part.showerBody;\r\n return (showerBody && showerBody.features.length) ? showerBody.features.filter((showerBodyFeature) => {\r\n return showerBodyFeature.partName.includes(currentShowerSize);\r\n }) : [1]\r\n };\r\n\r\n setShowerBodySelectionButtons = () => {\r\n const layout = getCurrentLayout();\r\n const shower = layout.parts[Shower.id];\r\n const vanity = layout.parts[Vanity.id];\r\n const counterTopSize = vanity.counterTopSize();\r\n const showerTubCombo = layout.parts[ShowerTubCombo.id];\r\n\r\n const showerSubParts = shower.subParts();\r\n const showerBody = showerSubParts.find((menuItem) => {\r\n return menuItem.part.partId === \"shower_body\"\r\n });\r\n const currentShowerSize = shower.showerSize();\r\n let contextMenuButtons = [];\r\n\r\n if (showerTubCombo.showerTubComboIsActive) {\r\n const showerTubComboSubParts = showerTubCombo.subParts();\r\n const wallConfiguration = showerTubComboSubParts.find((menuItem) => {\r\n return menuItem.part.partId === \"wall_configuration\"\r\n });\r\n showerTubCombo.wallConfiguration.features.forEach((wallConfigurationFeature) => {\r\n contextMenuButtons.push(Object.assign({}, wallConfiguration, {\r\n subMenuParent: \"Walls\",\r\n subMenuText: wallConfigurationFeature.partName,\r\n bgImageText: wallConfigurationFeature.partName,\r\n clickFeature: true,\r\n text: wallConfigurationFeature.partName.includes(\"Pony\") ? \"Pony Wall\" : \"Left Shower Wall\"\r\n }))\r\n })\r\n } else if (showerBody && showerBody.part.features.length) {\r\n showerBody.part.features.forEach((showerBodyFeature) => {\r\n if (showerBodyFeature.partName.includes(currentShowerSize)) {\r\n // console.log('showerBodyFeature.partName', showerBodyFeature.partName);\r\n if (!(counterTopSize === \"72in\" && layout.type === 1 && showerBodyFeature.partName.includes(\"15X4\"))) {\r\n contextMenuButtons.push(Object.assign({}, showerBody, {\r\n subMenuParent: \"Walls\",\r\n subMenuText: showerBodyFeature.partName,\r\n bgImageText: showerBodyFeature.partName,\r\n clickFeature: true,\r\n text: showerBodyFeature.partName.includes(\"Pony\") ? \"Pony Wall\" : \"Left Shower Wall\"\r\n }))\r\n }\r\n }\r\n })\r\n }\r\n\r\n const clickedItemIndex = contextMenuButtons.findIndex(item => {\r\n return showerTubCombo.showerTubComboIsActive\r\n ? item.subMenuText === showerTubCombo.wallConfiguration.activeFeature.partName\r\n : item.subMenuText === showerBody.part.activeFeature.partName\r\n });\r\n\r\n if (clickedItemIndex > 0) {\r\n contextMenuButtons = reorder(contextMenuButtons, clickedItemIndex, 0); // swap items in array start\r\n }\r\n\r\n this.setState({\r\n contextMenuButtons\r\n })\r\n };\r\n\r\n setWallBButtons = () => {\r\n const layout = getCurrentLayout();\r\n let contextMenuButtons = [];\r\n\r\n const wallParent = layout.parts[Walls.id];\r\n const wallParts = wallParent.subParts().filter((menuItem) => menuItem.part.partId === \"right_wall\");\r\n wallParts.forEach((wallPart) => {\r\n contextMenuButtons.push(Object.assign({}, wallPart, {\r\n subMenuParent: \"Walls\",\r\n subMenuText: wallPart.part.partName,\r\n bgImageText: wallPart.part.partName,\r\n text: wallPart.text\r\n }));\r\n });\r\n\r\n const vanity = layout.parts[Vanity.id];\r\n const vanityBacksplash = vanity.subParts().find((menuItem) => {\r\n return menuItem.part.partId === \"vanity_backsplash\"\r\n });\r\n if (vanityBacksplash) {\r\n contextMenuButtons.push(Object.assign({}, vanityBacksplash, {\r\n subMenuParent: \"Vanity\",\r\n subMenuText: vanityBacksplash.part.partName,\r\n bgImageText: vanityBacksplash.part.partName,\r\n text: vanityBacksplash.text\r\n }));\r\n }\r\n\r\n let zIndexToFind = this.props.hoveredLayer.zIndex;\r\n\r\n const clickedItem = contextMenuButtons.find(item => {\r\n return item.part.activeFeature && item.part.activeFeature.layer && item.part.activeFeature.layer.zIndex === zIndexToFind;\r\n });\r\n if (clickedItem && clickedItem.part && clickedItem.part.partId === \"vanity_backsplash\") {\r\n const vanityFaucet = vanity.subParts().find((menuItem) => {\r\n return menuItem.part.partId === \"vanity_faucet\"\r\n });\r\n if (vanityFaucet) {\r\n contextMenuButtons.push(Object.assign({}, vanityFaucet, {\r\n subMenuParent: \"Vanity\",\r\n subMenuText: vanityFaucet.part.partName,\r\n bgImageText: vanityFaucet.part.partName,\r\n text: vanityFaucet.text\r\n }));\r\n }\r\n }\r\n\r\n const clickedItemIndex = contextMenuButtons.findIndex(item => {\r\n return item.part.activeFeature && item.part.activeFeature.layer && item.part.activeFeature.layer.zIndex === zIndexToFind;\r\n });\r\n\r\n if (clickedItemIndex > 0) {\r\n contextMenuButtons = reorder(contextMenuButtons, clickedItemIndex, 0); // swap items in array start\r\n }\r\n\r\n this.setState({\r\n contextMenuButtons\r\n })\r\n };\r\n\r\n setContextMenuButtons() {\r\n\r\n const layout = getCurrentLayout();\r\n\r\n if (this.props.contextMenuOpen === \"Shower Body Selection\") {\r\n this.setShowerBodySelectionButtons();\r\n return\r\n } else if (this.props.contextMenuOpen === \"wall_b_custom\") {\r\n this.setWallBButtons();\r\n return\r\n }\r\n\r\n const hoveredParent = this.props.designNavigationItems.find(navItem => {\r\n return navItem.text === this.props.contextMenuOpen\r\n });\r\n\r\n let relatedItems = hoveredParent.part.relatedItems;\r\n if (this.props.contextMenuOpen === \"Shower Tub Combo\") {\r\n relatedItems = [...hoveredParent.part.relatedItems, ...hoveredParent.part.getShowerRelatedItems()]\r\n }\r\n\r\n let zIndexToFind = this.props.hoveredLayer.zIndex;\r\n if (this.props.hoveredLayer.zIndex === Z.layouts[layout.getCurrentLayoutName()].Shower.Wall2) {\r\n zIndexToFind = Z.layouts[layout.getCurrentLayoutName()].Shower.Wall\r\n }\r\n if (\r\n this.props.hoveredLayer.zIndex === Z.layouts[layout.getCurrentLayoutName()].Shower.WallAccent2\r\n ) {\r\n zIndexToFind = Z.layouts[layout.getCurrentLayoutName()].Shower.WallAccent\r\n }\r\n const clickedItem = relatedItems.find((item) => {\r\n return (item.activeFeature && item.activeFeature.layer.zIndex === zIndexToFind)\r\n || (item.layerPositions && Object.keys(item.layerPositions).some(key => {\r\n return item.layerPositions[key] && item.layerPositions[key].layer && (item.layerPositions[key].layer.zIndex === zIndexToFind)\r\n }))\r\n });\r\n\r\n let itemsToRender = this.getItemsToRender(hoveredParent);\r\n\r\n // console.log('clickedItem', clickedItem);\r\n // console.log('relatedItems', relatedItems);\r\n // console.log('itemsToRender', itemsToRender);\r\n\r\n const clickedItemIndex = itemsToRender.findIndex(item => item.text === clickedItem.partName);\r\n if (clickedItemIndex > 0) {\r\n itemsToRender = reorder(itemsToRender, clickedItemIndex, 0); // swap items in array start\r\n }\r\n\r\n this.setState({\r\n contextMenuButtons: itemsToRender\r\n })\r\n }\r\n\r\n getItemsToRender = (hoveredParent) => {\r\n const layout = getCurrentLayout();\r\n let itemsToRender = hoveredParent.part.subParts().filter(subPart => layout.designNavigationItems(subPart).length);\r\n\r\n if ((this.props.contextMenuOpen === \"Shower\" || this.props.contextMenuOpen === \"Shower Tub Combo\") && hoveredParent.text !== \"Shower Accessories\") {\r\n itemsToRender = itemsToRender.filter(menuButton => {\r\n return this.props.contextMenuPonyWall\r\n ? menuButton.part.isPonyWallPart && menuButton.part.partId !== \"pony_wall\"\r\n : !menuButton.part.isPonyWallPart\r\n });\r\n const accessoriesParent = layout.parts[ShowerAccessories.id];\r\n if (accessoriesParent && accessoriesParent.categoryEnabled && !this.props.contextMenuPonyWall\r\n && accessoriesParent.subParts().some(subPart => layout.designNavigationItems(subPart).length)) {\r\n itemsToRender = itemsToRender.filter(menuButton => menuButton.part.partId !== \"shower_wall_accent\");\r\n itemsToRender.push({\r\n text: \"Accessories\",\r\n part: {},\r\n subNav: true\r\n })\r\n }\r\n itemsToRender = itemsToRender.filter(menuButton => menuButton.part.partId !== \"shower_head\");\r\n if (layout.parts[ShowerTubCombo.id] && !this.props.contextMenuPonyWall) {\r\n itemsToRender.push({\r\n text: \"Configure Layout\",\r\n part: {},\r\n subNav: true\r\n })\r\n }\r\n }\r\n\r\n if (this.props.contextMenuOpen === \"Shower\") {\r\n itemsToRender = itemsToRender.filter(menuButton => menuButton.part.partId !== \"threshold\");\r\n }\r\n if (this.props.contextMenuOpen === \"Shower Tub Combo\") {\r\n itemsToRender = this.removeNotUsedTubItemsFromContextMenu(itemsToRender, hoveredParent.part.bottomTub);\r\n }\r\n if (this.props.contextMenuOpen === \"Vanity\") {\r\n itemsToRender = itemsToRender.filter((itemToRender) => {\r\n return itemToRender.part.partId !== \"vanity_mirror\" && itemToRender.part.partId !== \"vanity_backsplash\";\r\n });\r\n }\r\n\r\n return itemsToRender\r\n };\r\n\r\n removeNotUsedTubItemsFromContextMenu = (itemsToRender, activeTub) => {\r\n return itemsToRender.filter((itemToRender) => {\r\n let keepThisItem = true;\r\n Object.keys(ShowerComboTubType).forEach((key) => {\r\n if (itemToRender.part.partId === ShowerComboTubType[key] && itemToRender.part.partId !== activeTub\r\n && itemToRender.part.partId !== ShowerComboTubType.replacement_tub\r\n && itemToRender.part.partId !== ShowerComboTubType.bathtub_liner\r\n ) {\r\n keepThisItem = false\r\n }\r\n });\r\n if (itemToRender.text === \"Wall Configuration\") {\r\n keepThisItem = false\r\n }\r\n return keepThisItem\r\n });\r\n };\r\n\r\n handleSubNavClick = (menuItem) => {\r\n const layout = getCurrentLayout();\r\n\r\n if (menuItem.text === \"Accessories\") {\r\n const hoveredParent = this.props.designNavigationItems.find(navItem => {\r\n return navItem.text === \"Shower Accessories\"\r\n });\r\n this.setState({\r\n contextMenuButtons: this.getItemsToRender(hoveredParent)\r\n .map(button => {\r\n button.subMenuParent = \"Shower Accessories\";\r\n return button\r\n })\r\n });\r\n return false\r\n }\r\n\r\n const showerSubParts = layout.parts[Shower.id].subParts();\r\n\r\n const shower = showerSubParts.find((menuItem) => {\r\n return menuItem.part.partId === \"shower_body\"\r\n });\r\n shower.subMenuText = \"Shower\";\r\n shower.subMenuParent = \"Shower\";\r\n\r\n const showerTubCombo = layout.parts[ShowerTubCombo.id];\r\n const showerTubComboSubParts = showerTubCombo.subParts();\r\n\r\n const activeTubMenuItems = showerTubComboSubParts.filter(menuItem => menuItem.part.bottomTubId);\r\n activeTubMenuItems.forEach(menuItem => menuItem.subMenuParent = \"Shower Tub Combo\");\r\n\r\n const wallConfiguration = showerTubComboSubParts.find((menuItem) => {\r\n return menuItem.part.partId === \"wall_configuration\"\r\n });\r\n wallConfiguration.subMenuText = \"Shower Tub Combo\";\r\n wallConfiguration.subMenuParent = \"Shower Tub Combo\";\r\n\r\n this.setState({\r\n contextMenuButtons: [\r\n shower,\r\n wallConfiguration,\r\n ...activeTubMenuItems,\r\n ]\r\n })\r\n };\r\n\r\n handleContextMenuHover = (menuItem) => {\r\n const layout = getCurrentLayout();\r\n const hoveredButton = menuItem.text === \"Countertop\" ? \"CounterTop\" : menuItem.text;\r\n const hoveredParent = menuItem.subMenuParent || this.props.contextMenuOpen;\r\n\r\n const layoutType = layout.getCurrentLayoutName();\r\n\r\n // console.log('hoveredButton', hoveredButton);\r\n // console.log('hoveredParent', hoveredParent);\r\n\r\n if (hoveredButton && hoveredParent) {\r\n\r\n let hoveredZindex = \"\";\r\n\r\n if (hoveredParent === \"Shower\") {\r\n const shower = layout.parts.Shower;\r\n switch (hoveredButton) {\r\n case \"Shower Walls\":\r\n hoveredZindex = Z.layouts[layoutType].Shower.Wall;\r\n break;\r\n case \"Shower Body\":\r\n if (shower.showerDoor && shower.showerDoor.features.length) {\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].ShowerDoor;\r\n } else {\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].Glass;\r\n }\r\n break;\r\n case \"Shower Door\":\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].ShowerDoor;\r\n break;\r\n case \"Handle\":\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].ShowerDoorHandle;\r\n break;\r\n case \"Shower Pan\":\r\n case \"Shower Pans\":\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].ShowerPanCombo;\r\n break;\r\n case \"Shower Walls Accent\":\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].WallAccent;\r\n break;\r\n case \"Pony Wall Glass\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].PonyWallGlass;\r\n break;\r\n case \"Pony Wall Cap\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].PonyWallCap;\r\n break;\r\n case \"Floor\":\r\n hoveredZindex = shower.showerFloorIsActive\r\n ? Z.layouts[layoutType][hoveredParent][hoveredButton]\r\n : Z.layouts[layoutType][hoveredParent].ShowerPanCombo;\r\n break;\r\n default:\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent][hoveredButton];\r\n break;\r\n }\r\n } else if (hoveredParent === \"Shower Tub Combo\") {\r\n switch (hoveredButton) {\r\n case \"Shower Door\":\r\n hoveredZindex = Z.layouts[layoutType].Shower.ShowerDoor;\r\n break;\r\n case \"Shower Walls\":\r\n hoveredZindex = Z.layouts[layoutType].Shower.Wall;\r\n break;\r\n case \"Shower Walls Accent\":\r\n hoveredZindex = Z.layouts[layoutType].Shower.WallAccent;\r\n break;\r\n case \"Fixture\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].Fixture;\r\n break;\r\n case \"Handle\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].ShowerDoorHandle;\r\n break;\r\n case \"Wall Configuration\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].ShowerDoor;\r\n break;\r\n case \"Jetted Tub\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].TubCombo.JettedTub;\r\n break;\r\n case \"Tub Liner\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].TubCombo.Liner;\r\n break;\r\n case \"Walk In Tub\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].TubCombo.WalkInTub;\r\n break;\r\n case \"Replacement Tub\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].TubCombo.ReplacementTub;\r\n break;\r\n case \"Pony Wall Glass\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].PonyWallGlass;\r\n break;\r\n case \"Pony Wall Cap\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].PonyWallCap;\r\n break;\r\n default:\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].TubCombo[hoveredButton.replace(/ /g, \"\")];\r\n break;\r\n }\r\n } else if (hoveredParent === \"Vanity\") { // Vanity\r\n if (layout.parts.Vanity.activeSubType_ === VanityTypes.Complete) {\r\n switch (hoveredButton) {\r\n case \"Vanity\":\r\n hoveredZindex = Z.layouts[layoutType].Vanity.Complete.Cabinet;\r\n break;\r\n case \"Accent Wall\":\r\n hoveredZindex = Z.layouts[layoutType].Wall_A_Accent_Mask;\r\n break;\r\n default:\r\n hoveredZindex = Z.layouts[layoutType].Vanity[hoveredButton]; // Mirror\r\n break;\r\n }\r\n } else {\r\n switch (hoveredButton) {\r\n case \"Accent Wall\":\r\n hoveredZindex = Z.layouts[layoutType].Wall_A_Accent_Mask;\r\n break;\r\n case \"Backsplash\":\r\n hoveredZindex = Z.layouts[layoutType].Vanity.VanityBacksplash;\r\n break;\r\n default:\r\n hoveredZindex = Z.layouts[layoutType].Vanity[hoveredButton];\r\n break;\r\n }\r\n }\r\n } else if (hoveredParent === \"Bathtub\") { // Bathtub\r\n if (hoveredButton === \"Bathtub\") {\r\n hoveredZindex = Z.layouts[layoutType].Bathtub.BathTubBody\r\n } else if (hoveredButton === \"Fixture\") {\r\n hoveredZindex = Z.layouts[layoutType].Bathtub.BathTubFixture\r\n } else {\r\n hoveredZindex = Z.layouts[layoutType].Bathtub[hoveredButton]\r\n }\r\n } else if (hoveredParent === \"Walls\") { // Bathtub\r\n switch (hoveredButton) {\r\n case \"Pony Wall\":\r\n hoveredZindex = Z.layouts[layoutType].Shower.PonyWall;\r\n break;\r\n case \"Left Shower Wall\": {\r\n const wallParent = layout.parts[hoveredParent];\r\n const activeShowerGroup = wallParent.getActiveShowerGroup();\r\n const showerDimensions = getMetadataByDimensions(activeShowerGroup.showerDimensions());\r\n hoveredZindex = showerDimensions === \"Half\"\r\n ? Z.layouts[layoutType].Shower.ExtrusionWallLeftHalfWall\r\n : Z.layouts[layoutType].Shower.ExtrusionWallLeft;\r\n break;\r\n }\r\n default:\r\n hoveredZindex = Z.layouts[layoutType].Vanity[hoveredButton];\r\n break;\r\n }\r\n }\r\n\r\n this.props.renderGreenLayerByZindex(hoveredZindex);\r\n }\r\n\r\n };\r\n\r\n render() {\r\n\r\n let contextMenuStyles = this.props.contextMenuPosition || {};\r\n if (this.state.contextMenuButtons.length === 4) {\r\n contextMenuStyles = Object.assign({}, contextMenuStyles, {maxWidth:\"210px\"} )\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n {this.state.contextMenuButtons.map((menuItem) => {\r\n return menuItem ? (\r\n \r\n ) : null\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n","import React, {useEffect, useRef, useState} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport ClickAwayListener from '@mui/material/ClickAwayListener';\r\nimport Grow from '@mui/material/Grow';\r\nimport Popper from '@mui/material/Popper';\r\n\r\nimport {setLookContextMenu} from \"../../../actions/lookFunctions\";\r\nimport {ALL_CONTEXT_MENU} from \"../core/constants\";\r\n\r\nimport {checkForContextMenuCommon} from \"../lookNavigation/lookFunctions\";\r\nimport ContextMenuQKBButtons from \"./contextMenuQKBButtons\";\r\n\r\n\r\nconst getContextMenuPosition = (contextMenu, position, isMobile) => {\r\n const {partId, layerPosition} = contextMenu;\r\n const {showButtons} = checkForContextMenuCommon(partId, layerPosition);\r\n\r\n let left = isMobile ? '50%' : position.x - 50;\r\n let top = isMobile ? '50%' : position.y - 50;\r\n let right = 'auto';\r\n\r\n const maxAllowedWidth = showButtons.length > 2 ? 300 : 210;\r\n\r\n let maxAllowedHeight = 110;\r\n if (showButtons.length > 6) {\r\n maxAllowedHeight = 330;\r\n } else if (showButtons.length >= 3) {\r\n maxAllowedHeight = 220;\r\n }\r\n if (!isMobile && (left > window.innerWidth - maxAllowedWidth)) {\r\n left = 'auto';\r\n right = 0\r\n }\r\n if (!isMobile && (top > window.innerHeight - maxAllowedHeight)) {\r\n let negativeMargin = 50;\r\n if (showButtons.length > 6) {\r\n negativeMargin = 250;\r\n } else if (showButtons.length >= 3) {\r\n negativeMargin = 150;\r\n }\r\n top = top - negativeMargin;\r\n }\r\n\r\n return {left, top, right}\r\n}\r\n\r\nconst ContextMenuQKB = (props) => {\r\n\r\n const {contextMenu, setLookContextMenu, isMobile, handleContextMenuClick, renderGreenLayerByZindex} = props;\r\n const {opened, position} = contextMenu;\r\n const [styles, setStyles] = useState({left: 0, top: 0, right: 0});\r\n const [buttons, setButtons] = useState([]);\r\n const anchorRef = useRef(null);\r\n\r\n const handleClose = (event) => {\r\n if (document.hoveredLayer && event.target.closest(\".canvas-el\") && ALL_CONTEXT_MENU.includes(document.hoveredLayer.partId)) {\r\n return\r\n }\r\n setLookContextMenu({\r\n opened: false,\r\n layerPosition: \"\",\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (!contextMenu.opened) {\r\n return null\r\n }\r\n setStyles(getContextMenuPosition(contextMenu, position, isMobile));\r\n const {showButtons} = checkForContextMenuCommon(contextMenu.partId, contextMenu.layerPosition);\r\n setButtons(showButtons);\r\n }, [contextMenu, position, isMobile]);\r\n\r\n // console.log(\"styles\", styles);\r\n\r\n let contextStyles = styles;\r\n if (buttons.length <= 4) {\r\n contextStyles = Object.assign({}, styles, {maxWidth: \"210px\"});\r\n }\r\n\r\n return (\r\n
    \r\n \r\n {({ TransitionProps }) => (\r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n )}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nContextMenuQKB.propTypes = {\r\n handleContextMenuClick: PropTypes.func,\r\n renderGreenLayerByZindex: PropTypes.func,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {contextMenu} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n return {\r\n contextMenu,\r\n isMobile,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookContextMenu\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ContextMenuQKB)\r\n","import invert from 'lodash/invert';\r\nimport snakeCase from 'lodash/snakeCase';\r\n\r\nimport LayoutCommonNew from \"../../visComponents/layoutCommonNew\";\r\nimport {LayoutType, LayoutAbbreviation} from \"./constants\";\r\nimport zIndexes from \"./zIndex\";\r\nimport Other from \"./parts/other\";\r\nimport NonVisualizerSubPart from \"./subparts/nonVisualizerSubPart\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport Background from \"./parts/background\";\r\nimport Floor from \"./parts/floor\";\r\nimport Walls from \"./parts/walls\";\r\nimport {AVAILABLE_VISUALIZER_TYPES} from \"../../../config\";\r\nimport FireplaceParent from \"./parts/fireplaceParent\";\r\nimport Globals from \"./parts/globals\";\r\nimport {hardCodeIsModerno} from \"../../../misc/fabricatorHardcode\";\r\n\r\nexport class Layout extends LayoutCommonNew {\r\n\r\n /**\r\n * @type {int}\r\n */\r\n defaultType = hardCodeIsModerno() ? LayoutType.Layout1 : LayoutType.Layout31;\r\n type = this.defaultType;\r\n scene = \"1\";\r\n visualizerType = AVAILABLE_VISUALIZER_TYPES.Fireplace;\r\n localStorageKey = \"FireplaceState\";\r\n layersBinding = \"Fireplace\";\r\n layoutNames = LayoutAbbreviation;\r\n layoutTypes = LayoutType;\r\n layoutThumbnails = {};\r\n zIndexes = zIndexes.layouts;\r\n excludedPartIdsFromHover = [\"decor_\", \"background_bg\", \"attachment\"];\r\n\r\n constructor(props) {\r\n super(props);\r\n this.parts[Globals.id] = new Globals();\r\n this.parts[Background.id] = new Background();\r\n this.parts[FireplaceParent.id] = new FireplaceParent();\r\n this.parts[Walls.id] = new Walls();\r\n this.parts[Floor.id] = new Floor();\r\n this.parts[Other.id] = new Other();\r\n Object.values(this.parts).forEach(part => part.layout = this);\r\n }\r\n\r\n getCurrentLayoutName(type = this.type) {\r\n return invert(LayoutType)[type];\r\n }\r\n\r\n getCurrentLayoutAbbreviation() {\r\n return LayoutAbbreviation[this.getCurrentLayoutName()]\r\n }\r\n\r\n addNonVisualizerSubPart(featureGroupName){\r\n const otherParent = this.parts[Other.id];\r\n const partId = snakeCase(featureGroupName);\r\n let relatedItem = otherParent.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, featureGroupName);\r\n relatedItem.getParent = () => otherParent;\r\n otherParent.relatedItems.push(relatedItem);\r\n }\r\n return new DesignNavigationItem(relatedItem.partName, relatedItem)\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../intermediatePart\";\r\n\r\nexport default class NonVisualizerSubPart extends IntermediatePart {\r\n constructor(isChild, partId, partName) {\r\n super(isChild);\r\n this.partId = partId;\r\n this.visible = true;\r\n this.partName = partName;\r\n // this.allFeaturesReceived = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new NonVisualizerSubPart(false, this.partId, dbFeature.groupName));\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationNoMetaSubItems(filters, searchText)\r\n }\r\n}\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {reorder} from \"../../../misc/utils\";\r\nimport Analytics from \"../../../analytics\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {BACKSPLASH_TYPES} from \"../../kvComponent/core/constants\";\r\n\r\nclass ContextMenuSimple extends Component {\r\n\r\n static propTypes = {\r\n contextMenuOpen: PropTypes.string.isRequired,\r\n hoveredLayer: PropTypes.object,\r\n handleContextMenuClick: PropTypes.func,\r\n contextMenuPosition: PropTypes.object,\r\n contextMenuPonyWall: PropTypes.bool,\r\n renderGreenLayerByZindex: PropTypes.func,\r\n closeContextMenu: PropTypes.func,\r\n };\r\n\r\n state = {\r\n contextMenuButtons: []\r\n };\r\n\r\n componentDidMount() {\r\n this.setContextMenuButtons();\r\n if (this.props.closeContextMenu) {\r\n document.addEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n contextMenuBlur = (e) => {\r\n if (!e.target.closest('.contextmenu-buttons')\r\n && !e.target.closest('.contextmenu-buttons__button')\r\n && !e.target.closest('.sprocket-container') && !e.target.closest('.canvas')) {\r\n this.props.closeContextMenu();\r\n }\r\n };\r\n\r\n componentWillUnmount() {\r\n if (this.props.closeContextMenu) {\r\n document.removeEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n setContextMenuButtons() {\r\n const layout = getCurrentLayout();\r\n const contextMenuOpen = this.props.contextMenuOpen;\r\n if (contextMenuOpen === \"backsplash_custom\"\r\n || contextMenuOpen === \"backsplash_custom_left\"\r\n || contextMenuOpen === \"backsplash_custom_right\"\r\n || contextMenuOpen === \"right_wall_custom\"\r\n || contextMenuOpen === \"left_wall_custom\") {\r\n this.setBacksplashButtons();\r\n return\r\n }\r\n\r\n const hoveredParent = layout.designNavigationItems().find(navItem => {\r\n return navItem.text === contextMenuOpen\r\n });\r\n\r\n let relatedItems = hoveredParent.part.relatedItems;\r\n\r\n const clickedItem = relatedItems.find((item) => {\r\n return item.activeFeature && (item.partId === this.props.hoveredLayer.partId)\r\n });\r\n\r\n let itemsToRender = this.getItemsToRender(hoveredParent);\r\n\r\n // console.log('clickedItem', clickedItem);\r\n // console.log('relatedItems', relatedItems);\r\n // console.log('itemsToRender', itemsToRender);\r\n\r\n const clickedItemIndex = itemsToRender.findIndex(item => item.text === clickedItem.partName);\r\n if (clickedItemIndex > 0) {\r\n itemsToRender = reorder(itemsToRender, clickedItemIndex, 0); // swap items in array start\r\n }\r\n\r\n itemsToRender = itemsToRender.map(item => {\r\n if (item.text === \"Island Countertop\") {\r\n // item.subMenuText = \"Countertop\";\r\n item.bgImageText = \"Countertop\";\r\n }\r\n return item\r\n });\r\n\r\n this.setState({\r\n contextMenuButtons: itemsToRender\r\n })\r\n }\r\n\r\n getItemsToRender = (hoveredParent) => {\r\n let itemsToRender = hoveredParent.part.subParts();\r\n let availablePartIds = [];\r\n switch (this.props.contextMenuOpen) {\r\n case \"Center Island\":\r\n availablePartIds = [\"center_island_sink\", \"center_island_faucet\", \"center_island_countertop\",\r\n \"center_island_stovetop\", \"center_island_range\", \"center_island_edge\"];\r\n break;\r\n case \"Countertop\":\r\n availablePartIds = [\"countertop\", \"faucet\", \"sink\", \"edge_profile\"];\r\n break;\r\n case \"Walls\":\r\n availablePartIds = [\"right_wall\", \"backsplash\"];\r\n break;\r\n default:\r\n break;\r\n }\r\n return itemsToRender.filter(menuButton => availablePartIds.includes(menuButton.part.partId));\r\n };\r\n\r\n getBackSplashButtons = () => {\r\n return BACKSPLASH_TYPES.map(bType => {\r\n const button = {\r\n text: bType,\r\n };\r\n switch (bType) {\r\n case \"4in\":\r\n button.subMenuText = \"visualizer.kitchen.contextmenu.backsplash.4in\"\r\n break;\r\n case \"6in\":\r\n button.subMenuText = \"visualizer.kitchen.contextmenu.backsplash.6in\"\r\n break;\r\n case \"Full\":\r\n button.subMenuText = \"visualizer.kitchen.contextmenu.backsplash.18in\"\r\n break;\r\n }\r\n return button\r\n })\r\n };\r\n\r\n setBacksplashButtons = () => {\r\n const layout = getCurrentLayout();\r\n const hoveredParent = layout.designNavigationItems().find(navItem => {\r\n return navItem.text === \"Walls\"\r\n });\r\n const subParts = hoveredParent.part.subParts();\r\n\r\n let contextMenuButtons = [];\r\n const backSplashButtons = this.getBackSplashButtons();\r\n const rightWall = subParts.find(menuButton => menuButton.part.partId === \"right_wall\");\r\n const leftWall = subParts.find(menuButton => menuButton.part.partId === \"left_wall\");\r\n if (rightWall) {\r\n rightWall.subMenuParent = \"Walls\";\r\n }\r\n if (leftWall) {\r\n leftWall.subMenuParent = \"Walls\";\r\n }\r\n switch (this.props.contextMenuOpen) {\r\n case \"right_wall_custom\": {\r\n contextMenuButtons = rightWall ? [rightWall, ...backSplashButtons] : backSplashButtons;\r\n break;\r\n }\r\n case \"left_wall_custom\": {\r\n contextMenuButtons = leftWall ? [leftWall, ...backSplashButtons] : backSplashButtons;\r\n break;\r\n }\r\n case \"backsplash_custom_left\": {\r\n contextMenuButtons = [...backSplashButtons, leftWall];\r\n break;\r\n }\r\n case \"backsplash_custom_right\": {\r\n contextMenuButtons = [...backSplashButtons, rightWall];\r\n break;\r\n }\r\n case \"backsplash_custom\": {\r\n contextMenuButtons = backSplashButtons; // just in case, we should not have these cases\r\n break;\r\n }\r\n }\r\n this.setState({\r\n contextMenuButtons\r\n })\r\n };\r\n\r\n handleContextMenuHover = () => {\r\n //TODO[Artem] add here rendering green zones on hover\r\n };\r\n\r\n render() {\r\n\r\n let contextMenuStyles = this.props.contextMenuPosition || {};\r\n if (this.state.contextMenuButtons.length <= 4) {\r\n contextMenuStyles = Object.assign({}, contextMenuStyles, {maxWidth:\"210px\"} )\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n {this.state.contextMenuButtons.map((menuItem) => {\r\n if (!menuItem) {\r\n return null\r\n }\r\n return (\r\n \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = () => {\r\n return {};\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ContextMenuSimple)\r\n","import {IntermediatePart} from \"../intermediatePart\";\r\n\r\nexport default class NonVisualizerSubPart extends IntermediatePart {\r\n constructor(isChild, partId, partName) {\r\n super(isChild);\r\n this.partId = partId;\r\n this.visible = true;\r\n this.partName = partName;\r\n // this.allFeaturesReceived = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new NonVisualizerSubPart(false, this.partId, dbFeature.groupName));\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationNoMetaSubItems(filters, searchText)\r\n }\r\n}\r\n","import uuid from \"uuid\";\r\n\r\nimport * as types from '../actions/actionTypes';\r\nimport featureIsMatchingDisplayLogic from \"../misc/displayLogic\";\r\nimport {COUNTERTOP_GROUP} from \"../bvcomponents/kvComponent/core/constants\";\r\nimport {getMinimumChargeCartItem} from \"../actions/shoppingCartFunctions\";\r\nimport {FEATURE_STONE, getFeatureType} from \"../misc/helpers\";\r\nimport {IS_LIXIL_UI} from \"../config\";\r\nimport {getFeaturePriceProperty} from \"../misc/priceFunctions\";\r\nimport {SQFT_FEATURES} from \"../bvcomponents/sqft/constants\";\r\n\r\nconst initialState = {\r\n cartItems: [],\r\n displayLogicCartItems: [], // read only (is needed to check them every time cart is changed)\r\n applyPopupOpened: false,\r\n activeApplyPopupItems: [],\r\n questionNoClicked: false,\r\n cameFromPage: '',\r\n recentlyViewedItems: [],\r\n checkoutPopupVisible: false,\r\n orderCompletePopupVisible: false,\r\n depositVisible: false,\r\n depositCallback: null,\r\n state: 'design',\r\n showMobileQuotes: false,\r\n showAllQuotesCartItemsList: true,\r\n cartFooterActiveButtonIndex: 0,\r\n cartItemEditFeature: null,\r\n lookRemovedCartItems: [],\r\n cItemsAddedToParentCart: [], // ArrayOf {id: \"string\", quantity: number}\r\n sureTax: 0, // comes in response of sureTax API\r\n sureTaxLoading: false, // shows loader in columns section\r\n manualTaxEntered: false, // if it is true - show always the same manual tax\r\n deliveryList: [], // calculates depending on features shipping cost // {cost, title: \"\", delivery: \"\", code: \"\"}\r\n markUpLogic: \"\", // {retail: {value: 10, type: \"mark_up\"}, cost: {value: 10, type: \"mark_down\"}, discount: {}}\r\n};\r\n\r\nexport const supportedCountries = [{\r\n name: 'USA',\r\n zipCodeRg: /^\\d{5}([ \\-]\\d{4})?$/\r\n}, {\r\n name: 'Canada',\r\n zipCodeRg: /^[ABCEGHJKLMNPRSTVXY]\\\\d[ABCEGHJ-NPRSTV-Z][ ]?\\\\d[ABCEGHJ-NPRSTV-Z]\\\\d$/\r\n}, {\r\n name: 'UK',\r\n zipCodeRg: /^GIR[ ]?0AA|((AB|AL|B|BA|BB|BD|BH|BL|BN|BR|BS|BT|CA|CB|CF|CH|CM|CO|CR|CT|CV|CW|DA|DD|DE|DG|DH|DL|DN|DT|DY|E|EC|EH|EN|EX|FK|FY|G|GL|GY|GU|HA|HD|HG|HP|HR|HS|HU|HX|IG|IM|IP|IV|JE|KA|KT|KW|KY|L|LA|LD|LE|LL|LN|LS|LU|M|ME|MK|ML|N|NE|NG|NN|NP|NR|NW|OL|OX|PA|PE|PH|PL|PO|PR|RG|RH|RM|S|SA|SE|SG|SK|SL|SM|SN|SO|SP|SR|SS|ST|SW|SY|TA|TD|TF|TN|TQ|TR|TS|TW|UB|W|WA|WC|WD|WF|WN|WR|WS|WV|YO|ZE)(\\d[\\dA-Z]?[ ]?\\d[ABD-HJLN-UW-Z]{2}))|BFPO[ ]?\\d{1,4}$/\r\n}];\r\nexport const supportedCountriesList = [\"USA\", \"Canada\", \"UK\"];\r\n\r\nfunction checkForAddToCartFeaturesWithDisplayLogic(cartItems, displayLogicCartItems, currentQuote = 0, allWizardsValues) {\r\n cartItems = cartItems.filter(cartItem => {\r\n return !displayLogicCartItems.some(displayLogicCartItem => {\r\n return (cartItem.cartFeature.dbFeature.id === displayLogicCartItem.cartFeature.dbFeature.id)\r\n && (cartItem.currentQuote === currentQuote)\r\n })\r\n }); // clear existing display logic items for this quote, we will add them below\r\n displayLogicCartItems.forEach((displayLogicCartItem) => {\r\n const {quantity, isMatching} = featureIsMatchingDisplayLogic(displayLogicCartItem.cartFeature, cartItems, currentQuote, allWizardsValues);\r\n if (isMatching) {\r\n cartItems = [...cartItems, Object.assign({}, displayLogicCartItem, {\r\n quantity,\r\n currentQuote,\r\n id: uuid.v4(), // to make sure we have different cart items in different quotes\r\n })]\r\n }\r\n });\r\n return cartItems\r\n}\r\n\r\nfunction removeFakePriceFromCartItems(cartItems) {\r\n cartItems = cartItems.map((cartItem) => {\r\n if (cartItem.displayFakePrice === 0) {\r\n cartItem.displayFakePrice = null\r\n }\r\n return cartItem\r\n });\r\n return cartItems\r\n}\r\n\r\nconst checkLowesHardcodedRulesItems = (cartItems, fabricatorSettings) => {\r\n cartItems = cartItems.filter(cItem => !cItem.isMinimumCharge); // 1) remove already added, and calculate again\r\n const countertopItems = cartItems.filter(cItem => COUNTERTOP_GROUP.includes(cItem.partId)); // 2) countertop group only\r\n\r\n const MINIMUM_SQFT = 23;\r\n const MINIMUM_SQFT_2 = 27;\r\n\r\n if (countertopItems.length) {\r\n const totalQuantity = countertopItems.reduce(((accumulator, cItem) => accumulator + cItem.quantity), 0); // 3) get all quantities\r\n if (totalQuantity <= MINIMUM_SQFT) {\r\n cartItems.push(getMinimumChargeCartItem(countertopItems[0], true)) // 4) add hardcoded 300$\r\n } else if ((totalQuantity >= (MINIMUM_SQFT + 1)) && (totalQuantity <= (MINIMUM_SQFT_2 -1))) { // 5) between 23 and 27 - add additional countertops\r\n let theMostValuableCartItem = countertopItems[0];\r\n countertopItems.forEach(cItem => {\r\n let currentMostFeatureCost = getFeaturePriceProperty(theMostValuableCartItem.cartFeature, fabricatorSettings) * theMostValuableCartItem.quantity;\r\n let cartItemCost = getFeaturePriceProperty(cItem.cartFeature, fabricatorSettings) * cItem.quantity;\r\n if (cartItemCost > currentMostFeatureCost) { // 6) find with the biggest price added\r\n theMostValuableCartItem = cItem\r\n }\r\n });\r\n cartItems.push(getMinimumChargeCartItem(theMostValuableCartItem, false, MINIMUM_SQFT_2 - totalQuantity)) // 7) add hardcoded items\r\n }\r\n }\r\n // console.log(\"cartItems2\", cartItems);\r\n return cartItems\r\n}\r\n\r\nconst checkCaesHardcodedRulesItems = (cartItems) => {\r\n // console.log(\"cartItems before\", cartItems);\r\n cartItems = cartItems.filter(cItem => !cItem.isMinimumCharge); // 1) remove already added, and calculate again\r\n const countertopItems = cartItems.filter(cItem => COUNTERTOP_GROUP.includes(cItem.partId)); // 2) countertop group only\r\n let uniqueSharedNames = [];\r\n countertopItems.forEach(cItem => {\r\n if (!uniqueSharedNames.includes(cItem.cartFeature.dbFeature.sharedFeatureName)) {\r\n uniqueSharedNames.push(cItem.cartFeature.dbFeature.sharedFeatureName)\r\n }\r\n });\r\n const MINIMUM_CAES_SQFT = 25;\r\n\r\n if (uniqueSharedNames.length) {\r\n uniqueSharedNames.forEach(uniqueSharedName => {\r\n const matchingItems = countertopItems.filter(cItem => cItem.cartFeature.dbFeature.sharedFeatureName === uniqueSharedName);\r\n const totalQuantity = matchingItems.reduce(((accumulator, cItem) => accumulator + cItem.quantity), 0); // 3) get all quantities\r\n if (totalQuantity < MINIMUM_CAES_SQFT) {\r\n cartItems.push(getMinimumChargeCartItem(matchingItems[0], false, MINIMUM_CAES_SQFT - totalQuantity))\r\n }\r\n })\r\n }\r\n // console.log(\"cartItems2\", cartItems);\r\n return cartItems\r\n}\r\n\r\nconst allowMinimumChargeConditions = (fabricatorState) => {\r\n return fabricatorState && fabricatorState.settings.showPricing\r\n && !fabricatorState.hideCheckoutBreakdownCost && !fabricatorState.hidePricesFromUser\r\n && document.kvConfig.visualizerType === \"Kitchen\" || document.kvConfig.visualizerType === \"kvScene\"\r\n}\r\n\r\nconst checkHardcodedRulesItems = (fabricatorState, cartItems) => {\r\n if (allowMinimumChargeConditions(fabricatorState)) {\r\n // console.log(\"cartItems\", cartItems);\r\n // console.log(\"fabricatorState\", fabricatorState);\r\n // console.log(\"fabricatorState.settings.language\", fabricatorState.settings.language);\r\n if (fabricatorState.isLowes) {\r\n cartItems = checkLowesHardcodedRulesItems(cartItems, fabricatorState.settings);\r\n } else if (fabricatorState.isCaesarStone && (fabricatorState.settings.language !== \"en-AU\")) {\r\n cartItems = checkCaesHardcodedRulesItems(cartItems)\r\n }\r\n }\r\n return cartItems\r\n}\r\n\r\n/**\r\n * Recalculate slab in cart\r\n * @param {{}} cartItems\r\n * return bool\r\n */\r\nexport const isRecalculateSlabsInCartNeeded = (cartItems) => {\r\n return cartItems.some(cartItem => {\r\n return cartItem.cartFeature && FEATURE_STONE === getFeatureType(cartItem.cartFeature.dbFeature)\r\n });\r\n}\r\n\r\n/**\r\n * Recalculate slab in cart\r\n * @param cartItems {object}\r\n * @returns cartItems {object}\r\n */\r\nconst recalculateSlabsInCart = (cartItems) => {\r\n for (const cartItem of cartItems) {\r\n if (FEATURE_STONE !== getFeatureType(cartItem.cartFeature.dbFeature)) {\r\n continue;\r\n }\r\n const similarFeatures = cartItems.filter((cItem) => {\r\n const isSameNameFeature = cItem.cartFeature.getFeatureName() === cartItem.cartFeature.getFeatureName();\r\n const isBiggestFeature = cItem.isBiggestFeature;\r\n const isQuantityAddedToBiggestFeature = cItem.isQuantityAddedToBiggestFeature;\r\n return isSameNameFeature && (isBiggestFeature || isQuantityAddedToBiggestFeature) // select only features from sqft\r\n });\r\n let biggestFeature = similarFeatures.find(cartItem => cartItem.isBiggestFeature);\r\n if (!biggestFeature && cartItem.isQuantityAddedToBiggestFeature) {\r\n cartItem.isBiggestFeature = true;\r\n }\r\n if (cartItem.isBiggestFeature) {\r\n cartItem.quantity = similarFeatures.reduce((sum, cItem) => {\r\n return cItem.displayFakeQuantity !== undefined\r\n ? cItem.displayFakeQuantity + sum\r\n : cItem.quantity + sum\r\n }, 0);\r\n }\r\n }\r\n return cartItems\r\n}\r\n// const checkStonePricingLogic = (cartItems) => { //TODO[Artem] edit features not working :(\r\n// if (cartItems.some(cartItem => {\r\n// return cartItem.cartFeature && Array.isArray(cartItem.cartFeature.dbFeature.stonePricingId) && cartItem.cartFeature.dbFeature.stonePricingId.length\r\n// })) {\r\n// let commonSharedFeatureNames = []; // {sharedName: \"\", totalQuantity: 0, biggestFeature, sqftFeatures: []}\r\n// cartItems.forEach(cartItem => {\r\n// if (!cartItem.initialQuantity) {\r\n// cartItem.initialQuantity = cartItem.quantity;\r\n// }\r\n// if (cartItem.cartFeature && Array.isArray(cartItem.cartFeature.dbFeature.stonePricingId)\r\n// && cartItem.cartFeature.dbFeature.stonePricingId.length) {\r\n// const alreadyAdded = commonSharedFeatureNames.find(sharedObject => {\r\n// return sharedObject.sharedName === cartItem.cartFeature.dbFeature.sharedFeatureName\r\n// });\r\n// if (!alreadyAdded) {\r\n// commonSharedFeatureNames.push({\r\n// sharedName: cartItem.cartFeature.dbFeature.sharedFeatureName,\r\n// totalQuantity: cartItem.initialQuantity,\r\n// sqftFeatures: [cartItem],\r\n// biggestFeature: cartItem,\r\n// })\r\n// } else {\r\n// alreadyAdded.sqftFeatures.push(cartItem);\r\n// alreadyAdded.totalQuantity += cartItem.initialQuantity;\r\n// if (!alreadyAdded.biggestFeature) {\r\n// alreadyAdded.biggestFeature = cartItem;\r\n// } else if (cartItem.cartFeature.partId === \"countertop\") {\r\n// if (alreadyAdded.biggestFeature.partId !== \"countertop\" || (alreadyAdded.biggestFeature.initialQuantity < cartItem.initialQuantity)) {\r\n// alreadyAdded.biggestFeature = cartItem;\r\n// }\r\n// } else if (cartItem.cartFeature.partId === \"center_island_countertop\") {\r\n// if ((alreadyAdded.biggestFeature.partId !== \"countertop\" && alreadyAdded.biggestFeature.partId !== \"center_island_countertop\")\r\n// || (alreadyAdded.biggestFeature.partId === \"center_island_countertop\" && alreadyAdded.biggestFeature.initialQuantity < cartItem.initialQuantity)) {\r\n// alreadyAdded.biggestFeature = cartItem;\r\n// }\r\n// } else if ((alreadyAdded.biggestFeature.partId !== \"countertop\") && (alreadyAdded.biggestFeature.partId !== \"center_island_countertop\")\r\n// && alreadyAdded.biggestFeature.initialQuantity < cartItem.initialQuantity) { // backsplash\r\n// alreadyAdded.biggestFeature = cartItem;\r\n// }\r\n// }\r\n// }\r\n// });\r\n// if (commonSharedFeatureNames.length) { // 2) set each feature new fake quantity\r\n// commonSharedFeatureNames.forEach(sharedObject => {\r\n// sharedObject.sqftFeatures.forEach(cartItem => {\r\n// cartItem.displayFakeQuantity = cartItem.initialQuantity;\r\n// if (sharedObject.biggestFeature && (cartItem.id === sharedObject.biggestFeature.id)) {\r\n// cartItem.quantity = sharedObject.totalQuantity;\r\n// } else {\r\n// cartItem.quantity = 0;\r\n// }\r\n// });\r\n// });\r\n// }\r\n// }\r\n// return cartItems\r\n// }\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.ADD_TO_CART: {\r\n const actionCartItems = action.payload.cartItems;\r\n let stateCartItems = state.cartItems;\r\n if (IS_LIXIL_UI) {\r\n stateCartItems = stateCartItems.map(stateCartItem => {\r\n const sameCartItemIndex = actionCartItems.findIndex(newCartItem => {\r\n return newCartItem.cartFeature && stateCartItem.cartFeature &&\r\n (newCartItem.cartFeature.dbFeature.sku && stateCartItem.cartFeature.dbFeature.sku\r\n ? (newCartItem.cartFeature.dbFeature.sku === stateCartItem.cartFeature.dbFeature.sku)\r\n : (newCartItem.cartFeature.dbFeature.sharedFeatureName\r\n && stateCartItem.cartFeature.dbFeature.sharedFeatureName\r\n && (newCartItem.cartFeature.dbFeature.sharedFeatureName === stateCartItem.cartFeature.dbFeature.sharedFeatureName)))\r\n })\r\n if (sameCartItemIndex > -1) {\r\n if (stateCartItem.addedBy !== actionCartItems[sameCartItemIndex].addedBy) {\r\n stateCartItem.quantity = actionCartItems[sameCartItemIndex].quantity || 1;\r\n stateCartItem.addedBy = actionCartItems[sameCartItemIndex].addedBy;\r\n } else {\r\n stateCartItem.quantity += actionCartItems[sameCartItemIndex].quantity || 1;\r\n }\r\n actionCartItems.splice(sameCartItemIndex, 1);\r\n }\r\n return stateCartItem\r\n })\r\n }\r\n let newCartItems = [...stateCartItems, ...actionCartItems];\r\n\r\n if (state.displayLogicCartItems.length) {\r\n const currentQuote = actionCartItems.length\r\n ? actionCartItems[0].currentQuote\r\n : newCartItems.length\r\n ? newCartItems[0].currentQuote\r\n : 0;\r\n newCartItems = checkForAddToCartFeaturesWithDisplayLogic(newCartItems, state.displayLogicCartItems, currentQuote, action.payload.allWizardsValues);\r\n }\r\n newCartItems = checkHardcodedRulesItems(action.payload.fabricatorState, newCartItems);\r\n // newCartItems = checkStonePricingLogic(newCartItems);\r\n return Object.assign({}, state, {\r\n cartItems: newCartItems\r\n });\r\n }\r\n case types.SET_STATE_TO_QUOTE:\r\n return Object.assign({}, state, {\r\n state: \"quote\"\r\n });\r\n\r\n case types.ADD_DISPLAY_LOGIC_CART_ITEM:\r\n return Object.assign({}, state, {\r\n displayLogicCartItems: [...state.displayLogicCartItems.filter((oldCartItem) => {\r\n return (oldCartItem.cartFeature.dbFeature.id !== action.payload.cartItem.cartFeature.dbFeature.id)\r\n // && (oldCartItem.currentQuote !== action.payload.cartItem.currentQuote)\r\n // removed, why it is added? we can have different add to cart features in the same quote\r\n }), action.payload.cartItem]\r\n });\r\n\r\n case types.ADD_TO_RECENTLY_VIEWED:\r\n // console.log('action.payload.cartItem', action.payload.cartItem);\r\n return Object.assign({}, state, {\r\n recentlyViewedItems: (state.recentlyViewedItems.every(oldItem => oldItem.dbFeature.id !== action.payload.feature.dbFeature.id))\r\n ? [...state.recentlyViewedItems, action.payload.feature]\r\n : [...state.recentlyViewedItems]\r\n });\r\n\r\n case types.CHANGE_CART_QUANTITY: {\r\n // console.log('action.payload.cartItem', action.payload.cartItem);\r\n let newCartItems = [...state.cartItems.map((cartItem) => {\r\n if (cartItem.id === action.payload.cartItem.id) {\r\n cartItem.quantity = action.payload.quantity;\r\n if (action.payload.removeFakeQuantity && Number.isInteger(cartItem.displayFakeQuantity)) {\r\n cartItem.displayFakeQuantity = null;\r\n }\r\n } else if (cartItem.bundleParentId && (cartItem.bundleParentId === action.payload.cartItem.id)) {\r\n const quantity = action.payload.cartItem.cartFeature.dbFeature.bundledFeatureQuantities\r\n ? action.payload.cartItem.cartFeature.dbFeature.bundledFeatureQuantities[cartItem.cartFeature.dbFeature.id] || 1\r\n : 1;\r\n cartItem.quantity = quantity * action.payload.quantity;\r\n }\r\n return cartItem\r\n })];\r\n if (state.displayLogicCartItems.length) {\r\n newCartItems = checkForAddToCartFeaturesWithDisplayLogic(newCartItems, state.displayLogicCartItems, action.payload.cartItem.currentQuote, action.payload.allWizardsValues)\r\n }\r\n newCartItems = checkHardcodedRulesItems(action.payload.fabricatorState, newCartItems);\r\n // newCartItems = checkStonePricingLogic(newCartItems);\r\n return Object.assign({}, state, {\r\n cartItems: newCartItems\r\n });\r\n }\r\n\r\n case types.CHANGE_CART_FEATURE: {\r\n // console.log('action.payload.cartItem', action.payload.cartItem);\r\n let newCartItems = [...state.cartItems.map((cartItem) => {\r\n return (cartItem.id === action.payload.cartItem.id) ? action.payload.cartItem : cartItem\r\n })];\r\n if (!action.payload.skipOtherRules) { // if we change note text for example, we don't need to recalculate other cart items\r\n newCartItems = checkHardcodedRulesItems(action.payload.fabricatorState, newCartItems);\r\n }\r\n return Object.assign({}, state, {\r\n cartItems: newCartItems\r\n });\r\n }\r\n\r\n case types.REMOVE_FROM_CART: {\r\n // console.log('action.payload.cartItem', action.payload.cartItem);\r\n // console.log('state.cartItems', state.cartItems);\r\n const cartItemToDeleteIndex = state.cartItems.findIndex((cartItem) => cartItem.id === action.payload.cartItem.id);\r\n if (cartItemToDeleteIndex > -1) {\r\n state.cartItems.splice(cartItemToDeleteIndex, 1);\r\n }\r\n let newCartItems = [...state.cartItems];\r\n if (state.displayLogicCartItems.length) {\r\n newCartItems = checkForAddToCartFeaturesWithDisplayLogic(newCartItems, state.displayLogicCartItems, action.payload.cartItem.currentQuote, action.payload.allWizardsValues)\r\n }\r\n newCartItems = checkHardcodedRulesItems(action.payload.fabricatorState, newCartItems);\r\n if (isRecalculateSlabsInCartNeeded(state.cartItems)) {\r\n newCartItems = recalculateSlabsInCart(newCartItems);\r\n }\r\n\r\n // removeFakePriceFromCartItems if we have slabs\r\n if (action.payload.cartItem && action.payload.cartItem.partId === SQFT_FEATURES.slabs) {\r\n const isSlabsStillExistInCart = newCartItems.some(newCartItem => newCartItem.partId === SQFT_FEATURES.slabs)\r\n if (!isSlabsStillExistInCart) {\r\n newCartItems = removeFakePriceFromCartItems(newCartItems);\r\n }\r\n }\r\n\r\n newCartItems = newCartItems.filter((cartItem) => {\r\n return !cartItem.bundleParentId || newCartItems.some(cI => cI.id === cartItem.bundleParentId)\r\n })\r\n // newCartItems = checkStonePricingLogic(newCartItems);\r\n return Object.assign({}, state, {\r\n cartItems: newCartItems\r\n });\r\n }\r\n\r\n case types.TOGGLE_APPLY_POPUP:\r\n return Object.assign({}, state, {\r\n applyPopupOpened: action.payload.applyPopupOpened,\r\n activeApplyPopupItems: action.payload.activeApplyPopupItems.map((activeApplyPopupItem) => {\r\n const existingCartItemIndex = state.cartItems.findIndex(cartItem => {\r\n return cartItem.cartFeature.dbFeature.id === activeApplyPopupItem.cartFeature.dbFeature.id\r\n });\r\n if (existingCartItemIndex > -1) {\r\n activeApplyPopupItem.quantity = state.cartItems[existingCartItemIndex].quantity; // if cart already have item, return it's quantity\r\n }\r\n return activeApplyPopupItem\r\n }).filter(item => {\r\n return !(item.partId === \"top_cabinet\"\r\n && action.payload.activeApplyPopupItems.some(item => item.partId === \"top_cabinet_module_0\"));\r\n\r\n })\r\n });\r\n\r\n case types.CLICK_QUESTION_NO:\r\n case types.CAME_FROM_PAGE:\r\n case types.SHOW_ORDER_COMPLETE_POPUP:\r\n case types.TOGGLE_SHOW_MOBILE_QUOTES:\r\n case types.TOGGLE_SHOW_ALL_QUOTES_CART_ITEMS_LIST:\r\n case types.SET_CART_FOOTER_ACTIVE_BUTTON_INDEX:\r\n case types.SET_CART_ITEM_EDIT_FEATURE:\r\n case types.SET_LOOK_REMOVED_CART_ITEMS:\r\n case types.CHANGE_ALL_CART_ITEMS:\r\n case types.SET_SURE_TAX:\r\n case types.SET_DELIVERY_LIST:\r\n case types.SET_SURE_TAX_LOADING:\r\n case types.SET_MARK_UP_LOGIC:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.RESTORE_CART: {\r\n if (action.payload.cartState && action.payload.cartState.cartItems) {\r\n action.payload.cartState.cartItems = checkHardcodedRulesItems(action.payload.fabricatorState, action.payload.cartState.cartItems);\r\n // action.payload.cartState.cartItems = checkStonePricingLogic(action.payload.cartState.cartItems);\r\n }\r\n let displayLogicCartItems = action.payload.cartState && action.payload.cartState.displayLogicCartItems\r\n ? action.payload.cartState.displayLogicCartItems\r\n : [];\r\n if ((displayLogicCartItems && displayLogicCartItems.length) || state.displayLogicCartItems.length) {\r\n action.payload.cartState.displayLogicCartItems = [...displayLogicCartItems, ...state.displayLogicCartItems.filter((oldCartItem) => {\r\n return !displayLogicCartItems.some(newCi => newCi.cartFeature.dbFeature.id === oldCartItem.cartFeature.dbFeature.id)\r\n })];\r\n // cases when someone loaded display logic in bathroom, then saved kitchen quote, and when the kitchen is restored they are loaded to kitchen\r\n action.payload.cartState.cartItems = checkForAddToCartFeaturesWithDisplayLogic(action.payload.cartState.cartItems, action.payload.cartState.displayLogicCartItems, 0, action.payload.allWizardsValues)\r\n }\r\n return Object.assign({}, state, {\r\n ...action.payload.cartState,\r\n checkoutPopupVisible: false,\r\n orderCompletePopupVisible: false,\r\n });\r\n }\r\n case types.CLEAR_CART:\r\n return {...state, cartItems: []};\r\n case types.SHOW_CHECKOUT_POPUP:\r\n return {...state, checkoutPopupVisible: action.payload.show};\r\n case types.SHOW_DEPOSIT:\r\n return {...state, depositVisible: action.payload.show, depositCallback: action.payload.callback};\r\n case types.SET_CART_ITEMS_ADDED_TO_PARENT_CART: {\r\n const cItemsAddedToParentCart = [...state.cItemsAddedToParentCart];\r\n action.payload.cartItems.forEach(cartItem => {\r\n const existing = cItemsAddedToParentCart.find(cItem => cItem.id === cartItem.id);\r\n if (existing) {\r\n existing.quantity += cartItem.quantity;\r\n } else {\r\n cItemsAddedToParentCart.push({\r\n id: cartItem.id,\r\n quantity: cartItem.quantity,\r\n })\r\n }\r\n });\r\n return {...state, cItemsAddedToParentCart};\r\n }\r\n case types.SET_LOOK_OPENED:\r\n case types.SET_LOOK_PAGE_OPENED:\r\n return state.cartItemEditFeature ? {...state, cartItemEditFeature: null} : state\r\n case types.SET_LOOK_ACTIVE_CATEGORY:\r\n return (state.cartItemEditFeature && !action.payload.lookActiveCategory && !action.payload.isMobile)\r\n ? {...state, cartItemEditFeature: null} : state\r\n case types.SET_LOOK_ACTIVE_FEATURE:\r\n return (state.cartItemEditFeature && !action.payload.lookActiveFeature) ? {...state, cartItemEditFeature: null} : state\r\n case types.TOGGLE_SELECTION_WINDOW:\r\n // exit editing on change route\r\n return (state.cartItemEditFeature && !action.payload.selectionOpened) ? {...state, cartItemEditFeature: null} : state\r\n case types.CHANGE_SELECTION_ACTIVE_PART_RELATED_INDEX:\r\n // exit editing on change step\r\n return state.cartItemEditFeature && !action.payload.isSameStep ? {...state, cartItemEditFeature: null} : state\r\n case types.SET_WIZARD_ACTIVE_STEP:\r\n case types.SET_WIZARD_SELECTED_VALUES: {\r\n let newState = state;\r\n if (state.displayLogicCartItems.length) {\r\n let newCartItems = state.cartItems;\r\n newCartItems = checkForAddToCartFeaturesWithDisplayLogic(newCartItems, state.displayLogicCartItems, action.payload.quoteIndex, action.payload.allWizardsValues)\r\n newState = {...state, cartItems: newCartItems}\r\n }\r\n if ((action.type === types.SET_WIZARD_ACTIVE_STEP) && state.cartItemEditFeature) {\r\n newState = {...state, cartItemEditFeature: null}\r\n }\r\n return newState\r\n }\r\n case types.SET_MANUAL_TAX: {\r\n if (!state.manualTaxEntered) {\r\n state.manualTaxEntered = true;\r\n }\r\n state.sureTax = +action.payload.manualTax;\r\n return state\r\n }\r\n }\r\n\r\n return state;\r\n}\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Analytics from './../../analytics';\r\nimport * as uuid from \"uuid\";\r\n\r\nexport default class Quantity extends Component {\r\n\r\n static propTypes = {\r\n value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n title: PropTypes.string,\r\n label: PropTypes.string,\r\n size: PropTypes.string,\r\n changeValue: PropTypes.func.isRequired,\r\n minValue: PropTypes.number,\r\n maxValue: PropTypes.number,\r\n defaultQuantity: PropTypes.number,\r\n hideQuantity: PropTypes.bool,\r\n pulseFeatureInfoQuantity: PropTypes.bool,\r\n squared: PropTypes.bool,\r\n allowDecimals: PropTypes.bool\r\n };\r\n\r\n static defaultProps = {\r\n hideQuantity: false,\r\n pulseFeatureInfoQuantity: false,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n value: props.defaultQuantity || props.value,\r\n inputId: uuid.v4()\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.value !== this.state.value) {\r\n this.setState({\r\n value: nextProps.value\r\n })\r\n }\r\n }\r\n\r\n getMinMax = () => {\r\n const min = this.props.minValue !== undefined ? this.props.minValue : 0;\r\n const max = this.props.maxValue !== undefined ? this.props.maxValue : 99999;\r\n\r\n return {min, max};\r\n };\r\n\r\n handleOnKeyDown = (event) => {\r\n if (event.key==='.' && !this.props.allowDecimals) {\r\n event.preventDefault();\r\n return false\r\n }\r\n };\r\n\r\n handleChangeValue = (event, button) => {\r\n let value = \"\" + (button ? this.state.value + event : +event.target.value);\r\n if (value.includes(\".\")) {\r\n if (!this.props.allowDecimals) {\r\n return false\r\n }\r\n if (value.split(\".\")[1].length > 2) {\r\n value = +value.substring(0, value.length - 1); //round to 2 decimals\r\n }\r\n }\r\n value = +value;\r\n Analytics.sendDataEnteredEvent(\"quantity-value\", value);\r\n const {min, max} = this.getMinMax();\r\n if (value >= min && value <= max) {\r\n value = value === 0 ? \"\" : value;\r\n this.setState({value});\r\n this.props.changeValue(value);\r\n }\r\n };\r\n\r\n handleInputBlur = (e,) => {\r\n const value = +e.target.value;\r\n const {min, max} = this.getMinMax();\r\n if (value >= min) {\r\n this.setState({value});\r\n this.props.changeValue(value);\r\n } else {\r\n this.setState({value: 0});\r\n this.props.changeValue(0);\r\n }\r\n if (value > max) {\r\n this.setState({value: max});\r\n this.props.changeValue(max);\r\n }\r\n };\r\n\r\n getColor = () => {\r\n\r\n if (this.props.pulseFeatureInfoQuantity) {\r\n return \"pulsing-red\"\r\n }\r\n\r\n const {min, max} = this.getMinMax();\r\n return (this.state.value > min && this.state.value <= max) ? \"green\" : \"blue\"\r\n };\r\n\r\n render() {\r\n const {hideQuantity, squared} = this.props;\r\n const color = this.getColor();\r\n return (\r\n
    \r\n {this.props.title ? {this.props.title} : null}\r\n {this.props.label ? : null}\r\n
    \r\n {hideQuantity\r\n ? null\r\n : ()}\r\n \r\n {hideQuantity\r\n ? null\r\n : ()}\r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n","import {loaderDisable, loaderEnable} from \"../bvcomponents/ui/loaderView\";\r\nimport store from \"../store\";\r\nimport Analytics from \"../analytics\";\r\nimport {getCustomerById, resetUserPassword, userLogin, userRegister} from \"../api/user-api\";\r\nimport {showQuoteSavedNotification} from \"../bvcomponents/ui/successNotification\";\r\nimport {saveQuote} from \"../api/server-api\";\r\nimport {getAnalyticsEcommerceValues} from \"../analyticsEcommerceParams\";\r\nimport {restorePaymentInfo} from \"../actions/paymentFunctions\";\r\nimport Misc from \"./misc\";\r\nimport {changeUserInfo, toggleUserPopup} from \"../actions/actionFunctions\";\r\n\r\nexport const loginButtonCommonClick = async (updateInputValidations, analyticsLabel) => {\r\n await updateInputValidations();\r\n const errors = store.getState().userState.userInfoErrors;\r\n if (Object.keys(errors).length && Object.keys(errors)\r\n .filter(key => key === \"email\" || key === \"password\")\r\n .some(key => errors[key] && errors[key].length)) {\r\n return false\r\n }\r\n loaderEnable();\r\n Analytics.sendClickEvent(analyticsLabel);\r\n const {currency, value} = getAnalyticsEcommerceValues();\r\n Analytics.sendEcommerceEvent(\"generate_lead\", {currency, value});\r\n\r\n const loginResponse = await userLogin();\r\n loaderDisable();\r\n return loginResponse\r\n}\r\n\r\nexport const saveQuoteAfterSignIn = async () => {\r\n loaderEnable();\r\n const savedSuccess = await saveQuote({submit: true, showReceipt: false});\r\n if (savedSuccess) {\r\n showQuoteSavedNotification();\r\n document.kvConfig.jobId = savedSuccess.jobId;\r\n }\r\n loaderDisable();\r\n return savedSuccess\r\n}\r\n\r\nexport const registerButtonCommonClick = async (updateInputValidations, analyticsLabel, executeAfterRegisterIfUserExist) => {\r\n await updateInputValidations();\r\n const {userState} = store.getState();\r\n const errors = userState.userInfoErrors;\r\n if (Object.keys(errors).length && Object.keys(errors)\r\n .filter(key => key !== \"password\")\r\n .some(key => errors[key] && errors[key].length)) {\r\n return false\r\n }\r\n if (userState.userInfo) {\r\n store.dispatch(restorePaymentInfo({ // on register - fill in also shipping, why not\r\n shippingAddress: {\r\n address1: userState.userInfo.address1,\r\n address2: userState.userInfo.address2,\r\n fullName: userState.userInfo.firstName + \" \" + userState.userInfo.lastName,\r\n city: userState.userInfo.city,\r\n state: userState.userInfo.state,\r\n postal: userState.userInfo.postal,\r\n }\r\n }))\r\n }\r\n loaderEnable();\r\n Analytics.sendClickEvent(analyticsLabel);\r\n const {currency, value} = getAnalyticsEcommerceValues();\r\n Analytics.sendEcommerceEvent(\"generate_lead\", {currency, value});\r\n\r\n const registeredResponse = await userRegister({executeAfterRegisterIfUserExist});\r\n console.log(\"successfully registered\", registeredResponse);\r\n loaderDisable();\r\n return registeredResponse\r\n}\r\n\r\nexport const remindPasswordCommonClick = async (updateInputValidations, analyticsLabel) => {\r\n await updateInputValidations();\r\n const fullStore = store.getState();\r\n // const {language} = fullStore.serverState;\r\n // const {userInfo, userInfoErrors} = fullStore.userState;\r\n const {userInfoErrors} = fullStore.userState;\r\n\r\n if (userInfoErrors.email && userInfoErrors.email.length) {\r\n return false\r\n }\r\n // loaderEnable();\r\n Analytics.sendClickEvent(analyticsLabel);\r\n await resetUserPassword();\r\n // loaderDisable();\r\n}\r\n\r\nexport const getUpdatedUserInfoFromTheResponse = (newUserInfo, responseCustomer, onLoad = false) => {\r\n if (onLoad) {\r\n if (responseCustomer.email) {\r\n newUserInfo.email = responseCustomer.email;\r\n }\r\n if (responseCustomer.fullName) {\r\n newUserInfo.firstName = responseCustomer.fullName;\r\n }\r\n }\r\n if (responseCustomer.phone) {\r\n const oldCountry = responseCustomer.country || responseCustomer.shipping ? responseCustomer.shipping.country : \"\";\r\n const {phoneNumber, country} = Misc.getUserPhoneSplitted(responseCustomer.phone, oldCountry);\r\n newUserInfo.phoneNumber = phoneNumber;\r\n newUserInfo.phone = phoneNumber;\r\n if (country) {\r\n newUserInfo.country = country;\r\n }\r\n }\r\n if (responseCustomer.address) {\r\n [\"address1\", \"address2\", \"postal\", \"city\", \"provence\"].forEach(key => { // removed country, cause it is a string, and we keep object now\r\n if (responseCustomer.address[key]) {\r\n const realKey = (key === \"provence\") ? \"state\" : key;\r\n newUserInfo[realKey] = responseCustomer.address[key];\r\n }\r\n })\r\n }\r\n newUserInfo.shipping = responseCustomer.shipping;\r\n return newUserInfo\r\n}\r\n\r\nexport const tryToSetUserFromUrl = async (url) => {\r\n if (!url || !url.searchParams) {\r\n return\r\n }\r\n const userId = url.searchParams.get(\"u\");\r\n if (!userId) {\r\n return\r\n }\r\n try {\r\n const customerId = +(userId.split(\"/\")[0]);\r\n const responseCustomer = await getCustomerById({\r\n customerId,\r\n });\r\n if (!responseCustomer) {\r\n return\r\n }\r\n const newUserInfo = getUpdatedUserInfoFromTheResponse({}, responseCustomer, true);\r\n store.dispatch(changeUserInfo(newUserInfo));\r\n store.dispatch(toggleUserPopup({\r\n userIsLoggedIn: true,\r\n isPhoneNumberValidated: true\r\n }));\r\n } catch (e) {\r\n console.log(\"couldn't log in customer\", userId);\r\n }\r\n}\r\n","export const getDeviceType = () => {\r\n const userAgent = navigator.userAgent || navigator.vendor || window.opera;\r\n\r\n if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) {\r\n return DEVICE_TYPE.iOS;\r\n }\r\n\r\n if (/android/i.test(userAgent)) {\r\n return DEVICE_TYPE.Android;\r\n }\r\n\r\n if (/Windows|Macintosh|Linux|X11/.test(userAgent)) {\r\n return DEVICE_TYPE.Desktop;\r\n }\r\n\r\n return DEVICE_TYPE.unknown;\r\n};\r\nexport const DEVICE_TYPE = {\r\n iOS: 'iOS',\r\n Android: 'Android',\r\n Desktop: 'Desktop',\r\n unknown: 'unknown'\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst ENTER_KEY = 13;\r\nconst rgx = /^[0-9]*\\.?[0-9]*$/;\r\n\r\nexport default class TextInput extends React.Component {\r\n\r\n inputElement = React.createRef();\r\n\r\n state = {\r\n value: this.props.value,\r\n editing: false,\r\n numberInput: false\r\n };\r\n\r\n static propTypes = {\r\n onChange: PropTypes.func.isRequired,\r\n onRealChange: PropTypes.func,\r\n onBlur: PropTypes.func,\r\n className: PropTypes.string,\r\n numberInput: PropTypes.bool,\r\n id: PropTypes.string,\r\n autoComplete: PropTypes.string,\r\n maxValue: PropTypes.number,\r\n };\r\n\r\n onChange = (event) => {\r\n let value = event.target.value;\r\n\r\n if (!value.match(rgx) && this.props.numberInput) {\r\n return false;\r\n }\r\n if (this.props.numberInput && this.props.maxValue && (this.getUpdatedValue(value) >= this.props.maxValue)) {\r\n value = this.props.maxValue;\r\n }\r\n this.setState({\r\n value\r\n });\r\n if (this.props.onRealChange) {\r\n this.props.onRealChange(value);\r\n }\r\n };\r\n\r\n onBlur = (event) => {\r\n let value = event.target.value;\r\n this.finishEditing(value);\r\n if (this.props.onBlur) {\r\n this.props.onBlur();\r\n }\r\n };\r\n\r\n getUpdatedValue = (value) => {\r\n if (!this.props.numberInput) {\r\n return value\r\n }\r\n if (value.indexOf('.') === 0) {\r\n value = +(\"0\"+value); // dot on the beginning\r\n }\r\n if (value.toString().indexOf(\".\") === (value.toString().length - 1)) {\r\n value = value.substring(0, value.length - 1); // dot on the end\r\n }\r\n if (this.props.maxValue && (+value > this.props.maxValue)) {\r\n value = this.props.maxValue;\r\n }\r\n return +value || 0\r\n }\r\n\r\n finishEditing = (value) => {\r\n value = this.getUpdatedValue(value);\r\n this.setState({\r\n editing: false\r\n }, () => {\r\n this.props.onChange(value);\r\n })\r\n };\r\n\r\n onFocus = () => {\r\n let value = this.props.numberInput && this.props.currencySing\r\n ? this.props.value.replace(this.props.currencySing,\"\").replace(\"%\",\"\").replace(\",\",\"\")\r\n : this.props.value;\r\n value = (value === \"Included\" ? \"\" : value);\r\n this.setState({\r\n editing: true,\r\n value\r\n })\r\n };\r\n\r\n handleKeyDown = e => {\r\n if (e.keyCode === ENTER_KEY) {\r\n // this.finishEditing(this.state.value);\r\n e.target.blur();\r\n }\r\n };\r\n\r\n render() {\r\n return \r\n }\r\n}\r\n","import React, {Fragment, useEffect, useRef, useState} from \"react\";\r\nimport PropTypes from \"prop-types\";\r\n// import {FormattedMessage} from \"react-intl\";\r\n\r\nimport Button from \"@mui/material/Button\";\r\nimport ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\r\n\r\nimport {useOutsideClick} from \"../../../misc/helperHooks\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nconst LookDropdown = (props) => {\r\n\r\n const {selectItems, selectedItem, selectItemClick, selectLabel, maxItems, errorsObject, changeErrorsObject, getValidationErrors,\r\n inputsValidated, property, size, textOnly} = props;\r\n const [opened, setOpened] = useState(false);\r\n const selectElement = useRef(null);\r\n\r\n useOutsideClick(selectElement, () => {\r\n setOpened(false);\r\n });\r\n\r\n const handleSelectItemClick = (selectItem, selectItemIndex) => {\r\n selectItemClick(selectItem, selectItemIndex);\r\n setOpened(false);\r\n checkForError();\r\n };\r\n\r\n const checkForError = () => {\r\n if (errorsObject && getValidationErrors && changeErrorsObject) {\r\n const errors = getValidationErrors(property, selectedItem.value);\r\n changeErrorsObject({\r\n [property]: errors\r\n })\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (!inputsValidated) {\r\n checkForError();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [inputsValidated]);\r\n\r\n const selectItemHeight = size || 36;\r\n const styles = {\r\n height: opened\r\n ? maxItems && (selectItems.length > maxItems)\r\n ? (maxItems * selectItemHeight) + \"px\"\r\n : (selectItems.length * selectItemHeight) + \"px\"\r\n : 0\r\n }\r\n\r\n const errorsExist = errorsObject && Array.isArray(errorsObject[property]) && !!errorsObject[property].length;\r\n\r\n return (\r\n
    \r\n {textOnly ? (\r\n
    \r\n \r\n {selectedItem && selectedItem.preText ? {selectedItem.preText} : null}\r\n {selectLabel ? {selectLabel} : null}\r\n {selectedItem ? selectedItem.text : \"-\"}\r\n \r\n
    \r\n ) : (\r\n \r\n )}\r\n {textOnly ? null : (\r\n
    \r\n
      \r\n {selectItems.map((selectItem, selectItemIndex) => {\r\n const isSelected = selectItem.value === selectedItem.value;\r\n return (\r\n
    • \r\n \r\n
    • \r\n )\r\n })}\r\n
    \r\n
    \r\n )}\r\n {errorsExist ? (\r\n
    \r\n \r\n
    \r\n ) : \"\"}\r\n
    \r\n )\r\n};\r\n\r\nLookDropdown.propTypes = {\r\n selectItems: PropTypes.arrayOf(PropTypes.shape({\r\n text: PropTypes.string.isRequired, // intlKey\r\n value: PropTypes.any.isRequired,\r\n preText: PropTypes.string,\r\n })).isRequired,\r\n selectItemClick: PropTypes.func.isRequired,\r\n selectedItem: PropTypes.object,\r\n selectLabel: PropTypes.string,\r\n className: PropTypes.string,\r\n maxItems: PropTypes.number,\r\n size: PropTypes.number,\r\n textOnly: PropTypes.bool,\r\n // validation below\r\n property: PropTypes.string,\r\n inputsValidated: PropTypes.bool,\r\n errorsObject: PropTypes.object, // userInfoErrorsLike\r\n changeErrorsObject: PropTypes.func,\r\n getValidationErrors: PropTypes.func,\r\n};\r\n\r\nexport default LookDropdown\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\n\r\nconst LookFeatureSku = (props) => {\r\n\r\n const {lookFeature, fabricatorSettings, isList} = props;\r\n\r\n if (!lookFeature.dbFeature.sku || fabricatorSettings.hideSku) {\r\n return null\r\n }\r\n\r\n if (isList) {\r\n return (\r\n \r\n {lookFeature.dbFeature.sku}\r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n {lookFeature.dbFeature.sku}\r\n \r\n )\r\n};\r\n\r\nLookFeatureSku.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface),\r\n isList: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {settings} = store.fabricatorState;\r\n return {\r\n fabricatorSettings: settings,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(LookFeatureSku)\r\n","import {connect} from \"react-redux\";\r\n\r\nimport {postMessageToParent} from \"../lookMessaging\";\r\nimport {GROHE_POST_MESSAGES_ACTIONS} from \"../iframeIntegration\";\r\nimport {getLookId, getPostCartItemsList} from \"../lookNavigation/lookFunctions2\";\r\nimport {setIframeIntegrationRequest} from \"../../../actions/iframeIntegrationFunctions\";\r\nimport {saveQuote} from \"../../../api/server-api\";\r\nimport {setAmazonImageUrl} from \"../../../actions/serverFunctions\";\r\nimport {getTempIdForPostMessage, postSaveVisualizerImage} from \"../../../api/look-api\";\r\nimport {getQuotePriceWithTaxes, getTotalPrice, isIframe} from \"../../../misc/helpers\";\r\n// import {getCurrentLayout} from \"../../appLayout\";\r\n// import Config from \"../../../config\";\r\nimport {LOOK_OVERLAYS} from \"../core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../config\";\r\nimport {setLookOverlayOpened} from \"../../../actions/lookFunctions\";\r\nimport {setExisingTempId} from \"../../../actions/groheFunctions\";\r\nimport {renderErrorPopup} from \"../../../api/api-popups\";\r\nimport {showQuoteSavedNotification} from \"../../ui/successNotification\";\r\nimport Analytics from \"../../../analytics\";\r\nimport {getAnalyticsEcommerceItem} from \"../../../analyticsEcommerceParams\";\r\nimport {updateCurrentQuote} from \"../../../misc/quotesFunctions\";\r\n\r\nconst WithAddToCartPostMessage = (props) => {\r\n\r\n const {cartItems, jobId, children, activePreset, bvPresets, setIframeIntegrationRequest, isPhoneNumberValidated,\r\n activeQuoteIndex, setAmazonImageUrl, setLookOverlayOpened, exisingTempId, setExisingTempId, userIsLoggedIn,\r\n fabricatorData} = props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n const isLixil = isIframe() && fabricatorData.isLixil;\r\n\r\n const withoutCheckout = !isLixil && !fabricatorSettings.checkout;\r\n if (withoutCheckout && IS_PRODUCT_JOURNEY) { // we keep this button on the look list page\r\n return null\r\n }\r\n\r\n const addToCartPostMessage = async (sendFeatures= null) => {\r\n\r\n // const layout = getCurrentLayout();\r\n // await layout.updateLocalStorage();\r\n\r\n if (!isLixil || !fabricatorSettings.checkout) {\r\n if (!isPhoneNumberValidated) {\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture);\r\n return\r\n }\r\n if (withoutCheckout) {\r\n // we should just save the quote, everything is correct below\r\n }\r\n if (fabricatorSettings.checkout && IS_PRODUCT_JOURNEY) { // this should never execute, but let it be\r\n return false\r\n }\r\n setLookOverlayOpened(LOOK_OVERLAYS.loadingCart);\r\n return saveQuote({\r\n submit: true,\r\n showReceipt: false\r\n })\r\n .then((responseData) => {\r\n document.kvConfig.jobId = responseData.jobId;\r\n if (responseData.imageUrl) {\r\n setAmazonImageUrl(responseData.imageUrl)\r\n }\r\n setLookOverlayOpened(\"\");\r\n showQuoteSavedNotification(\r\n fabricatorSettings.checkout ? \"successNotification.titleQuoteCreated\" : \"successNotification.titleQuoteSaved\"\r\n );\r\n })\r\n .catch((error) => {\r\n renderErrorPopup(\"Server \"+new Error(error));\r\n setLookOverlayOpened(\"\");\r\n })\r\n }\r\n\r\n const totalPrice = getTotalPrice(null, false, cartItems);\r\n\r\n Analytics.sendEcommerceEvent(\"add_to_cart\", {\r\n currency: fabricatorSettings.currency,\r\n value: getQuotePriceWithTaxes(totalPrice),\r\n items: cartItems.map((cartItem, cartItemIndex) => {\r\n return getAnalyticsEcommerceItem(cartItem.cartFeature, cartItem.quantity, cartItemIndex)\r\n })\r\n });\r\n\r\n setLookOverlayOpened(LOOK_OVERLAYS.loadingCart);\r\n\r\n let lookImage = \"\";\r\n\r\n if (!userIsLoggedIn && !IS_PRODUCT_JOURNEY) {\r\n const updatedQuotes = await updateCurrentQuote();\r\n lookImage = await postSaveVisualizerImage({\r\n base64Image: updatedQuotes[activeQuoteIndex].bvImage\r\n });\r\n }\r\n\r\n // const useRedirect = !IS_PRODUCT_JOURNEY\r\n // || (Array.isArray(sendFeatures) && sendFeatures.length > 1 && !sendFeatures.some(cartItem => featureIsBundle(cartItem.cartFeature)))\r\n\r\n let lookId = getLookId(activePreset, bvPresets);\r\n\r\n let postData = {\r\n \"EventType\": GROHE_POST_MESSAGES_ACTIONS.addToCart,\r\n \"LookImage\": lookImage ? lookImage : \"No image created\",\r\n \"LookId\": lookId + \"\",\r\n \"LookSkus\": Array.isArray(sendFeatures)\r\n ? getPostCartItemsList(sendFeatures, true)\r\n : getPostCartItemsList(cartItems, true),\r\n \"UseRedirect\": \"\" + !IS_PRODUCT_JOURNEY,\r\n }\r\n\r\n if(jobId) {\r\n postData[\"VisualizerId\"] = jobId + \"\"\r\n }\r\n\r\n if (!isIframe()) {\r\n console.log(\"Not an iframe, can't post cart data:\", postData);\r\n }\r\n\r\n setIframeIntegrationRequest(postData);\r\n if (userIsLoggedIn) {\r\n saveQuote({\r\n submit: true,\r\n })\r\n .then((responseData) => {\r\n document.kvConfig.jobId = responseData.jobId;\r\n if(responseData.jobId) {\r\n postData[\"VisualizerId\"] = responseData.jobId + \"\";\r\n }\r\n postData[\"LookImage\"] = responseData.imageUrl || lookImage || \"No image created\";\r\n if (responseData.imageUrl) {\r\n setAmazonImageUrl(responseData.imageUrl)\r\n }\r\n window.postMessageIsExecuting = true;\r\n postMessageToParent(postData);\r\n })\r\n } else {\r\n postData[\"tempID\"] = await getTempIdForPostMessage(\"\", exisingTempId);\r\n if (IS_PRODUCT_JOURNEY) {\r\n setExisingTempId(postData[\"tempID\"]);\r\n }\r\n postMessageToParent(postData);\r\n }\r\n }\r\n\r\n return children(addToCartPostMessage)\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {cartItems} = store.cartState;\r\n const {activePreset, bvPresets} = store.bathroomVisualizerState;\r\n const {jobId} = store.serverState;\r\n const {isPhoneNumberValidated, userIsLoggedIn} = store.userState;\r\n const {activeQuoteIndex} = store.quotesState;\r\n const {exisingTempId} = store.groheState;\r\n const fabricatorData = store.fabricatorState;\r\n\r\n return {\r\n cartItems,\r\n activePreset,\r\n bvPresets,\r\n jobId,\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n // quotes,\r\n activeQuoteIndex,\r\n exisingTempId,\r\n fabricatorData,\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setIframeIntegrationRequest,\r\n setAmazonImageUrl,\r\n setLookOverlayOpened,\r\n setExisingTempId,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(WithAddToCartPostMessage)\r\n","import React, {useMemo, useRef} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport AddIcon from '@mui/icons-material/Add';\r\nimport IconButton from \"@mui/material/IconButton\";\r\n\r\nimport FeatureName from \"../../../../visComponents/featureName\";\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport LookFeaturePrice from \"./lookFeaturePrice\";\r\nimport FeatureThumbnail from \"../../../../visComponents/featureThumbnail\";\r\n// import LookListFeatureActions from \"./lookListFeatureActions\";\r\nimport {\r\n setLookActiveCategory,\r\n setLookActiveFeature, setLookAllWallsTutorial,\r\n setLookCompatabilityAlert,\r\n setLookDemoPointsClicked,\r\n setLookOverlayOpened,\r\n // setLookAllWallsOpened\r\n} from \"../../../../../actions/lookFunctions\";\r\nimport Config from \"../../../../../config\";\r\nimport {getCommonCoords, getFeatureCoords, getLayerCenter, navFeatureCLick} from \"../../lookFunctions\";\r\nimport LookListFeatureCheckmark from \"./lookListFeatureCheckmark\";\r\nimport {addToCart, setCanvasScale, updateCanvasCount} from \"../../../../../actions/actionFunctions\";\r\nimport LookCanvasContext from \"../../../lookCanvasContext\";\r\nimport {getCurrentLayout} from \"../../../../appLayout\";\r\nimport {LOOK_WALLS_ONLY} from \"../../../core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport {getCartItemObject, getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport {\r\n enableRelatedFeature,\r\n getFeatureIsActive,\r\n getFeatureUrl,\r\n hideFeatureSection\r\n} from \"../../lookFunctions2\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS, PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport WithClickCount from \"../../../hocs/withClickCount\";\r\nimport LookListActiveFeatureMobileButton from \"./lookListActiveFeatureMobileButton\";\r\nimport LookAllWallsRadioButton from \"../lookAllWallsRadioButton\";\r\nimport {\r\n checkForCompatabilityAlert,\r\n clickOnSimilarFeatures,\r\n getApplyToLogic,\r\n getShowMatchRadio\r\n} from \"../../lookNavigationFunctions\";\r\nimport LookFeatureItemLocked from \"./lookFeatureItemLocked\";\r\nimport {getAnalyticsEcommerceItem} from \"../../../../../analyticsEcommerceParams\";\r\nimport {shouldZoomPartId} from \"../../../hocs/withZoomToFeature\";\r\nimport LookListFeatureName from \"./lookListFeatureName\";\r\nimport {featureCanChangeShowerSize, searchForSameNameWallsBeforeFeatureApply} from \"../../../bathroomFunctions\";\r\n\r\n\r\n\r\nconst LookListFeature = (props) => {\r\n\r\n const {style, lookFeature, lookExpanded, lookViewType, lookActiveFeature, setLookActiveFeature, history, position,\r\n featureGroup, updateCanvasCount, lookActiveCategory, isMobile, isPhoneNumberValidated, canvasCount,\r\n addToCart, qtActiveCategory, setCanvasScale, canvasScale, navItems, updateLookCartItem,\r\n setLookDemoPointsClicked, lookDemoPointsClicked, viewType, fromDesignRecommended, setLookAllWallsTutorial,\r\n setLookCompatabilityAlert, fabricatorData, lookCompatabilityAlert, lookLockedTutorial, lookAllWallsTutorial,\r\n // setLookAllWallsOpened, lookAllWallsOpened,\r\n isAllWallsTutorialItem,\r\n } = props;\r\n\r\n const featureElement = useRef();\r\n\r\n const noFeatureSection = useMemo(() => {\r\n return hideFeatureSection(true, lookFeature.partId, lookFeature, lookCompatabilityAlert)\r\n }, [lookFeature, lookCompatabilityAlert]);\r\n\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n const showPriceLocked = useMemo(() => getFeatureIsLocked(lookFeature), [lookFeature, isPhoneNumberValidated]);\r\n const showPrice = fabricatorSettings.showPricing && !fabricatorData.hideCheckoutBreakdownCost\r\n && !showPriceLocked && !fabricatorData.hidePricesFromUser && !noFeatureSection;\r\n const featureIsLocked = showPriceLocked;\r\n\r\n // const [canRender, setCanRender] = useState(false);\r\n const isEmpty = (!lookFeature && position) || (featureGroup && featureGroup.disabled);\r\n const currentType = viewType || lookViewType;\r\n\r\n // useEffect(() => {\r\n // if (lookExpanded) {\r\n // setTimeout(() => { // preventing thumbnail jumping\r\n // setCanRender(true)\r\n // }, 200)\r\n // } else {\r\n // setCanRender(false)\r\n // }\r\n // }, [lookExpanded])\r\n\r\n const showMatchRadio = useMemo(() => getShowMatchRadio(lookFeature), [lookFeature]);\r\n\r\n const applyFeature = async (zoomFeature, imageCanvas, forceClick = false) => {\r\n const layout = getCurrentLayout();\r\n const parent = zoomFeature.getParent();\r\n Analytics.sendEcommerceEvent(\"select_item\", {\r\n item_list_id: zoomFeature.partId,\r\n item_list_name: parent.dbName || parent.partName || \"\",\r\n items: [getAnalyticsEcommerceItem(zoomFeature, 1)],\r\n });\r\n\r\n if (!lookActiveFeature) {\r\n parent.featureBeforeChange = zoomFeature;\r\n }\r\n const positionInList = navItems ? navItems.findIndex(navItem => navItem.part.dbFeature.id === lookFeature.dbFeature.id) : null;\r\n if (!IS_PRODUCT_JOURNEY && (!isMobile || featureIsLocked)) {\r\n setLookActiveFeature(zoomFeature, positionInList);\r\n }\r\n if ((layout.isNewLayout || (layout.visualizerType === \"bvScene\")) && featureCanChangeShowerSize(zoomFeature)) {\r\n await searchForSameNameWallsBeforeFeatureApply(zoomFeature);\r\n }\r\n\r\n // setLookActiveCategory(zoomFeature.partId);\r\n if (showMatchRadio) { // before nav feature click\r\n const applyToLogic = getApplyToLogic(lookFeature);\r\n // const parent = zoomFeature.getParent();\r\n // setActiveFeaturesBeforeAllWalls([], parent); // we don't need it here, as we have remembering logic below\r\n if (applyToLogic && Array.isArray(applyToLogic.currentApplyToArray) && applyToLogic.currentApplyToArray.length) {\r\n await clickOnSimilarFeatures(zoomFeature, applyToLogic, true);\r\n // if (!lookAllWallsOpened) {\r\n // setLookAllWallsOpened(true);\r\n // }\r\n }\r\n }\r\n navFeatureCLick(zoomFeature, true, forceClick);\r\n enableRelatedFeature(zoomFeature, addToCart, qtActiveCategory);\r\n // const parent = zoomFeature.getParent();\r\n // if (parent.disabled) {\r\n // parent.disabled = false;\r\n // parent.disabledClick();\r\n // }\r\n if (updateLookCartItem) {\r\n updateLookCartItem(zoomFeature) // removed since we have select button on look journey\r\n }\r\n if (isMobile) {\r\n if (IS_PRODUCT_JOURNEY || featureIsLocked) {\r\n // const closeOnly = zoomFeature && !layout.partIdExistInQtCategory(zoomFeature.partId) && !showMatchRadio;\r\n // const closeOnly = zoomFeature && !layout.partIdExistInQtCategory(zoomFeature.partId);\r\n // if (closeOnly) {\r\n // history.push(getFeatureUrl(zoomFeature, true))\r\n // } else {\r\n // setLookActiveCategory(\"\");\r\n // history.push(getFeatureUrl(zoomFeature)) // always go to feature screen on mobile\r\n // }\r\n history.push(getFeatureUrl(zoomFeature, true));\r\n }\r\n } else {\r\n history.push(getFeatureUrl(zoomFeature, !!lookActiveCategory));\r\n }\r\n // here we can update the navigation list, but I removed it since it is sorting features and confusing customers\r\n // if (lookFeature.getColorName(filterGroups) !== lookActiveFeature.getColorName(filterGroups)) {\r\n // updateNavigationCount();\r\n // }\r\n updateCanvasCount();\r\n if (imageCanvas && imageCanvas.current && imageCanvas.current.pinchZoom && !LOOK_WALLS_ONLY.includes(zoomFeature.partId)\r\n && shouldZoomPartId(zoomFeature.partId, isMobile) && (canvasScale === 1)) {\r\n const commonCoords = getFeatureCoords(zoomFeature) || getCommonCoords(featureGroup || zoomFeature.getParent(), zoomFeature, imageCanvas.current.canvas);\r\n const center = commonCoords && Object.keys(commonCoords).length\r\n ? getLayerCenter(commonCoords, imageCanvas.current.canvas, isMobile)\r\n : null;\r\n if (center) {\r\n imageCanvas.current.pinchZoom.zoomToCenter(center, 0, false, layout.partIdExistInQtCategory(zoomFeature.partId));\r\n setCanvasScale(imageCanvas.current.pinchZoom.options.tapZoomFactor)\r\n }\r\n }\r\n if (!lookDemoPointsClicked) {\r\n setLookDemoPointsClicked(true);\r\n }\r\n if (!lookAllWallsTutorial.finished && showMatchRadio && !featureIsLocked && !lookFeature.notAvailableInVisualizer\r\n && featureElement && featureElement.current && !fabricatorData.isEncore && (currentType === 1)) {\r\n setLookAllWallsTutorial({\r\n visible: true,\r\n // withGrid: navItems.length === 1,\r\n // positionInList,\r\n lookFeature,\r\n top: featureElement.current.getBoundingClientRect().top,\r\n left: featureElement.current.getBoundingClientRect().left,\r\n height: style.height,\r\n // firstLockedIndex,\r\n // firstUnlockedIndex,\r\n });\r\n }\r\n }\r\n\r\n const listFeatureClick = (event, imageCanvas, maxClickCountReached) => {\r\n if (event.target.closest(\".look-icon--delete\") || event.target.closest(\".gm-ios-checkbox\") || lookLockedTutorial.visible) {\r\n return\r\n }\r\n if (Config.isDevMode() && lookFeature) {\r\n console.log(\"lookFeature\", lookFeature, lookFeature.metaData);\r\n }\r\n if (lookExpanded) {\r\n document.querySelector(\".lm\").style.transition = \"none\";\r\n setTimeout(() => {\r\n document.querySelector(\".lm\").style.transition = \"all 0.3s ease\";\r\n }, 300)\r\n }\r\n let zoomFeature = lookFeature;\r\n if (isEmpty) {\r\n if (!lookFeature && position) {\r\n zoomFeature = featureGroup.getMatchingPositionFeature(position);\r\n if (zoomFeature) {\r\n featureGroup.layerPositions[position] = zoomFeature;\r\n }\r\n }\r\n if (zoomFeature) {\r\n featureGroup.activeFeature = zoomFeature;\r\n addToCart([getCartItemObject(zoomFeature, 1, qtActiveCategory)]);\r\n }\r\n console.log(\"zoomFeature featureGroup\", zoomFeature, featureGroup);\r\n }\r\n\r\n if (!zoomFeature || maxClickCountReached()) { // fabricator settings click lead capture\r\n return false;\r\n }\r\n\r\n const featureLabel = Analytics.getSkuForAnalytics(zoomFeature);\r\n const analyticsLabel = IS_PRODUCT_JOURNEY\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeaturesList + featureLabel\r\n : fromDesignRecommended\r\n ? LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeaturesListDesignRecommended + featureLabel\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeaturesList + featureLabel;\r\n Analytics.sendClickEvent(analyticsLabel);\r\n\r\n if (featureIsLocked) {\r\n if (!IS_PRODUCT_JOURNEY) {\r\n const positionInList = navItems ? navItems.findIndex(navItem => navItem.part.dbFeature.id === lookFeature.dbFeature.id) : null;\r\n setLookActiveFeature(zoomFeature, positionInList);\r\n history.push(getFeatureUrl(zoomFeature, true));\r\n }\r\n return false\r\n }\r\n\r\n const compatabilityLogic = checkForCompatabilityAlert(zoomFeature);\r\n if (compatabilityLogic.length) {\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookShowCompatabilityAlert);\r\n setLookCompatabilityAlert({\r\n visible: true,\r\n compatabilityLogic,\r\n clickedFeature: zoomFeature,\r\n applyFunction: applyFeature.bind(this, zoomFeature, imageCanvas, true) // always apply features from this popup\r\n });\r\n return false\r\n }\r\n\r\n // if (featureIsLocked && !fabricatorSettings.clickLeadCapture && !(isIframe() && fabricatorData.isLixil)) {\r\n // window.clearTimeout(window.leadCaptureTimeoutId);\r\n // window.leadCaptureTimeoutId = setTimeout(() => {\r\n // setLookOverlayOpened(LOOK_OVERLAYS.leadCapture);\r\n // }, 500)\r\n // }\r\n\r\n applyFeature(zoomFeature, imageCanvas);\r\n }\r\n\r\n const isActive = useMemo(() => {\r\n return getFeatureIsActive(lookFeature, lookActiveFeature, lookActiveCategory, featureGroup)\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [lookFeature, lookActiveFeature, lookActiveCategory, featureGroup, canvasCount]);\r\n\r\n // const showYellowNotice = !IS_PRODUCT_JOURNEY && (getStyleAlertNotMatchingFeatures(lookFeature).length && !lookActiveCategory)\r\n // || (lookFeature && lookRemovedCartItems.length && lookRemovedCartItems.some(cartItem => {\r\n // return (cartItem.partId === lookFeature.partId) && cartItem.cartFeature.metaData.layerPosition\r\n // && (cartItem.cartFeature.metaData.layerPosition === lookFeature.metaData.layerPosition)\r\n // }));\r\n\r\n const showAllWalls = isActive && showMatchRadio && !featureIsLocked;\r\n const viewTypeFour = +currentType === 4;\r\n const isLockedAndViewTypeFour = showPriceLocked && viewTypeFour;\r\n\r\n return (\r\n \r\n {(imageCanvas) => (\r\n \r\n {(maxClickCountReached) => (\r\n
  • listFeatureClick(event, imageCanvas, maxClickCountReached)}>\r\n {isEmpty ? (\r\n
    \r\n \r\n \r\n \r\n
    \r\n ) : (\r\n
    \r\n {isMobile && !IS_PRODUCT_JOURNEY\r\n ? lookAllWallsTutorial.visible ? null : \r\n : }\r\n \r\n {showAllWalls ? : null}\r\n
    \r\n )}\r\n {isEmpty ? (\r\n
    \r\n \r\n
    \r\n ) : (\r\n
    \r\n {viewTypeFour || ((currentType === 2) && showPriceLocked) ? null : (\r\n \r\n \r\n {/*{showYellowNotice ? : null}*/}\r\n \r\n )}\r\n {showPriceLocked ? \r\n : viewTypeFour\r\n ? null\r\n : }\r\n {!lookExpanded && !isLockedAndViewTypeFour ? (\r\n
    \r\n {!lookExpanded && !isLockedAndViewTypeFour && !noFeatureSection && !showPriceLocked ? (\r\n \r\n ) : null}\r\n {viewTypeFour && !featureIsLocked ? : null}\r\n
    \r\n ) : null}\r\n
    \r\n )}\r\n {/*{lookFeature && lookExpanded && canRender ? (*/}\r\n {/* */}\r\n {/*) : null}*/}\r\n {/*{lookFeature && lookExpanded && canRender ? (*/}\r\n {/* */}\r\n {/*) : null}*/}\r\n
  • \r\n )}\r\n
    \r\n )}\r\n
    \r\n )\r\n};\r\n\r\nLookListFeature.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface),\r\n fromDesignRecommended: PropTypes.bool,\r\n style: PropTypes.object,\r\n featureGroup: PropTypes.object,\r\n position: PropTypes.string,\r\n navItems: PropTypes.array,\r\n updateLookCartItem: PropTypes.func,\r\n viewType: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n isAllWallsTutorialItem: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookExpanded, lookViewType, lookActiveCategory, lookActiveFeature, lookDemoPointsClicked, lookCompatabilityAlert,\r\n // lookAllWallsOpened\r\n lookLockedTutorial, lookAllWallsTutorial} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n const {canvasScale, canvasCount} = store.bathroomVisualizerState;\r\n const {qtActiveCategory} = store.qtState;\r\n // const {filterGroups} = store.filterState;\r\n // const {lookRemovedCartItems} = store.cartState;\r\n const fabricatorData = store.fabricatorState;\r\n const {isPhoneNumberValidated} = store.userState; // to update component when user is logged in\r\n\r\n return {\r\n lookActiveFeature,\r\n lookExpanded,\r\n lookViewType,\r\n lookActiveCategory,\r\n isMobile,\r\n qtActiveCategory,\r\n // lookRemovedCartItems,\r\n lookDemoPointsClicked,\r\n canvasScale,\r\n // filterGroups,\r\n // lookAllWallsOpened,\r\n fabricatorData,\r\n isPhoneNumberValidated,\r\n lookCompatabilityAlert,\r\n canvasCount,\r\n lookLockedTutorial,\r\n lookAllWallsTutorial,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookActiveFeature,\r\n updateCanvasCount,\r\n setLookActiveCategory,\r\n addToCart,\r\n setCanvasScale,\r\n setLookDemoPointsClicked,\r\n setLookCompatabilityAlert,\r\n setLookOverlayOpened,\r\n setLookAllWallsTutorial,\r\n // updateNavigationCount,\r\n // setLookAllWallsOpened,\r\n};\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(LookListFeature)\r\n)\r\n","import React from 'react';\r\nimport UserLoginButton from \"../ui/userLoginButton\";\r\nimport {loaderDisable, loaderEnable} from \"../ui/loaderView\";\r\nimport {saveQuote} from \"../../api/server-api\";\r\nimport {showCheckoutLayout} from \"../../actions/actionFunctions\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport {showQuoteSavedNotification} from \"../ui/successNotification\";\r\nimport Analytics from '../../analytics';\r\n\r\nexport default class ShoppingCart extends React.Component {\r\n\r\n getRecentlyViewedItems = () => {\r\n const layout = getCurrentLayout();\r\n // console.log(\"layout.getActiveFeatures()\", layout.getActiveFeatures());\r\n const activeFeatures = layout.getActiveFeatures()\r\n .filter(feature => {\r\n if (!feature.cartFeature || !feature.cartFeature.dbFeature\r\n || (feature.cartFeature.partName && feature.cartFeature.partName.includes(\"laceholder\")) || feature.partId === \"shower_body\") {\r\n return false\r\n }\r\n if (feature.partId.includes(\"pony_wall\") && feature.cartFeature.getParent) {\r\n const showerParent = feature.cartFeature.getParent().getParent().layout.parts.Shower;\r\n if (showerParent.showerDimensions() !== \"Pony\") {\r\n return false\r\n }\r\n }\r\n const featureId = feature.cartFeature.dbFeature.id;\r\n return !feature.partId.includes(\"top_cabinet_module\") && this.props.cartItems.every((cartItem) => {\r\n return cartItem.cartFeature.dbFeature.id !== featureId\r\n })\r\n });\r\n const recentlyViewedItems = (Array.isArray(this.props.recentlyViewedItems) && this.props.recentlyViewedItems.length)\r\n ? this.props.recentlyViewedItems\r\n .filter(recentItem => {\r\n const recentItemId = recentItem.dbFeature.id;\r\n return activeFeatures.every(cartItem => cartItem.cartFeature.dbFeature.id !== recentItemId)\r\n && this.props.cartItems.every((cartItem) => cartItem.cartFeature.dbFeature.id !== recentItemId)\r\n })\r\n .map(recentItem => {\r\n return {\r\n selectionGroup: recentItem.getParent().getParent().partName,\r\n partId: recentItem.partId,\r\n quantity: 0,\r\n cartFeature: recentItem\r\n };\r\n })\r\n : [];\r\n return [...activeFeatures, ...recentlyViewedItems]\r\n };\r\n\r\n getFinalButton = () => {\r\n if (document.kvConfig.canSaveQuote !== false) { // if document.kvConfig.canSaveQuote is null it is ok, we are checking only for false\r\n let intlText = \"\";\r\n let onClick = () => {};\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n if (fabricatorSettings.checkout) {\r\n if (fabricatorSettings.sureTax && !this.props.isPhoneNumberValidated) {\r\n return {\r\n intlText: \"quotingTool.featureInfo.priceLockedTitle\",\r\n onClick: () => this.handleCheckOut(\"updateTax\"),\r\n }\r\n }\r\n onClick = this.handleCheckOut;\r\n intlText = (fabricatorSettings.enableDocuSign || fabricatorSettings.hasPaymentGateway || document.kvConfig.showBackToDashboard)\r\n ? \"shoppingCart.checkoutButtonCheckoutNow\"\r\n : !fabricatorSettings.leadCaptureOnQuote // leadCaptureOnQuote is OFF\r\n ? \"shoppingCart.checkoutButtonBuyNow\"\r\n : !fabricatorSettings.twoFA // leadCaptureOnQuote is ON\r\n ? this.props.isPhoneNumberValidated || document.kvConfig.isBackend\r\n ? \"shoppingCart.checkoutButtonBuyNow\"\r\n : \"shoppingCart.checkoutButtonUnlockPrice\"\r\n : this.props.userIsLoggedIn || document.kvConfig.isBackend\r\n ? \"shoppingCart.checkoutButtonBuyNow\"\r\n : \"shoppingCart.checkoutButtonUnlockPrice\"\r\n } else if (fabricatorSettings.leadCaptureOnQuote) {\r\n intlText = \"shoppingCart.checkoutButtonEmailQuote\";\r\n onClick = this.handleSaveClick;\r\n } else {\r\n intlText = \"shoppingCart.checkoutButtonStartOver\";\r\n onClick = this.handleStartOverClick;\r\n }\r\n if (this.props.fabricatorData.isLakesideSurfaces) {\r\n intlText = \"buttons.submit\"\r\n }\r\n return {\r\n intlText,\r\n onClick,\r\n }\r\n }\r\n return null\r\n };\r\n\r\n handleCheckOut = async (assignButtonsToShow) => {\r\n\r\n if (document.kvConfig.isBackend && this.props.toggleShowAssignQuotePopup && !this.props.editToken) {\r\n this.props.toggleShowAssignQuotePopup(true, assignButtonsToShow); // assignButtonsToShow should be \"checkout\" and come only from the button group\r\n return;\r\n }\r\n\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n Analytics.sendClickEvent(\"checkout-buy-now-button\");\r\n if (!UserLoginButton.handleLoginClick({...this.props, checkout: true}))\r\n return ;\r\n\r\n loaderEnable(\"loader.savingQuoteText\");\r\n\r\n saveQuote({\r\n submit: true,\r\n showContractSignOnError: true\r\n })\r\n .then((response) => {\r\n if (response) {\r\n /*let responseDataBase = response;\r\n if (response.data) {\r\n responseDataBase = response.data;\r\n }\r\n\r\n const responseData = typeof responseDataBase === 'object' ? responseDataBase : JSON.parse(responseDataBase);\r\n console.log('saveQuote response:', responseData);*/\r\n loaderDisable();\r\n }\r\n showQuoteSavedNotification();\r\n showCheckoutLayout(fabricatorSettings);\r\n }).catch((error) => {\r\n console.log('saveQuote error:', error);\r\n loaderDisable();\r\n })\r\n };\r\n\r\n}\r\n","import {getSelectedContracts} from \"./contractsFunctions\";\r\n\r\nexport const getFirstUnfilledCustomField = (\r\n contractsValues,\r\n contractsList,\r\n fabricatorData,\r\n receiptSignature = \"\",\r\n contractsContext\r\n) => {\r\n // need to find first un-filled custom field and change the document page to it\r\n if (fabricatorData && fabricatorData.receiptSettings && fabricatorData.receiptSettings.signIsRequired\r\n && contractsContext.showReceiptInContract && contractsContext.receiptPages && !receiptSignature) {\r\n return { page: contractsContext.receiptPages, fieldIndex: 0 }\r\n }\r\n let customFieldInfo = { page: -1, fieldIndex: -1 };\r\n const selectedContracts = getSelectedContracts(contractsList);\r\n for (const contract of selectedContracts) {\r\n let {fields, pagesFrom} = contract;\r\n if (!contractsValues[contract.id]) {\r\n contractsValues[contract.id] = {};\r\n }\r\n const fieldsNeeded = fields.filter(field => {\r\n return field.isEditable && field.isRequired && field.coords && field.coords.length && !field.isCheckBox // why checkboxes are not required? old support\r\n })\r\n for (let i = 0; i <= contract.pagesCount; i++) {\r\n if (customFieldInfo.page === -1) {\r\n fieldsNeeded.forEach(field => {\r\n if (customFieldInfo.page === -1) {\r\n const sortedFields = field.coords.sort((a, b) => {\r\n // return (a.fieldIndexOnPage > b.fieldIndexOnPage) ? 1 : -1 // no we need to sort by top because this is incorrect\r\n const top1 = a.pageRect.height - a.rectangle.ury;\r\n const top2 = b.pageRect.height - b.rectangle.ury;\r\n return top1 > top2 ? 1 : -1\r\n });\r\n sortedFields.forEach(coord => {\r\n if (customFieldInfo.page === -1 && (i === coord.page)\r\n && (!contractsValues[contract.id][coord.page]\r\n || !contractsValues[contract.id][coord.page][coord.fieldIndexOnPage]\r\n || !contractsValues[contract.id][coord.page][coord.fieldIndexOnPage].value)) {\r\n customFieldInfo = { page: pagesFrom + coord.page - 1, fieldIndex: coord.fieldIndexOnPage };\r\n }\r\n })\r\n }\r\n })\r\n }\r\n }\r\n }\r\n return customFieldInfo;\r\n}\r\n\r\nexport const getFieldValue = (pageIndex, fieldIndex, activeContract, contractsValues) => {\r\n if (contractsValues[activeContract.id]\r\n && contractsValues[activeContract.id][pageIndex]\r\n && contractsValues[activeContract.id][pageIndex][fieldIndex]) {\r\n return contractsValues[activeContract.id][pageIndex][fieldIndex].value\r\n }\r\n return \"\"\r\n};\r\n\r\nexport const getFieldCoords = (contractFields, selectedFieldIndex) => {\r\n let fieldsCoords = [];\r\n contractFields.forEach(field => {\r\n if (!field.isEditable) {\r\n return;\r\n }\r\n field.coords.forEach((coord) => {\r\n const { fieldIndexOnPage, isRequired } = coord;\r\n if (field.isCustom) {\r\n const isSelected = fieldIndexOnPage === selectedFieldIndex;\r\n if (!isSelected && isRequired) {\r\n fieldsCoords.push({ coords: fieldCoords, idx: fieldIndexOnPage });\r\n }\r\n }\r\n })\r\n })\r\n return fieldsCoords\r\n}\r\n\r\nexport const getAlreadyFilledSignatureField = (fieldName, contractsValues, contractsList) => {\r\n let signatureValue = \"\";\r\n const selectedContracts = getSelectedContracts(contractsList);\r\n const withoutRequiredSignatureName = getFieldNameWithoutRequired(fieldName);\r\n for (const contract of selectedContracts) {\r\n let {fields} = contract;\r\n fields.forEach(field => {\r\n if (signatureValue || !field.isEditable || !field.isSignature) {\r\n return;\r\n }\r\n field.coords.forEach((coord) => {\r\n if (signatureValue || !coord.fieldName\r\n || (getFieldNameWithoutRequired(coord.fieldName) !== withoutRequiredSignatureName)) {\r\n return\r\n }\r\n signatureValue = getFieldValue(coord.page, coord.fieldIndexOnPage, contract, contractsValues);\r\n })\r\n })\r\n }\r\n return signatureValue;\r\n}\r\n\r\nexport const getFieldNameWithoutRequired = (fieldName = \"\") => {\r\n if (!fieldName || typeof fieldName !== \"string\") {\r\n return \"\"\r\n }\r\n return fieldName.replace(\"@\", \"\")\r\n}\r\n","import React from \"react\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\nimport {Grid} from \"react-virtualized\";\r\n\r\nimport LookListFeature from \"../lookListFeature/lookListFeature\";\r\nimport LookWizardSectionListFeature from \"../lookWizard/lookWizardSectionListFeature\";\r\nimport {wizardGroupInterface} from \"../../../../../interfaces/wizardItemInterface\";\r\nimport LookVirtualizedListLoadingItem from \"./lookVirtualizedListLoadingItem\";\r\n// import LoadingSpinner from \"../../ui/loadingSpinner\";\r\n\r\nexport const getLookRowHeight = (lookViewType) => {\r\n return lookViewType === 1\r\n ? 104\r\n : lookViewType === 4\r\n ? 128\r\n : lookViewType === 2\r\n ? 171\r\n : 340\r\n}\r\n\r\nconst LookVirtualizedList = (props) => {\r\n\r\n const {renderList, contentHeight, lookViewType, isMobile, updateLookCartItem, isWizard, wizardGroup, onScrollHandler,\r\n imageCanvas, maxClickCountReached, loadingCount} = props;\r\n\r\n if (!contentHeight || isNaN(contentHeight)) {\r\n return null\r\n }\r\n\r\n const width = isWizard ? 312 : 320;\r\n const columnWidth = lookViewType === 2\r\n ? width / 2\r\n : lookViewType === 4 ? width / 3 : width;\r\n const columnCount = lookViewType === 2\r\n ? 2\r\n : lookViewType === 4 ? 3 : 1;\r\n const rowCount = Math.ceil((loadingCount || renderList.length) / columnCount);\r\n\r\n const listSettings = {\r\n width,\r\n columnCount,\r\n columnWidth,\r\n rowCount,\r\n height: isMobile ? contentHeight - 16 : contentHeight - 116, // 52 header + 16 padding from bottom\r\n rowHeight: getLookRowHeight(lookViewType),\r\n overscanRowCount: 2,\r\n showScrollingPlaceholder: false,\r\n useDynamicRowHeight: false,\r\n }\r\n\r\n const cellRenderer = ({columnIndex, key, rowIndex, style}) => {\r\n if (loadingCount) {\r\n return \r\n }\r\n const navItem = renderList[(listSettings.columnCount * rowIndex) + columnIndex];\r\n if (!navItem) {\r\n return null\r\n }\r\n if (isWizard) {\r\n return \r\n }\r\n return \r\n }\r\n\r\n const noRowsRenderer = () =>
    No Features found
    ;\r\n\r\n return (\r\n listSettings.height\r\n ? \" virtualized-grid--with-scroll\"\r\n : \" virtualized-grid--without-scroll\")}\r\n width={listSettings.width}\r\n height={listSettings.height}\r\n overscanRowCount={listSettings.overscanRowCount}\r\n rowCount={listSettings.rowCount}\r\n columnCount={listSettings.columnCount}\r\n columnWidth={listSettings.columnWidth}\r\n rowHeight={listSettings.rowHeight}\r\n onScroll={onScrollHandler}\r\n cellRenderer={cellRenderer}\r\n noRowsRenderer={noRowsRenderer}\r\n />\r\n )\r\n};\r\n\r\nLookVirtualizedList.propTypes = {\r\n imageCanvas: PropTypes.object,\r\n maxClickCountReached: PropTypes.func,\r\n updateLookCartItem: PropTypes.func,\r\n renderList: PropTypes.array,\r\n contentHeight: PropTypes.number,\r\n lookViewType: PropTypes.number.isRequired,\r\n isMobile: PropTypes.bool,\r\n onScrollHandler: PropTypes.func,\r\n isWizard: PropTypes.bool,\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n loadingCount: PropTypes.number,\r\n}\r\n\r\nexport default injectIntl(LookVirtualizedList)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport TextField from \"@mui/material/TextField\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport RemoveIcon from \"@mui/icons-material/Remove\";\r\nimport AddIcon from '@mui/icons-material/Add';\r\n\r\nimport {setGroheActiveFeatureQuantity} from \"../../../../../actions/groheFunctions\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport Analytics, {PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport {getFeatureUnit} from \"../../../../../misc/helpers\";\r\nimport {pricingIsLocked} from \"../../../lookNavigation/lookNavigationFunctions\";\r\n\r\nconst GroheFeatureQuantity = (props) => {\r\n const {intl, isMobile, disabled, groheActiveFeatureQuantity, setGroheActiveFeatureQuantity, lookActiveFeature, feature,\r\n hideTitle, isWizard, fabricatorData} = props;\r\n const MAX = 99999;\r\n const MIN = isWizard ? 0 : 1;\r\n\r\n const allowDecimals = isWizard;\r\n\r\n const updateQuantity = (quan) => {\r\n setGroheActiveFeatureQuantity(quan);\r\n };\r\n\r\n const handleInputChange = (e, fromButton = \"\") => {\r\n let value = \"\" + e.target.value;\r\n\r\n if (value.includes(\".\")) {\r\n if (!allowDecimals) {\r\n return false\r\n }\r\n if (value.split(\".\")[1].length > 3) {\r\n value = +value.substring(0, value.length - 1); //round to 3 decimals\r\n }\r\n }\r\n\r\n const featureLabel = Analytics.getSkuForAnalytics(feature || lookActiveFeature);\r\n const analyticsAdjust = fromButton ? fromButton + \"-\" + value : \"input-\" + value;\r\n Analytics.sendClickEvent(`${PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureQuantityChange + featureLabel}-${analyticsAdjust}`);\r\n\r\n value = +value;\r\n\r\n if (value <= MIN) {\r\n value = MIN;\r\n } else if (value > MAX) {\r\n value = MAX;\r\n }\r\n\r\n updateQuantity(value);\r\n };\r\n\r\n const handleOnKeyDown = (event) => {\r\n if (event.key==='.' && !allowDecimals) {\r\n event.preventDefault();\r\n return false\r\n }\r\n };\r\n\r\n const {isLixil} = pricingIsLocked();\r\n\r\n return (\r\n
    \r\n
    \r\n {hideTitle ? null : (\r\n
    \r\n {isLixil\r\n ? \r\n : getFeatureUnit(feature || lookActiveFeature, intl, fabricatorData, groheActiveFeatureQuantity)}\r\n
    \r\n )}\r\n
    \r\n {\r\n handleInputChange({target: {value: groheActiveFeatureQuantity - 1}}, \"minus\")\r\n }}\r\n disabled={disabled}\r\n className={\"look-icon grohe-look__icon--small\"\r\n + (isMobile || !IS_PRODUCT_JOURNEY ? \" look-icon--tiny look-icon--semi\" : \" look-icon--small\")}>\r\n \r\n \r\n \r\n {\r\n handleInputChange({target: {value: groheActiveFeatureQuantity + 1}}, \"plus\")\r\n }}\r\n disabled={disabled}\r\n className={\"look-icon grohe-look__icon--small\"\r\n + (isMobile || !IS_PRODUCT_JOURNEY ? \" look-icon--tiny look-icon--semi\" : \" look-icon--small\")}>\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n )\r\n};\r\n\r\nGroheFeatureQuantity.propTypes = {\r\n disabled: PropTypes.bool,\r\n hideTitle: PropTypes.bool,\r\n isWizard: PropTypes.bool,\r\n feature: PropTypes.shape(featureInterface)\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {isMobile} = store.serverState;\r\n const {groheActiveFeatureQuantity} = store.groheState;\r\n const {lookActiveFeature} = store.lookState;\r\n const fabricatorData = store.fabricatorState;\r\n\r\n return {\r\n isMobile,\r\n groheActiveFeatureQuantity,\r\n lookActiveFeature,\r\n fabricatorData,\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setGroheActiveFeatureQuantity\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(GroheFeatureQuantity)\r\n)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport Button from \"@mui/material/Button\";\r\nimport InfoIcon from \"@mui/icons-material/Info\";\r\n\r\nimport {setLookActiveCategory, setLookMoreInfoOpened, setLookOverlayOpened} from \"../../../../../actions/lookFunctions\";\r\nimport {LOOK_FEATURE_CONTENT, LOOK_OVERLAYS} from \"../../../core/constants\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS, PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport {getAvailableFeatureContent} from \"../../../lookNavigation/lookFunctions2\";\r\n\r\nconst GroheFeatureMoreInfoButton = (props) => {\r\n\r\n const {featureIsLocked, setLookMoreInfoOpened, moreInfoOpened, moreInfoContent, lookActiveCategory, lookActiveFeature,\r\n setLookOverlayOpened} = props;\r\n\r\n const moreInfoClick = () => {\r\n if (IS_PRODUCT_JOURNEY) {\r\n Analytics.sendClickEvent(moreInfoOpened\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureMoreInfoClose\r\n : PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureMoreInfoOpen\r\n );\r\n } else {\r\n Analytics.sendClickEvent(moreInfoOpened\r\n ? LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeatureMoreInfoClose\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeatureMoreInfoOpen\r\n );\r\n }\r\n if (featureIsLocked) {\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture);\r\n return false\r\n }\r\n const moreInfoType = moreInfoOpened && (moreInfoContent === LOOK_FEATURE_CONTENT.info)\r\n ? \"\"\r\n : lookActiveCategory && !IS_PRODUCT_JOURNEY ? \"select\" : \"main\";\r\n //setLookActiveCategory(\"\");\r\n setLookMoreInfoOpened(moreInfoType, LOOK_FEATURE_CONTENT.info);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {moreInfoOpened, moreInfoContent} = store.lookState;\r\n const {lookActiveCategory, lookActiveFeature} = store.lookState;\r\n return {\r\n moreInfoOpened,\r\n moreInfoContent,\r\n lookActiveCategory,\r\n lookActiveFeature,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookActiveCategory,\r\n setLookMoreInfoOpened,\r\n setLookOverlayOpened,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(GroheFeatureMoreInfoButton)\r\n","import React from \"react\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport Button from \"@mui/material/Button\";\r\nimport ChevronLeftIcon from \"@mui/icons-material/ChevronLeft\";\r\n\r\nconst GroheCartBackButton = (props) => {\r\n const {backButtonClick} = props;\r\n return (\r\n \r\n )\r\n};\r\n\r\nGroheCartBackButton.propTypes = {\r\n backButtonClick: PropTypes.func.isRequired\r\n}\r\n\r\nexport default GroheCartBackButton\r\n","import React, {Fragment} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport invert from \"lodash/invert\";\r\n\r\nimport {loaderEnable} from \"../ui/loaderView\";\r\nimport {\r\n toggleUserPopup, setCanvasId, setLayoutDataParts, setDefaultSelectionGroup, loadFilters, setCameFromPage,\r\n toggleBathroomVisualizerOpen, toggleSelectionFeatureInfo, changeMessageBoxState, addVisualizersLoaded\r\n} from \"../../actions/actionFunctions\";\r\n// import './assets/css/styles.css';\r\nimport {\r\n getBathroomVisualizerData,\r\n getBvGroups,\r\n getQtCategories,\r\n getNavigationButtons\r\n} from \"../../api/server-api\";\r\nimport ImageCanvasCommon from \"../visComponents/imageCanvasCommon\";\r\nimport {Layout} from \"./core/layout\";\r\nimport DesktopNavigation from \"./navigation/desktopNavigation\";\r\nimport MobileNavigation from \"./navigation/mobileNavigation\";\r\n// import MobileRotateButton from './common/mobileRotateButton';\r\nimport MainButtons from \"../common/mainButtons\";\r\nimport DemoPoints from \"../common/demoPoints/demoPoints\";\r\nimport MessageBox from \"../popups/messageBox\";\r\n\r\nimport Visualizer from \"../visComponents/visualizer\";\r\nimport VisualizerTutorial from \"../tutorials/visualizerTutorial\";\r\nimport {LayoutType} from \"./core/constants\";\r\nimport {showVisualizerTutorial} from \"../../actions/tutorialFunctions\";\r\nimport Copyright from \"../ui/copyright\";\r\nimport {IS_QKB_UI} from \"../../config\";\r\n\r\nexport const layout = new Layout();\r\n\r\nclass BathroomVisualizer extends Visualizer {\r\n\r\n static displayName = 'BathRoom visualizer';\r\n\r\n constructor(props) {\r\n super(props);\r\n this.layout = layout;\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.visualizersLoaded.includes(this.layout.visualizerType)) {\r\n this.setSubscribers();\r\n return false\r\n }\r\n loaderEnable();\r\n Promise.all([\r\n getBathroomVisualizerData(),\r\n getQtCategories(this.layout.getCurrentLayoutAbbreviation())\r\n ]).then(baseResponse => {\r\n Promise.all([\r\n Promise.resolve(baseResponse[0]),\r\n getBvGroups(),\r\n Promise.resolve(baseResponse[1])\r\n ])\r\n .then((allResponse) => {\r\n const mainResponse = allResponse[0];\r\n const bvGroupsResponse = allResponse[1].data;\r\n const qtCategories = allResponse[2];\r\n this.layout.loadNewFeatures(mainResponse); // 1) set default (placeholders)\r\n this.layout.setGroupsItemsCount(bvGroupsResponse); // should be loaded before & after all features are received\r\n return this.setVisualizerInfo(mainResponse, bvGroupsResponse, qtCategories, invert(LayoutType));\r\n })\r\n .then(this.checkShareUrl)\r\n .then(this.onBvLoad)\r\n .then(this.finishLoading);\r\n });\r\n\r\n this.setSubscribers();\r\n getNavigationButtons();\r\n }\r\n\r\n render() {\r\n\r\n if (!IS_QKB_UI) {\r\n return null\r\n }\r\n\r\n const showPlaceHolders = document.bvConfig ? document.bvConfig.showPlaceholders : false;\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const layers = this.layout.getLayers(showPlaceHolders);\r\n const layoutType = this.layout.getCurrentLayoutName();\r\n const isMobile = this.props.windowWidth < 991;\r\n const showOtherLayouts =\r\n (document.kvConfig.visualizerType === \"Bathroom\" || document.kvConfig.visualizerType === \"BV\")\r\n ? fabricatorSettings && (fabricatorSettings.showSmallDesignForClients\r\n || (fabricatorSettings.showSmallDesignFromDashboard && document.kvConfig.isBackend))\r\n : true;\r\n const showTutorial = this.checkToShowTutorial() && showOtherLayouts;\r\n\r\n return (\r\n
    \r\n
    \r\n {this.props.bvOpened || this.props.bvVisited ? (\r\n \r\n this.imageCanvas = node}\r\n layoutType={layoutType}\r\n layout={this.layout}\r\n width={this.props.canvasDimensions.width}\r\n height={this.props.canvasDimensions.height}\r\n useMouseHovering={this.props.useMouseHovering}\r\n useTouchZoom={this.props.useTouchZoom}\r\n />\r\n \r\n \r\n ) : null}\r\n \r\n {!this.state.demoPointClicked && this.props.canvasId ? (\r\n \r\n ) : null}\r\n
    \r\n {(this.layout.initialized && this.props.bvVisited) ? ( // keep navigation opened if someone got to QT and back\r\n isMobile ? (\r\n \r\n ) : (\r\n this.navBar = node}\r\n refreshCB={this.handleRefresh}\r\n setHoveredLayer={this.setHoveredLayer}\r\n canvasId={this.state.canvasId}\r\n renderGreenLayerByZindex={this.renderGreenLayerByZindex}\r\n toggleUserPopup={this.props.toggleUserPopup}\r\n changeMessageBoxState={this.changeMessageBoxState}\r\n setActiveFeature={this.setActiveFeature}\r\n activeFeature={this.state.activeFeature}\r\n fabricatorSettings={fabricatorSettings}\r\n setDemoPointClicked={this.setDemoPointClicked}\r\n />\r\n )\r\n ) : null}\r\n {/**/}\r\n {this.props.cookieAccepted ? : null}\r\n {showTutorial ? : null}\r\n
    \r\n )\r\n }\r\n}\r\nconst mapStateToProps = (store) => {\r\n const {cookieAccepted, windowWidth, visualizersLoaded} = store.serverState;\r\n const {bvOpened, bvVisited, canvasId, showRestorePopup, canvasDimensions, canvasCount} = store.bathroomVisualizerState;\r\n const {mobileNav, desktopNavigationOpened, activeNavigationParentName, activeNavigationChildName} = store.navigationState;\r\n const {isPhoneNumberValidated, userIsLoggedIn} = store.userState;\r\n const {visualizerTutorialIsOpened, visualizerTutorialFinished} = store.tutorialState;\r\n const {initialFlowRoomLayout, initialFlowRoom, initialFlowStep} = store.initialFlowState;\r\n return {\r\n bvOpened,\r\n bvVisited,\r\n mobileNav,\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n windowWidth,\r\n canvasId,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n desktopNavigationOpened,\r\n activeNavigationParentName,\r\n activeNavigationChildName,\r\n showRestorePopup,\r\n visualizerTutorialIsOpened,\r\n visualizerTutorialFinished,\r\n initialFlowRoomLayout,\r\n initialFlowRoom,\r\n initialFlowStep,\r\n cookieAccepted,\r\n canvasDimensions,\r\n visualizersLoaded,\r\n canvasCount,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n setCameFromPage,\r\n toggleBathroomVisualizerOpen,\r\n setDefaultSelectionGroup,\r\n setLayoutDataParts,\r\n toggleUserPopup,\r\n setCanvasId,\r\n loadFilters,\r\n toggleSelectionFeatureInfo,\r\n changeMessageBoxState,\r\n addVisualizersLoaded,\r\n showVisualizerTutorial\r\n})(BathroomVisualizer);\r\n","import React from \"react\";\r\nimport {Page, Text, Document} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport getPrintColors from \"./printDocumentStyles\";\r\nimport PrintDocumentHeader from \"./printDocumentHeader\";\r\nimport PrintDocumentInfo from \"./printDocumentInfo\";\r\nimport PrintDocumentBody from \"./printDocumentBody\";\r\nimport PrintDocumentTotal from \"./printDocumentTotal\";\r\nimport PrintDocumentSignature from \"./printDocumentSignature\";\r\nimport PrintDocumentDiscountsList from \"./printDocumentDiscountsList\";\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\nimport {TRANSLATES} from \"../../../translatesProvider\";\r\nimport PrintDocumentDisclaimer from \"./printDocumentDisclaimer\";\r\nimport PrintDocumentAsCentralText from \"./printDocumentAsCentralText\";\r\n\r\n// import PropTypes from \"prop-types\";\r\n// import {FormattedMessage} from \"react-intl\";\r\n\r\nconst PrintDocument = (props) => {\r\n const {fabricatorData, userInfo, quotes, cartItems, priceWorksheetState, jobId, assignQuotePopupCustomer,\r\n employeeSelected, locale, filterGroups, activeTheme, printLogo, wizardState, sqftSlabState, cartItemsThumbnails,\r\n printState, onRender, isContractSign} = props;\r\n\r\n const styles = getPrintColors(activeTheme);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {fabricatorData.isAmericanStandard ? : null}\r\n \r\n {priceWorksheetState.discountSections.length ? (\r\n \r\n ) : null}\r\n \r\n \r\n \r\n (\r\n `${pageNumber} / ${totalPages}`\r\n )} fixed />\r\n \r\n \r\n \r\n )\r\n};\r\n\r\nPrintDocument.propTypes = {\r\n quotes: PropTypes.array.isRequired,\r\n cartItems: PropTypes.array.isRequired,\r\n priceWorksheetState: PropTypes.object.isRequired,\r\n userInfo: PropTypes.object.isRequired,\r\n fabricatorData: PropTypes.object.isRequired,\r\n jobId: PropTypes.number,\r\n assignQuotePopupCustomer: PropTypes.object,\r\n employeeSelected: PropTypes.object,\r\n locale: PropTypes.string.isRequired,\r\n activeTheme: PropTypes.string,\r\n printLogo: PropTypes.string,\r\n wizardState: PropTypes.object.isRequired,\r\n isContractSign: PropTypes.bool,\r\n printState: PropTypes.object,\r\n};\r\n\r\nexport default PrintDocument\r\n","import React from \"react\";\r\nimport UiIcon from \"../../ui/icons/uiIcon\";\r\n\r\nexport const showWizardStepDoneCheckMark = (wizardSelectedValue, featureGroup, cartItems, activeQuoteIndex, stepGroups) => {\r\n return stepGroups.some(stepGroup => {\r\n return (wizardSelectedValue && wizardSelectedValue.wizardGroup && (stepGroup.id === wizardSelectedValue.wizardGroup.id))\r\n || (featureGroup && cartItems.some(cartItem => {\r\n return stepGroup.id === cartItem.fromWizardGroupId\r\n && (cartItem.partId === featureGroup.partId)\r\n && (cartItem.currentQuote === activeQuoteIndex)\r\n && !cartItem.cartFeature.dbFeature.autoAddToCart\r\n }))\r\n })\r\n}\r\n\r\nconst MaterialsWizardDoneCheckMark = () => {\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n};\r\nexport default MaterialsWizardDoneCheckMark\r\n","import _ from 'lodash';\r\n\r\nimport {updateManualCalculateRows} from \"../../../actions/sqftManualCalculationFunctions\";\r\nimport {MANUAL_CALCULATION_ROW_TYPES} from \"../constants\";\r\nimport store from \"../../../store\";\r\nimport {DEFAULT_MANUAL_CALC_ROW} from \"../../../reducers/sqftManualCalculationReducer\";\r\nimport {getEdgeFeatures} from \"./shapeHelper\";\r\nimport workspace from \"../components/canvas/core/workspace\";\r\n\r\nexport const manualCalculateImport = (data) => {\r\n console.log(\"import manualcalc data\", data);\r\n let manualCalculationRows = prepareData(data);\r\n store.dispatch(updateManualCalculateRows(manualCalculationRows));\r\n}\r\n\r\nconst prepareData = (data) => {\r\n return {\r\n [MANUAL_CALCULATION_ROW_TYPES.countertopRows] : prepareCountertopRows(data.countertops),\r\n [MANUAL_CALCULATION_ROW_TYPES.backsplashRows] : prepareBacksplashRows(data.backsplashes),\r\n [MANUAL_CALCULATION_ROW_TYPES.edgeRows] : prepareEdgeRows(data.edges),\r\n }\r\n}\r\n\r\nconst prepareCountertopRows = (dataCountertops) => {\r\n let preparedData = [];\r\n dataCountertops.forEach((dataCountertop, index) => {\r\n let row = _.clone(DEFAULT_MANUAL_CALC_ROW);\r\n row.id = dataCountertop.id ? dataCountertop.id : index;\r\n row.length = dataCountertop.inputLength;\r\n row.width = dataCountertop.inputWidth;\r\n preparedData.push(row);\r\n })\r\n\r\n return preparedData;\r\n}\r\n\r\nconst prepareBacksplashRows = (dataBacksplashes) => {\r\n let preparedData = [];\r\n dataBacksplashes.forEach((dataBacksplash, index) => {\r\n let row = _.clone(DEFAULT_MANUAL_CALC_ROW);\r\n row.id = dataBacksplash.id ? dataBacksplash.id : index;\r\n row.length = dataBacksplash.inputLength;\r\n row.height = dataBacksplash.inputHeight;\r\n preparedData.push(row);\r\n })\r\n\r\n return preparedData;\r\n}\r\n\r\nconst prepareEdgeRows = (dataEdges) => {\r\n let preparedData = [];\r\n dataEdges.forEach((dataEdge, index) => {\r\n const navItems = getEdgeFeatures();\r\n const navItem = navItems.find(edge => edge.part.dbFeature.id === dataEdge.featureId);\r\n let row = _.clone(DEFAULT_MANUAL_CALC_ROW);\r\n row.id = dataEdge.id ? dataEdge.id : index;\r\n row.length = dataEdge.inputLength;\r\n row.height = dataEdge.inputHeight;\r\n row.selectedFeature = navItem.part;\r\n preparedData.push(row);\r\n })\r\n\r\n return preparedData;\r\n}\r\n\r\nexport const clearManualCalcData = () => {\r\n for (const manualCalculationRowType in MANUAL_CALCULATION_ROW_TYPES) {\r\n store.dispatch(updateManualCalculateRows({[manualCalculationRowType]: []}));\r\n }\r\n}\r\n\r\nexport const getGroupedShapesByColor = () => {\r\n const shapes = workspace.getShapes();\r\n return shapes.flatMap(shp => {\r\n if (shp.getColorSet) {\r\n const colorSet = shp.getColorSet();\r\n return colorSet ? colorSet : [];\r\n }\r\n return [];\r\n })\r\n}\r\n\r\nexport const getFeatureGlb = (feature) => {\r\n const threeDSrc = feature.dbFeature.thirdPartyAR3DUrls.map(src => {\r\n src = src.replace(\"s3.amazonaws.com/qc-lixil-3dfiles\", \"dv84u4f1bblk2.cloudfront.net\");\r\n return src\r\n })\r\n return threeDSrc.find(url => url.includes(\".glb\"));\r\n}\r\n","import store from \"./../../../store\";\r\nimport {onMeasureUnitChange} from \"./sqftMeasureUnitsHelper\";\r\nimport sqftConfig from \"../components/canvas/store/sqftConfig\";\r\nimport {setSqftMeasureUnit} from \"../../../actions/sqftFunctions\";\r\n\r\nexport const setMeasureUnit = (value) => {\r\n sqftConfig.measureUnit = value\r\n store.dispatch(setSqftMeasureUnit(value));\r\n onMeasureUnitChange();\r\n}\r\n","import sqftShapeManager from \"../store/sqftShapeManager\";\r\nimport workspace from \"./workspace\";\r\nimport config from \"../store/sqftConfig\";\r\nimport $ from \"jquery\";\r\nimport sqftShape from \"./shapes/sqftShape\";\r\nimport {getMidPoint} from \"../../../helpers/sqftHelper\";\r\nimport slabWorkspace from \"./slab/slabWorkspace\";\r\n\r\nconst workspaceZoom = function () {\r\n this.zoomToFeature = (sqftFeature) => {\r\n let shape = sqftShapeManager.getShapeById(sqftFeature.sqftId);\r\n if (shape && shape.part === 'line') {\r\n const line = workspace.getLineById(shape.attachedToId);\r\n this.zoomToLine(line);\r\n\r\n return;\r\n }\r\n\r\n if (!(shape instanceof(sqftShape))) {\r\n return\r\n }\r\n\r\n this.zoomToShape(shape);\r\n }\r\n\r\n this.zoomToLine = (line) => {\r\n let shape = line.getParent();\r\n let shapePos = shape.getPosition();\r\n const scale = config.scale;\r\n const canvas = workspace.getCanvas();\r\n const sqftPoup = $(\".sqft-popupv2\");\r\n const popUpWidth = sqftPoup[0] ? sqftPoup[0].offsetWidth : 0;\r\n\r\n const midPoint = getMidPoint(line.from, line.to);\r\n\r\n let newWorkspacePos = {\r\n x: (shapePos.x + midPoint.x) * scale - (canvas.width - popUpWidth) / 2,\r\n y: (shapePos.y + midPoint.y) * scale - canvas.height / 2,\r\n }\r\n\r\n line.blink.setHighlighting(true);\r\n this.zoomTo(newWorkspacePos);\r\n }\r\n\r\n this.zoomToShape = (shape, isHalfScreen = false) => {\r\n let shapePos = shape.getPosition();\r\n let shapeMinMax = sqftShapeManager.getMinMax(shape.getLines());\r\n const scale = config.scale;\r\n const canvas = workspace.getCanvas();\r\n const sqftPoup = $(\".sqft-popupv2\");\r\n const popUpWidth = sqftPoup[0] ? sqftPoup[0].offsetWidth : 0;\r\n\r\n let newWorkspacePos = {\r\n x: shapePos.x * scale - (canvas.width - popUpWidth) / 2 + shapeMinMax.width / 2 * scale,\r\n y: shapePos.y * scale - canvas.height / 2 + shapeMinMax.height / 2 * scale,\r\n }\r\n if (isHalfScreen) {\r\n newWorkspacePos.x = newWorkspacePos.x + canvas.width / 4;\r\n }\r\n\r\n this.zoomTo(newWorkspacePos);\r\n shape.shapeRender.blink.setHighlighting(true);\r\n }\r\n\r\n this.zoomToSlabShape = (shape, isHalfScreen = false) => {\r\n let shapePos = shape.getPosition();\r\n let workspacePos = workspace.getPosition();\r\n let shapeMinMax = sqftShapeManager.getMinMax(shape.getLines());\r\n const scale = config.scale;\r\n const canvas = workspace.getCanvas();\r\n const sqftPoup = $(\".sqft-popupv2\");\r\n const popUpWidth = sqftPoup[0] ? sqftPoup[0].offsetWidth : 0;\r\n\r\n let newWorkspacePos = {\r\n x: shapePos.x * scale - (canvas.width - popUpWidth) / 2 + shapeMinMax.width / 2 * scale - workspacePos.x,\r\n y: shapePos.y * scale - canvas.height / 2 + shapeMinMax.height / 2 * scale - workspacePos.y,\r\n }\r\n if (isHalfScreen) {\r\n newWorkspacePos.x = newWorkspacePos.x + canvas.width / 4;\r\n }\r\n\r\n this.zoomToInSlab(newWorkspacePos);\r\n }\r\n\r\n this.zoomTo = (newWorkspacePos) => {\r\n let workspacePos = workspace.getPosition();\r\n let isXIncrementUp = newWorkspacePos.x >= workspacePos.x;\r\n let isYIncrementUp = newWorkspacePos.y >= workspacePos.y;\r\n\r\n let updateWorkspacePos = () => {\r\n if (Math.ceil(workspacePos.x) === Math.ceil(newWorkspacePos.x)\r\n && Math.ceil( workspacePos.y) === Math.ceil(newWorkspacePos.y)\r\n ) {\r\n clearInterval(refreshIntervalId);\r\n }\r\n\r\n let incrementX = Math.abs((Math.abs(newWorkspacePos.x) + Math.abs(workspacePos.x)) / newWorkspacePos.x * config.zoomSpeed);\r\n let incrementY = Math.abs((Math.abs(newWorkspacePos.y) + Math.abs(workspacePos.y)) / newWorkspacePos.y * config.zoomSpeed);\r\n\r\n workspacePos = {\r\n x: isXIncrementUp\r\n ? workspacePos.x >= newWorkspacePos.x ? newWorkspacePos.x : workspacePos.x + incrementX\r\n : workspacePos.x <= newWorkspacePos.x ? newWorkspacePos.x : workspacePos.x - incrementX,\r\n y: isYIncrementUp\r\n ? workspacePos.y >= newWorkspacePos.y ? newWorkspacePos.y : workspacePos.y + incrementY\r\n : workspacePos.y <= newWorkspacePos.y ? newWorkspacePos.y : workspacePos.y - incrementY,\r\n }\r\n\r\n workspace.setPosition(workspacePos);\r\n };\r\n let refreshIntervalId = setInterval(updateWorkspacePos, 1);\r\n }\r\n\r\n this.zoomToInSlab = (newWorkspacePos) => {\r\n let workspacePos = slabWorkspace.getPos();\r\n let isXIncrementUp = newWorkspacePos.x >= workspacePos.x;\r\n let isYIncrementUp = newWorkspacePos.y >= workspacePos.y;\r\n\r\n let updateWorkspacePos = () => {\r\n if (Math.ceil(workspacePos.x) === Math.ceil(newWorkspacePos.x)\r\n && Math.ceil( workspacePos.y) === Math.ceil(newWorkspacePos.y)\r\n ) {\r\n clearInterval(refreshIntervalId);\r\n }\r\n\r\n let incrementX = Math.abs((Math.abs(newWorkspacePos.x) + Math.abs(workspacePos.x)) / newWorkspacePos.x * config.zoomSpeed);\r\n let incrementY = Math.abs((Math.abs(newWorkspacePos.y) + Math.abs(workspacePos.y)) / newWorkspacePos.y * config.zoomSpeed);\r\n\r\n workspacePos = {\r\n x: isXIncrementUp\r\n ? workspacePos.x >= newWorkspacePos.x ? newWorkspacePos.x : workspacePos.x + incrementX\r\n : workspacePos.x <= newWorkspacePos.x ? newWorkspacePos.x : workspacePos.x - incrementX,\r\n y: isYIncrementUp\r\n ? workspacePos.y >= newWorkspacePos.y ? newWorkspacePos.y : workspacePos.y + incrementY\r\n : workspacePos.y <= newWorkspacePos.y ? newWorkspacePos.y : workspacePos.y - incrementY,\r\n }\r\n\r\n slabWorkspace.setPos(workspacePos);\r\n };\r\n let refreshIntervalId = setInterval(updateWorkspacePos, 1);\r\n }\r\n};\r\n\r\nexport default new workspaceZoom\r\n","export function similarity(s1, s2) {\r\n let longer = s1;\r\n let shorter = s2;\r\n if (s1.length < s2.length) {\r\n longer = s2;\r\n shorter = s1;\r\n }\r\n const longerLength = longer.length;\r\n if (longerLength === 0) {\r\n return 1.0;\r\n }\r\n return (longerLength - editDistance(longer, shorter)) / parseFloat(longerLength);\r\n}\r\n\r\n/*\r\n * Track the highest number of matching words\r\n */\r\nexport function similarityByWords(arrayToSearch, nameSearch) {\r\n let highestMatchCount = 0;\r\n let phraseBySimilarity = null;\r\n\r\n arrayToSearch.forEach(url => {\r\n const urlName = url.toLowerCase().split('/').pop().split('.')[0];\r\n const searchWords = nameSearch.toLowerCase().split(' ');\r\n const urlWords = urlName.split('-').join(' ').split(' '); // Adjusted splitting logic for your URLs\r\n\r\n let matchCount = searchWords.reduce((count, word) => {\r\n return count + (urlWords.includes(word) ? 1 : 0);\r\n }, 0);\r\n\r\n //console.log(\"urlName\", urlName);\r\n //console.log(\"matchCount\", matchCount);\r\n if (matchCount > highestMatchCount) {\r\n phraseBySimilarity = url;\r\n highestMatchCount = matchCount;\r\n }\r\n });\r\n\r\n return phraseBySimilarity\r\n}\r\n\r\nfunction editDistance(s1, s2) {\r\n s1 = s1.toLowerCase();\r\n s2 = s2.toLowerCase();\r\n\r\n const costs = [];\r\n for (let i = 0; i <= s1.length; i++) {\r\n let lastValue = i;\r\n for (let j = 0; j <= s2.length; j++) {\r\n if (i === 0) costs[j] = j;\r\n else {\r\n if (j > 0) {\r\n let newValue = costs[j - 1];\r\n if (s1.charAt(i - 1) !== s2.charAt(j - 1)) newValue = Math.min(Math.min(newValue, lastValue), costs[j]) + 1;\r\n costs[j - 1] = lastValue;\r\n lastValue = newValue;\r\n }\r\n }\r\n }\r\n if (i > 0) costs[s2.length] = lastValue;\r\n }\r\n return costs[s2.length];\r\n}\r\n\r\nexport const isSqftPassedDataEmpty = (sqftPassedData) => {\r\n if (sqftPassedData && sqftPassedData.manualCalculate === false) {\r\n return sqftPassedData.countertops.length === 0\r\n } else if (sqftPassedData && sqftPassedData.manualCalculate === true) {\r\n return sqftPassedData.countertops.length === 0\r\n || sqftPassedData.backsplashes.length === 0\r\n || sqftPassedData.edges.length === 0\r\n }\r\n return false\r\n}\r\n\r\n// Function to group URLs by version and sort them in descending order by version number\r\nexport function groupUrlsByVersion(urls) {\r\n // Create an array to store versioned URLs\r\n const versionedUrls = [];\r\n\r\n urls.forEach(url => {\r\n // Extract the version number from the URL (if present)\r\n const versionMatch = url.match(/ar-composer(?:-v(\\d+))?/);\r\n // If no version is present, default to version 1\r\n const version = versionMatch && versionMatch[1] ? parseInt(versionMatch[1], 10) : 1;\r\n\r\n // Add the version and URL to the array as an object\r\n versionedUrls.push({ version, url });\r\n });\r\n\r\n // Sort the array by version in descending order\r\n versionedUrls.sort((a, b) => b.version - a.version);\r\n\r\n // Return an array of sorted URLs based on version\r\n return versionedUrls.map(item => item.url);\r\n}\r\n","import eventManager from \"../../store/sqftEventManager\";\r\nimport Config from \"../../store/sqftConfig\";\r\nimport workspace from \"../workspace\";\r\nimport Cursor from \"./cursor\";\r\nimport MiteredOverlay from \"../shapes/overlays/mitered\";\r\nimport {\r\n inchesToMm,\r\n measureDistanceToInches, mm2ToM2,\r\n mmToInches, sqInchesToSqFoot,\r\n} from \"../../../../helpers/sqftHelper\";\r\nimport {iconPlusBlue} from \"../../../../assetsSQFT\";\r\nimport store from \"../../../../../../store\";\r\nimport {updateSQFTCalculations} from \"../../../../../../actions/sqftFunctions\";\r\nimport {\r\n EDGE_LABELS, MITERED_OVERLAY_TYPE,\r\n RESOURCE_ATTACHED_TO_TYPE, RESOURCE_TYPE,\r\n SIDEBAR_BUTTONS_MENU,\r\n SIDEBAR_HIDDEN_BUTTONS,\r\n} from \"../../../../constants\";\r\nimport {setSQFTMenuOpened, setSQFTMenuOpenedLock} from \"../../../../../../actions/sqftMenuFunctions\";\r\nimport {attachResource} from \"./resourseCanas\";\r\nimport {getEdgeFeatures} from \"../../../../helpers/shapeHelper\";\r\nimport {addResource, changeResource, deleteResource} from \"../../../../../../actions/sqftResourceFunctions\";\r\nimport {getUnderlaymentFeature} from \"../../../../helpers/sqftHelperUi\";\r\nimport sqftConfig from \"../../store/sqftConfig\";\r\n\r\nexport default class UnderlaymentController {\r\n cursor;\r\n design = {\r\n imgSrc: iconPlusBlue\r\n };\r\n miteredSections = [];\r\n\r\n createCursor = () => {\r\n this.cursor = new Cursor();\r\n this.cursor.setCursorImage(this.design.imgSrc);\r\n eventManager.setCursor('mitered-select', this, true);\r\n };\r\n\r\n registerEvents = () => {\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_UP,\r\n this.onMouseUp,\r\n this,\r\n eventManager.priorities.OVERALL\r\n );\r\n };\r\n\r\n onMouseUp = (mousePos) => {\r\n void mousePos;\r\n let hoverShape = workspace.getHoverShape();\r\n\r\n if (hoverShape && hoverShape.getHoverSegment) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (activeButton !== SIDEBAR_HIDDEN_BUTTONS.toolUnderlayment) {\r\n return\r\n }\r\n\r\n let seg = hoverShape.getHoverSegment();\r\n if (seg && seg.isWithUnderlayment() && reduxState.sqftMenuState.activeButton === SIDEBAR_BUTTONS_MENU.delete) {\r\n seg.deleteMitered();\r\n } else if(seg && seg.isWithUnderlayment()) {\r\n void 0;\r\n } else if (seg && !seg.isWithUnderlayment() && !seg.isWithBumpout() && this.cursor.cursorImage) {\r\n attachResource(seg, null, RESOURCE_ATTACHED_TO_TYPE.underlayment, null, null,'', 0, null, null, false);\r\n } else {\r\n // Menu.openMenu();\r\n // deregisterEvents();\r\n // elements.designDefault.click();\r\n }\r\n }\r\n\r\n //todo\r\n this.cursor.checkForRestoreCursor();\r\n };\r\n\r\n addSection = (miteredSection) => {\r\n const reduxState = store.getState();\r\n store.dispatch(addResource(RESOURCE_TYPE.underlaymentSections, miteredSection));\r\n store.dispatch(setSQFTMenuOpened(SIDEBAR_HIDDEN_BUTTONS.toolUnderlayment));\r\n const updateCalculations = reduxState.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n };\r\n\r\n updateSection = (miteredSection) => {\r\n store.dispatch(changeResource(RESOURCE_TYPE.underlaymentSections, miteredSection));\r\n store.dispatch(setSQFTMenuOpened(SIDEBAR_HIDDEN_BUTTONS.toolUnderlayment));\r\n store.dispatch(setSQFTMenuOpenedLock(true));\r\n\r\n const reduxState = store.getState();\r\n const updateCalculations = reduxState.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n }\r\n\r\n deleteSection = (miteredOverlay) => {\r\n store.dispatch(deleteResource(RESOURCE_TYPE.underlaymentSections, miteredOverlay.id));\r\n };\r\n\r\n createUnderlaymentOverlay = (line) => {\r\n const reduxState = store.getState();\r\n const underlaymentSections = reduxState.sqftResourceState.underlaymentSections;\r\n const underlaymentOverlay = new MiteredOverlay(line, underlaymentSections.length + 1, MITERED_OVERLAY_TYPE.underlayment);\r\n const feature = getUnderlaymentFeature();\r\n if (feature) {\r\n underlaymentOverlay.setFeatureId(feature.part.dbFeature.id)\r\n }\r\n\r\n return underlaymentOverlay\r\n };\r\n\r\n destroy = (protect, revertBackAfterMouseUp) => {\r\n if (revertBackAfterMouseUp) {\r\n eventManager.removeEvent(self, eventManager.events.RENDER); //remove render only, but wait for mouse up to set cursor again\r\n this.isWaitingToRestoreCursor = true;\r\n } else {\r\n this.deregisterEvents();\r\n }\r\n //this.hide();\r\n };\r\n\r\n deregisterEvents() {\r\n eventManager.resetCursor(this);\r\n eventManager.removeEvent(this);\r\n this.cursor ? this.cursor.deregisterEvents() : null;\r\n Config.highlight.lines = false;\r\n }\r\n\r\n static getTotalArea = () => {\r\n let miteredSections = workspace.getMiteredSections();\r\n let miteredSectionsArea = 0;\r\n for (let i = 0; i < miteredSections.length; i++) {\r\n miteredSectionsArea += miteredSections[i] ? miteredSections[i].getMiteredToolTotalArea() : null;\r\n }\r\n\r\n return miteredSectionsArea;\r\n };\r\n\r\n onMeasureUnitChange = () => {\r\n let miteredSections = workspace.getMiteredSections();\r\n let miteredSectionsArea = 0;\r\n for (let i = 0; i < miteredSections.length; i++) {\r\n let segments = miteredSections[i].getSegments();\r\n\r\n segments.map((segment) => {\r\n segment.height = Config.measureUnit === \"Metric\"\r\n ? inchesToMm(segment.height)\r\n : mmToInches(segment.height);\r\n if (segment.thickness) {\r\n segment.thickness.value = Config.measureUnit === \"Metric\"\r\n ? inchesToMm(segment.thickness.value)\r\n : mmToInches(segment.thickness.value)\r\n }\r\n });\r\n\r\n miteredSections[i].heightNumberText.value = segments[0].height\r\n }\r\n\r\n return miteredSectionsArea;\r\n };\r\n\r\n getTransformedMeasureUnit = (value) => {\r\n return Config.measureUnit === \"Metric\"\r\n ? measureDistanceToInches(value).millimeters // ? distanceToMillimeters(inchesToMm(segment.length.value))\r\n : value;\r\n };\r\n\r\n getEdgesLength = () => {\r\n let additionalLength = 0;\r\n const lines = workspace.getLines();\r\n for (const line of lines) {\r\n if (line.from.getMiteredFeatureId()) {\r\n additionalLength += this.getEdgeLengthValue();\r\n }\r\n }\r\n\r\n return additionalLength\r\n }\r\n\r\n getEdgeLengthValue = () => {\r\n return Config.measureUnit === \"Imperial\"\r\n ? (2 * 33) / 40\r\n : (2 * 900) / 1000;\r\n }\r\n\r\n getExportedMiteredEdges = () => {\r\n let addedEdges = [];\r\n const lines = workspace.getLines();\r\n for (const line of lines) {\r\n const miteredFeatureId = line.from.getMiteredFeatureId();\r\n if (miteredFeatureId) {\r\n const edgeLengthValue = this.getEdgeLengthValue();\r\n const navItems = getEdgeFeatures();\r\n let edgeFeature = navItems.find(edge => edge.part.dbFeature.id === miteredFeatureId);\r\n\r\n addedEdges.push({\r\n partId: EDGE_LABELS.edge,\r\n type: EDGE_LABELS.edge,\r\n name: workspace.intl.formatMessage({id: edgeFeature.part.dbFeature.sharedFeatureName}),\r\n featureId: miteredFeatureId,\r\n segments: 1,\r\n length: edgeLengthValue,\r\n area: edgeLengthValue\r\n });\r\n }\r\n }\r\n\r\n return addedEdges\r\n }\r\n\r\n exportData = () => {\r\n const reduxState = store.getState();\r\n const underlaymentSections = reduxState.sqftResourceState.underlaymentSections;\r\n\r\n //return {quantity: underlaymentSections.reduce((acc, current) => acc + current.getMiteredToolTotalArea(), 0)};\r\n return {sections: underlaymentSections.map((section) => ({\r\n id: section.id,\r\n qtCatName: section.qtCatName,\r\n featureId: section.featureId,\r\n quantity: sqftConfig.measureUnit === \"Imperial\"\r\n ? Math.ceil10(sqInchesToSqFoot(section.getMiteredToolTotalArea()), -2)\r\n : mm2ToM2(section.getMiteredToolTotalArea())\r\n }))\r\n };\r\n }\r\n}\r\n","import {capitalizeFirstLetters} from \"../../misc/helpers\";\r\nimport {getSelectedFiltersLength} from \"../../misc/filtersFunctions\";\r\n\r\nconst changeMaterialToColorArray = [\"vanity_faucet\", \"paper_holder\", \"robe_hook\", \"towel_bar\", \"towel_ring\",\r\n \"bathtub_body\", \"vanity_console\", \"replacement_tub\", \"bathtub_fixture\", \"vanity_ptrap\", \"vanity_legs\", \"vanity_middle\",\r\n \"toilet\", \"vanity_ws_towel_bar\", \"vanity_washstand\", \"vanity_cabinet\"];\r\n\r\n/**\r\n * updated Names per Lixil requirements\r\n * @param filterGroup {filterGroupInterface}\r\n * @param partId {string}\r\n * @returns {string|null}\r\n */\r\nexport const getHardCodedFilterGroupName = (filterGroup, partId = \"\") => {\r\n switch (filterGroup.name) {\r\n case \"Material\": {\r\n if (changeMaterialToColorArray.includes(partId)) {\r\n return \"Color\"\r\n }\r\n break;\r\n }\r\n case \"GPF_Max\": {\r\n return \"GPF\"\r\n }\r\n case \"LixilProductSubCategory\": {\r\n switch (partId) {\r\n case \"vanity_faucet\":\r\n case \"bathtub_fixture\":\r\n return \"Faucet Type\"\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n return (filterGroup.name || \"\").replace(/_/gi, \" \")\r\n}\r\n\r\n/**\r\n * filters hardcode LX-827 - LX-839 tasks in Jira\r\n * @param filterGroup {filterGroupInterface}\r\n * @param partId {string}\r\n * @returns {boolean}\r\n */\r\nexport const weShouldHideFilterGroup = (filterGroup, partId) => {\r\n switch ((filterGroup.name || \"\").trim()) {\r\n case \"Product_Width\":\r\n case \"LixilProductCategory\":\r\n case \"LixilProductSuperCategory\":\r\n case \"Bath_Accessory_Mount_Type\":\r\n case \"Designer Recommended\":\r\n case \"EA_Each_Weight\":\r\n case \"Small_Parcel_Postable_SAP_YN\":\r\n case \"Volume_SAP\":\r\n case \"Bath_Accessory_No_of_Hooks\":\r\n case \"Bath_Accessory_No_of_Bars\":\r\n case \"Fitting_Mount_Type\":\r\n case \"Fitting_Handle_Type\":\r\n case \"ADA_YN\":\r\n case \"Fitting_Touchless_Touch_On\":\r\n case \"Product_Height\":\r\n case \"Faucet_Type_from_Classification\":\r\n case \"Product_Length\":\r\n case \"Tub_Product_Type\":\r\n case \"Bath_Therapy_Type\":\r\n case \"Drain_Location\":\r\n case \"Hand_Shower_Included_YN\":\r\n case \"Rough_In_Size\":\r\n case \"Toilet_Type_from_Classification\":\r\n case \"Fitting_No_of_Holes_Required\":\r\n return true\r\n case \"Color\": {\r\n return changeMaterialToColorArray.includes(partId);\r\n }\r\n case \"Brand\": {\r\n switch (partId) {\r\n case \"vanity_console\":\r\n case \"vanity_ptrap\":\r\n case \"vanity_cabinet\":\r\n case \"vanity_legs\":\r\n case \"vanity_middle\":\r\n case \"vanity_ws_towel_bar\":\r\n case \"vanity_washstand\":\r\n return true\r\n default:\r\n return false\r\n }\r\n }\r\n case \"Collection\": {\r\n switch (partId) {\r\n case \"vanity_ptrap\":\r\n case \"vanity_legs\":\r\n case \"vanity_middle\":\r\n return true\r\n default:\r\n return false\r\n }\r\n }\r\n case \"Size\":\r\n case \"Manufacturer\": {\r\n switch (partId) {\r\n case \"vanity_cabinet\":\r\n return true\r\n default:\r\n return false\r\n }\r\n }\r\n case \"LixilProductSubCategory\": {\r\n switch (partId) {\r\n case \"vanity_faucet\":\r\n case \"bathtub_fixture\":\r\n return false\r\n default:\r\n return true\r\n }\r\n }\r\n default:\r\n return false\r\n }\r\n}\r\n\r\n/**\r\n * filters hardcode LX-827 - LX-839 tasks in Jira\r\n * @param filterValue {filterValueInterface}\r\n * @returns {boolean}\r\n */\r\nexport const weShouldHideFilterValue = (filterValue) => {\r\n // console.log(\"filterValue\", filterValue);\r\n return (filterValue.id === 10446 && filterValue.value === \"Town Square® S\")\r\n || (filterValue.id === 10415 && filterValue.value === \"Cadet®\")\r\n || (filterValue.id === 10445 && filterValue.value === \"Princeton™\")\r\n || (filterValue.id === 10448 && filterValue.value === \"Colony®\")\r\n || (filterValue.id === 10416 && filterValue.value === \"Eurocube®\")\r\n || (filterValue.id === 10410 && filterValue.value === \"Concetto™\")\r\n || (filterValue.id === 9950 && filterValue.value === \"LINEARE™\")\r\n}\r\n\r\n/**\r\n * filters hardcode LX-827 - LX-839 tasks in Jira\r\n * @param filterGroups {[filterGroupInterface]}\r\n * @param partId {string}\r\n * @param selectedFilters {array}\r\n * @returns {[filterGroupInterface]}\r\n */\r\nexport const getHardCodedFilterGroups = (filterGroups, partId, selectedFilters) => {\r\n return filterGroups\r\n .filter(filterGroup => !weShouldHideFilterGroup(filterGroup, partId))\r\n .map(filterGroup => {\r\n const selectedFiltersLength = getSelectedFiltersLength(filterGroup, selectedFilters);\r\n const filterGroupName = getHardCodedFilterGroupName(filterGroup, partId);\r\n filterGroup.values = filterGroup.values.sort((a, b) => a.id - b.id);\r\n return Object.assign({}, filterGroup, {filterGroupName, selectedFiltersLength})\r\n })\r\n .sort((a, b) => a.id - b.id);\r\n}\r\n\r\n\r\n/**\r\n * updated Names per Lixil requirements\r\n * @param filterValue {filterValueInterface}\r\n * @returns {string}\r\n */\r\nexport const getFixedFilterValueName = (filterValue) => {\r\n switch (filterValue.value) {\r\n // case \"StarLight Chrome\":\r\n // case \"Starlight Chrome\":\r\n // case \"Starlight chrome\":\r\n // return window.location.href.includes(\"grohe\") ? \"Starlight Chrome\" : \"Polished Chrome\"\r\n case \"Grohe\":\r\n case \"grohe\":\r\n return \"GROHE\"\r\n case \"Centerset Bathroom Faucets\":\r\n return \"Centerset\"\r\n case \"Single Hole Bathroom Faucets\":\r\n return \"Single Hole\"\r\n case \"Widespread Bathroom Faucets\":\r\n return \"Widespread\"\r\n case \"Vessel Bathroom Faucets\":\r\n return \"Vessel\"\r\n default:\r\n return capitalizeFirstLetters(filterValue.displayText || filterValue.value || \"\")\r\n .replace(/_/gi, \" \")\r\n }\r\n}\r\n","import React, {Fragment} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport findIndex from 'lodash/findIndex';\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport CheckBox from './../../../common/checkBox';\r\nimport Analytics from './../../../../analytics';\r\nimport {\r\n setExpandedFilters,\r\n setFilterVisible,\r\n setSelectedFilters,\r\n showFilters\r\n} from \"../../../../actions/actionFunctions\";\r\n// import FilterSelection from \"./filterSelection\";\r\nimport FiltersSearch from \"./filtersSearch\";\r\nimport NavigationRequests from \"../navigationRequests\";\r\nimport {getAvailableFilters} from \"../../../../misc/filtersFunctions\";\r\n\r\nconst toggleArrayValue = (array, value) => {\r\n let index = array.indexOf(value);\r\n (index >= 0) ? array.splice(index, 1) : array.push(value);\r\n return array;\r\n};\r\n\r\nexport const toggleFilterArrayValue = (array, {filterId, filterGroupId}) => {\r\n let index = findIndex(array, {filterId});\r\n if (index >= 0) {\r\n array.splice(index, 1);\r\n } else {\r\n array.push({filterId, filterGroupId});\r\n }\r\n return array;\r\n};\r\n\r\nconst arrayHasValue = (array, value) => {\r\n return (array.indexOf(value) >= 0);\r\n};\r\n\r\nclass FiltersBody extends NavigationRequests {\r\n static propTypes = {\r\n id: PropTypes.string.isRequired,\r\n searchText: PropTypes.string.isRequired,\r\n handleSearchInputChange: PropTypes.func.isRequired,\r\n childItem: PropTypes.object\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n isLoading: false,\r\n filterButtons: [\"Others\", \"Materials\", \"Brand\", \"Color\"]\r\n };\r\n this._isMounted = false;\r\n }\r\n\r\n componentDidMount() {\r\n this._isMounted = true;\r\n this.setAvailableFiltersValues();\r\n }\r\n\r\n componentWillUnmount() {\r\n this._isMounted = false;\r\n }\r\n\r\n setAvailableFiltersValues() {\r\n const activePart = this.props.childItem && this.props.childItem.part;\r\n if (activePart.filtersReceived) {\r\n this.setState({\r\n isLoading: false,\r\n })\r\n } else {\r\n this.setState({\r\n isLoading: true\r\n });\r\n this.checkIfAllFiltersReceived(activePart, this.props.allFilterGroups)\r\n .then(() => {\r\n if (this._isMounted) {\r\n this.setState({\r\n isLoading: false,\r\n })\r\n }\r\n });\r\n }\r\n }\r\n\r\n isFilterSelected = (filter) => findIndex(this.props.selectedFilters, {filterId:filter}) !== -1;\r\n isFilterExpanded = (filter) => arrayHasValue(this.props.expandedFilters, filter);\r\n\r\n handleExpandFilter = (filter) => Analytics.sendClickEvent('filter-expand-' + filter) && this.props.setExpandedFilters(toggleArrayValue([...this.props.expandedFilters], filter));\r\n handleSelectFilter = (filterId, filterGroupId) => Analytics.sendClickEvent('filter-selected-' + filterId) && this.props.setSelectedFilters(toggleFilterArrayValue([...this.props.selectedFilters],\r\n {filterId, filterGroupId}));\r\n\r\n handleGroupClick = (filterName) => {\r\n Analytics.sendClickEvent('show-filter-group-' + filterName);\r\n if (this.props.filterVisible === filterName) {\r\n this.props.showFilters(false);\r\n } else {\r\n this.props.setFilterVisible(filterName);\r\n this.setAvailableFiltersValues(this.props, filterName);\r\n }\r\n };\r\n\r\n handleReset = () => {\r\n this.props.setSelectedFilters([]);\r\n this.props.setExpandedFilters([]);\r\n this.props.handleSearchInputChange({target: {value: ''}});\r\n };\r\n\r\n render() {\r\n const activePart = this.props.childItem.part;\r\n return (\r\n \r\n
    \r\n {this.state.filterButtons.map((filterName) => {\r\n const filterGroup = this.props.allFilterGroups.find(group => group.name === filterName);\r\n const buttonText = (filterName === \"Others\") ? \"+Filters\" : filterName;\r\n const filterNameLowerCased = filterName.toLowerCase();\r\n let buttonEnabled = false;\r\n if (filterName === \"Others\") {\r\n buttonEnabled = Array.isArray(activePart.filtersReceived) && this.props.allFilterGroups.some(filterGroup => {\r\n return ![\"Materials\", \"Brand\", \"Color\"].includes(filterGroup.name) && filterGroup.values.some(filterValue => {\r\n return activePart.filtersReceived.includes(filterValue.id);\r\n })\r\n });\r\n } else {\r\n buttonEnabled = filterGroup && (Array.isArray(activePart.filtersReceived) && filterGroup.values.some(filterValue => {\r\n return activePart.filtersReceived.includes(filterValue.id);\r\n }));\r\n }\r\n return (\r\n
    this.handleGroupClick(filterName)}\r\n className={\"filters-header-icon filters-header-icon--\"+filterNameLowerCased\r\n + (this.props.filterVisible === filterName ? \" filters-header-icon--active filters-header-icon--active--\"+filterNameLowerCased : \"\")\r\n + (!buttonEnabled ? \" filters-header-icon--disabled\" : \"\")}>\r\n \r\n
    \r\n )\r\n })}\r\n \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n {this.state.isLoading || !activePart.filtersReceived\r\n ?
    \r\n :
    {this.renderFiltersBody()}
    \r\n }\r\n \r\n )\r\n }\r\n\r\n renderFiltersBody = () => {\r\n const activePart = this.props.childItem.part;\r\n const allReceived = activePart.getRealFeaturesReceivedProperty()\r\n const allFilterGroups = allReceived\r\n ? getAvailableFilters(activePart, activePart.partId, this.props.allFilterGroups, this.getCurrentNavItems(), true)\r\n : this.props.allFilterGroups;\r\n switch (this.props.filterVisible) {\r\n case \"Others\": {\r\n const otherFilterGroups = allFilterGroups.filter(filterGroup => {\r\n return ![\"Materials\", \"Brand\", \"Color\"].includes(filterGroup.name) && filterGroup.values.some(filterValue => {\r\n return activePart.filtersReceived.includes(filterValue.id);\r\n })\r\n });\r\n const availableOtherFilterGroups = otherFilterGroups.map(fg => {\r\n return {\r\n id: fg.id,\r\n displayText: fg.name,\r\n items: allReceived ? fg.values : fg.values.filter(filterValue => activePart.filtersReceived.includes(filterValue.id)),\r\n }\r\n });\r\n return this.renderGenericFilters(availableOtherFilterGroups, true);\r\n }\r\n case \"Materials\": {\r\n const filterGroup = allFilterGroups.find(group => group.name === \"Materials\");\r\n if (this.checkFilterGroupForAvailableFilterValues(filterGroup).length) {\r\n return this.renderGenericFilters(filterGroup.values, false, filterGroup.id);\r\n }\r\n break;\r\n }\r\n case \"Brand\": {\r\n const filterGroup = allFilterGroups.find(group => group.name === \"Brand\");\r\n if (this.checkFilterGroupForAvailableFilterValues(filterGroup).length) {\r\n return this.renderBrand(filterGroup);\r\n }\r\n break;\r\n }\r\n case \"Color\": {\r\n const filterGroup = allFilterGroups.find(group => group.name === \"Color\");\r\n if (this.checkFilterGroupForAvailableFilterValues(filterGroup).length) {\r\n return this.renderColor(filterGroup);\r\n }\r\n break;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n checkFilterGroupForAvailableFilterValues = (filterGroup) => {\r\n if (!filterGroup || !filterGroup.values) {\r\n return []\r\n }\r\n const activePart = this.props.childItem.part;\r\n return filterGroup.values.filter(filterValue => {\r\n return activePart.filtersReceived.includes(filterValue.id);\r\n })\r\n };\r\n\r\n getCurrentNavItems = () => {\r\n if (!this.props.childItem) {\r\n return [];\r\n }\r\n const whichFeatures = !this.props.bvOpened; // if bvOpened - false - vis only\r\n const layout = this.props.childItem.part.getParent().layout;\r\n return layout.designNavigationItems(this.props.childItem, [], \"\", null, whichFeatures, this.props.allFilterGroups);\r\n }\r\n\r\n /**\r\n *\r\n * @param filterList {Array}\r\n * @param groupsFirst {boolean}\r\n * @param groupId {any}\r\n * @return {*}\r\n */\r\n renderGenericFilters = (filterList, groupsFirst = false, groupId) => {\r\n // console.log('filterList', filterList);\r\n const fabricatorData = this.props.fabricatorData;\r\n let filterOptions = filterList\r\n .filter(f => !(fabricatorData && ((f.value === \"Slab\" && fabricatorData.isRebath)\r\n || (f.value === \"DuraBath Natural Stone\" && !fabricatorData.isRebath)\r\n )))\r\n .map(f => {\r\n const sortedItems = (f.displayText === \"Size\")\r\n ? f.items.sort((a, b) => {\r\n const name1 = +a.value.split(\"X\")[0].split(\"in\")[0];\r\n const name2 = +b.value.split(\"X\")[0].split(\"in\")[0];\r\n return name1 !== name2 ? name1 < name2 ? -1 : 1 : 0\r\n })\r\n : f.items;\r\n return (\r\n
  • \r\n this.handleSelectFilter(f.id, groupId || f.id)}/>\r\n\r\n {(f.items && f.items.length > 0)\r\n ? this.handleExpandFilter(f.id)} />\r\n : null}\r\n
      \r\n {sortedItems.map(i => {\r\n return (\r\n
    • \r\n this.handleSelectFilter(i.id, groupId || f.id)}/>\r\n
    • \r\n );\r\n })}\r\n
    \r\n
  • \r\n );\r\n });\r\n\r\n return (\r\n
    \r\n
      \r\n {filterOptions}\r\n
    \r\n
    \r\n );\r\n };\r\n\r\n renderBrand = (brandFilterGroup) => {\r\n return (\r\n
    \r\n
      \r\n {this.checkFilterGroupForAvailableFilterValues(brandFilterGroup).map(f => (\r\n
    • this.handleSelectFilter(f.id, brandFilterGroup.id)}>\r\n {f.icon ? null : f.displayText}\r\n
    • \r\n ))}\r\n
    \r\n
    \r\n );\r\n };\r\n\r\n renderColor = (colorFilterGroup) => {\r\n return (\r\n
    \r\n
      \r\n {this.checkFilterGroupForAvailableFilterValues(colorFilterGroup).map(f => (\r\n
    • \r\n this.handleSelectFilter(f.id, colorFilterGroup.id)}\r\n text={f.displayText}/>\r\n \r\n
    • \r\n ))}\r\n
    \r\n
    \r\n );\r\n };\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {bvOpened} = store.bathroomVisualizerState;\r\n\r\n return {\r\n selectedFilters: store.filterState.selectedFilters,\r\n expandedFilters: store.filterState.expandedFilters,\r\n filterVisible: store.filterState.filterVisible,\r\n fabricatorData: store.fabricatorState,\r\n allFilterGroups: store.filterState.filterGroups,\r\n bvOpened,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setSelectedFilters,\r\n setExpandedFilters,\r\n showFilters,\r\n setFilterVisible,\r\n};\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(FiltersBody)\r\n);\r\n","import React, {Fragment} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {loaderEnable} from \"../ui/loaderView\";\r\nimport {\r\n toggleUserPopup, setCanvasId, setLayoutDataParts, setDefaultSelectionGroup, loadFilters, setCameFromPage,\r\n toggleBathroomVisualizerOpen, toggleSelectionFeatureInfo, changeMessageBoxState,\r\n addVisualizersLoaded } from \"../../actions/actionFunctions\";\r\nimport {\r\n getBathroomVisualizerData,\r\n getBvGroups,\r\n getBvGroupFeatures,\r\n getQtCategories,\r\n getNavigationButtons\r\n} from \"../../api/server-api\";\r\nimport ImageCanvasCommon from \"../visComponents/imageCanvasCommon\";\r\nimport {Layout} from \"./core/layout\";\r\nimport CountertopGroup from \"./core/parts/countertopGroup\";\r\nimport Cabinet from \"./core/parts/cabinet\";\r\nimport DesktopNavigation from \"./navigation/desktopNavigation\";\r\nimport MobileNavigation from \"./navigation/mobileNavigation\";\r\nimport MainButtons from \"../common/mainButtons\";\r\nimport DemoPoints from \"../common/demoPoints/demoPoints\";\r\nimport MessageBox from \"../popups/messageBox\";\r\n\r\nimport Visualizer from \"../visComponents/visualizer\";\r\nimport VisualizerTutorial from \"../tutorials/visualizerTutorial\";\r\nimport {showVisualizerTutorial} from \"../../actions/tutorialFunctions\";\r\nimport Copyright from \"../ui/copyright\";\r\nimport {IS_QKB_UI} from \"../../config\";\r\n\r\nexport const layout = new Layout();\r\n\r\nclass KitchenVisualizer extends Visualizer {\r\n\r\n static displayName = 'Kitchen Visualizer';\r\n\r\n constructor(props) {\r\n super(props);\r\n this.layout = layout;\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.visualizersLoaded.includes(this.layout.visualizerType)) {\r\n this.setSubscribers();\r\n return false\r\n }\r\n loaderEnable();\r\n Promise.all([\r\n getBathroomVisualizerData(),\r\n getQtCategories(this.layout.getCurrentLayoutAbbreviation())\r\n ]).then(baseResponse => {\r\n Promise.all([\r\n Promise.resolve(baseResponse[0]),\r\n getBvGroups(),\r\n getBvGroupFeatures(\"Countertop\", 0, 200),\r\n getBvGroupFeatures(\"Crown Molding\", 0, 500),\r\n getBvGroupFeatures(\"Top Cabinet\", 0, 200),\r\n getBvGroupFeatures(\"Bottom Cabinet\", 0, 200),\r\n getBvGroupFeatures(\"Top Handle\", 0, 200),\r\n getBvGroupFeatures(\"Bottom Handle\", 0, 200),\r\n Promise.resolve(baseResponse[1])\r\n ])\r\n .then((allResponse) => {\r\n const mainResponse = allResponse[0];\r\n const kvGroupsResponse = allResponse[1].data;\r\n const qtCategories = allResponse[8];\r\n\r\n // 1) set default (placeholders)\r\n this.layout.loadNewFeatures(mainResponse);\r\n this.layout.setGroupsItemsCount(kvGroupsResponse); // should be loaded before & after all features are received\r\n\r\n // 2) set counterTop features\r\n const countertopParent = this.layout.parts[CountertopGroup.id];\r\n if (countertopParent && countertopParent.countertop && allResponse[2]) {\r\n countertopParent.countertop.setGroupFeatures(allResponse[2], 200, false)\r\n }\r\n\r\n // 3) set counterTop features\r\n const cabinetParent = this.layout.parts[Cabinet.id];\r\n if (cabinetParent && cabinetParent.crownMolding && allResponse[3]) {\r\n cabinetParent.crownMolding.setGroupFeatures(allResponse[3], 500, false)\r\n }\r\n\r\n // 4) set top cabinet features\r\n if (cabinetParent && cabinetParent.topCabinet && allResponse[4]) {\r\n cabinetParent.topCabinet.setGroupFeatures(allResponse[4], 200, false)\r\n }\r\n\r\n // 5) set bottom cabinet features\r\n if (cabinetParent && cabinetParent.bottomCabinet && allResponse[5]) {\r\n cabinetParent.bottomCabinet.setGroupFeatures(allResponse[5], 200, false)\r\n }\r\n\r\n // 6) set top handle features\r\n if (cabinetParent && cabinetParent.topHandle && allResponse[6]) {\r\n cabinetParent.topHandle.setGroupFeatures(allResponse[6], 200, false)\r\n }\r\n\r\n // 7) set bottom handle features\r\n if (cabinetParent && cabinetParent.bottomHandle && allResponse[7]) {\r\n cabinetParent.bottomHandle.setGroupFeatures(allResponse[7], 200, false)\r\n }\r\n return this.setVisualizerInfo(mainResponse, kvGroupsResponse, qtCategories);\r\n })\r\n .then(this.checkShareUrl)\r\n .then(this.onBvLoad)\r\n .then(this.finishLoading);\r\n });\r\n\r\n this.setSubscribers();\r\n getNavigationButtons();\r\n }\r\n\r\n render() {\r\n\r\n if (!IS_QKB_UI) {\r\n return null\r\n }\r\n\r\n const showPlaceHolders = document.bvConfig ? document.bvConfig.showPlaceholders : false;\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const layers = this.layout.getLayers(showPlaceHolders);\r\n const layoutType = this.layout.getCurrentLayoutName();\r\n const isMobile = this.props.windowWidth < 991;\r\n const showTutorial = this.checkToShowTutorial();\r\n\r\n return (\r\n
    \r\n
    \r\n {(this.props.bvOpened || this.props.bvVisited) ? (\r\n \r\n this.imageCanvas = node}\r\n layoutType={layoutType}\r\n layout={this.layout}\r\n width={this.props.canvasDimensions.width}\r\n height={this.props.canvasDimensions.height}\r\n useMouseHovering={this.props.useMouseHovering}\r\n useTouchZoom={this.props.useTouchZoom}\r\n />\r\n \r\n \r\n ) : null}\r\n \r\n {!this.state.demoPointClicked && this.props.canvasId ? (\r\n \r\n ) : null}\r\n
    \r\n {(this.layout.initialized && this.props.bvVisited) ? ( // keep navigation opened if someone got to QT and back\r\n isMobile ? (\r\n \r\n ) : (\r\n this.navBar = node}\r\n refreshCB={this.handleRefresh}\r\n setHoveredLayer={this.setHoveredLayer}\r\n canvasId={this.state.canvasId}\r\n renderGreenLayerByZindex={this.renderGreenLayerByZindex}\r\n toggleUserPopup={this.props.toggleUserPopup}\r\n changeMessageBoxState={this.changeMessageBoxState}\r\n setActiveFeature={this.setActiveFeature}\r\n activeFeature={this.state.activeFeature}\r\n fabricatorSettings={fabricatorSettings}\r\n setDemoPointClicked={this.setDemoPointClicked}\r\n />\r\n )\r\n ) : null}\r\n {this.props.cookieAccepted ? : null}\r\n {showTutorial ? : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {cookieAccepted, windowWidth, visualizersLoaded} = store.serverState;\r\n const {bvOpened, bvVisited, canvasId, showRestorePopup, canvasDimensions, canvasCount} = store.bathroomVisualizerState;\r\n const {mobileNav, desktopNavigationOpened, activeNavigationParentName, activeNavigationChildName} = store.navigationState;\r\n const {isPhoneNumberValidated, userIsLoggedIn} = store.userState;\r\n const {visualizerTutorialIsOpened, visualizerTutorialFinished} = store.tutorialState;\r\n const {initialFlowRoomLayout, initialFlowRoom, initialFlowStep} = store.initialFlowState;\r\n return {\r\n bvOpened,\r\n bvVisited,\r\n mobileNav,\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n windowWidth,\r\n canvasId,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n desktopNavigationOpened,\r\n activeNavigationParentName,\r\n activeNavigationChildName,\r\n showRestorePopup,\r\n visualizerTutorialIsOpened,\r\n visualizerTutorialFinished,\r\n initialFlowRoomLayout,\r\n initialFlowRoom,\r\n initialFlowStep,\r\n cookieAccepted,\r\n canvasDimensions,\r\n visualizersLoaded,\r\n canvasCount,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n setCameFromPage,\r\n toggleBathroomVisualizerOpen,\r\n setDefaultSelectionGroup,\r\n setLayoutDataParts,\r\n toggleUserPopup,\r\n setCanvasId,\r\n loadFilters,\r\n toggleSelectionFeatureInfo,\r\n changeMessageBoxState,\r\n showVisualizerTutorial,\r\n addVisualizersLoaded\r\n})(KitchenVisualizer);\r\n","import React, {Fragment} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport invert from \"lodash/invert\";\r\n\r\nimport {loaderEnable} from \"../ui/loaderView\";\r\nimport {\r\n toggleUserPopup, setCanvasId, setLayoutDataParts, setDefaultSelectionGroup, loadFilters, setCameFromPage,\r\n toggleBathroomVisualizerOpen, toggleSelectionFeatureInfo, changeMessageBoxState,\r\n addVisualizersLoaded } from \"../../actions/actionFunctions\";\r\nimport {\r\n getBathroomVisualizerData,\r\n getBvGroups,\r\n // getNavigationButtons\r\n} from \"../../api/server-api\";\r\nimport ImageCanvasCommonNew from \"../visComponents/imageCanvasCommonNew\";\r\nimport {Layout} from \"./core/layout\";\r\nimport DesktopNavigation from \"./navigation/desktopNavigation\";\r\nimport MobileNavigation from \"./navigation/mobileNavigation\";\r\nimport MainButtons from \"../common/mainButtons\";\r\nimport DemoPoints from \"../common/demoPoints/demoPoints\";\r\nimport MessageBox from \"../popups/messageBox\";\r\n\r\nimport Visualizer from \"../visComponents/visualizer\";\r\nimport VisualizerTutorial from \"../tutorials/visualizerTutorial\";\r\nimport {showVisualizerTutorial} from \"../../actions/tutorialFunctions\";\r\nimport Copyright from \"../ui/copyright\";\r\nimport {LayoutType} from \"./core/constants\";\r\nimport {IS_QKB_UI} from \"../../config\";\r\n\r\nexport const layout = new Layout();\r\n\r\nclass KvSceneVisualizer extends Visualizer {\r\n\r\n static displayName = 'KvSceneVisualizer';\r\n\r\n constructor(props) {\r\n super(props);\r\n this.layout = layout;\r\n }\r\n\r\n componentDidMount() {\r\n console.log(\"kvScene loaded\", );\r\n if (this.props.visualizersLoaded.includes(this.layout.visualizerType)) {\r\n this.setSubscribers();\r\n return false\r\n }\r\n loaderEnable();\r\n Promise.all([\r\n getBathroomVisualizerData(),\r\n this.getQtCategoriesCommon(),\r\n ]).then(baseResponse => {\r\n Promise.all([\r\n Promise.resolve(baseResponse[0]),\r\n getBvGroups(),\r\n Promise.resolve(baseResponse[1])\r\n ])\r\n .then((allResponse) => {\r\n const mainResponse = allResponse[0];\r\n const kvGroupsResponse = allResponse[1].data;\r\n const qtCategories = allResponse[2];\r\n // 1) set default (placeholders)\r\n this.layout.loadNewFeatures(mainResponse);\r\n this.layout.setGroupsItemsCount(kvGroupsResponse); // should be loaded before & after all features are received\r\n return this.setVisualizerInfo(mainResponse, kvGroupsResponse, qtCategories, invert(LayoutType));\r\n })\r\n .then(this.checkShareUrl)\r\n .then(this.onBvLoad)\r\n .then(this.finishLoading);\r\n });\r\n\r\n this.setSubscribers();\r\n // getNavigationButtons();\r\n }\r\n\r\n render() {\r\n\r\n if (!IS_QKB_UI) {\r\n return null\r\n }\r\n\r\n const showPlaceHolders = document.bvConfig ? document.bvConfig.showPlaceholders : false;\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const layers = this.layout.getLayers(showPlaceHolders);\r\n const layoutType = this.layout.getCurrentLayoutName();\r\n const layoutScene = this.layout.scene;\r\n const isMobile = this.props.windowWidth < 991;\r\n const showTutorial = this.checkToShowTutorial();\r\n\r\n return (\r\n
    \r\n
    \r\n {(this.props.bvOpened || this.props.bvVisited) ? (\r\n \r\n this.imageCanvas = node}\r\n layoutType={layoutType}\r\n layout={this.layout}\r\n layoutScene={layoutScene}\r\n width={this.props.canvasDimensions.width}\r\n height={this.props.canvasDimensions.height}\r\n useMouseHovering={this.props.useMouseHovering}\r\n useTouchZoom={this.props.useTouchZoom}\r\n />\r\n \r\n \r\n ) : null}\r\n \r\n {!this.state.demoPointClicked && this.props.canvasId ? (\r\n \r\n ) : null}\r\n
    \r\n {(this.layout.initialized && this.props.bvVisited) ? ( // keep navigation opened if someone got to QT and back\r\n isMobile ? (\r\n \r\n ) : (\r\n this.navBar = node}\r\n refreshCB={this.handleRefresh}\r\n setHoveredLayer={this.setHoveredLayer}\r\n canvasId={this.state.canvasId}\r\n renderGreenLayerByZindex={this.renderGreenLayerByZindex}\r\n toggleUserPopup={this.props.toggleUserPopup}\r\n changeMessageBoxState={this.changeMessageBoxState}\r\n setActiveFeature={this.setActiveFeature}\r\n activeFeature={this.state.activeFeature}\r\n fabricatorSettings={fabricatorSettings}\r\n setDemoPointClicked={this.setDemoPointClicked}\r\n />\r\n )\r\n ) : null}\r\n {this.props.cookieAccepted ? : null}\r\n {showTutorial ? : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {cookieAccepted, windowWidth, visualizersLoaded} = store.serverState;\r\n const {bvOpened, bvVisited, canvasId, showRestorePopup, canvasDimensions, canvasCount} = store.bathroomVisualizerState;\r\n const {mobileNav, desktopNavigationOpened, activeNavigationParentName, activeNavigationChildName} = store.navigationState;\r\n const {isPhoneNumberValidated, userIsLoggedIn} = store.userState;\r\n const {visualizerTutorialIsOpened, visualizerTutorialFinished} = store.tutorialState;\r\n const {initialFlowRoomLayout, initialFlowRoom, initialFlowStep} = store.initialFlowState;\r\n const {qtCategoriesRequested} = store.qtState;\r\n return {\r\n bvOpened,\r\n bvVisited,\r\n mobileNav,\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n windowWidth,\r\n canvasId,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n desktopNavigationOpened,\r\n activeNavigationParentName,\r\n activeNavigationChildName,\r\n showRestorePopup,\r\n visualizerTutorialIsOpened,\r\n visualizerTutorialFinished,\r\n initialFlowRoomLayout,\r\n initialFlowRoom,\r\n initialFlowStep,\r\n cookieAccepted,\r\n canvasDimensions,\r\n visualizersLoaded,\r\n qtCategoriesRequested,\r\n canvasCount,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n setCameFromPage,\r\n toggleBathroomVisualizerOpen,\r\n setDefaultSelectionGroup,\r\n setLayoutDataParts,\r\n toggleUserPopup,\r\n setCanvasId,\r\n loadFilters,\r\n toggleSelectionFeatureInfo,\r\n changeMessageBoxState,\r\n showVisualizerTutorial,\r\n addVisualizersLoaded\r\n})(KvSceneVisualizer);\r\n","import React, {Fragment} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport invert from \"lodash/invert\";\r\n\r\nimport {loaderEnable} from \"../ui/loaderView\";\r\nimport {\r\n toggleUserPopup, setCanvasId, setLayoutDataParts, setDefaultSelectionGroup, loadFilters, setCameFromPage,\r\n toggleBathroomVisualizerOpen, toggleSelectionFeatureInfo, changeMessageBoxState,\r\n addVisualizersLoaded } from \"../../actions/actionFunctions\";\r\nimport {\r\n getBathroomVisualizerData,\r\n getBvGroups,\r\n getQtCategories,\r\n getNavigationButtons\r\n} from \"../../api/server-api\";\r\nimport ImageCanvasCommon from \"../visComponents/imageCanvasCommon\";\r\nimport {Layout} from \"./core/layout\";\r\nimport DesktopNavigation from \"./navigation/desktopNavigation\";\r\nimport MobileNavigation from \"./navigation/mobileNavigation\";\r\nimport MainButtons from \"../common/mainButtons\";\r\nimport DemoPoints from \"../common/demoPoints/demoPoints\";\r\nimport MessageBox from \"../popups/messageBox\";\r\n\r\nimport Visualizer from \"../visComponents/visualizer\";\r\nimport VisualizerTutorial from \"../tutorials/visualizerTutorial\";\r\nimport {showVisualizerTutorial} from \"../../actions/tutorialFunctions\";\r\nimport Copyright from \"../ui/copyright\";\r\nimport {LayoutType} from \"./core/constants\";\r\nimport {IS_QKB_UI} from \"../../config\";\r\n\r\nexport const layout = new Layout();\r\n\r\nclass BvSceneVisualizer extends Visualizer {\r\n\r\n static displayName = 'BvSceneVisualizer';\r\n\r\n constructor(props) {\r\n super(props);\r\n this.layout = layout;\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.visualizersLoaded.includes(this.layout.visualizerType)) {\r\n this.setSubscribers();\r\n return false\r\n }\r\n loaderEnable();\r\n Promise.all([\r\n getBathroomVisualizerData(),\r\n getQtCategories(this.layout.getCurrentLayoutAbbreviation())\r\n ]).then(baseResponse => {\r\n Promise.all([\r\n Promise.resolve(baseResponse[0]),\r\n getBvGroups(),\r\n Promise.resolve(baseResponse[1]),\r\n ])\r\n .then((allResponse) => {\r\n const mainResponse = allResponse[0];\r\n const bvGroupsResponse = allResponse[1].data;\r\n const qtCategories = allResponse[2];\r\n this.layout.loadNewFeatures(mainResponse); // 1) set default (placeholders)\r\n this.layout.setGroupsItemsCount(bvGroupsResponse); // should be loaded before & after all features are received\r\n return this.setVisualizerInfo(mainResponse, bvGroupsResponse, qtCategories, invert(LayoutType));\r\n })\r\n .then(this.checkShareUrl)\r\n .then(this.onBvLoad)\r\n .then(this.finishLoading);\r\n });\r\n\r\n this.setSubscribers();\r\n getNavigationButtons();\r\n }\r\n\r\n render() {\r\n\r\n if (!IS_QKB_UI) {\r\n return null\r\n }\r\n\r\n const showPlaceHolders = document.bvConfig ? document.bvConfig.showPlaceholders : false;\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const layers = this.layout.getLayers(showPlaceHolders);\r\n const layoutType = this.layout.getCurrentLayoutName();\r\n const isMobile = this.props.windowWidth < 991;\r\n const showTutorial = this.checkToShowTutorial();\r\n\r\n return (\r\n
    \r\n
    \r\n {this.props.bvOpened || this.props.bvVisited ? (\r\n \r\n this.imageCanvas = node}\r\n layoutType={layoutType}\r\n layout={this.layout}\r\n width={this.props.canvasDimensions.width}\r\n height={this.props.canvasDimensions.height}\r\n useMouseHovering={this.props.useMouseHovering}\r\n useTouchZoom={this.props.useTouchZoom}\r\n />\r\n \r\n \r\n ) : null}\r\n \r\n {!this.state.demoPointClicked && this.props.canvasId ? (\r\n \r\n ) : null}\r\n
    \r\n {(this.layout.initialized && this.props.bvVisited) ? ( // keep navigation opened if someone got to QT and back\r\n isMobile ? (\r\n \r\n ) : (\r\n this.navBar = node}\r\n refreshCB={this.handleRefresh}\r\n setHoveredLayer={this.setHoveredLayer}\r\n canvasId={this.state.canvasId}\r\n renderGreenLayerByZindex={this.renderGreenLayerByZindex}\r\n toggleUserPopup={this.props.toggleUserPopup}\r\n changeMessageBoxState={this.changeMessageBoxState}\r\n setActiveFeature={this.setActiveFeature}\r\n activeFeature={this.state.activeFeature}\r\n fabricatorSettings={fabricatorSettings}\r\n setDemoPointClicked={this.setDemoPointClicked}\r\n />\r\n )\r\n ) : null}\r\n {this.props.cookieAccepted ? : null}\r\n {showTutorial ? : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {cookieAccepted, windowWidth, visualizersLoaded} = store.serverState;\r\n const {bvOpened, bvVisited, canvasId, showRestorePopup, canvasDimensions, canvasCount} = store.bathroomVisualizerState;\r\n const {mobileNav, desktopNavigationOpened, activeNavigationParentName, activeNavigationChildName} = store.navigationState;\r\n const {isPhoneNumberValidated, userIsLoggedIn} = store.userState;\r\n const {visualizerTutorialIsOpened, visualizerTutorialFinished} = store.tutorialState;\r\n const {initialFlowRoomLayout, initialFlowRoom, initialFlowStep} = store.initialFlowState;\r\n return {\r\n bvOpened,\r\n bvVisited,\r\n mobileNav,\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n windowWidth,\r\n canvasId,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n desktopNavigationOpened,\r\n activeNavigationParentName,\r\n activeNavigationChildName,\r\n showRestorePopup,\r\n visualizerTutorialIsOpened,\r\n visualizerTutorialFinished,\r\n initialFlowRoomLayout,\r\n initialFlowRoom,\r\n initialFlowStep,\r\n cookieAccepted,\r\n canvasDimensions,\r\n visualizersLoaded,\r\n canvasCount\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n setCameFromPage,\r\n toggleBathroomVisualizerOpen,\r\n setDefaultSelectionGroup,\r\n setLayoutDataParts,\r\n toggleUserPopup,\r\n setCanvasId,\r\n loadFilters,\r\n toggleSelectionFeatureInfo,\r\n changeMessageBoxState,\r\n showVisualizerTutorial,\r\n addVisualizersLoaded\r\n})(BvSceneVisualizer);\r\n","import React, {Fragment} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport invert from \"lodash/invert\";\r\n\r\nimport {loaderEnable} from \"../ui/loaderView\";\r\nimport {\r\n toggleUserPopup, setCanvasId, setLayoutDataParts, setDefaultSelectionGroup, loadFilters, setCameFromPage,\r\n toggleBathroomVisualizerOpen, toggleSelectionFeatureInfo, changeMessageBoxState,\r\n addVisualizersLoaded, addToCart, setFirstLoadedPreset, updateCanvasCount\r\n} from \"../../actions/actionFunctions\";\r\nimport {getBathroomVisualizerData, getBvGroups} from \"../../api/server-api\";\r\nimport {Layout} from \"./core/layout\";\r\n\r\nimport Visualizer from \"../visComponents/visualizer\";\r\nimport {IS_QKB_UI} from \"../../config\";\r\nimport {LayoutType, LOCAL_STORAGE_KEYS} from \"./core/constants\";\r\nimport {setLocalStorageItem} from \"../../misc/storageFunctions\";\r\nimport {setLookOverlayOpened} from \"../../actions/lookFunctions\";\r\nimport {getPassedUserInfo, getSaveTempData} from \"../../api/look-api\";\r\nimport Misc from \"../../misc/misc\";\r\nimport ImageCanvasCommonNew from \"../visComponents/imageCanvasCommonNew\";\r\nimport Copyright from \"../ui/copyright\";\r\nimport MainButtons from \"../common/mainButtons\";\r\nimport MobileNavigation from \"./navigation/mobileNavigation\";\r\nimport DesktopNavigation from \"./navigation/desktopNavigation.js\";\r\nimport MessageBox from \"../popups/messageBox\";\r\nimport VisualizerTutorial from \"../tutorials/visualizerTutorial\";\r\nimport {loadAdditionalVisualizerGroups} from \"../../misc/loadVisualizer\";\r\nimport {showVisualizerTutorial} from \"../../actions/tutorialFunctions\";\r\n\r\nexport const layout = new Layout();\r\n\r\nclass LookVisualizer extends Visualizer {\r\n\r\n static displayName = 'BvLookVisualizer';\r\n\r\n constructor(props) {\r\n super(props);\r\n this.layout = layout;\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.visualizersLoaded.includes(this.layout.visualizerType)) {\r\n this.setSubscribers();\r\n return false\r\n }\r\n if (!IS_QKB_UI) {\r\n this.props.toggleBathroomVisualizerOpen(true);\r\n }\r\n loaderEnable();\r\n Promise.all([\r\n getBathroomVisualizerData(),\r\n loadAdditionalVisualizerGroups(\"bvLook\"),\r\n this.getQtCategoriesCommon(),\r\n ]).then(baseResponse => {\r\n let otherData = [\r\n Promise.resolve(baseResponse[0]),\r\n Promise.resolve(baseResponse[1]),\r\n Promise.resolve(baseResponse[2]),\r\n getBvGroups(),\r\n ];\r\n const searchParams = new URLSearchParams(\r\n (window.location.search).replace(/amp;/g, \"\")\r\n || (window.location.hash).replace(/(.*)\\?/g, \"\")\r\n || \"\"\r\n );\r\n // console.log(\"searchParams\", searchParams.toString());\r\n if (searchParams && searchParams.get(\"userid\")) {\r\n otherData.push(getPassedUserInfo(searchParams))\r\n }\r\n if (searchParams && (searchParams.get(\"tempID\") || searchParams.get(\"TempID\"))) {\r\n otherData.push(getSaveTempData(searchParams.get(\"tempID\") || searchParams.get(\"TempID\")))\r\n }\r\n Promise.all(otherData)\r\n .then((allResponse) => {\r\n const mainResponse = allResponse[0];\r\n const decorAndAttachmentResponses = Array.isArray(allResponse[1]) ? allResponse[1] : [];\r\n const qtCategories = allResponse[2];\r\n const bvGroupsResponse = allResponse[3];\r\n const userDataResponse = allResponse[4];\r\n const savedTempData = JSON.parse(searchParams && searchParams.get(\"userid\") ? allResponse[5] || null : allResponse[4] || null);\r\n this.layout.loadNewFeatures(Object.assign({}, mainResponse, {\r\n features: [...mainResponse.features, ...decorAndAttachmentResponses]\r\n })); // 1) set default (placeholders)\r\n // this.layout.setGroupsItemsCount(mainResponse);\r\n let userIsLoggedIn = false;\r\n if (userDataResponse && userDataResponse.email) {\r\n userIsLoggedIn = true;\r\n this.needToSaveQuote = !document.kvConfig.jobId;\r\n console.log(\"userDataResponse\", userDataResponse);\r\n const updatedUserInfo = Misc.parseUserResponse(userDataResponse)\r\n setLocalStorageItem(LOCAL_STORAGE_KEYS.introVisited, true);\r\n\r\n this.props.toggleUserPopup({\r\n userPopupOpened: false,\r\n userIsLoggedIn: true,\r\n isPhoneNumberValidated: userDataResponse.isPhoneNumberValidated || !userDataResponse.pendingPhoneVerification,\r\n userInfo: updatedUserInfo,\r\n // email: userDataResponse.email,\r\n encodedUserId: userDataResponse.encodedUserId,\r\n // phoneNumber: userDataResponse.phoneNumber,\r\n // values: userDataResponse.values\r\n })\r\n }\r\n return this.setVisualizerInfo(\r\n mainResponse,\r\n bvGroupsResponse ? bvGroupsResponse.data : {},\r\n qtCategories,\r\n invert(LayoutType),\r\n userIsLoggedIn,\r\n savedTempData\r\n );\r\n })\r\n .then(this.checkShareUrl)\r\n .then(this.onBvLoad)\r\n .then(this.finishLoading);\r\n });\r\n\r\n this.setSubscribers();\r\n }\r\n\r\n render() {\r\n if (!IS_QKB_UI) {\r\n return null\r\n }\r\n\r\n const showPlaceHolders = document.bvConfig ? document.bvConfig.showPlaceholders : false;\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const layers = this.layout.getLayers(showPlaceHolders);\r\n const layoutType = this.layout.getCurrentLayoutName();\r\n const layoutScene = this.layout.scene;\r\n const isMobile = this.props.windowWidth < 991;\r\n const showTutorial = this.checkToShowTutorial();\r\n\r\n return (\r\n
    \r\n
    \r\n {this.props.bvOpened || this.props.bvVisited ? (\r\n \r\n this.imageCanvas = node}\r\n layoutType={layoutType}\r\n layout={this.layout}\r\n layoutScene={layoutScene}\r\n width={this.props.canvasDimensions.width}\r\n height={this.props.canvasDimensions.height}\r\n useMouseHovering={this.props.useMouseHovering}\r\n useTouchZoom={this.props.useTouchZoom}\r\n />\r\n \r\n \r\n ) : null}\r\n \r\n
    \r\n {(this.layout.initialized && this.props.bvVisited) ? ( // keep navigation opened if someone got to QT and back\r\n isMobile ? (\r\n \r\n ) : (\r\n this.navBar = node}\r\n refreshCB={this.handleRefresh}\r\n setHoveredLayer={this.setHoveredLayer}\r\n canvasId={this.state.canvasId}\r\n renderGreenLayerByZindex={this.renderGreenLayerByZindex}\r\n toggleUserPopup={this.props.toggleUserPopup}\r\n changeMessageBoxState={this.changeMessageBoxState}\r\n setActiveFeature={this.setActiveFeature}\r\n activeFeature={this.state.activeFeature}\r\n fabricatorSettings={fabricatorSettings}\r\n setDemoPointClicked={this.setDemoPointClicked}\r\n />\r\n )\r\n ) : null}\r\n {this.props.cookieAccepted ? : null}\r\n {showTutorial ? : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {windowWidth, cookieAccepted, visualizersLoaded} = store.serverState;\r\n const {canvasId} = store.bathroomVisualizerState;\r\n const {isPhoneNumberValidated, userIsLoggedIn} = store.userState;\r\n const {activePreset} = store.bathroomVisualizerState;\r\n\r\n if (!IS_QKB_UI) {\r\n return {\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n windowWidth,\r\n canvasId,\r\n activePreset,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n qtActiveCategory: store.qtState.qtActiveCategory,\r\n visualizersLoaded,\r\n };\r\n }\r\n\r\n const {bvOpened, bvVisited, showRestorePopup, canvasDimensions, canvasCount} = store.bathroomVisualizerState;\r\n const {mobileNav, desktopNavigationOpened, activeNavigationParentName, activeNavigationChildName} = store.navigationState;\r\n const {visualizerTutorialIsOpened, visualizerTutorialFinished} = store.tutorialState;\r\n const {initialFlowRoomLayout, initialFlowRoom, initialFlowStep} = store.initialFlowState;\r\n const {qtCategoriesRequested} = store.qtState;\r\n\r\n return {\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n windowWidth,\r\n canvasId,\r\n activePreset,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n qtActiveCategory: store.qtState.qtActiveCategory,\r\n //** qkb ui ** //\r\n bvOpened,\r\n bvVisited,\r\n mobileNav,\r\n desktopNavigationOpened,\r\n activeNavigationParentName,\r\n activeNavigationChildName,\r\n showRestorePopup,\r\n visualizerTutorialIsOpened,\r\n visualizerTutorialFinished,\r\n initialFlowRoomLayout,\r\n initialFlowRoom,\r\n initialFlowStep,\r\n cookieAccepted,\r\n canvasDimensions,\r\n visualizersLoaded,\r\n qtCategoriesRequested,\r\n canvasCount,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setCameFromPage,\r\n toggleBathroomVisualizerOpen,\r\n setDefaultSelectionGroup,\r\n setLayoutDataParts,\r\n toggleUserPopup,\r\n setCanvasId,\r\n loadFilters,\r\n toggleSelectionFeatureInfo,\r\n changeMessageBoxState,\r\n addVisualizersLoaded,\r\n addToCart,\r\n setLookOverlayOpened,\r\n setFirstLoadedPreset,\r\n updateCanvasCount,\r\n showVisualizerTutorial,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LookVisualizer)\r\n","import React, {Fragment} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {loaderEnable} from \"../ui/loaderView\";\r\nimport {\r\n toggleUserPopup, setCanvasId, setLayoutDataParts, setDefaultSelectionGroup, loadFilters, setCameFromPage,\r\n toggleBathroomVisualizerOpen, toggleSelectionFeatureInfo, changeMessageBoxState,\r\n addVisualizersLoaded } from \"../../actions/actionFunctions\";\r\nimport {\r\n getBathroomVisualizerData,\r\n getBvGroups,\r\n getQtCategories,\r\n getNavigationButtons\r\n} from \"../../api/server-api\";\r\nimport ImageCanvasCommonNew from \"../visComponents/imageCanvasCommonNew\";\r\nimport {Layout} from \"./core/layout\";\r\nimport DesktopNavigation from \"./navigation/desktopNavigation\";\r\nimport MobileNavigation from \"./navigation/mobileNavigation\";\r\nimport MainButtons from \"../common/mainButtons\";\r\nimport DemoPoints from \"../common/demoPoints/demoPoints\";\r\nimport MessageBox from \"../popups/messageBox\";\r\n\r\nimport Visualizer from \"../visComponents/visualizer\";\r\nimport VisualizerTutorial from \"../tutorials/visualizerTutorial\";\r\nimport {showVisualizerTutorial} from \"../../actions/tutorialFunctions\";\r\nimport Copyright from \"../ui/copyright\";\r\nimport {IS_QKB_UI} from \"../../config\";\r\n\r\nexport const layout = new Layout();\r\n\r\nclass FireplaceVisualizer extends Visualizer {\r\n\r\n static displayName = 'FireplaceVisualizer';\r\n\r\n constructor(props) {\r\n super(props);\r\n this.layout = layout;\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.visualizersLoaded.includes(this.layout.visualizerType)) {\r\n this.setSubscribers();\r\n return false\r\n }\r\n loaderEnable();\r\n Promise.all([\r\n getBathroomVisualizerData(),\r\n getQtCategories(this.layout.getCurrentLayoutAbbreviation())\r\n ]).then(baseResponse => {\r\n Promise.all([\r\n Promise.resolve(baseResponse[0]),\r\n getBvGroups(),\r\n Promise.resolve(baseResponse[1])\r\n ])\r\n .then((allResponse) => {\r\n const mainResponse = allResponse[0];\r\n const kvGroupsResponse = allResponse[1].data;\r\n const qtCategories = allResponse[2];\r\n // 1) set default (placeholders)\r\n this.layout.loadNewFeatures(mainResponse);\r\n this.layout.setGroupsItemsCount(kvGroupsResponse); // should be loaded before & after all features are received\r\n return this.setVisualizerInfo(mainResponse, kvGroupsResponse, qtCategories);\r\n })\r\n .then(this.checkShareUrl)\r\n .then(this.onBvLoad)\r\n .then(this.finishLoading);\r\n });\r\n\r\n this.setSubscribers();\r\n getNavigationButtons(\"kv\");\r\n }\r\n\r\n render() {\r\n\r\n if (!IS_QKB_UI) {\r\n return null\r\n }\r\n\r\n const showPlaceHolders = document.bvConfig ? document.bvConfig.showPlaceholders : false;\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const layers = this.layout.getLayers(showPlaceHolders);\r\n const layoutType = this.layout.getCurrentLayoutName();\r\n const isMobile = this.props.windowWidth < 991;\r\n const showTutorial = this.checkToShowTutorial();\r\n\r\n return (\r\n
    \r\n
    \r\n {this.props.bvOpened || this.props.bvVisited ? (\r\n \r\n this.imageCanvas = node}\r\n layoutType={layoutType}\r\n layout={this.layout}\r\n width={this.props.canvasDimensions.width}\r\n height={this.props.canvasDimensions.height}\r\n useMouseHovering={this.props.useMouseHovering}\r\n useTouchZoom={this.props.useTouchZoom}\r\n />\r\n \r\n \r\n ) : null}\r\n \r\n {!this.state.demoPointClicked && this.props.canvasId ? (\r\n \r\n ) : null}\r\n
    \r\n {(this.layout.initialized && this.props.bvVisited) ? ( // keep navigation opened if someone got to QT and back\r\n isMobile ? (\r\n \r\n ) : (\r\n this.navBar = node}\r\n refreshCB={this.handleRefresh}\r\n setHoveredLayer={this.setHoveredLayer}\r\n canvasId={this.state.canvasId}\r\n renderGreenLayerByZindex={this.renderGreenLayerByZindex}\r\n toggleUserPopup={this.props.toggleUserPopup}\r\n changeMessageBoxState={this.changeMessageBoxState}\r\n setActiveFeature={this.setActiveFeature}\r\n activeFeature={this.state.activeFeature}\r\n fabricatorSettings={fabricatorSettings}\r\n setDemoPointClicked={this.setDemoPointClicked}\r\n />\r\n )\r\n ) : null}\r\n {this.props.cookieAccepted ? : null}\r\n {showTutorial ? : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {cookieAccepted, windowWidth, visualizersLoaded} = store.serverState;\r\n const {bvOpened, bvVisited, canvasId, showRestorePopup, canvasDimensions, canvasCount} = store.bathroomVisualizerState;\r\n const {mobileNav, desktopNavigationOpened, activeNavigationParentName, activeNavigationChildName} = store.navigationState;\r\n const {isPhoneNumberValidated, userIsLoggedIn} = store.userState;\r\n const {visualizerTutorialIsOpened, visualizerTutorialFinished} = store.tutorialState;\r\n const {initialFlowRoomLayout, initialFlowRoom, initialFlowStep} = store.initialFlowState;\r\n return {\r\n bvOpened,\r\n bvVisited,\r\n mobileNav,\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n windowWidth,\r\n canvasId,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n desktopNavigationOpened,\r\n activeNavigationParentName,\r\n activeNavigationChildName,\r\n showRestorePopup,\r\n visualizerTutorialIsOpened,\r\n visualizerTutorialFinished,\r\n initialFlowRoomLayout,\r\n initialFlowRoom,\r\n initialFlowStep,\r\n cookieAccepted,\r\n canvasDimensions,\r\n visualizersLoaded,\r\n canvasCount\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n setCameFromPage,\r\n toggleBathroomVisualizerOpen,\r\n setDefaultSelectionGroup,\r\n setLayoutDataParts,\r\n toggleUserPopup,\r\n setCanvasId,\r\n loadFilters,\r\n toggleSelectionFeatureInfo,\r\n changeMessageBoxState,\r\n showVisualizerTutorial,\r\n addVisualizersLoaded\r\n})(FireplaceVisualizer);\r\n","import invert from 'lodash/invert';\r\nimport snakeCase from 'lodash/snakeCase';\r\n\r\nimport LayoutCommonNew from \"../../visComponents/layoutCommonNew\";\r\nimport {LayoutType, LayoutAbbreviation} from \"./constants\";\r\nimport zIndexes from \"./zIndex\";\r\nimport Other from \"./parts/other\";\r\nimport NonVisualizerSubPart from \"./subparts/nonVisualizerSubPart\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport Background from \"./parts/background\";\r\nimport Floor from \"./parts/floor\";\r\nimport Walls from \"./parts/walls\";\r\nimport {AVAILABLE_VISUALIZER_TYPES} from \"../../../config\";\r\nimport Globals from \"./parts/globals\";\r\nimport Cabinet from \"./parts/cabinet\";\r\nimport Accessories from \"./parts/accessories\";\r\n\r\nexport class LaundryRoomLayout extends LayoutCommonNew {\r\n\r\n /**\r\n * @type {int}\r\n */\r\n defaultType = LayoutType.Layout41;\r\n type = this.defaultType;\r\n scene = \"1\";\r\n visualizerType = AVAILABLE_VISUALIZER_TYPES.LaundryRoom;\r\n localStorageKey = \"LaundryRoomState\";\r\n layersBinding = \"LaundryRoom\";\r\n layoutNames = LayoutAbbreviation;\r\n layoutTypes = LayoutType;\r\n layoutThumbnails = {};\r\n zIndexes = zIndexes.layouts;\r\n excludedPartIdsFromHover = [\"decor_\", \"background_bg\", \"walls_ceiling\", \"attachment\"];\r\n\r\n constructor(props) {\r\n super(props);\r\n this.parts[Globals.id] = new Globals();\r\n this.parts[Background.id] = new Background();\r\n this.parts[Cabinet.id] = new Cabinet();\r\n this.parts[Walls.id] = new Walls();\r\n this.parts[Floor.id] = new Floor();\r\n this.parts[Accessories.id] = new Accessories();\r\n this.parts[Other.id] = new Other();\r\n Object.values(this.parts).forEach(part => part.layout = this);\r\n }\r\n\r\n getCurrentLayoutName(type = this.type) {\r\n return invert(LayoutType)[type];\r\n }\r\n\r\n getCurrentLayoutAbbreviation() {\r\n return LayoutAbbreviation[this.getCurrentLayoutName()]\r\n }\r\n\r\n addNonVisualizerSubPart(featureGroupName){\r\n const otherParent = this.parts[Other.id];\r\n const partId = snakeCase(featureGroupName);\r\n let relatedItem = otherParent.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, featureGroupName);\r\n relatedItem.getParent = () => otherParent;\r\n otherParent.relatedItems.push(relatedItem);\r\n }\r\n return new DesignNavigationItem(relatedItem.partName, relatedItem)\r\n }\r\n\r\n addSpecificPropertiesToLocalStorage(bvState, useNames, returnAllFeatures= false) {\r\n const cabinet = this.parts[Cabinet.id];\r\n if (cabinet && cabinet.slatWall) {\r\n bvState.slatWallType = cabinet.slatWall.slatWallType;\r\n }\r\n return super.addSpecificPropertiesToLocalStorage(bvState, useNames, returnAllFeatures)\r\n }\r\n\r\n setActiveFeaturesFromObject(...props) {\r\n const cabinet = this.parts[Cabinet.id];\r\n if (cabinet && cabinet.slatWall && props.slatWallType) {\r\n cabinet.slatWall.slatWallType = props.slatWallType;\r\n }\r\n return super.setActiveFeaturesFromObject(...props)\r\n }\r\n\r\n}\r\n\r\nexport default new LaundryRoomLayout()\r\n","import React, {Component} from 'react';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {BathTubType} from \"../bvComponent/core/constants\";\r\nimport {changeQTRoutePath, changeRoutePath} from \"../../misc/changeRoutePath\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\n\r\nexport default class ProjectScopeFunctions extends Component {\r\n\r\n goToMaterialsPageCommon = (subPart, parentName) => {\r\n const layout = getCurrentLayout();\r\n let nextSubPartIndex = 0;\r\n // console.log('subPart', subPart);\r\n if (subPart.partId === \"bathtub\") {\r\n // console.log('subPart', subPart.getParent());\r\n subPart.getParent().handleSubTypeClick(BathTubType.FreeStanding)\r\n }\r\n const subPartName = subPart.partName.replace(/ /g,\"-\").toLowerCase();\r\n if (layout.qtCategories) {\r\n const qtCategory = layout.qtCategories.find(qtCategory => qtCategory.name === parentName);\r\n nextSubPartIndex = qtCategory.subParts.findIndex(subPartItem => {\r\n return subPartItem.part.partId === subPart.partId\r\n });\r\n this.props.setQtActiveCategory(parentName);\r\n } else if (subPart.getParent) {\r\n const subParts = subPart.getParent().subParts(false);\r\n nextSubPartIndex = subParts.findIndex(subPartItem => {\r\n return subPartItem.part.partName.replace(/ /g,\"-\").toLowerCase() === subPartName\r\n });\r\n }\r\n this.props.changeActivePartRelatedItemIndex(nextSubPartIndex);\r\n const parentSimple = (subPart.partName === \"Floor\" && subPart.partId !== \"shower_floor\")\r\n || subPart.partName === \"Toilet\"\r\n || (subPart.partName === \"Ceiling\" &&\r\n (document.kvConfig.visualizerType === \"Bathroom\" || document.kvConfig.visualizerType === \"BV\"))\r\n || subPart.partName === \"Window\";\r\n this.props.toggleSelectionWindow(true, parentSimple ? subPart.partName : subPart.getParent().partName);\r\n this.props.setCameFromPage('quote-design');\r\n if (layout.qtCategories) {\r\n changeQTRoutePath(parentName, nextSubPartIndex);\r\n } else {\r\n changeRoutePath(subPart.getParent ? subPart.getParent() : subPart, nextSubPartIndex, false);\r\n }\r\n };\r\n\r\n getBathroomHomeSections = () => {\r\n const layout = getCurrentLayout();\r\n let\r\n vanityItems = [],\r\n showerAndBathTubItems = [],\r\n otherItems = [];\r\n\r\n if (layout.qtCategories) {\r\n // console.log(\"parentParts\", parentParts);\r\n return layout.qtCategories.map((qtCategory) => {\r\n return {\r\n title: qtCategory.name,\r\n // items: this.checkForWallsComplexGroup(qtCategory)\r\n items: qtCategory.subParts\r\n }\r\n });\r\n }\r\n\r\n layout.getFeatures().forEach((parentGroup) => {\r\n // console.log(partData);\r\n let subParts = parentGroup.subParts();\r\n if (parentGroup) {\r\n if (parentGroup.partName === \"Vanity\") {\r\n subParts.forEach((subPart) => {\r\n if (subPart.part.partId !== \"accent_wall\") {\r\n vanityItems.push(subPart)\r\n }\r\n });\r\n } else if (parentGroup.partName === \"Shower\") {\r\n subParts.forEach((subPart) => {\r\n showerAndBathTubItems.push(subPart)\r\n });\r\n } else if (parentGroup.partName === \"Shower Tub Combo\") {\r\n const excluded = [\"wall_configuration\", \"shower_interior_wall\", \"shower_interior_wall_accent\", \"shower_fixture\", \"shower_door\", \"shower_door_handle\"];\r\n subParts.forEach((subPart) => {\r\n if (!excluded.includes(subPart.part.partId)) {\r\n showerAndBathTubItems.push(subPart)\r\n }\r\n });\r\n } else if (parentGroup.partName === \"Bathtub\") {\r\n // console.log(parentGroup);\r\n if (parentGroup.bathTubBody) {\r\n showerAndBathTubItems.push({\r\n text: parentGroup.bathTubBody.partName,\r\n part: parentGroup.bathTubBody\r\n });\r\n }\r\n if (parentGroup.bathTubFixture) {\r\n showerAndBathTubItems.push({\r\n text: parentGroup.bathTubFixture.partName,\r\n part: parentGroup.bathTubFixture\r\n });\r\n }\r\n } else {\r\n subParts.forEach((subPart) => {\r\n if ((!subPart.part.partId.includes(\"wall\") || subPart.part.partId === \"wall_c\")\r\n && subPart.part.partId !== \"shower_fixture\" && !subPart.part.disableOnHomeSections) {\r\n otherItems.push(subPart)\r\n }\r\n });\r\n }\r\n }\r\n });\r\n\r\n return [\r\n {\r\n title: ,\r\n items: vanityItems,\r\n },\r\n {\r\n title: ,\r\n items: showerAndBathTubItems,\r\n },\r\n {\r\n title: ,\r\n items: otherItems,\r\n },\r\n\r\n ]\r\n };\r\n\r\n getKitchenHomeSections = () => {\r\n const layout = getCurrentLayout();\r\n if (layout.qtCategories) {\r\n // console.log(\"parentParts\", parentParts);\r\n return layout.qtCategories.map((qtCategory) => {\r\n return {\r\n title: qtCategory.name,\r\n // items: this.checkForWallsComplexGroup(qtCategory)\r\n items: qtCategory.subParts\r\n }\r\n });\r\n } else {\r\n const parentParts = layout.getFeatures();\r\n return parentParts.map((parentGroup) => {\r\n return {\r\n title: parentGroup.partName,\r\n items: parentGroup.subParts(false)\r\n }\r\n });\r\n }\r\n };\r\n\r\n getSections = () => {\r\n switch (document.kvConfig.visualizerType) {\r\n case \"Kitchen\":\r\n case \"KV\":\r\n case \"kvMaster\":\r\n case \"kvScene\":\r\n default:\r\n return this.getKitchenHomeSections();\r\n case \"Bathroom\":\r\n case \"BV\":\r\n case \"bvScene\":\r\n case \"bvLook\":\r\n return this.getBathroomHomeSections();\r\n }\r\n };\r\n\r\n}\r\n","import {connect} from \"react-redux\";\r\n\r\nimport {setQuotes} from \"../../../actions/roomsFunctions\";\r\nimport Analytics from \"../../../analytics\";\r\nimport {\r\n changeSqftFeaturesPopup,\r\n setSqftFromFeature,\r\n setSqftMeasureUnit,\r\n setSquareFeet\r\n} from \"../../../actions/sqftFunctions\";\r\nimport {setMaterialsPageSubSteps} from \"../../../actions/selectionFunctions\";\r\nimport {MEASURE_UNITS, SQFT_POST_MESSAGE_ACTIONS} from \"../constants\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {\r\n changeCartItemQuantity,\r\n changeSelectionInfoQuantity,\r\n setCameFromPage,\r\n toggleSelectionFeatureInfo\r\n} from \"../../../actions/actionFunctions\";\r\nimport {toggleShowManualCalculation} from \"../../../actions/sqftManualCalculationFunctions\";\r\nimport {clearAllMenusEvents} from \"../components/canvas/core/workspace/workspaceEvents\";\r\nimport {prepareSQFTData} from \"../components/canvas/core/workspace/workspaceDataMapper\";\r\nimport {useCloseSQFTCalc} from \"./useCloseSQFTCalc\";\r\nimport sqftShapeIntersectionsManager from \"../components/canvas/store/sqftShapeIntersectionsManager\";\r\nimport {saveSQFTDataToQuote} from \"../helpers/sqftQuotesHelper\";\r\n\r\nconst WithAddToQuote = (props) => {\r\n const {activeQuoteIndex} = props;\r\n const {children} = props;\r\n const {closeSQFTCalc} = useCloseSQFTCalc();\r\n\r\n const handleAddToQuoteClick = async () => {\r\n props.changeSqftFeaturesPopup({\r\n opened: true,\r\n sqftPassedData: null,\r\n })\r\n //update slabs features just in case they wasn't changed\r\n sqftShapeIntersectionsManager.updateShapesIntersections();\r\n sqftShapeIntersectionsManager.updateSlabPlaceholderFeatureId();\r\n\r\n let sqftCalcData = await prepareSQFTData();\r\n clearAllMenusEvents();\r\n await saveSQFTDataToQuote(sqftCalcData);\r\n setDataToQt(sqftCalcData, true);\r\n };\r\n\r\n const setDataToQt = (data, stayOnSqft = false) => {\r\n if (data) {\r\n Analytics.sendDataEnteredEvent(\"square-foot-calc-data-entered\");\r\n //this.props.setSqftMeasureUnit(data.measureUnit);\r\n const sqftPassedData = Object.assign({}, data, {\r\n canvasImage: \"\",\r\n sqFtSlabImage: \"\",\r\n sqFtSlabCalcImage:\"\",\r\n sqftApplianceImages: \"\",\r\n images3D: \"\"\r\n });\r\n console.log(\"sqft passedData\", sqftPassedData);\r\n let isLocationNotUsesPopup = false; //always use new popup\r\n // (\r\n // window.location.href.includes(\"quotekitchenandbath\")\r\n // //|| window.location.href.includes(\"quotekandb\")\r\n // //|| window.location.href.includes(\"quotesflooring\")\r\n // //|| window.location.href.includes(\"localhost\")\r\n // )\r\n // && !window.location.href.includes(\"use_sqft_popup=1\");\r\n\r\n if (isLocationNotUsesPopup || !props.useSqftCartPopup) {\r\n setEdgesQuantity(data);\r\n setRadiusQuantity(data);\r\n setBacksplashesQuantity(data);\r\n setCountertopsQuantity(data);\r\n stayOnSqft = false;\r\n } else {\r\n props.changeSqftFeaturesPopup({\r\n opened: true,\r\n sqftPassedData,\r\n })\r\n }\r\n\r\n // this.addSQFTCanvasImageToDocuments(data); // not used anymore! we keep sqFtCalcImage in the quote\r\n\r\n // we already saving data on handleAddToQuoteClick\r\n // // set backup data\r\n // if (!isSqftPassedDataEmpty(data)) {\r\n // updateActiveQuoteWithSQFTData(data);\r\n // }\r\n\r\n // set squareFeet\r\n props.setSquareFeet(data.squareFeet); // param needed to be set to call confirm popup\r\n // set quoting tool sub steps (only if minimum 2 items added)\r\n props.setMaterialsPageSubSteps({\r\n edges: data.edges && data.edges.length > 1 ? data.edges : [],\r\n backsplashes: data.backsplashes && data.backsplashes.length > 1 ? data.backsplashes : [],\r\n });\r\n }\r\n\r\n if (!stayOnSqft) {\r\n closeSQFTCalc();\r\n }\r\n\r\n saveSQFTHistory();\r\n };\r\n\r\n // const saveSQFTData = (data) => {\r\n // const {quotes, activeQuoteIndex} = store.getState().quotesState;\r\n // const newQuotes = [...quotes.map((quote, qIndex) => {\r\n // if (qIndex === activeQuoteIndex) {\r\n // quote.sqFtCalcData = Object.assign({}, data)\r\n // }\r\n // return quote\r\n // })];\r\n //\r\n // setQuotes(newQuotes);\r\n // };\r\n\r\n const setEdgesQuantity = (data) => {\r\n const dataEdges = data.edges;\r\n const edgesIdsObject = {};\r\n dataEdges.forEach((edge) => { // here we need to check all added edges with the same it and plus their length\r\n const edgeLength = data.measureUnit === MEASURE_UNITS.Metric ? edge.length : Math.ceil(edge.length);\r\n const edgeId = +edge.id;\r\n edgesIdsObject[edgeId] = edgesIdsObject[edgeId] ? edgesIdsObject[edgeId] + edgeLength : edgeLength;\r\n });\r\n Object.keys(edgesIdsObject).forEach(edgeId => {\r\n if (data.measureUnit === MEASURE_UNITS.Metric) {\r\n edgesIdsObject[edgeId] = +(edgesIdsObject[edgeId]).toFixed(2)\r\n }\r\n [\"center_island_edge\", \"edge_profile\"].forEach(partId => {\r\n setSubPartQuantity(partId, edgesIdsObject[edgeId], +edgeId)\r\n })\r\n })\r\n };\r\n\r\n const setRadiusQuantity = (data) => {\r\n const radiusCount = [...data.radii, ...data.angles].length;\r\n // let quantity = 0;\r\n // dataRadiuses.forEach(radius => {\r\n // quantity += +radius;\r\n // });\r\n if (radiusCount) {\r\n setSubPartQuantity(\"radius\", radiusCount)\r\n }\r\n };\r\n\r\n const setBacksplashesQuantity = (data) => {\r\n const dataBacksplashes = data.backsplashes;\r\n let quantity = 0;\r\n dataBacksplashes.forEach(backsplash => {\r\n quantity += backsplash.length;\r\n });\r\n if (quantity) {\r\n const backsplashLength = data.measureUnit === MEASURE_UNITS.Metric ? quantity : Math.ceil(quantity);\r\n setSubPartQuantity(\"backsplash\", backsplashLength)\r\n }\r\n };\r\n\r\n const setCountertopsQuantity = (data) => {\r\n const layout = getCurrentLayout();\r\n if (data.manualCalculate && data.squareFeet) { // manual calculate\r\n setSubPartQuantity(\"countertop\", data.squareFeet);\r\n setSubPartQuantity(\"center_island_countertop\", data.squareFeet);\r\n } else {\r\n let countertopSquareFeet = 0;\r\n let centerIslandCountertopSquareFeet = 0;\r\n data.countertops.forEach(shape => {\r\n if (shape.squareFeet) { // countertop & center_island_countertop\r\n (shape.partId === \"countertop\")\r\n ? countertopSquareFeet += shape.squareFeet\r\n : centerIslandCountertopSquareFeet += shape.squareFeet;\r\n }\r\n });\r\n if (layout.qtCategories) {\r\n const countertopIsAdded = countertopIsAddedToQtCategory(\"countertop\");\r\n const centerIslandCountertopIsAdded = countertopIsAddedToQtCategory(\"center_island_countertop\");\r\n if (countertopIsAdded && centerIslandCountertopIsAdded) { // both\r\n setSubPartQuantity(\"countertop\", countertopSquareFeet);\r\n setSubPartQuantity(\"center_island_countertop\", centerIslandCountertopSquareFeet);\r\n } else if (countertopIsAdded && !centerIslandCountertopIsAdded) { // only countertop is added to QTCategories\r\n setSubPartQuantity(\"countertop\", data.squareFeet);\r\n } else if (!countertopIsAdded && centerIslandCountertopIsAdded) {\r\n setSubPartQuantity(\"center_island_countertop\", data.squareFeet);\r\n }\r\n } else {\r\n setSubPartQuantity(\"countertop\", countertopSquareFeet);\r\n setSubPartQuantity(\"center_island_countertop\", centerIslandCountertopSquareFeet);\r\n }\r\n }\r\n };\r\n\r\n const countertopIsAddedToQtCategory = (partId) => {\r\n let countertopExist = false;\r\n const layout = getCurrentLayout();\r\n layout.qtCategories.forEach(qtCategory => {\r\n const subParts = qtCategory.subParts;\r\n const neededSubPart = subParts.find(subPart => subPart.part.partId === partId);\r\n if (neededSubPart) {\r\n countertopExist = true;\r\n }\r\n });\r\n return countertopExist\r\n };\r\n\r\n const setSubPartQuantity = (partId, quantity, dbFeatureId = null) => {\r\n /*** if dbFeatureId is passed - we need to set to the Feature quantity, not the feature group! ***/\r\n const layout = getCurrentLayout();\r\n // 1) update cart items quantity\r\n const cartItem = props.cartItems.find(cartItem => {\r\n return (dbFeatureId\r\n ? cartItem.cartFeature.dbFeature.id === dbFeatureId\r\n : cartItem.partId === partId) && cartItem.currentQuote === activeQuoteIndex;\r\n });\r\n if (cartItem) {\r\n props.changeCartItemQuantity(cartItem, quantity);\r\n }\r\n // 2) update feature info (current) quantity\r\n const activeFeature = props.selectionFeatureInfo;\r\n const updateCurrentFeature = dbFeatureId\r\n ? activeFeature && activeFeature.dbFeature.id === dbFeatureId\r\n : activeFeature && activeFeature.partId === partId\r\n if (updateCurrentFeature) {\r\n props.changeSelectionInfoQuantity(quantity)\r\n }\r\n // 3) update not current quantities\r\n if (layout.qtCategories) {\r\n layout.qtCategories.forEach(qtCategory => {\r\n setFeatureGroupSqftQuantity(qtCategory.subParts, partId, quantity, dbFeatureId)\r\n })\r\n } else {\r\n layout.getFeatures().forEach(parentItem => {\r\n setFeatureGroupSqftQuantity(parentItem.subParts(), partId, quantity, dbFeatureId)\r\n })\r\n }\r\n };\r\n\r\n const setSqftQuantityToSubPartFinal = (dbFeatureId, neededSubPart, quantity) => {\r\n if (dbFeatureId) {\r\n const navItems = neededSubPart.part.navigationSubItems();\r\n const neededFeature = navItems.find(navItem => navItem.part.dbFeature.id === dbFeatureId);\r\n if (neededFeature) {\r\n if (!neededFeature.part.sqftQuantity) {\r\n neededFeature.part.sqftQuantity = {};\r\n }\r\n neededFeature.part.sqftQuantity[activeQuoteIndex] = quantity\r\n } else {\r\n // console.log(\"feature not found, what should we do?\");\r\n }\r\n } else {\r\n if (!neededSubPart.part.sqftQuantity) {\r\n neededSubPart.part.sqftQuantity = {};\r\n }\r\n neededSubPart.part.sqftQuantity[activeQuoteIndex] = quantity\r\n }\r\n };\r\n\r\n const setFeatureGroupSqftQuantity = (subParts, partId, quantity, dbFeatureId) => {\r\n const neededSubPart = subParts.find(subPart => subPart.part.partId === partId);\r\n if (neededSubPart) {\r\n if (!neededSubPart.part.allFeaturesReceived && neededSubPart.part.partId.includes(\"edge\")) {\r\n //todo sqftReact\r\n //this.checkIfAllFeaturesReceived(neededSubPart, \"\", () => {\r\n setSqftQuantityToSubPartFinal(dbFeatureId, neededSubPart, quantity)\r\n //})\r\n } else {\r\n setSqftQuantityToSubPartFinal(dbFeatureId, neededSubPart, quantity)\r\n }\r\n }\r\n };\r\n\r\n // const closeSQFTCalc = (payload) => {\r\n // sendPostMessageToSqft(SQFT_POST_MESSAGE_ACTIONS.stopRender);\r\n // clearAllMenusEvents();\r\n // setSqftFromFeature(null);\r\n // Analytics.sendClickEvent('sqft-close');\r\n // if (payload && payload.measureUnit) {\r\n // props.setSqftMeasureUnit(payload.measureUnit);\r\n // }\r\n // const leaveSqft = () => {\r\n // const redirectToPage = cameFromPage && cameFromPage !== \"sqft\" ? cameFromPage : \"materials\"\r\n // closeSQFTTool(redirectToPage, changeWizardStepRoute);\r\n // if (isObject(cameFromPage) && cameFromPage.partId) {\r\n // props.toggleSelectionFeatureInfo(cameFromPage);\r\n // }\r\n // props.setCameFromPage(\"sqft\");\r\n // };\r\n // if (isFirefox()) {\r\n // setTimeout(() => {\r\n // leaveSqft();\r\n // }, 0)\r\n // } else {\r\n // leaveSqft();\r\n // }\r\n // };\r\n\r\n const sendPostMessageToSqft = () => {\r\n // if (this.iframeElement && this.iframeElement.contentWindow) {\r\n // this.iframeElement.contentWindow.postMessage({action, payload}, window.location.href);\r\n // }\r\n };\r\n // const resetData() {\r\n // closeSQFTCalc();\r\n // sendPostMessageToSqft(SQFT_POST_MESSAGE_ACTIONS.resetHistory);\r\n // }\r\n const saveSQFTHistory = () => {\r\n sendPostMessageToSqft(SQFT_POST_MESSAGE_ACTIONS.saveHistory);\r\n };\r\n\r\n return children(handleAddToQuoteClick, prepareSQFTData);\r\n};\r\n\r\nconst mapStateToProps = (store) => ({\r\n measureUnit: store.sqftState.measureUnit,\r\n quotes: store.quotesState.quotes,\r\n qtActiveCategory: store.qtState.qtActiveCategory,\r\n activeRoomType: store.sqftMenuState.activeRoomType,\r\n cartItems: store.cartState.cartItems,\r\n selectionFeatureInfo: store.selectionState.selectionFeatureInfo,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n sqftVisited: store.sqftState.sqftFeaturesPopup.visited,\r\n isSlabToolVisited: store.sqftSlabState.isSlabToolVisited,\r\n useSqftCartPopup: store.sqftState.sqftFeaturesPopup.enabled,\r\n cameFromPage: store.cartState.cameFromPage\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setQuotes,\r\n setSquareFeet,\r\n setMaterialsPageSubSteps,\r\n changeSqftFeaturesPopup,\r\n toggleSelectionFeatureInfo,\r\n setCameFromPage,\r\n changeCartItemQuantity,\r\n changeSelectionInfoQuantity,\r\n setSqftMeasureUnit,\r\n toggleShowManualCalculation,\r\n setSqftFromFeature,\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(WithAddToQuote);\r\n","import {\r\n SET_ADMIN_LOGIN_POPUP_VISIBLE,\r\n SET_ADMIN_LOGOUT_VISIBLE,\r\n SET_ADMIN_TOOL_SETTINGS_POPUP_VISIBLE\r\n} from \"../../../actions/actionTypes\";\r\n\r\nexport const setAdminLoginPopupVisible = (adminLoginPopupVisible = false) => ({\r\n type: SET_ADMIN_LOGIN_POPUP_VISIBLE,\r\n payload: {adminLoginPopupVisible}\r\n});\r\n\r\nexport const setAdminLogoutVisible = (adminLogoutVisible = false) => ({\r\n type: SET_ADMIN_LOGOUT_VISIBLE,\r\n payload: {adminLogoutVisible}\r\n});\r\n\r\nexport const setAdminToolSettingsPopupVisible = (adminToolSettingsPopupVisible = false, adminToolSettingsPopupFeature = null) => ({\r\n type: SET_ADMIN_TOOL_SETTINGS_POPUP_VISIBLE,\r\n payload: {adminToolSettingsPopupVisible, adminToolSettingsPopupFeature}\r\n});\r\n","import React from 'react';\r\n//import * as ReactDOM from 'react-dom';\r\nimport { injectIntl } from \"react-intl\";\r\nimport { connect } from \"react-redux\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { LookAugmentRealityIcon } from \"../../../../common/icons\";\r\nimport PropTypes from \"prop-types\";\r\nimport SvgIcon from \"@mui/material/SvgIcon\";\r\nimport Button from \"@mui/material/Button\";\r\nimport WebXRGoogleModelViewer from \"./arButtonGoogleWebXR/WebXRGoogleModelViewer\";\r\n\r\nconst ARButtonGoogleWebXR = (props) => {\r\n const { url } = props;\r\n\r\n const activateAR = () => {\r\n const modelViewer = document.querySelector('#arViewer');\r\n if (modelViewer) {\r\n modelViewer.activateAR();\r\n }\r\n };\r\n\r\n return (\r\n
    \r\n \r\n \r\n
    \r\n );\r\n};\r\n\r\nARButtonGoogleWebXR.propTypes = {\r\n url: PropTypes.string,\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n visualizersLoaded: store.serverState.visualizersLoaded,\r\n cabinetsARBlobUrl: store.sqftState.cabinetsARBlobUrl,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default withRouter(\r\n injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(ARButtonGoogleWebXR)\r\n )\r\n);\r\n","import EventManager from \"../canvas/store/sqftEventManager\";\r\nimport workspace from \"../canvas/core/workspace\";\r\nimport config from \"../canvas/store/sqftConfig\";\r\nimport MiteredController from \"../canvas/core/controls/mitered\";\r\nimport FreeDraw from \"../canvas/core/controls/freeDraw\";\r\nimport UnderlaymentController from \"../canvas/core/controls/underlayment\";\r\n\r\nexport const resetEvents = function () {\r\n EventManager.stealCursor(true);\r\n EventManager.resetCursor(self);\r\n workspace.setAllowEdges(false);\r\n workspace.setAllowBumpoutEdges(false);\r\n};\r\n\r\nexport const handleResizeClick = function () {\r\n EventManager.stealCursor(true);\r\n EventManager.resetCursor(this);\r\n workspace.setAllowEdges(true);\r\n workspace.setAllowLineHighlight(true);\r\n setTimeout(function () {\r\n workspace.setAllowLineHighlight(false)\r\n }, 1000)\r\n};\r\n\r\nexport const handleSpacerClick = function () {\r\n // EventManager.stealCursor(true);\r\n // EventManager.resetCursor(this);\r\n // workspace.setAllowEdges(true);\r\n // workspace.setAllowLineHighlight(true);\r\n // setTimeout(function () {\r\n // workspace.setAllowLineHighlight(false)\r\n // }, 1000)\r\n};\r\n\r\nexport const handleRotateClick = function () {\r\n //EventManager.stealCursor(true);\r\n //EventManager.setCursor(\"rotate-left\", this, true);\r\n EventManager.stealCursor(true);\r\n config.workspace.menuItemActive = \"rotate-left\";\r\n};\r\n\r\nexport const handleWallClick = function () {\r\n EventManager.stealCursor(true);\r\n config.workspace.menuItemActive = \"wall\";\r\n FreeDraw.init();\r\n};\r\n\r\nexport const handleDuplicateClick = function () {\r\n EventManager.stealCursor(true);\r\n EventManager.setCursor(\"duplicate\", this, true);\r\n config.workspace.menuItemActive = \"duplicate\";\r\n};\r\n\r\nexport const handleAngleClick = function () {\r\n EventManager.stealCursor(true);\r\n EventManager.resetCursor(self);\r\n config.highlight.rotateAngle = true;\r\n workspace.getShapes().forEach((shape) => {\r\n if (Array.isArray(shape.rotateAngleParts) && shape.rotateAngleParts.length) {\r\n // todo fix bumpout rotation and remove this\r\n if (shape.isWithBumpout()) return;\r\n /////////////////////////////////////////\r\n shape.activateRotateAngle();\r\n }\r\n });\r\n};\r\n\r\nexport const handleTextClick = function () {\r\n};\r\n\r\nexport const handleResetClick = function () {\r\n EventManager.stealCursor(true);\r\n EventManager.resetCursor(self);\r\n};\r\n\r\n//todo sqft-react\r\nexport const handleMiteredClick = () => {\r\n EventManager.stealCursor(true);\r\n EventManager.resetCursor(self);\r\n\r\n // let cursor = new Cursor();\r\n // cursor.setCursorImage('./images/cursors/plus_blue.png');\r\n\r\n if (workspace.miteredController === null) {\r\n workspace.miteredController = new MiteredController();\r\n }\r\n workspace.miteredController.createCursor();\r\n workspace.miteredController.registerEvents();\r\n\r\n workspace.setAllowMiteredEdges(true);\r\n workspace.setAllowLineHighlight(true);\r\n\r\n //Bumpout.addBumpout_onClick();\r\n setTimeout(function () {\r\n workspace.setAllowLineHighlight(false)\r\n }, 1000)\r\n}\r\n\r\n//todo sqft-react\r\nexport const handleUnderlaymentClick = () => {\r\n EventManager.stealCursor(true);\r\n EventManager.resetCursor();\r\n\r\n // let cursor = new Cursor();\r\n // cursor.setCursorImage('./images/cursors/plus_blue.png');\r\n\r\n if (workspace.underlaymentController === null) {\r\n workspace.underlaymentController = new UnderlaymentController();\r\n }\r\n workspace.underlaymentController.createCursor();\r\n workspace.underlaymentController.registerEvents();\r\n\r\n workspace.setAllowMiteredEdges(true);\r\n workspace.setAllowLineHighlight(true);\r\n\r\n //Bumpout.addBumpout_onClick();\r\n setTimeout(function () {\r\n workspace.setAllowLineHighlight(false)\r\n }, 1000)\r\n}\r\n","import React, {Fragment} from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport SearchIcon from '@mui/icons-material/Search';\r\n\r\nimport LookViewTypeSwitcher from \"../../../../../../../look/lookNavigation/lookMain/lookViewTypeSwitcher\";\r\nimport {\r\n SIDEBAR_NAVIGATION_BUTTONS,\r\n SIDEBAR_NAVIGATION_BUTTONS_LEVEL3\r\n} from \"../../../../../../constants\";\r\nimport {\r\n setSQFTActiveButton,\r\n setSQFTActiveLevel3Button,\r\n setSQFTMenuOpened\r\n} from \"../../../../../../../../actions/sqftMenuFunctions\";\r\nimport {setLookActiveCategory} from \"../../../../../../../../actions/lookFunctions\";\r\nimport {showFilters} from \"../../../../../../../../actions/actionFunctions\";\r\nimport {setGroheFiltersSearchText} from \"../../../../../../../../actions/groheFunctions\";\r\nimport {getFeatureGroupName} from \"../../../../../../../../misc/helpers\";\r\nimport {getCurrentLayout} from \"../../../../../../../appLayout\";\r\n\r\nconst SQFTFeaturesHeader = (props) => {\r\n const { headerTitle, partId } = props;\r\n //const {searchInputValue , setSearchInput} = props;\r\n const { intl, setSQFTActiveButton, setSQFTMenuOpened, activeLevel3Button, setSQFTActiveLevel3Button,\r\n setLookActiveCategory, showFilters, isFiltersOpened, setGroheFiltersSearchText, fabricatorData } = props;\r\n\r\n const handleClose = () => {\r\n setSQFTMenuOpened(SIDEBAR_NAVIGATION_BUTTONS.move);\r\n setSQFTActiveButton(SIDEBAR_NAVIGATION_BUTTONS.move);\r\n }\r\n\r\n const handleSearchClick = (e) => {\r\n void e;\r\n if (activeLevel3Button === SIDEBAR_NAVIGATION_BUTTONS_LEVEL3.filters) {\r\n setSQFTActiveLevel3Button(null);\r\n setGroheFiltersSearchText(\"\");\r\n showFilters(false);\r\n } else {\r\n setLookActiveCategory(partId); // set filters featureGroup\r\n showFilters(!isFiltersOpened);\r\n setSQFTActiveLevel3Button(SIDEBAR_NAVIGATION_BUTTONS_LEVEL3.filters);\r\n }\r\n }\r\n\r\n // const handleInputChange = (e) => {\r\n // setSearchInput(e.target.value);\r\n // }\r\n let featureGroupName = \"\";\r\n if (partId) {\r\n const layout = getCurrentLayout();\r\n const featureGroup = layout.getFeatureGroupByPartId(partId);\r\n featureGroupName = getFeatureGroupName(featureGroup, intl, fabricatorData);\r\n }\r\n\r\n return (\r\n \r\n
    \r\n \r\n \r\n \r\n
    \r\n { headerTitle ? headerTitle : featureGroupName }\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n {/*
    */}\r\n {/* */}\r\n {/* /!**!/*/}\r\n {/*
    */}\r\n
    \r\n )\r\n}\r\n\r\nSQFTFeaturesHeader.protoTypes = {\r\n featureTitleId: PropTypes.string,\r\n partId: PropTypes.string\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n activeLevel3Button: store.sqftMenuState.activeLevel3Button,\r\n isFiltersOpened: store.filterState.showFilters,\r\n fabricatorData: store.fabricatorState,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setSQFTActiveButton,\r\n setSQFTMenuOpened,\r\n setSQFTActiveLevel3Button,\r\n setLookActiveCategory,\r\n showFilters,\r\n setGroheFiltersSearchText\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(SQFTFeaturesHeader)\r\n);\r\n","import * as types from './actionTypes';\r\n\r\nexport const setIframeIntegrationRequest = (iframeIntegrationRequest) => ({\r\n type: types.SET_IFRAME_INTEGRATION_REQUEST,\r\n payload: {iframeIntegrationRequest}\r\n})\r\n\r\nexport const setIframeIntegrationResponse = (iframeIntegrationResponse) => ({\r\n type: types.SET_IFRAME_INTEGRATION_RESPONSE,\r\n payload: {iframeIntegrationResponse}\r\n})\r\n","import React, {useState} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport ExpandMore from \"@mui/icons-material/ExpandMore\";\r\n\r\nimport FeatureThumbnail from \"../../visComponents/featureThumbnail\";\r\nimport FeatureName from \"../../visComponents/featureName\";\r\nimport LookFeaturePrice from \"../lookNavigation/lookMain/lookListFeature/lookFeaturePrice\";\r\nimport LookListMainFeatureActions from \"./listFeatureActions/lookListMainFeatureActions\";\r\nimport LookFeatureQuantity from \"./lookFeatureQuantity\";\r\nimport {cartItemInterface} from \"../../shoppingCart/cartItemInterface\";\r\nimport LookListBundleFeatures from \"./lookListBundleFeatures\";\r\nimport {cartItemInStock, featureIsBundle, getBundledFeatures} from \"../lookNavigation/lookFunctions2\";\r\nimport {IS_LIXIL_SERVERS, IS_PRODUCT_JOURNEY} from \"../../../config\";\r\nimport GroheCartItemActions from \"../grohe/groheCart/groheCartItemActions\";\r\nimport LookListMainFeatureCheckbox from \"./lookListMainFeatureCheckbox\";\r\nimport LookListMainFeatureShipping from \"./lookListMainFeatureShipping\";\r\nimport {getFeatureGroupName, getFeatureIsLocked} from \"../../../misc/helpers\";\r\nimport LookFeatureSku from \"../lookNavigation/lookMain/lookFeature/lookFeatureSku\";\r\n\r\nconst LookListMainFeature = (props) => {\r\n\r\n const {intl, cartItem, quantity, cartItems, isBundleChild, showUnlockCalculations, showCartItems, cItemsAddedToParentCart,\r\n isMobile, withShipping, isPhoneNumberValidated, fabricatorData} = props;\r\n\r\n const fabricatorSettings = fabricatorData.settings;\r\n const {cartFeature} = cartItem;\r\n const [bundleExpanded, setBundleExpanded] = useState(true);\r\n\r\n const outOfStock = (\r\n \r\n \r\n \r\n );\r\n\r\n const expandBundleButton = (\r\n setBundleExpanded(!bundleExpanded)}>\r\n \r\n \r\n );\r\n\r\n const relatedFeatures = getBundledFeatures(cartFeature);\r\n const isBundle = featureIsBundle(cartFeature, cartItems);\r\n const inStock = cartItemInStock(cartItem);\r\n const isBundleParent = isBundle && cartFeature.partId === \"shower_fixture\" && relatedFeatures.length > 1;\r\n\r\n const showPriceLocked = getFeatureIsLocked(cartFeature) || (fabricatorSettings.enableQuote && !isPhoneNumberValidated);\r\n\r\n return (\r\n
  • \r\n
    \r\n {withShipping ? null : }\r\n
    \r\n \r\n
    \r\n
    \r\n \r\n {isBundle\r\n ? : null}\r\n \r\n

    \r\n {IS_LIXIL_SERVERS\r\n ? \r\n : cartFeature.getParent ? getFeatureGroupName(cartFeature.getParent(), intl, fabricatorData) : null}\r\n

    \r\n {!withShipping ? (\r\n

    \r\n \r\n {/*{isInStock(lookActiveFeature) ? null : (*/}\r\n {/* */}\r\n {/* */}\r\n {/**/}\r\n {/*)}*/}\r\n

    \r\n ) : null}\r\n {withShipping ? : null}\r\n
    \r\n {(isMobile && withShipping) || !fabricatorSettings.showPricing ? null : (\r\n
    \r\n {isBundleParent ? null : (\r\n inStock ? : outOfStock\r\n )}\r\n
    \r\n )}\r\n {isBundle ? (\r\n
    \r\n {expandBundleButton}\r\n
    \r\n ) : null}\r\n {isBundleParent ? null : (\r\n
    \r\n \r\n
    \r\n )}\r\n {(isMobile && withShipping) || !fabricatorSettings.showPricing ? null\r\n : IS_PRODUCT_JOURNEY\r\n ? \r\n : }\r\n
    \r\n {isBundle && bundleExpanded ? : null}\r\n
  • \r\n )\r\n};\r\n\r\nLookListMainFeature.propTypes = {\r\n cartItem: PropTypes.shape(cartItemInterface).isRequired,\r\n withShipping: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n const {lookExpanded, lookViewType} = store.lookState;\r\n const {cartItems, cItemsAddedToParentCart} = store.cartState;\r\n const {showUnlockCalculations, showCartItems} = store.unlockCalculationsState;\r\n const {isMobile} = store.serverState;\r\n const {isPhoneNumberValidated} = store.userState;\r\n const fabricatorData = store.fabricatorState;\r\n\r\n return {\r\n lookExpanded,\r\n lookViewType,\r\n quantity: ownProps.cartItem.quantity,\r\n cartItems,\r\n showUnlockCalculations,\r\n showCartItems,\r\n cItemsAddedToParentCart,\r\n isMobile,\r\n fabricatorData,\r\n isPhoneNumberValidated,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookListMainFeature)\r\n)\r\n","import React, {PureComponent} from 'react';\r\nimport { hashHistory } from \"react-router\";\r\nimport classnames from 'classnames';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nclass HomeButton extends PureComponent {\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default HomeButton\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport $ from 'jquery';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {\r\n toggleSelectionWindow, setCameFromPage, setQtActiveCategory, changeActivePartRelatedItemIndex\r\n} from \"../../actions/actionFunctions\";\r\nimport Analytics from './../../analytics';\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport ProjectScopeFunctions from '../projectScope/projectScopeFunctions';\r\n\r\nclass MobileMenu extends ProjectScopeFunctions {\r\n\r\n static propTypes = {\r\n smallButton: PropTypes.bool,\r\n smallButtonClassName: PropTypes.string\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n toggle: false,\r\n showRelatedItems: false,\r\n showSubNav: false\r\n };\r\n }\r\n\r\n componentWillUnmount() {\r\n $(document).off('click', this.handleMobileBlur);\r\n }\r\n\r\n handleItemClick = (bvDataPart) => {\r\n Analytics.sendClickEvent(\"mobile-menu-item\");\r\n const layout = getCurrentLayout();\r\n if(bvDataPart === \"Return to Website\") {\r\n this.setState({showSubNav: true});\r\n } else {\r\n $(document).off('click', this.handleMobileBlur);\r\n if (layout.qtCategories) {\r\n const qtCategory = layout.qtCategories.find(qtCategory => qtCategory.name === bvDataPart);\r\n this.goToMaterialsPageCommon(qtCategory.subParts[0].part, bvDataPart);\r\n } else {\r\n this.goToMaterialsPageCommon(layout.parts[bvDataPart].subParts(false)[0].part, bvDataPart);\r\n }\r\n }\r\n };\r\n\r\n handleBack = () => {\r\n if(this.state.showSubNav) {\r\n this.setState({showSubNav: false});\r\n } else {\r\n this.handleToggleDropdown();\r\n }\r\n };\r\n\r\n handleToggleDropdown = () => {\r\n Analytics.sendClickEvent(\"mobile-menu-toggle-\" + (this.state.toggle ? 'show': 'hide'));\r\n this.setState({\r\n toggle: !this.state.toggle,\r\n showSubNav: false\r\n }, () => {\r\n this.state.toggle\r\n ? $(document).on('click', this.handleMobileBlur)\r\n : $(document).off('click', this.handleMobileBlur)\r\n })\r\n };\r\n\r\n handleMobileBlur = (e) => {\r\n const navClick = e.target.closest('[class*=\"mobmenu\"]');\r\n const backButtonClick = e.target.closest('.ui-back');\r\n if (!navClick && !backButtonClick) {\r\n this.handleToggleDropdown();\r\n }\r\n };\r\n\r\n getMenuItems = () => {\r\n const layout = getCurrentLayout();\r\n if (!layout) {\r\n return []\r\n }\r\n if (this.props.mobileNav && this.props.mobileNav.length > 0 && window.location.href.includes(\"materials\")) {\r\n return [\"Return to Website\"]\r\n }\r\n let menu = (layout.qtCategories)\r\n ? layout.qtCategories.map(qtCategory => qtCategory.name)\r\n : [...this.props.layoutParts]\r\n if (this.props.mobileNav && this.props.mobileNav.length > 0) {\r\n menu.unshift(\r\n \"Return to Website\"\r\n );\r\n }\r\n return menu\r\n };\r\n\r\n render() {\r\n\r\n const menuItems = this.getMenuItems();\r\n\r\n return menuItems.length ? (\r\n
    \r\n {this.props.smallButton ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
    \r\n
    \r\n \r\n
    \r\n {this.props.mobileNav && this.props.mobileNav.length > 0 ?\r\n \r\n : null }\r\n \r\n
    \r\n
    \r\n ) : null\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n layoutParts: store.stepsState.layoutParts,\r\n mobileNav: store.navigationState.mobileNav\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n toggleSelectionWindow,\r\n setCameFromPage,\r\n setQtActiveCategory,\r\n changeActivePartRelatedItemIndex\r\n})(MobileMenu);\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {connect} from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport {toFixedFeatureCost, TAX_DISCOUNT_PCT, getFeatureUnit, getPriceWithCurrency} from \"../../../misc/helpers\";\r\nimport {cartItemInterface} from \"../../shoppingCart/cartItemInterface\";\r\nimport {getPriceWithIncluded} from \"../../../misc/priceFunctions\";\r\nimport FeaturePriceInput from \"./featurePriceInput\";\r\n\r\nconst FeatureInfoPrice = (props) => {\r\n\r\n let {\r\n mainFeaturePrice = false,\r\n selectionFeatureInfo,\r\n showDiscount = false,\r\n fabricatorData,\r\n isPhoneNumberValidated,\r\n intl,\r\n unitAfter,\r\n withTotalSlabCost,\r\n cartItemEditFeature,\r\n qtActiveCategory,\r\n showPrice,\r\n } = props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n if (mainFeaturePrice && fabricatorSettings.leadCaptureShoppingCart && !isPhoneNumberValidated) {\r\n return null\r\n }\r\n\r\n if ((typeof showPrice !== 'undefined') && !showPrice && !(document.kvConfig.isBackend && selectionFeatureInfo && selectionFeatureInfo.dbFeature\r\n && selectionFeatureInfo.dbFeature.priceEditable)) {\r\n return null\r\n }\r\n\r\n selectionFeatureInfo = props.feature || selectionFeatureInfo;\r\n\r\n let quantity = 1;\r\n if (mainFeaturePrice) { // price is changing depending on quantity\r\n quantity = (props.accItemQuantity || (props.accItemQuantity === 0))\r\n ? props.accItemQuantity\r\n : props.selectionInfoQuantity || 1\r\n }\r\n const price = toFixedFeatureCost(selectionFeatureInfo, quantity, qtActiveCategory, withTotalSlabCost, cartItemEditFeature);\r\n const salePercentage = TAX_DISCOUNT_PCT;\r\n const priceOld = Math.trunc((price + price*salePercentage/100) * 100) / 100;\r\n\r\n if (mainFeaturePrice) {\r\n return (\r\n
    \r\n
    \r\n {getPriceWithIncluded(price, selectionFeatureInfo, fabricatorData, intl.messages)}\r\n
    \r\n {/*
    (${selectionFeatureInfo.dbFeature.unit || \"Each\"})
    */}\r\n
    \r\n )\r\n }\r\n\r\n const unit = getFeatureUnit(selectionFeatureInfo, intl, fabricatorData, quantity);\r\n\r\n const getPriceSection = () => {\r\n\r\n // if unitAfter then it is row item, we don't need it to show in row view\r\n if (!unitAfter && document.kvConfig.isBackend && selectionFeatureInfo && selectionFeatureInfo.dbFeature\r\n && selectionFeatureInfo.dbFeature.priceEditable) {\r\n return \r\n }\r\n\r\n return (\r\n
    \r\n \r\n {!price\r\n ? getPriceWithIncluded(price, selectionFeatureInfo, fabricatorData, intl.messages)\r\n : unitAfter\r\n ? getPriceWithCurrency(fabricatorSettings, price, selectionFeatureInfo)\r\n : `${getPriceWithCurrency(fabricatorSettings, price, selectionFeatureInfo)} (${unit})`}\r\n \r\n {price && unitAfter ? ({unit}) : null}\r\n
    \r\n )\r\n }\r\n\r\n return (\r\n
    \r\n {showDiscount && price ? {getPriceWithCurrency(fabricatorSettings, priceOld, selectionFeatureInfo)} : null}\r\n {getPriceSection()}\r\n {showDiscount && price ? (\r\n \r\n {`${intl.formatMessage({id: \"quotingTool.featureInfo.discountSavePercent\"})} ${getPriceWithCurrency(fabricatorSettings, Math.trunc((priceOld - price) * 100) / 100, selectionFeatureInfo)} (${salePercentage}%)`}\r\n \r\n ) : null}\r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n selectionFeatureInfo: store.selectionState.selectionFeatureInfo,\r\n featureInfoCount: store.selectionState.featureInfoCount, // to update component when price is changed\r\n fabricatorData: store.fabricatorState,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n selectionInfoQuantity: store.selectionState.selectionInfoQuantity,\r\n qtActiveCategory: store.qtState.qtActiveCategory,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n\r\n};\r\n\r\nFeatureInfoPrice.propTypes = {\r\n feature: PropTypes.object,\r\n mainFeaturePrice: PropTypes.bool,\r\n accItemQuantity: PropTypes.number,\r\n size: PropTypes.string,\r\n unitAfter: PropTypes.bool,\r\n withTotalSlabCost: PropTypes.bool,\r\n showPrice: PropTypes.bool,\r\n cartItemEditFeature: PropTypes.shape(cartItemInterface),\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(FeatureInfoPrice)\r\n);\r\n","export const getListItemHeight = (props) => {\r\n\r\n const {isMobile, selectionWindowView, itemsList} = props;\r\n\r\n // console.log(\"itemsList\", itemsList);\r\n\r\n if (isMobile || !itemsList || !itemsList.current) {\r\n return 0\r\n }\r\n let widthPercentage = 32.3;\r\n switch(selectionWindowView) {\r\n case 1:\r\n widthPercentage = 32.3;\r\n break;\r\n case 2:\r\n widthPercentage = 24;\r\n break;\r\n case 3:\r\n widthPercentage = 19;\r\n break;\r\n default:\r\n break;\r\n }\r\n return Math.round(itemsList.current.clientWidth*widthPercentage/100);\r\n\r\n};\r\n\r\nexport const shouldReplaceSelectionInfoFeature = (selectedFeature) => {\r\n if ((document.kvConfig.visualizerType === \"bvScene\" || document.kvConfig.visualizerType === \"bvLook\")\r\n && selectedFeature.getParent) {\r\n const featureG = selectedFeature.getParent();\r\n if (featureG && featureG.oneLayerPosition && featureG.activeFeature\r\n && (featureG.activeFeature.dbFeature.id !== selectedFeature.dbFeature.id)\r\n && featureG.activeFeature.getMatchingFeatureName && selectedFeature.getMatchingFeatureName\r\n && (featureG.activeFeature.getMatchingFeatureName() === selectedFeature.getMatchingFeatureName())) {\r\n selectedFeature = featureG.activeFeature; // we changed left change to right in nav position modal\r\n }\r\n }\r\n return selectedFeature\r\n}\r\n","import React, {Component, Fragment} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport {\r\n setCameFromPage,\r\n toggleSelectionFeatureInfo\r\n} from \"../../../actions/actionFunctions\";\r\n\r\nimport {UserPopupTypes} from \"../../visComponents/constants\";\r\nimport Analytics from \"../../../analytics\";\r\nimport {getFeatureIsLocked, toFixedFeatureCost} from '../../../misc/helpers';\r\nimport FeatureThumbnail from \"../../visComponents/featureThumbnail\";\r\nimport FeatureName from \"../../visComponents/featureName\";\r\nimport FeatureCartItemsCount from \"../featureCartItemsCount\";\r\nimport {getPriceWithIncluded} from \"../../../misc/priceFunctions\";\r\nimport Config from \"../../../config\";\r\nimport {wizardGroupInterface} from \"../../../interfaces/wizardItemInterface\";\r\nimport {shouldReplaceSelectionInfoFeature} from \"../../qkbPages/materialsCommon/materialsCommonFunctions\";\r\nimport SuperAdminFeatureToolSettingsButton from \"../../qkbPages/superAdmin/SuperAdminFeatureToolSettingsButton\";\r\nimport {getDifferentToolSettings} from \"../../qkbPages/superAdmin/adminFunctions\";\r\n// import MaterialsWizardAddToCartAndSkipButton\r\n// from \"../../qkbPages/materialsWizard/materialsWizardAddToCartAndSkipButton\";\r\n\r\nclass SelectionGridItem extends Component {\r\n\r\n static propTypes = {\r\n currentFeature: PropTypes.object.isRequired,\r\n handleFeatureClick: PropTypes.func.isRequired,\r\n checkIfFeatureSelected: PropTypes.func.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n handleUserLoginClick: PropTypes.func.isRequired,\r\n isWizard: PropTypes.bool,\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n };\r\n\r\n // handleInfoClick = () => {\r\n // const {isPhoneNumberValidated, fabricatorData, currentFeature, handleUserLoginClick} = this.props;\r\n // const fabricatorSettings = fabricatorData.settings;\r\n //\r\n // if ((fabricatorSettings.leadCaptureOnQuote && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) && (!currentFeature.part.dbFeature.unlocked && !isPhoneNumberValidated)){\r\n // handleUserLoginClick();\r\n // } else {\r\n // toggleSelectionFeatureInfo(currentFeature.part);\r\n // }\r\n // };\r\n\r\n goToFeatureInfo = () => {\r\n const selectedFeature = shouldReplaceSelectionInfoFeature(this.props.currentFeature.part);\r\n this.props.toggleSelectionFeatureInfo(selectedFeature);\r\n this.props.setCameFromPage(\"materials\"); // no more visualizer or shoppingcart switch\r\n };\r\n\r\n render() {\r\n\r\n const {currentFeature, fabricatorData, isPhoneNumberValidated, styles, showAdvancedQuoting, qtActiveCategory, intl,\r\n language, isWizard, wizardGroup} = this.props;\r\n const selected = this.props.checkIfFeatureSelected(currentFeature.part);\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n const featureIsLocked = getFeatureIsLocked(currentFeature.part);\r\n\r\n const hidePriceNoCart = isWizard && wizardGroup && wizardGroup.hidePriceNoCart;\r\n const wizardSkipAndAddToCartButtonVisible = isWizard && wizardGroup && (wizardGroup.skipProductInfo || hidePriceNoCart);\r\n\r\n const getQuoteEnabled = fabricatorSettings.enableQuote && !featureIsLocked;\r\n const quoteOrUnlockButtonVisible = (featureIsLocked || (getQuoteEnabled && !isPhoneNumberValidated))\r\n && !wizardSkipAndAddToCartButtonVisible;\r\n\r\n const showPrice = fabricatorSettings.showPricing && !fabricatorData.hideCheckoutBreakdownCost && !featureIsLocked\r\n && !fabricatorData.hidePricesFromUser && !hidePriceNoCart;\r\n\r\n const isAddToCartButtonVisible = selected && fabricatorSettings.showPricing && !featureIsLocked && !quoteOrUnlockButtonVisible && !showAdvancedQuoting\r\n && !wizardSkipAndAddToCartButtonVisible;\r\n\r\n const infoButtonVisible = !wizardSkipAndAddToCartButtonVisible;\r\n\r\n const price = toFixedFeatureCost(currentFeature.part, 1, qtActiveCategory);\r\n\r\n return (\r\n
    this.props.handleFeatureClick(currentFeature, event)}\r\n onDoubleClick={infoButtonVisible ? this.goToFeatureInfo : null}>\r\n \r\n \r\n {currentFeature.part.vanitySize ?\r\n {currentFeature.part.vanitySize}\" : null\r\n }\r\n \r\n {selected ? (\r\n
    \r\n {isAddToCartButtonVisible ? (\r\n \r\n ) : null}\r\n {/*{wizardSkipAndAddToCartButtonVisible*/}\r\n {/* ? */}\r\n {/* : null}*/}\r\n {quoteOrUnlockButtonVisible ? (\r\n \r\n ) : null}\r\n {infoButtonVisible ? : null}\r\n
    \r\n ) : null}\r\n {/*{currentFeature.part.notAvailableInVisualizer ? (*/}\r\n {/*Not in Visualizer*/}\r\n {/*) : null}*/}\r\n
    \r\n {showPrice ? (\r\n \r\n {getPriceWithIncluded(price, currentFeature.part, fabricatorData, intl.messages)}\r\n \r\n ) : null}\r\n {featureIsLocked ? null : }\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {language} = store.serverState;\r\n const {adminToolSettingsPopupVisible} = store.adminState;\r\n return {\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n fabricatorData: store.fabricatorState,\r\n filterGroups: store.filterState.filterGroups,\r\n showAdvancedQuoting: store.advancedQuotingState.showAdvancedQuoting,\r\n qtActiveCategory: store.qtState.qtActiveCategory,\r\n language,\r\n adminToolSettingsPopupVisible,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n toggleSelectionFeatureInfo,\r\n setCameFromPage\r\n}\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(SelectionGridItem)\r\n);\r\n","import PropTypes from \"prop-types\";\r\n\r\nexport const shiftFilterTitleInterface = {\r\n shiftTitleIndex: PropTypes.number,\r\n filterValue: PropTypes.object.isRequired,\r\n elementIndex: PropTypes.number,\r\n positionTop: PropTypes.number,\r\n columnPosition: PropTypes.number,\r\n type: PropTypes.string\r\n};\r\n","import React, {useEffect} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport {setStaticCanvasImage} from \"../../actions/visualizerFunctions\";\r\nimport {getRoomImageFromQtCategory} from \"../../misc/categorySwitchingFunctions\";\r\nimport {getCommonVisualizerType} from \"../../config\";\r\n\r\nconst HardcodedCanvasImage = (props) => {\r\n\r\n const {disableLoader, enableLoader, staticCanvasImage, fabricatorData, qtActiveCategory, setStaticCanvasImage,\r\n activePartRelatedItemIndex, activeQuoteIndex, cartItems, visualizerIsChanging} = props;\r\n\r\n useEffect(() => {\r\n // console.log(\"qtActiveCategory\", qtActiveCategory);\r\n if (!fabricatorData.settings.useCategorySwitching || !qtActiveCategory || !window.location.href.includes(\"materials\")) {\r\n return null\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n if (!layout.qtCategories) {\r\n return null\r\n }\r\n const currentRoomName = qtActiveCategory.trim().toLowerCase();\r\n const currentQtCat = layout.qtCategories.find(qtCategory => qtCategory.name === qtActiveCategory);\r\n\r\n const {fabricatorSubscriptions} = fabricatorData;\r\n\r\n if (currentRoomName !== getCommonVisualizerType().toLowerCase()\r\n && currentQtCat\r\n && currentQtCat.subParts[activePartRelatedItemIndex]\r\n && currentQtCat.subParts[activePartRelatedItemIndex].part.partId !== \"room\"\r\n && (!fabricatorData.settings.allowVisualizerSwitching || !fabricatorSubscriptions.some(subscription => subscription && subscription.service.toLowerCase() === currentRoomName))) {\r\n // allowVisualizerSwitching is turned off - show image, or check, if there are no available visualizers with clicked room\r\n setStaticCanvasImage(getRoomImageFromQtCategory(qtActiveCategory, fabricatorData.settings));\r\n } else if (staticCanvasImage) {\r\n setStaticCanvasImage(\"\");\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [qtActiveCategory])\r\n\r\n useEffect(() => {\r\n if (visualizerIsChanging) {\r\n return\r\n }\r\n setStaticCanvasImage(getRoomImageFromQtCategory(\"\", activeQuoteIndex));\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [activeQuoteIndex, cartItems, visualizerIsChanging]) // update when visualizer is switched\r\n\r\n if (!staticCanvasImage) {\r\n return null\r\n }\r\n\r\n return (\r\n
    \r\n disableLoader ? disableLoader() : null}\r\n onLoadStart={() => enableLoader ? enableLoader() : null}\r\n alt=\"\"\r\n src={staticCanvasImage} />\r\n
    \r\n )\r\n};\r\n\r\nHardcodedCanvasImage.propTypes = {\r\n enableLoader: PropTypes.func,\r\n disableLoader: PropTypes.func,\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {staticCanvasImage} = store.bathroomVisualizerState;\r\n const fabricatorData = store.fabricatorState;\r\n const {qtActiveCategory} = store.qtState;\r\n const {activePartRelatedItemIndex} = store.selectionState;\r\n const {activeQuoteIndex} = store.quotesState;\r\n const {cartItems} = store.cartState;\r\n const {visualizerIsChanging} = store.serverState;\r\n\r\n return {\r\n staticCanvasImage,\r\n fabricatorData,\r\n qtActiveCategory,\r\n activePartRelatedItemIndex,\r\n activeQuoteIndex,\r\n cartItems,\r\n visualizerIsChanging,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setStaticCanvasImage\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(HardcodedCanvasImage);\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport {loaderDisable, loaderEnable} from \"./loaderView\";\r\nimport {getNavigationButtons} from \"../../api/server-api\";\r\nimport NoInternetIcon from \"./icons/noInternetIcon\";\r\n\r\nconst NoInternetOverlay = (props) => {\r\n\r\n // const {networkConnection, showAdvancedQuoting, isMobile} = props;\r\n const {networkConnection} = props;\r\n\r\n if (networkConnection) { // show only if internet is offline\r\n return null\r\n }\r\n\r\n const retryConnectionClick = async () => {\r\n loaderEnable();\r\n await getNavigationButtons(true);\r\n loaderDisable();\r\n }\r\n\r\n return (\r\n //
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {networkConnection, isMobile} = store.serverState;\r\n const {showAdvancedQuoting} = store.advancedQuotingState;\r\n return {\r\n networkConnection,\r\n isMobile,\r\n showAdvancedQuoting,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(NoInternetOverlay)\r\n","import React, {Fragment} from \"react\";\r\n\r\nexport default {\r\n \"vanity_faucet\": (\r\n \r\n ),\r\n \"bathtub_fixture\": (\r\n \r\n ),\r\n \"bathtub_body\": (\r\n \r\n ),\r\n // \"shower_fixture\": (\r\n // \r\n // \r\n // \r\n // \r\n // \r\n // \r\n // \r\n // \r\n // \r\n // \r\n // \r\n // \r\n // \r\n // ),\r\n \"shower_fixture\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"shower_head\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"shower_arm\": (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"shower_head_bundle\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"shower_door\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"shower_wall\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"shower_pan_combo\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"hand_shower_kit\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"replacement_tub\": (\r\n \r\n \r\n \r\n \r\n ),\r\n \"toilet\": (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"vanity_sink\": (\r\n \r\n \r\n \r\n \r\n ),\r\n \"vanity_pedestal_sink\": (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"vanity_countertop\": (\r\n \r\n \r\n \r\n \r\n ),\r\n \"submenu_accessories\": (\r\n \r\n \r\n \r\n ),\r\n \"vanity_cabinet\": (\r\n \r\n ),\r\n \"vanity_console\": (\r\n \r\n \r\n \r\n ),\r\n \"vanity_legs\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"vanity_middle\": (\r\n \r\n ),\r\n \"vanity_washstand\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"vanity_ptrap\": (\r\n \r\n ),\r\n \"soap_dish\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"glass_holder\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"paper_holder\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"robe_hook\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"towel_bar\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"towel_ring\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"corner_shelf\": (\r\n \r\n ),\r\n \"grab_bar\": (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"shower_seats\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n //*** KITCHEN ICONS ***//\r\n \"faucet\": (\r\n \r\n ),\r\n \"backsplash\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"sink\": (\r\n \r\n \r\n \r\n \r\n ),\r\n \"top_cabinet\": (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"bottom_cabinet\": (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"hood\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"countertop\": (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"crown_molding\": (\r\n \r\n ),\r\n \"range\": (\r\n \r\n \r\n \r\n ),\r\n \"oven\": (\r\n \r\n \r\n \r\n ),\r\n \"fridge\": (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"handle\": (\r\n \r\n ),\r\n \"stove\": (\r\n \r\n ),\r\n \"center_island_stovetop\": (\r\n \r\n ),\r\n \"center_island_countertop\": (\r\n \r\n ),\r\n \"center_island_faucet\": (\r\n \r\n ),\r\n \"center_island_sink\": (\r\n \r\n \r\n \r\n \r\n ),\r\n \"floor\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"bathroom_floor\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"kitchen_floor\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"edge_profile\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"center_island_edge\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"vanity_backsplash\": (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"wall_union\": (\r\n \r\n ),\r\n};\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {getPriceWithCurrency, toFixedPrice} from \"../../../../../misc/helpers\";\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport LookFeaturePrice from \"./lookFeaturePrice\";\r\n\r\nconst LookFeaturePairPrice = (props) => {\r\n\r\n const {lookFeature, fabricatorSettings} = props;\r\n\r\n if (fabricatorSettings.showSalePrices && (typeof lookFeature.dbFeature.fabricatorCost == \"number\")\r\n && (lookFeature.dbFeature.fabricatorCost !== lookFeature.dbFeature.cost)) {\r\n return (\r\n
    \r\n \r\n {/* old price is cost property, the new one is fabricatorCost*/}\r\n {getPriceWithCurrency(fabricatorSettings, toFixedPrice(lookFeature.dbFeature.cost), lookFeature)}\r\n \r\n \r\n \r\n \r\n
    \r\n )\r\n }\r\n\r\n return \r\n};\r\n\r\nLookFeaturePairPrice.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface),\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {settings} = store.fabricatorState;\r\n return {\r\n fabricatorSettings: settings,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(LookFeaturePairPrice)\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport Button from \"@mui/material/Button\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\n\r\nimport Analytics, {PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport {enableSquareFootage, setSqftFromFeature, setSquareFootageGroup} from \"../../../../../actions/sqftFunctions\";\r\nimport {setCameFromPage} from \"../../../../../actions/actionFunctions\";\r\nimport {GroheSQFTIcon} from \"../../../../common/icons\";\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport {canShowSqftButtonForFeature, canShowSqftCabinetButtonForFeature} from \"../../../../../misc/helpers\";\r\nimport {SQFT_GROUP} from \"../../../../sqft/constants\";\r\n\r\nconst GroheFeatureSQFTButton = (props) => {\r\n\r\n const {featureOpened, shopPageOpened, setCameFromPage, setSqftFromFeature, className, isIcon, intl,\r\n fabricatorSettings, enableSquareFootage, setSquareFootageGroup} = props;\r\n\r\n if (featureOpened) {\r\n if (!canShowSqftButtonForFeature(featureOpened, fabricatorSettings) && !canShowSqftCabinetButtonForFeature(featureOpened, fabricatorSettings)) {\r\n return null\r\n }\r\n }\r\n\r\n const handleSQFTButtonClick = () => {\r\n Analytics.sendClickEvent(shopPageOpened\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.shopSQFTButton\r\n : PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureSQFT);\r\n if (featureOpened) {\r\n setSqftFromFeature({cartFeature: featureOpened});\r\n setCameFromPage(featureOpened);\r\n }\r\n // change url to get cabinets group\r\n // const sqftUrl = (featureOpened && canShowSqftCabinetButtonForFeature(featureOpened, fabricatorSettings))\r\n // ? ROUTES.sqft + \"?cabinets=1\"\r\n // : ROUTES.sqft\r\n // history.push(sqftUrl);\r\n\r\n // use redux to get cabinets group\r\n if (featureOpened && canShowSqftCabinetButtonForFeature(featureOpened, fabricatorSettings)) {\r\n setSquareFootageGroup(SQFT_GROUP.cabinets)\r\n }\r\n enableSquareFootage(true);\r\n };\r\n\r\n if (isIcon) {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n )\r\n};\r\n\r\nGroheFeatureSQFTButton.propTypes = {\r\n featureOpened: PropTypes.shape(featureInterface),\r\n className: PropTypes.string,\r\n isIcon: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {shopPageOpened} = store.shopState;\r\n const {settings} = store.fabricatorState;\r\n return {\r\n shopPageOpened,\r\n fabricatorSettings: settings,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setCameFromPage,\r\n setSqftFromFeature,\r\n setSquareFootageGroup,\r\n enableSquareFootage,\r\n};\r\n\r\nexport default withRouter(\r\n injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(GroheFeatureSQFTButton)\r\n )\r\n)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport ErrorIcon from \"@mui/icons-material/Error\";\r\n\r\n\r\nconst GroheFeatureSoldOut = (props) => {\r\n const {disabled, intl, fabricatorData} = props;\r\n if (!disabled) {\r\n return null\r\n }\r\n\r\n return (\r\n
    \r\n {fabricatorData.isAmericanStandard ? null : (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n
    \r\n )\r\n};\r\n\r\nGroheFeatureSoldOut.propTypes = {\r\n disabled: PropTypes.bool\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const fabricatorData = store.fabricatorState;\r\n return {\r\n fabricatorData\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(GroheFeatureSoldOut)\r\n)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\n// import FeatureDescription from \"../../../../visComponents/featureDescription\";\r\nimport FeatureName from \"../../../../visComponents/featureName\";\r\n\r\nimport SvgIcon from \"@mui/material/SvgIcon\";\r\nimport {GroheLockIcon} from \"../../../../common/icons\";\r\nimport Analytics, {PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport {setLookOverlayOpened} from \"../../../../../actions/lookFunctions\";\r\nimport {LOOK_OVERLAYS} from \"../../../core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\n\r\n\r\nconst GroheFeatureLockedBadge = (props) => {\r\n\r\n const {lookActiveFeature, setLookOverlayOpened} = props;\r\n\r\n if (!lookActiveFeature) {\r\n return null\r\n }\r\n\r\n const lockedButtonClick = () => {\r\n Analytics.sendClickEvent(PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureLockedBadge);\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture);\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n

    \r\n \r\n

    \r\n {/*{lookActiveFeature.dbFeature.sku ? (*/}\r\n {/*

    */}\r\n {/* \r\n {/*

    */}\r\n {/*) : null}*/}\r\n {/*{lookActiveFeature.dbFeature.description ? (*/}\r\n {/*
    */}\r\n {/* */}\r\n {/*
    */}\r\n {/*) : null}*/}\r\n
    \r\n \r\n
    \r\n

    \r\n \r\n

    \r\n
    \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeature} = store.lookState;\r\n\r\n return {\r\n lookActiveFeature,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookOverlayOpened,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(GroheFeatureLockedBadge)\r\n","import * as types from \"./actionTypes\";\r\n\r\nexport const setGroheWizardOpened = (wizardOpened = false) => ({\r\n type: types.SET_GROHE_WIZARD_OPENED,\r\n payload: {wizardOpened}\r\n});\r\n\r\nexport const setGroheWizardName = (wizardName = false) => ({\r\n type: types.SET_GROHE_WIZARD_NAME,\r\n payload: {wizardName}\r\n});\r\n\r\nexport const setGroheWizardStep = (wizardStep = false) => ({\r\n type: types.SET_GROHE_WIZARD_STEP,\r\n payload: {wizardStep}\r\n});\r\n","import React, {useEffect, useState, Fragment} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport {getCurrentLayout} from \"../../../../appLayout\";\r\nimport MaterialSpinner from \"../../../../ui/materialSpinner\";\r\nimport LookVirtualizedList from \"./lookVirtualizedList\";\r\nimport {useIsMounted, usePrevious} from \"../../../../../misc/helperHooks\";\r\nimport GroheVirtualizedList from \"../../../grohe/groheNavigation/groheFeatures/groheVirtualizedList\";\r\nimport {getFeatureGroupName, getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport {LOOK_NAVIGATION_LIST_TYPES, LOOK_OVERLAYS} from \"../../../core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport {getLixilRequiredNotIncludedFeatures} from \"../../../grohe/groheNavigation/groheFunctions\";\r\nimport {setGroheRequiredButNotIncludedFeature} from \"../../../../../actions/groheFunctions\";\r\nimport LookFeatureRemoveButton from \"../lookFeatureRemoveButton\";\r\nimport WithUpdateLookCartItem from \"../../../hocs/withUpdateLookCartItem\";\r\nimport LookListFeature from \"../lookListFeature/lookListFeature\";\r\nimport LookFiltersReset from \"../../lookFilters/lookFiltersReset\";\r\nimport {\r\n getReorderedItems,\r\n getNavigationItemsLists,\r\n getSortedNavItems,\r\n pricingIsLocked, getReplacedNavItemsWithUnlockedFeatures\r\n} from \"../../lookNavigationFunctions\";\r\nimport {setLookLockedTutorial} from \"../../../../../actions/lookFunctions\";\r\nimport {scrolledVerticalToTheEnd} from \"../../../../visComponents/navigation/navUtils\";\r\nimport {checkIfLookFeaturesReceived, getAdditionalFeaturesOnScroll} from \"../../../../../api/look-api\";\r\nimport NavigationLoader from \"../../../ui/navigationLoader\";\r\n// import {COUNTERTOP_GROUP} from \"../../../../kvComponent/core/constants\";\r\nimport {\r\n checkIfNeedToReceiveFeaturesIfFiltersApplied,\r\n getFeaturesFromBackendWithFilters\r\n} from \"../../../../../misc/filtersFunctions\";\r\nimport LookMainCategoryLoading from \"./lookMainCategoryLoading\";\r\nimport Analytics from \"../../../../../analytics\";\r\nimport {getAnalyticsEcommerceItem} from \"../../../../../analyticsEcommerceParams\";\r\nimport {setNavigationLoading} from \"../../../../../actions/navigationFunctions\";\r\n\r\n\r\nconst LookMainCategory = (props) => {\r\n\r\n const {lookActiveFeature, lookViewType, lookActiveCategory, contentHeight, isMobile, filterGroups, intl,\r\n fabricatorData, groheFiltersSearchText, selectedFilters, requiredButNotIncludedFeature, navigationCount,\r\n setGroheRequiredButNotIncludedFeature, lookActiveFeaturePositionInList, lookViewTypeWasChanged, lookLockedTutorial,\r\n setLookLockedTutorial, allFeaturesWereLoaded, contextMenu, wizardActiveItem, navigationLoadingActive,\r\n setNavigationLoading, isPhoneNumberValidated, lookOverlayOpened} = props;\r\n\r\n const [navItemsLists, setNavItemsLists] = useState([]);\r\n const [firstOpenedFeature, setFirstOpenedFeature] = useState(null);\r\n const [firstOpenedConditions, setFirstOpenedConditions] = useState(null);\r\n\r\n const [shouldRunAnalytics, setShouldRunAnalytics] = useState(false);\r\n\r\n const isMounted = useIsMounted();\r\n const prevActiveCategory = usePrevious(lookActiveCategory);\r\n\r\n const layout = getCurrentLayout();\r\n const featureGroup = lookActiveFeature ? lookActiveFeature.getParent() : layout.getFeatureGroupByPartId(lookActiveCategory);\r\n\r\n // const [, forceUpdate] = useReducer(x => x + 1, 0);\r\n\r\n const setReceivedFeatures = async () => {\r\n if (lookActiveCategory && isMounted()) {\r\n let forFeature = lookActiveFeature;\r\n if (featureGroup && !featureGroup.allFeaturesReceived && !featureGroup.requestInProgress) {\r\n setShouldRunAnalytics(true);\r\n checkIfLookFeaturesReceived(featureGroup);\r\n return // we will update this component when navigationCount is changed\r\n }\r\n if (Array.isArray(selectedFilters) && selectedFilters.length && featureGroup && !featureGroup.requestInProgress) {\r\n const checkPassed = checkIfNeedToReceiveFeaturesIfFiltersApplied(selectedFilters, featureGroup);\r\n if (checkPassed) {\r\n setNavigationLoading(true);\r\n await getFeaturesFromBackendWithFilters(featureGroup, checkPassed.arrayOfNeededFiltersToReceive);\r\n if (!isMounted()) {\r\n return\r\n }\r\n setNavigationLoading(false);\r\n }\r\n }\r\n if (!forFeature && featureGroup && isMobile && !IS_PRODUCT_JOURNEY) {\r\n forFeature = featureGroup.activeFeature\r\n }\r\n let navFeatures;\r\n if (requiredButNotIncludedFeature) {\r\n navFeatures = getLixilRequiredNotIncludedFeatures(requiredButNotIncludedFeature).map((feature) => ({part: feature}))\r\n setNavItemsLists([{\r\n type: LOOK_NAVIGATION_LIST_TYPES.regular,\r\n navItems: navFeatures\r\n }]);\r\n } else if (featureGroup) {\r\n const firstFeature = firstOpenedFeature && firstOpenedFeature.partId === lookActiveCategory ? firstOpenedFeature : null;\r\n const firstConditions = firstOpenedFeature && firstOpenedFeature.partId === lookActiveCategory ? firstOpenedConditions : null;\r\n navFeatures = layout.designNavigationItems(\r\n {part: featureGroup},\r\n selectedFilters,\r\n groheFiltersSearchText,\r\n forFeature,\r\n \"all\", // added for non lixil fabricators to display not in visualizer features\r\n filterGroups,\r\n {firstFeature, firstConditions},\r\n );\r\n\r\n if (featureGroup.partId === \"vanity_sink\" && contextMenu.clickedOnItem) {\r\n if (contextMenu.clickedOnItem === \"vanity_pedestal_sink\") {\r\n navFeatures = navFeatures.filter(navItem => {\r\n return navItem.part.metaData[\"MountType\"] && navItem.part.metaData[\"MountType\"].includes(\"ST\")\r\n })\r\n } else if (contextMenu.clickedOnItem === \"vanity_sink\") {\r\n navFeatures = navFeatures.filter(navItem => {\r\n return !navItem.part.metaData[\"MountType\"] || !navItem.part.metaData[\"MountType\"].includes(\"ST\")\r\n })\r\n }\r\n }\r\n\r\n navFeatures = getReplacedNavItemsWithUnlockedFeatures(navFeatures, filterGroups);\r\n\r\n // here we sort features\r\n navFeatures = getReorderedItems(navFeatures, lookActiveFeature, lookActiveCategory, featureGroup);\r\n\r\n if (!wizardActiveItem && lookActiveCategory\r\n && (!prevActiveCategory || (prevActiveCategory !== lookActiveCategory) || shouldRunAnalytics)) {\r\n if (shouldRunAnalytics) {\r\n setShouldRunAnalytics(false);\r\n }\r\n Analytics.sendEcommerceEvent(\"view_item_list\", {\r\n item_list_id: featureGroup.partId,\r\n item_list_name: featureGroup.dbName || featureGroup.partName || \"\",\r\n items: navFeatures.map((navItem, navItemIndex) => getAnalyticsEcommerceItem(navItem.part, 1, navItemIndex))\r\n });\r\n }\r\n\r\n if (typeof lookActiveFeaturePositionInList === \"number\") { // swap places with clicked position (is used only for cases when 1) option click 2) navigation item click)\r\n const currentPositionInList = navFeatures.findIndex(navItem => navItem.part.dbFeature.id === lookActiveFeature.dbFeature.id);\r\n if (currentPositionInList >= 0 && currentPositionInList !== lookActiveFeaturePositionInList) {\r\n [navFeatures[currentPositionInList], navFeatures[lookActiveFeaturePositionInList]] = [navFeatures[lookActiveFeaturePositionInList], navFeatures[currentPositionInList]]\r\n }\r\n }\r\n\r\n const nItemsLists = getNavigationItemsLists(navFeatures, lookActiveFeature);\r\n\r\n if (fabricatorData.settings.leadCapture && !lookLockedTutorial.finished && !isPhoneNumberValidated\r\n && !IS_PRODUCT_JOURNEY && featureGroup.allFeaturesReceived && !(isMobile && lookActiveFeature)\r\n && !wizardActiveItem && !(lookOverlayOpened && (lookOverlayOpened === LOOK_OVERLAYS.intro))) {\r\n let firstLockedIndex, firstUnlockedIndex;\r\n if (nItemsLists.length === 1) {\r\n firstLockedIndex = nItemsLists[0].navItems.findIndex(navItem => getFeatureIsLocked(navItem.part));\r\n firstUnlockedIndex = nItemsLists[0].navItems.findIndex(navItem => !getFeatureIsLocked(navItem.part));\r\n }\r\n setLookLockedTutorial({\r\n visible: true,\r\n withGrid: nItemsLists.length === 1,\r\n firstLockedIndex,\r\n firstUnlockedIndex,\r\n })\r\n }\r\n\r\n setNavItemsLists(nItemsLists);\r\n }\r\n //console.log(\"navItems\", navItems);\r\n // forceUpdate(1);\r\n // setTimeout(() => {\r\n // if (isMounted()) {\r\n // forceUpdate(1);\r\n // }\r\n // }, 500)\r\n // setTimeout(() => {\r\n // if (isMounted()) {\r\n // forceUpdate(1);\r\n // }\r\n // }, 1500)\r\n // setTimeout(() => {\r\n // if (isMounted()) {\r\n // forceUpdate(1);\r\n // }\r\n // }, 3000)\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n setReceivedFeatures();\r\n return () => {\r\n if (requiredButNotIncludedFeature && lookActiveFeature) {\r\n let reqFeatures = getLixilRequiredNotIncludedFeatures(requiredButNotIncludedFeature);\r\n reqFeatures.push(requiredButNotIncludedFeature);\r\n if (!reqFeatures.find(navItem => navItem.dbFeature.id === lookActiveFeature.dbFeature.id)) {\r\n setGroheRequiredButNotIncludedFeature(null);\r\n }\r\n } else if(requiredButNotIncludedFeature && !lookActiveFeature) {\r\n setGroheRequiredButNotIncludedFeature(null);\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [lookActiveCategory, groheFiltersSearchText, selectedFilters, requiredButNotIncludedFeature,\r\n setGroheRequiredButNotIncludedFeature, navigationCount, lookOverlayOpened]);\r\n\r\n useEffect(() => {\r\n if (lookActiveCategory) {\r\n setFirstOpenedFeature(lookActiveFeature);\r\n if (lookActiveFeature && lookActiveFeature.getParent) {\r\n setFirstOpenedConditions(lookActiveFeature.getParent().getArrayOfConditions(true))\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [lookActiveCategory]);\r\n\r\n // if (!visualizersLoadedLength) {\r\n // return \r\n // }\r\n\r\n if (wizardActiveItem) { // why we need this render? not sure. probably because of the useEffect, didn't removed for now\r\n return null\r\n }\r\n\r\n if (IS_PRODUCT_JOURNEY && !lookActiveFeature) {\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n }\r\n\r\n if (featureGroup && !featureGroup.allFeaturesReceived) {\r\n return \r\n }\r\n\r\n let featureGroupName = \"\";\r\n if (IS_PRODUCT_JOURNEY) {\r\n featureGroupName = getFeatureGroupName(featureGroup, intl, fabricatorData);\r\n }\r\n\r\n const showFeaturesOnly = lookActiveCategory && !layout.partIdExistInQtCategory(lookActiveCategory, true); // to prevent calculating features on each render\r\n // const showAllWallsCheckbox = lookActiveFeature && showFeaturesOnly && LOOK_WALLS_ONLY.includes(lookActiveFeature.partId);\r\n\r\n const desRecNavItemList = navItemsLists.find(navItemList => navItemList.type === LOOK_NAVIGATION_LIST_TYPES.designRec);\r\n const regularNavItemList = navItemsLists.find(navItemList => navItemList.type === LOOK_NAVIGATION_LIST_TYPES.regular);\r\n const notMatchingNavItemList = navItemsLists.filter(navItemList => navItemList.type === LOOK_NAVIGATION_LIST_TYPES.notMatchingMeta);\r\n\r\n if (!regularNavItemList) {\r\n return null\r\n }\r\n\r\n const onScrollHandler = async (scrollObject) => {\r\n if (!featureGroup || allFeaturesWereLoaded.includes(document.kvConfig.visualizerType)) {\r\n return;\r\n }\r\n if (featureGroup.getRealFeaturesReceivedProperty() || !scrolledVerticalToTheEnd(scrollObject)) {\r\n return\r\n }\r\n setNavigationLoading(true);\r\n await getAdditionalFeaturesOnScroll(featureGroup);\r\n await setReceivedFeatures();\r\n await new Promise(resolve => setTimeout(resolve, 300));\r\n setNavigationLoading(false);\r\n }\r\n\r\n const onEventScrollHandler = (event) => {\r\n onScrollHandler(event.target)\r\n }\r\n\r\n if (IS_PRODUCT_JOURNEY) {\r\n let allProducts = regularNavItemList.navItems;\r\n if (desRecNavItemList && desRecNavItemList.navItems) {\r\n allProducts = [...desRecNavItemList.navItems, ...regularNavItemList.navItems];\r\n }\r\n if (notMatchingNavItemList && notMatchingNavItemList.length) {\r\n notMatchingNavItemList.forEach(navItemList => {\r\n allProducts = [...allProducts, ...navItemList.navItems];\r\n })\r\n }\r\n const {isLixil, pricingLocked} = pricingIsLocked();\r\n if (!isLixil && pricingLocked) {\r\n allProducts = getSortedNavItems(allProducts);\r\n }\r\n return (\r\n \r\n {isMobile ? null : (\r\n \r\n
    \r\n {featureGroupName} ({regularNavItemList.navItems.length})\r\n {/*{showAllWallsCheckbox ? (*/}\r\n {/*
    */}\r\n {/* */}\r\n {/*
    */}\r\n {/*) : null}*/}\r\n {/*{!showAllWallsCheckbox && lookActiveFeature && lookActiveFeature.getParent().canBeDisabled && showFeaturesOnly ? (*/}\r\n {lookActiveFeature && lookActiveFeature.getParent().canBeDisabled && showFeaturesOnly ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n )}\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n {navigationLoadingActive ? : null}\r\n
    \r\n )\r\n }\r\n\r\n return (\r\n \r\n {(updateLookCartItem) => {\r\n\r\n if (!selectedFilters.length && !desRecNavItemList && !notMatchingNavItemList.length && regularNavItemList) {\r\n // simple list, react virtualized, all as usual\r\n return (\r\n \r\n
    \r\n \r\n
    \r\n {navigationLoadingActive ? : null}\r\n
    \r\n )\r\n }\r\n\r\n return (\r\n \r\n
    \r\n {desRecNavItemList || selectedFilters.length ? (\r\n \r\n

    \r\n \r\n

    \r\n {selectedFilters.length && (!desRecNavItemList || !desRecNavItemList.navItems.length) ? (\r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n ) : null}\r\n {desRecNavItemList ? (\r\n
    \r\n {desRecNavItemList.navItems.map(navItem => {\r\n return \r\n })}\r\n
    \r\n ) : null}\r\n
    \r\n ) : null}\r\n {regularNavItemList.navItems.length ? (\r\n \r\n

    \r\n {regularNavItemList.navTranslate && notMatchingNavItemList.length ? : null}\r\n {regularNavItemList.navTranslate && notMatchingNavItemList.length ? \" \" : null}\r\n \r\n

    \r\n
    \r\n {regularNavItemList.navItems.map(navItem => {\r\n return \r\n })}\r\n
    \r\n
    \r\n ) : null}\r\n {notMatchingNavItemList.length ? notMatchingNavItemList.map((navItemList) => {\r\n return (\r\n \r\n

    \r\n \r\n

    \r\n
    \r\n {navItemList.navItems.map(navItem => {\r\n return \r\n })}\r\n
    \r\n
    \r\n )\r\n }) : null}\r\n
    \r\n {navigationLoadingActive ? : null}\r\n
    \r\n )\r\n }}\r\n
    \r\n )\r\n};\r\n\r\nLookMainCategory.propTypes = {\r\n contentHeight: PropTypes.number\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeature, lookViewType, lookActiveCategory, lookActiveFeaturePositionInList, lookViewTypeWasChanged,\r\n navigationCount, lookLockedTutorial, contextMenu, lookOverlayOpened} = store.lookState;\r\n const {visualizersLoaded, isMobile, allFeaturesWereLoaded} = store.serverState;\r\n const partId = lookActiveFeature ? lookActiveFeature.getParent().partId : \"\";\r\n const {selectedFilters, filterGroups} = store.filterState;\r\n const {groheFiltersSearchText, requiredButNotIncludedFeature} = store.groheState;\r\n const {wizardActiveItem} = store.wizardState;\r\n const {navigationLoadingActive} = store.navigationState;\r\n const {isPhoneNumberValidated} = store.userState;\r\n // const {activePreset} = store.bathroomVisualizerState;\r\n\r\n return {\r\n isMobile,\r\n lookActiveFeature,\r\n lookViewType,\r\n lookActiveCategory,\r\n lookViewTypeWasChanged,\r\n visualizersLoadedLength: visualizersLoaded.length,\r\n partId,\r\n fabricatorData: store.fabricatorState,\r\n filterGroups,\r\n groheFiltersSearchText,\r\n selectedFilters,\r\n requiredButNotIncludedFeature,\r\n lookActiveFeaturePositionInList,\r\n navigationCount,\r\n lookLockedTutorial,\r\n allFeaturesWereLoaded,\r\n contextMenu,\r\n wizardActiveItem,\r\n navigationLoadingActive,\r\n isPhoneNumberValidated,\r\n lookOverlayOpened,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setGroheRequiredButNotIncludedFeature,\r\n setLookLockedTutorial,\r\n setNavigationLoading,\r\n};\r\n\r\nexport default injectIntl (\r\n connect(mapStateToProps, mapDispatchToProps)(LookMainCategory)\r\n);\r\n","import React, {Fragment, useEffect, useRef} from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport ReplayIcon from '@mui/icons-material/Replay';\r\nimport {setLookRestoreState, updateNavigationCount} from \"../../../../../actions/lookFunctions\";\r\nimport WithZoomToFeature from \"../../../hocs/withZoomToFeature\";\r\nimport LookCanvasContext from \"../../../lookCanvasContext\";\r\n// import LookFeatureRevertButtonModal from \"./lookFeatureRevertButtonModal\";\r\nimport {getCurrentLayout} from \"../../../../appLayout\";\r\nimport WithUpdateLookCartItem from \"../../../hocs/withUpdateLookCartItem\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\n\r\n\r\nconst LookFeatureRevertButton = (props) => {\r\n\r\n const {lookActiveFeature, intl, updateNavigationCount, lookRestoreState, setLookRestoreState, isMobile,\r\n lookActiveCategory, currentActiveFeature} = props;\r\n const anchorRef = useRef(null);\r\n // const [showRevertModal, setShowRevertModal] = useState(false);\r\n\r\n useEffect(() => {\r\n if (((!isMobile && lookActiveFeature) || (isMobile && lookActiveCategory)) && !lookRestoreState) {\r\n const layout = getCurrentLayout();\r\n setLookRestoreState(layout.getActiveFeaturesAsObject(false, false, true));\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [lookActiveFeature, lookActiveCategory])\r\n\r\n if (!isMobile && !lookActiveFeature) {\r\n return null\r\n }\r\n\r\n if (isMobile && !lookActiveCategory) {\r\n return null\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n const featureGroup = lookActiveFeature ? lookActiveFeature.getParent() : layout.getFeatureGroupByPartId(lookActiveCategory);\r\n\r\n if (!featureGroup) {\r\n return null\r\n }\r\n\r\n const revertButtonClick = (zoomToFeatureGroup, updateLookCartItem) => {\r\n if (!lookRestoreState) {\r\n return false\r\n }\r\n const layout = getCurrentLayout();\r\n layout.setActiveFeaturesFromObject(lookRestoreState);\r\n if (!isMobile) {\r\n zoomToFeatureGroup(featureGroup.partId);\r\n setLookRestoreState(null);\r\n }\r\n updateNavigationCount();\r\n updateLookCartItem(featureGroup.lookActiveFeature, true);\r\n };\r\n\r\n const disabled = !lookRestoreState\r\n || !lookRestoreState[featureGroup.partId]\r\n || (currentActiveFeature && (lookRestoreState[featureGroup.partId] === currentActiveFeature.dbFeature.id))\r\n\r\n return (\r\n \r\n {(imageCanvas) => (\r\n \r\n {(zoomToFeatureGroup) => (\r\n \r\n {(updateLookCartItem) => {\r\n\r\n if (IS_PRODUCT_JOURNEY) {\r\n return isMobile ? (\r\n revertButtonClick(zoomToFeatureGroup, updateLookCartItem)}>\r\n \r\n \r\n ) : (\r\n
    \r\n setShowRevertModal(true)}\r\n // onMouseLeave={() => setShowRevertModal(false)}\r\n onClick={() => revertButtonClick(zoomToFeatureGroup, updateLookCartItem)}>\r\n \r\n \r\n \r\n
    \r\n )\r\n }\r\n\r\n return (\r\n \r\n setShowRevertModal(true)}\r\n // onMouseLeave={() => setShowRevertModal(false)}\r\n onClick={() => revertButtonClick(zoomToFeatureGroup, updateLookCartItem)}>\r\n \r\n \r\n {/*{isMobile ? null : (*/}\r\n {/* */}\r\n {/*)}*/}\r\n \r\n )\r\n }}\r\n
    \r\n )}\r\n
    \r\n )}\r\n
    \r\n )\r\n};\r\n\r\nLookFeatureRevertButton.propTypes = {\r\n // lookFeature: PropTypes.shape(featureInterface),\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeature, lookRestoreState, lookActiveCategory} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n\r\n let currentActiveFeature = lookActiveFeature;\r\n if (isMobile && lookActiveCategory) {\r\n const layout = getCurrentLayout();\r\n const featureGroup = layout.getFeatureGroupByPartId(lookActiveCategory);\r\n currentActiveFeature = featureGroup ? featureGroup.activeFeature : null;\r\n }\r\n\r\n return {\r\n lookActiveCategory,\r\n lookActiveFeature,\r\n lookRestoreState,\r\n isMobile,\r\n currentActiveFeature,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n updateNavigationCount,\r\n setLookRestoreState,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookFeatureRevertButton)\r\n)\r\n","import React, {Fragment} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport Button from \"@mui/material/Button\";\r\nimport ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport ChevronLeftIcon from \"@mui/icons-material/ChevronLeft\";\r\n\r\nimport {\r\n setWizardActiveStep,\r\n setWizardSelectedValues,\r\n setWizardShowFeatureSection\r\n} from \"../../../../../actions/wizardFunctions\";\r\nimport {getCurrentGroups, getCurrentWizardNavItems} from \"./lookWizardFunctions\";\r\nimport LookWizardContentFinalPrice from \"./lookWizardContentFinalPrice\";\r\nimport GroheWizardCompletedButtons from \"../../../grohe/groheNavigation/groheWizard/groheWizardCompletedButtons\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport GroheMobileFooterFiltersButton from \"../../../grohe/groheMobile/groheMobileFooterFiltersButton\";\r\nimport GroheMobileFooterViewButton from \"../../../grohe/groheMobile/groheMobileFooterViewButton\";\r\nimport WithUpdateLookCartItem from \"../../../hocs/withUpdateLookCartItem\";\r\n\r\nconst LookWizardContentButtons = (props) => {\r\n\r\n const {wizardActiveItem, wizardActiveStep, setWizardActiveStep, wizardSelectedValues, setWizardSelectedValues,\r\n isMobile, intl, filterGroups, wizardShowFeatureSection, setWizardShowFeatureSection,\r\n groheActiveFeatureQuantity} = props;\r\n\r\n if (!wizardActiveItem) {\r\n return null\r\n }\r\n\r\n const currentGroups = getCurrentGroups(wizardActiveItem, wizardActiveStep, wizardSelectedValues);\r\n const wizardGroup = currentGroups[0];\r\n\r\n const onSkipClick = () => {\r\n // const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n // if (featureGroup && featureGroup.activeFeature) {\r\n // disableFeature(featureGroup.activeFeature, updateLookCartItem);\r\n // updateCanvasCount();\r\n // }\r\n setWizardSelectedValues({\r\n [wizardActiveStep]: {\r\n wizardGroup,\r\n }\r\n });\r\n setWizardActiveStep(wizardActiveStep + 1);\r\n }\r\n\r\n const startAgain = () => {\r\n setWizardSelectedValues({}, true);\r\n setWizardActiveStep(0);\r\n }\r\n\r\n const previousClick = () => {\r\n // const newValues = Object.assign({}, wizardSelectedValues);\r\n // delete newValues[wizardActiveStep];\r\n // delete newValues[wizardActiveStep - 1];\r\n // setWizardSelectedValues(newValues, true);\r\n setWizardActiveStep(wizardActiveStep - 1)\r\n }\r\n\r\n const nextClick = () => {\r\n if (!wizardSelectedValues[wizardActiveStep]) {\r\n onSkipClick();\r\n } else {\r\n if (IS_PRODUCT_JOURNEY) {\r\n setWizardSelectedValues({\r\n [wizardActiveStep]: {\r\n ...(wizardSelectedValues[wizardActiveStep] || {}),\r\n quantity: groheActiveFeatureQuantity,\r\n }\r\n });\r\n }\r\n setWizardActiveStep(wizardActiveStep + 1);\r\n }\r\n }\r\n\r\n const returnClick = () => {\r\n setWizardShowFeatureSection(false);\r\n }\r\n\r\n // const closeWizardClick = () => {\r\n // Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookWizardCompletedClose);\r\n // history.push(getLookIdUrl());\r\n // };\r\n\r\n const skipEnabled = wizardActiveStep > -1 && currentGroups.length === 1 && wizardGroup.notRequired;\r\n const isCompletedStep = wizardActiveStep > -1 && !currentGroups.length;\r\n\r\n let nextDisabled = !wizardSelectedValues[wizardActiveStep];\r\n if (nextDisabled && currentGroups.length === 1 && wizardGroup.nodeType === \"group\") {\r\n const navItems = getCurrentWizardNavItems(wizardSelectedValues, wizardActiveStep, wizardActiveItem, wizardGroup, null, filterGroups);\r\n nextDisabled = !!navItems.length;\r\n }\r\n\r\n if (isMobile) {\r\n\r\n if (IS_PRODUCT_JOURNEY) {\r\n\r\n if (wizardActiveStep === -1) {\r\n return (\r\n \r\n )\r\n }\r\n\r\n if (isCompletedStep) {\r\n return \r\n }\r\n\r\n return (\r\n \r\n {isCompletedStep || currentGroups.length > 1 ? null : (\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n {wizardShowFeatureSection ? null : (\r\n \r\n {skipEnabled ? (\r\n \r\n ) : null}\r\n \r\n \r\n )}\r\n \r\n )\r\n }\r\n\r\n return (\r\n
    \r\n {(wizardActiveStep > -1 && currentGroups.length) ? (\r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n {skipEnabled ? (\r\n
    \r\n \r\n \r\n \r\n
    \r\n ) : null}\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n ) : null}\r\n
    \r\n )\r\n }\r\n\r\n return (\r\n \r\n
    \r\n {(wizardActiveStep === -1) ? (\r\n \r\n ) : null}\r\n {(wizardActiveStep > -1 && currentGroups.length) ? (\r\n \r\n \r\n \r\n \r\n ) : null}\r\n {isCompletedStep && IS_PRODUCT_JOURNEY ? (\r\n \r\n ) : null}\r\n {isCompletedStep && !IS_PRODUCT_JOURNEY ? (\r\n \r\n ) : null}\r\n
    \r\n
    \r\n {skipEnabled ? (\r\n \r\n \r\n \r\n \r\n ) : null}\r\n {isCompletedStep && IS_PRODUCT_JOURNEY ? : null}\r\n {/*{isCompletedStep ? (*/}\r\n {/* */}\r\n {/* */}\r\n {/* */}\r\n {/*) : null}*/}\r\n
    \r\n
    \r\n )\r\n\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n // const {activePreset, bvPresets} = store.bathroomVisualizerState;\r\n const {wizardActiveItem, wizardActiveStep, wizardSelectedValues, wizardShowFeatureSection} = store.wizardState;\r\n const {isMobile} = store.serverState;\r\n const {filterGroups} = store.filterState;\r\n // const fabricatorData = store.fabricatorState;\r\n const {groheActiveFeatureQuantity} = store.groheState;\r\n\r\n return {\r\n // activePreset,\r\n // bvPresets,\r\n wizardActiveItem,\r\n wizardActiveStep,\r\n wizardSelectedValues,\r\n isMobile,\r\n filterGroups,\r\n wizardShowFeatureSection,\r\n // fabricatorData,\r\n groheActiveFeatureQuantity,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setWizardActiveStep,\r\n setWizardSelectedValues,\r\n setWizardShowFeatureSection\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)((props) => {\r\n return (\r\n \r\n {(updateLookCartItem) => }\r\n \r\n )\r\n })\r\n)\r\n","import { combineReducers } from 'redux';\r\nimport { loadingBarReducer } from 'react-redux-loading-bar';\r\n\r\nimport stepsReducer from \"./stepsReducer\";\r\nimport selectionReducer from \"./selectionReducer\";\r\nimport serverReducer from \"./serverReducer\";\r\nimport bathroomVisualizerReducer from \"./bathroomVisualizerReducer\";\r\nimport loaderReducer from \"./loaderReducer\";\r\nimport userReducer from \"./userReducer\";\r\nimport cartReducer from \"./cartReducer\";\r\nimport instReducer from \"./instReducer\";\r\nimport messageBoxReducer from \"./messageBoxReducer\";\r\nimport filterReducer from './filterReducer';\r\nimport navigationReducer from './navigationReducer';\r\nimport fabricatorReducer from './fabricatorReducer';\r\nimport sqftReducer from './sqftReducer';\r\nimport docuSignReducer from './docuSignReducer';\r\nimport qtReducer from './qtReducer';\r\nimport tutorialReducer from './tutorialReducer';\r\nimport contractSigningReducer from \"./contractSigningReducer\";\r\nimport initialFlowReducer from \"./initialFlowReducer\";\r\nimport priceWorksheetReducer from \"./priceWorksheetReducer\";\r\nimport unlockCalculationsReducer from \"./unlockCalculationsReducer\";\r\nimport quotesReducer from \"./quotesReducer\";\r\nimport advancedQuotingReducer from \"./advancedQuotingReducer\";\r\nimport assignQuoteReducer from \"./assignQuoteReducer\";\r\nimport printReducer from \"./printReducer\";\r\nimport wizardReducer from \"./wizardReducer\";\r\nimport sqftMenuReducer from \"./sqftMenuReducer\";\r\nimport sqftManualCalculationReducer from \"./sqftManualCalculationReducer\";\r\nimport sqftSlabReducer from \"./sqftSlabReducer\";\r\nimport sqftResourcesReducer from \"./sqftResourcesReducer\";\r\nimport sqftMiteredReducer from \"./sqftMiteredReducer\";\r\nimport lookReducer from \"./lookReducer\";\r\nimport groheReducer from \"./groheReducer\";\r\nimport iframeIntegrationReducer from \"./iframeIntegrationReducer\";\r\nimport groheQuotingToolReducer from \"./groheQuotingToolReducer\";\r\nimport paymentReducer from \"./paymentReducer\";\r\nimport historyReducer from \"./historyReducer\";\r\nimport shopReducer from \"./shopReducer\";\r\nimport sqftTutorialReducer from \"./sqftTutorialReducer\";\r\nimport adminReducer from \"../bvcomponents/qkbPages/superAdmin/adminReducer\";\r\n\r\n// Combine Reducers\r\nexport const reducers = combineReducers({\r\n adminState: adminReducer,\r\n advancedQuotingState: advancedQuotingReducer,\r\n assignQuoteState: assignQuoteReducer,\r\n bathroomVisualizerState: bathroomVisualizerReducer,\r\n cartState: cartReducer,\r\n contractSigningState: contractSigningReducer,\r\n docuSignState: docuSignReducer,\r\n fabricatorState: fabricatorReducer,\r\n filterState: filterReducer,\r\n groheQuotingToolState: groheQuotingToolReducer,\r\n groheState: groheReducer,\r\n historyState: historyReducer,\r\n iframeIntegrationState: iframeIntegrationReducer,\r\n initialFlowState: initialFlowReducer,\r\n instState: instReducer,\r\n loaderState: loaderReducer,\r\n loadingBar: loadingBarReducer,\r\n lookState: lookReducer,\r\n messageBoxState: messageBoxReducer,\r\n navigationState: navigationReducer,\r\n paymentState: paymentReducer,\r\n priceWorksheetState: priceWorksheetReducer,\r\n printState: printReducer,\r\n qtState: qtReducer,\r\n quotesState: quotesReducer,\r\n selectionState: selectionReducer,\r\n serverState: serverReducer,\r\n shopState: shopReducer,\r\n sqftManualCalculationState: sqftManualCalculationReducer,\r\n sqftMenuState: sqftMenuReducer,\r\n sqftMiteredState: sqftMiteredReducer,\r\n sqftResourceState: sqftResourcesReducer,\r\n sqftSlabState: sqftSlabReducer,\r\n sqftState: sqftReducer,\r\n sqftTutorialState: sqftTutorialReducer,\r\n stepsState: stepsReducer,\r\n tutorialState: tutorialReducer,\r\n unlockCalculationsState: unlockCalculationsReducer,\r\n userState: userReducer,\r\n wizardState: wizardReducer\r\n});\r\n\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n isSwitching : false,\r\n activeStep: 0,\r\n layoutParts: [],\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.SET_STEP:\r\n\r\n if (state.isSwitching) {\r\n return Object.assign({}, state) // don't do anything until animation will finish\r\n }\r\n\r\n if (action.payload.activeStep > state.layoutParts.length - 1) {\r\n return Object.assign({}, state, {\r\n activeStep: action.payload.activeStep - 1\r\n })\r\n } else {\r\n return Object.assign({}, state, {\r\n activeStep: action.payload.activeStep <= 0 ? 0 : action.payload.activeStep\r\n });\r\n }\r\n\r\n case types.SET_STEP_SWITCHING:\r\n case types.SET_LAYOUT_DATA_PARTS:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n\r\n }\r\n\r\n return state;\r\n\r\n}","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n selectionOpened: false,\r\n selectionGroup: \"\",\r\n activePartRelatedItemIndex: 0,\r\n selectionWindowView: 3,\r\n selectionInfoQuantity: 1,\r\n pulseFeatureInfoQuantity: false,\r\n materialsInfoFeatureModules: [], // arrayOf {partId: 123, quantity: 1}\r\n selectionFeatureInfo: null,\r\n vanityTypeSelected: false,\r\n showerTypeSelected: false,\r\n activeFeature: null,\r\n updateFeatureCount: 0, // counter - is used for update footer items\r\n relatedGroups: [],\r\n relatedGroupsSearch: \"\",\r\n showDescriptionCover: true,\r\n galleryVisible: false,\r\n galleryShowActiveFeature: false, // show related product gallery\r\n galleryActiveImageIndex: 0,\r\n subSteps: {\r\n edges: [],\r\n backsplashes: [],\r\n },\r\n activeSubStep: 0,\r\n showNotCompatibleView: false,\r\n productNoteEditorVisible: false,\r\n rowItems: [],\r\n materialsCanvasClass: \"\",\r\n featureInfoCount: 0, // is used to update feature info page\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.TOGGLE_SELECTION_WINDOW:\r\n case types.SET_SELECTION_WINDOW_VIEW:\r\n case types.TOGGLE_SELECTION_INFO:\r\n case types.SET_VANITY_TYPE:\r\n case types.CHANGE_SELECTION_INFO_QUANTITY:\r\n case types.TOGGLE_PULSE_FEATURE_INFO_QUANTITY:\r\n case types.CHANGE_MATERIALS_INFO_FEATURE_MODULES:\r\n case types.SET_DEFAULT_SELECTION_GROUP:\r\n case types.SET_SHOWER_TYPE:\r\n case types.CHANGE_SELECTION_ACTIVE_PART_RELATED_INDEX:\r\n case types.SET_RELATED_GROUPS_SEARCH:\r\n case types.TOGGLE_SHOW_DESCRIPTION_COVER:\r\n case types.TOGGLE_GALLERY_VISIBLE:\r\n case types.SET_GALLERY_ACTIVE_IMAGE_INDEX:\r\n case types.SET_MATERIALS_PAGE_ACTIVE_SUB_STEP:\r\n case types.TOGGLE_NOT_COMPATIBLE_VIEW:\r\n case types.TOGGLE_PRODUCT_NOTE_EDITOR_VISIBLE:\r\n case types.SET_ROW_ITEMS:\r\n case types.SET_MATERIALS_PAGE_CANVAS_CLASS:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_RELATED_GROUPS:\r\n return Object.assign({}, state, {\r\n relatedGroups: [...action.payload.relatedGroups]\r\n });\r\n case types.SET_MATERIALS_PAGE_SUB_STEPS:\r\n state = {...state, subSteps: Object.assign({}, state.subSteps, action.payload.subSteps)};\r\n break;\r\n case types.SET_ACTIVE_FEATURE:\r\n return Object.assign({}, state, {\r\n activeFeature: action.payload.activeFeature || null,\r\n updateFeatureCount: ++state.updateFeatureCount\r\n });\r\n case types.UPDATE_FEATURE_INFO_COUNT:\r\n return Object.assign({}, state, {\r\n featureInfoCount: ++state.featureInfoCount\r\n });\r\n\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import uniq from \"lodash/uniq\";\r\n\r\nimport * as types from '../actions/actionTypes';\r\nimport {getShareUrl, getUrlParam} from \"../misc/helpers\";\r\nimport {AVAILABLE_LANGUAGES, IS_LOOK_JOURNEY, IS_PRODUCT_JOURNEY, IS_LIXIL_UI} from \"../config\";\r\nimport COLOR_THEMES from \"../colorThemes\";\r\nimport {\r\n parseFabricatorSettings\r\n} from \"./fabricatorReducer\";\r\nimport {WHITE_PAGE_ROUTES} from \"../bvcomponents/look/core/constants\";\r\nimport {\r\n hardCodeIsAmericanStandard,\r\n hardCodeIsAmericanImport,\r\n hardCodeIsCaesarStone,\r\n hardCodeIsModerno,\r\n hardCodeIsNhance\r\n} from \"../misc/fabricatorHardcode\";\r\nimport {isTouchDevice} from \"../misc/utils\";\r\nimport Misc from \"../misc/misc\";\r\n\r\nconst urlLanguage = (getUrlParam(\"language\") || \"\").replace(\"/\", \"\");\r\nconst urlTheme = (getUrlParam(\"theme\") || \"\").replace(\"/\", \"\");\r\n\r\nconst getDefaultTheme = () => {\r\n if (hardCodeIsCaesarStone()) {\r\n return \"caes\"\r\n } else if (hardCodeIsAmericanImport() || hardCodeIsAmericanStandard()) {\r\n return \"as\"\r\n } else if (hardCodeIsModerno()) {\r\n return \"moderno\"\r\n } else if (hardCodeIsNhance()) {\r\n return \"nhance\"\r\n } else if (IS_PRODUCT_JOURNEY || window.location.href.includes(\"nav=product\")) {\r\n return \"grohe\"\r\n } else if (IS_LOOK_JOURNEY || window.location.href.includes(\"nav=look\")) {\r\n return \"look\"\r\n }\r\n return Object.keys(COLOR_THEMES)[0];\r\n}\r\n\r\nconst activeTheme = urlTheme && COLOR_THEMES[urlTheme] ? urlTheme : getDefaultTheme();\r\n\r\nconst initialState = {\r\n bvData: {\r\n features: []\r\n },\r\n newQuoteData: {},\r\n groupedFeatures: {},\r\n groupedFeaturesDescriptions: {},\r\n windowWidth: window.innerWidth || 0,\r\n windowHeight: window.innerHeight || 0,\r\n isMobile: false,\r\n jobId: 0,\r\n stonePricing: {},\r\n documents: [],\r\n visualizersLoaded: [],\r\n cookieAccepted: false,\r\n successNotification: {\r\n show: false,\r\n icon: \"calculate\",\r\n title: \"\",\r\n message: \"\"\r\n },\r\n introVideo: {\r\n introVideoStarted: false,\r\n introVideoFinished: false,\r\n },\r\n shareUrl: \"\",\r\n javascriptErrors: [],\r\n language: urlLanguage && AVAILABLE_LANGUAGES.includes(urlLanguage) ? urlLanguage : \"en-US\",\r\n agreeEmailCheckbox: true,\r\n networkConnection: true,\r\n activeTheme,\r\n amazonImageUrl: \"\",\r\n allFeaturesWereLoaded: [], // to check for lixil room layouts // includes kvState, bvLook, so on\r\n initialVisualizerType: \"\",\r\n allowRouting: false,\r\n allowMainLoading: !(window.location.hash === \"#/shop\" || window.location.hash.startsWith(\"#/shop/\")),\r\n actionAfterRoomChange: null, // a function that runs after visualizer is changed\r\n visualizerIsChanging: false, // a boolean which is true when visualizer type is changing (from bathroom to kitchen fo example)\r\n initialRoute: window.location.hash,\r\n};\r\n\r\nexport default function (state = initialState, action) {\r\n\r\n switch (action.type) {\r\n case types.SET_WINDOW_WIDTH: {\r\n if (IS_LIXIL_UI && action.payload.windowWidth >= 1024 && document.body.style.overflow === \"hidden\"\r\n && !(WHITE_PAGE_ROUTES.some(route => window.location.href.includes(\"#\" + route)))) {\r\n document.body.style.overflow = \"\";\r\n }\r\n const isMobile = action.payload.windowWidth <= (IS_PRODUCT_JOURNEY || IS_LOOK_JOURNEY ? 1023 : 991);\r\n const isTouch = isMobile || Misc.isMobile() || isTouchDevice();\r\n isTouch ? document.body.classList.add(\"bv--touch\") : document.body.classList.remove(\"bv--touch\");\r\n return Object.assign({}, state, {\r\n isMobile,\r\n isTouch,\r\n ...action.payload,\r\n })\r\n }\r\n case types.SET_WINDOW_HEIGHT:\r\n case types.SET_COOKIE_ACCEPTED:\r\n case types.SET_LANGUAGE:\r\n case types.SET_AGREE_EMAIL_CHECKBOX:\r\n case types.SET_ACTIVE_THEME:\r\n case types.SET_NETWORK_CONNECTION:\r\n case types.SET_INITIAL_VISUALIZER_TYPE:\r\n case types.SET_AMAZON_IMAGE_URL:\r\n case types.SET_ALLOW_ROUTING:\r\n case types.SET_ALLOW_MAIN_LOADING:\r\n case types.SET_ACTION_AFTER_VISUALIZER_TYPE_CHANGED:\r\n case types.SET_VISUALIZER_TYPE_CHANGING:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_STONE_PRICING:\r\n return Object.assign({}, state, {\r\n stonePricing: Object.assign({}, state.stonePricing, action.payload.stonePricing)\r\n });\r\n case types.SET_ALL_FEATURES_LOADED:\r\n if (state.allFeaturesWereLoaded.includes(action.payload.allFeaturesWereLoaded)) {\r\n return state\r\n }\r\n return Object.assign({}, state, {\r\n allFeaturesWereLoaded: [...state.allFeaturesWereLoaded, action.payload.allFeaturesWereLoaded]\r\n });\r\n case types.SET_JAVASCRIPT_ERRORS:\r\n return Object.assign({}, state, {\r\n javascriptErrors: uniq([...state.javascriptErrors, action.payload.javascriptError])\r\n });\r\n case types.SET_JOB_ID: {\r\n const shareUrl = getShareUrl(action.payload.jobId)\r\n window.shareUrl = shareUrl; // analytics only, we can't use getState() there\r\n return {\r\n ...state,\r\n shareUrl,\r\n jobId: action.payload.jobId,\r\n };\r\n }\r\n case types.TOGGLE_USER_POPUP:\r\n return handleToggleUserPopup(state, action.payload);\r\n case types.ADD_PROJECT_DOCUMENT:\r\n case types.SET_PROJECT_DOCUMENTS_IDS:\r\n return Object.assign({}, state, {\r\n documents: [...action.payload]\r\n });\r\n case types.ADD_VISUALIZERS_LOADED:\r\n return Object.assign({}, state, {\r\n visualizersLoaded: [...state.visualizersLoaded, action.payload.newLoadedVisualizer],\r\n });\r\n case types.SHOW_SUCCESS_NOTIFICATION:\r\n return Object.assign({}, state, {\r\n ...state, successNotification: {...state.successNotification, ...action.payload}\r\n });\r\n case types.SET_INTRO_VIDEO:\r\n return Object.assign({}, state, {\r\n ...state, introVideo: {...state.introVideo, ...action.payload}\r\n });\r\n case types.SET_FABRICATOR_DATA: {\r\n const {settings} = parseFabricatorSettings(action.payload);\r\n const language = settings.language;\r\n return Object.assign({}, state, {\r\n ...state, language: urlLanguage || (language && AVAILABLE_LANGUAGES.includes(language) ? language : state.language)\r\n });\r\n }\r\n }\r\n\r\n return state;\r\n\r\n}\r\n\r\nfunction handleToggleUserPopup(state, {userIsLoggedIn}) {\r\n if (typeof(userIsLoggedIn) != 'undefined' && !userIsLoggedIn) {\r\n return {...state, jobId: 0};\r\n }\r\n\r\n return state;\r\n}\r\n","// this is a \"marching ants\" algorithm used to calc the outline path\r\nexport default function(data, width, height, imgUrl, start) {\r\n // d3-plugin for calculating outline paths\r\n // License: https://github.com/d3/d3-plugins/blob/master/LICENSE\r\n //\r\n // Copyright (c) 2012-2014, Michael Bostock\r\n // All rights reserved.\r\n //\r\n // Redistribution and use in source and binary forms, with or without\r\n // modification, are permitted provided that the following conditions are met:\r\n //* Redistributions of source code must retain the above copyright notice, this\r\n // list of conditions and the following disclaimer.\r\n //* Redistributions in binary form must reproduce the above copyright notice,\r\n // this list of conditions and the following disclaimer in the documentation\r\n // and/or other materials provided with the distribution.\r\n //* The name Michael Bostock may not be used to endorse or promote products\r\n // derived from this software without specific prior written permission.\r\n // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n\r\n // lookup tables for marching directions\r\n var d3_geom_contourDx = [1, 0, 1, 1,-1, 0,-1, 1,0, 0,0,0,-1, 0,-1,NaN],\r\n d3_geom_contourDy = [0,-1, 0, 0, 0,-1, 0, 0,1,-1,1,1, 0,-1, 0,NaN];\r\n\r\n function d3_geom_contourStart(grid) {\r\n var x = 0,\r\n y = 0;\r\n\r\n // search for a starting point; begin at origin\r\n // and proceed along outward-expanding diagonals\r\n while (true) {\r\n if (grid(x,y)) {\r\n return [x,y];\r\n }\r\n if ((x === width) && (y === height)) {\r\n console.error('image is empty, can\\'t create polygon -> ', imgUrl);\r\n return false\r\n }\r\n if (x === 0) {\r\n x = y + 1;\r\n y = 0;\r\n } else {\r\n x = x - 1;\r\n y = y + 1;\r\n }\r\n }\r\n }\r\n\r\n function grid(x,y){\r\n const a=data[(y*width+x)*4+3];\r\n return(a>20);\r\n }\r\n\r\n var s = start || d3_geom_contourStart(grid); // starting point\r\n if (!s) {\r\n return [] // return empty array of points if layer is empty\r\n }\r\n var\r\n c = [], // contour polygon\r\n x = s[0], // current x position\r\n y = s[1], // current y position\r\n dx = 0, // next x direction\r\n dy = 0, // next y direction\r\n pdx = NaN, // previous x direction\r\n pdy = NaN, // previous y direction\r\n i = 0;\r\n\r\n do {\r\n // determine marching squares index\r\n i = 0;\r\n if (grid(x-1, y-1)) i += 1;\r\n if (grid(x, y-1)) i += 2;\r\n if (grid(x-1, y )) i += 4;\r\n if (grid(x, y )) i += 8;\r\n\r\n // determine next direction\r\n if (i === 6) {\r\n dx = pdy === -1 ? -1 : 1;\r\n dy = 0;\r\n } else if (i === 9) {\r\n dx = 0;\r\n dy = pdx === 1 ? -1 : 1;\r\n } else {\r\n dx = d3_geom_contourDx[i];\r\n dy = d3_geom_contourDy[i];\r\n }\r\n\r\n // update contour polygon\r\n if (dx != pdx && dy != pdy) {\r\n c.push([x, y]);\r\n pdx = dx;\r\n pdy = dy;\r\n }\r\n\r\n x += dx;\r\n y += dy;\r\n } while (s[0] != x || s[1] != y);\r\n\r\n return c;\r\n\r\n}","'use strict';\r\n\r\nObject.defineProperty(exports, \"__esModule\", {\r\n value: true\r\n});\r\n\r\nvar _slicedToArray = function () {\r\n function sliceIterator(arr, i) {\r\n var _arr = [];\r\n var _n = true;\r\n var _d = false;\r\n var _e = undefined;\r\n try {\r\n for (var _i = arr[window.Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\r\n _arr.push(_s.value);\r\n if (i && _arr.length === i) break;\r\n }\r\n } catch (err) {\r\n _d = true;\r\n _e = err;\r\n } finally {\r\n try {\r\n if (!_n && _i[\"return\"]) _i[\"return\"]();\r\n } finally {\r\n if (_d) throw _e;\r\n }\r\n }\r\n return _arr;\r\n }\r\n\r\n return function (arr, i) {\r\n if (Array.isArray(arr)) {\r\n return arr;\r\n } else if (window.Symbol.iterator in Object(arr)) {\r\n return sliceIterator(arr, i);\r\n } else {\r\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\r\n }\r\n };\r\n}();\r\n\r\nexports.default = loadingBarMiddleware;\r\n\r\nvar _loading_bar_ducks = require('./loading_bar_ducks');\r\n\r\nvar defaultTypeSuffixes = ['PENDING', 'FULFILLED', 'REJECTED'];\r\n\r\nfunction loadingBarMiddleware() {\r\n var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\r\n\r\n var promiseTypeSuffixes = config.promiseTypeSuffixes || defaultTypeSuffixes;\r\n var scope = config.scope || _loading_bar_ducks.DEFAULT_SCOPE;\r\n\r\n return function (_ref) {\r\n var dispatch = _ref.dispatch;\r\n return function (next) {\r\n return function (action) {\r\n if (action.type) {\r\n var _promiseTypeSuffixes = _slicedToArray(promiseTypeSuffixes, 3),\r\n PENDING = _promiseTypeSuffixes[0],\r\n FULFILLED = _promiseTypeSuffixes[1],\r\n REJECTED = _promiseTypeSuffixes[2];\r\n\r\n var isPending = new RegExp(PENDING + '$', 'g');\r\n var isFulfilled = new RegExp(FULFILLED + '$', 'g');\r\n var isRejected = new RegExp(REJECTED + '$', 'g');\r\n\r\n var actionScope = action.meta && action.meta.scope || action.scope || scope;\r\n\r\n if (action.type.match(isPending)) {\r\n dispatch((0, _loading_bar_ducks.showLoading)(actionScope));\r\n } else if (action.type.match(isFulfilled) || action.type.match(isRejected)) {\r\n dispatch((0, _loading_bar_ducks.hideLoading)(actionScope));\r\n }\r\n }\r\n\r\n return next(action);\r\n };\r\n };\r\n };\r\n}","'use strict';\r\n\r\nObject.defineProperty(exports, \"__esModule\", {\r\n value: true\r\n});\r\n\r\nvar _reactRedux = require('react-redux');\r\n\r\nvar _loading_bar = require('./loading_bar');\r\n\r\nvar _loading_bar_ducks = require('./loading_bar_ducks');\r\n\r\nvar mapImmutableStateToProps = function mapImmutableStateToProps(state, ownProps) {\r\n return {\r\n loading: state.get('loadingBar')[ownProps.scope || _loading_bar_ducks.DEFAULT_SCOPE]\r\n };\r\n};\r\n\r\nexports.default = (0, _reactRedux.connect)(mapImmutableStateToProps)(_loading_bar.LoadingBar);","import {Font, StyleSheet} from '@react-pdf/renderer';\r\nimport {baseNewImagesPath} from \"../../assets\";\r\nimport {IS_LIXIL_UI} from \"../../../config\";\r\nimport styleHelpers from \"./styles/printDocumentStylesHelpers\";\r\nimport printDocumentStylesDiscounts from \"./styles/printDocumentStylesDiscounts\";\r\n\r\ntry {\r\n Font.register({\r\n family: \"Play\",\r\n src: `${baseNewImagesPath}fonts/play-regular.ttf`\r\n });\r\n Font.register({\r\n family: \"PlayBold\",\r\n src: `${baseNewImagesPath}fonts/play-bold.ttf`\r\n });\r\n Font.register({\r\n family: \"FrutigerLTStd-Light\",\r\n src: `${baseNewImagesPath}fonts/frutiger/FrutigerLTStd-Light.ttf`\r\n });\r\n Font.register({\r\n family: \"Frutiger-Roman\",\r\n src: `${baseNewImagesPath}fonts/frutiger/Frutiger-Roman.ttf`\r\n });\r\n Font.register({\r\n family: \"Roboto\",\r\n src: `${baseNewImagesPath}fonts/Roboto/Roboto-Regular.ttf`\r\n });\r\n Font.register({\r\n family: \"Roboto500\",\r\n src: `${baseNewImagesPath}fonts/Roboto/Roboto-Medium.ttf`\r\n });\r\n} catch (error) {\r\n console.log(\"error registering fonts\", error);\r\n}\r\n\r\nexport default function getPrintColors(activeTheme) {\r\n\r\n const COLORS = {\r\n black: \"#000000\",\r\n red: \"#d0021b\",\r\n gray: \"#828282\",\r\n gray2: \"#7e7e7e\",\r\n gray3: \"#9f9f9f\",\r\n light: \"#c8c8c8\",\r\n white: \"#ffffff\",\r\n };\r\n\r\n switch (activeTheme) {\r\n case \"qc\":\r\n default: {\r\n COLORS.green = IS_LIXIL_UI ? \"#000000\" : \"#9FC522\";\r\n COLORS.blue = IS_LIXIL_UI ? \"#000000\" : \"#4a90e2\";\r\n COLORS.lightBlue = \"#98C3FA\";\r\n COLORS.regular = IS_LIXIL_UI ? \"Roboto\" : \"Play\";\r\n COLORS.bold = IS_LIXIL_UI ? \"Roboto500\" : \"PlayBold\";\r\n COLORS.black = \"#000000\";\r\n break;\r\n }\r\n case \"caes\": {\r\n COLORS.green = \"#f46c42\";\r\n COLORS.blue = \"#58595b\";\r\n COLORS.lightBlue = \"#717275\"; // lighten primary 10%\r\n COLORS.regular = \"FrutigerLTStd-Light\";\r\n COLORS.bold = \"Frutiger-Roman\";\r\n COLORS.black = \"#000000\";\r\n break;\r\n }\r\n case \"moderno\": {\r\n COLORS.green = \"#d0021b\";\r\n COLORS.blue = \"#1b1b1b\";\r\n COLORS.lightBlue = \"#444444\"; // lighten primary 10%\r\n COLORS.regular = \"Play\";\r\n COLORS.bold = \"PlayBold\";\r\n COLORS.black = \"#000000\";\r\n break;\r\n }\r\n case \"as\": {\r\n COLORS.green = \"#E70026\";\r\n COLORS.blue = \"#000000\";\r\n COLORS.lightBlue = \"#292929\"; // lighten primary 10%\r\n COLORS.regular = \"Play\";\r\n COLORS.bold = \"PlayBold\";\r\n COLORS.black = \"#000000\";\r\n break;\r\n }\r\n }\r\n\r\n return getStyles(COLORS)\r\n\r\n}\r\n\r\nconst getStyles = (COLORS) => StyleSheet.create({\r\n ...styleHelpers,\r\n page: {\r\n paddingTop: 35,\r\n paddingBottom: 65,\r\n paddingHorizontal: 35,\r\n fontFamily: COLORS.regular,\r\n color: COLORS.gray,\r\n fontSize: 10,\r\n },\r\n pageAS: {\r\n paddingTop: 100,\r\n paddingBottom: 65,\r\n paddingHorizontal: 35,\r\n fontFamily: COLORS.regular,\r\n color: COLORS.gray,\r\n fontSize: 10,\r\n },\r\n bold: {\r\n fontFamily: COLORS.bold,\r\n },\r\n black: {\r\n color: COLORS.black,\r\n },\r\n gray: {\r\n color: COLORS.gray,\r\n },\r\n primary: {\r\n color: COLORS.blue,\r\n },\r\n active: {\r\n color: COLORS.green,\r\n },\r\n header: {\r\n // borderColor: \"#fff000\",\r\n // borderStyle: \"solid\",\r\n // borderWidth: 2,\r\n maxHeight: 60,\r\n minHeight: 40,\r\n marginBottom: 25,\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n alignItems: \"flex-start\",\r\n justifyContent: \"space-between\",\r\n },\r\n headerInfo: {\r\n // textAlign: \"right\",\r\n },\r\n headerLogo: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n marginTop: 3,\r\n flex: 1,\r\n },\r\n headerLogoAS: {\r\n marginTop: -35,\r\n paddingLeft: 70,\r\n paddingRight: 70,\r\n },\r\n headerLogoImage: {\r\n maxWidth: \"100%\",\r\n maxHeight: \"100%\",\r\n alignSelf: \"center\",\r\n objectFit : \"contain\",\r\n },\r\n headerText: {\r\n width: \"100%\",\r\n flexDirection: \"row\",\r\n justifyContent: \"flex-end\"\r\n },\r\n headerTextBold: {\r\n fontFamily: COLORS.bold,\r\n },\r\n specSheet: {\r\n position: 'absolute',\r\n left: 0,\r\n right: 0,\r\n top: 0,\r\n paddingTop: 35,\r\n paddingHorizontal: 35,\r\n height: 100,\r\n // width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n justifyContent: \"space-between\",\r\n },\r\n headerTextASSheet: {\r\n width: \"20%\",\r\n flex: \"0 0 20%\",\r\n fontSize: 15,\r\n color: COLORS.gray3,\r\n },\r\n headerTextASInfo: {\r\n width: \"20%\",\r\n flex: \"0 0 20%\",\r\n },\r\n headerTextValue: {\r\n paddingLeft: 5,\r\n // width: 50,\r\n // textAlign: \"right\",\r\n },\r\n main: {\r\n width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n justifyContent: \"space-between\",\r\n },\r\n section: {\r\n width: \"33%\",\r\n flex: \"0 0 33%\"\r\n },\r\n sectionTwo: {\r\n width: \"45%\",\r\n flex: \"0 0 45%\"\r\n },\r\n sectionLeft: {\r\n paddingRight: 10\r\n },\r\n sectionCenter: {\r\n paddingLeft: 10,\r\n paddingRight: 10,\r\n },\r\n sectionRight: {\r\n paddingLeft: 10\r\n },\r\n mainTitle: {\r\n fontFamily: COLORS.bold,\r\n borderBottomWidth: 1,\r\n borderBottomColor: COLORS.gray2,\r\n paddingBottom: 3,\r\n marginBottom: 5,\r\n },\r\n mainText: {\r\n marginBottom: 2,\r\n },\r\n mainTextEmail: {\r\n marginTop: 10,\r\n },\r\n room: {\r\n borderLeftColor: COLORS.light,\r\n borderLeftWidth: 1,\r\n borderLeftStyle: \"solid\",\r\n marginTop: 30,\r\n borderBottomColor: COLORS.light,\r\n borderBottomWidth: 1,\r\n },\r\n roomTitle: {\r\n color: COLORS.gray2,\r\n padding: 5,\r\n backgroundColor: COLORS.light,\r\n fontSize: 11,\r\n textTransform: \"uppercase\",\r\n fontFamily: COLORS.bold,\r\n },\r\n roomBody: {\r\n paddingLeft: 20\r\n },\r\n subPartTitle: {\r\n color: COLORS.blue,\r\n borderBottomWidth: 1,\r\n borderBottomColor: COLORS.blue,\r\n padding: 2,\r\n marginRight: 2,\r\n marginBottom: 10,\r\n marginTop: 10,\r\n marginLeft: -10\r\n },\r\n cartItem: {\r\n borderBottomWidth: 1,\r\n borderBottomColor: COLORS.light,\r\n paddingBottom: 2,\r\n marginBottom: 5,\r\n },\r\n cartItemWithThumbnail: {\r\n flexDirection: \"row\",\r\n paddingBottom: 5,\r\n },\r\n cartItemWithThumbnailBody: {\r\n flex: 1,\r\n overflow: \"hidden\",\r\n },\r\n cartItemThumbnail: {\r\n borderWidth: 1,\r\n borderColor: COLORS.light,\r\n borderRadius: 5,\r\n padding: 8,\r\n marginRight: 5,\r\n width: 64,\r\n height: 64,\r\n flexBasis: 64,\r\n },\r\n cartItemThumbnailImage: {\r\n width: 48,\r\n height: 48,\r\n flexBasis: 48,\r\n objectFit: \"contain\",\r\n },\r\n cartItemSkuFullWidth: {\r\n flex: 1,\r\n color: COLORS.gray,\r\n fontSize: 9,\r\n marginBottom: 10,\r\n },\r\n cartItemDescription: {\r\n marginTop: 4,\r\n marginBottom: 4,\r\n },\r\n cartItemName: {\r\n fontFamily: COLORS.bold,\r\n color: COLORS.gray,\r\n },\r\n cartItemNameBig: {\r\n fontSize: 11,\r\n },\r\n cartItemNameCentered: {\r\n marginTop: 10,\r\n },\r\n cartItemInfo: {\r\n flexDirection: \"row\",\r\n justifyContent: \"space-around\",\r\n alignSelf: \"stretch\",\r\n width: \"100%\",\r\n color: COLORS.gray,\r\n marginTop: 5,\r\n },\r\n cartItemUnit: {\r\n flexGrow: 1,\r\n flexShrink: 1,\r\n flexBasis: 40,\r\n width: 40,\r\n color: COLORS.gray,\r\n fontSize: 9,\r\n },\r\n wizardItemDescription: {\r\n flexGrow: 1,\r\n flexShrink: 1,\r\n color: COLORS.gray,\r\n fontSize: 9,\r\n },\r\n cartItemUnitSKU: {\r\n flexBasis: 80,\r\n width: 80,\r\n },\r\n cartItemUnitItem: {},\r\n cartItemPrice: {\r\n flexGrow: 5,\r\n flexShrink: 5,\r\n flexBasis: 100,\r\n width: 100,\r\n justifyContent: \"flex-end\",\r\n alignSelf: \"flex-end\",\r\n textAlign: \"right\",\r\n fontFamily: COLORS.bold,\r\n },\r\n cartItemNote: {\r\n marginTop: 3,\r\n marginBottom: 3,\r\n padding: 5,\r\n borderColor: COLORS.light,\r\n borderStyle: \"solid\",\r\n borderWidth: 1,\r\n borderRadius: 5,\r\n color: COLORS.blue\r\n },\r\n cartItemSimilar: {\r\n width: \"100%\",\r\n marginTop: 10,\r\n // marginBottom: 10,\r\n // paddingLeft: 10,\r\n },\r\n cartItemSimilarTitle: {\r\n padding: 5,\r\n color: COLORS.white,\r\n backgroundColor: COLORS.lightBlue,\r\n fontSize: 10,\r\n marginBottom: 10,\r\n },\r\n cartItemSimilarTitleBundled: {\r\n marginBottom: 5,\r\n },\r\n cartItemBundled: {\r\n marginBottom: 10,\r\n },\r\n cartItemSimilarTitlePadding: {\r\n marginLeft: 10\r\n },\r\n cartItemSimilarContent: {\r\n width: \"100%\",\r\n flexDirection: \"row\",\r\n justifyContent: \"space-between\",\r\n },\r\n cartItemSimilarContentCell: {\r\n width: \"50%\",\r\n flex: \"0 0 50%\"\r\n },\r\n cartItemSimilarItem: {\r\n flexDirection: \"row\",\r\n justifyContent: \"space-between\",\r\n alignSelf: \"stretch\",\r\n width: \"100%\",\r\n borderBottomWidth: 1,\r\n borderBottomStyle: \"dashed\",\r\n borderBottomColor: COLORS.light,\r\n paddingBottom: 2,\r\n marginBottom: 5,\r\n // alignItems: \"center\", places price to center\r\n },\r\n cartItemSimilarItemNoBorder: {\r\n borderBottomWidth: 0,\r\n },\r\n cartItemSimilarItemBlock: {\r\n },\r\n cartItemSimilarItemName: {\r\n color: COLORS.blue,\r\n fontSize: 10,\r\n },\r\n cartItemSimilarItemLabel: {\r\n textTransform: \"uppercase\",\r\n fontFamily: COLORS.bold,\r\n color: COLORS.gray2,\r\n fontSize: 8,\r\n },\r\n cartItemSimilarItemPrice: {\r\n fontSize: 12,\r\n color: COLORS.blue\r\n },\r\n cartItemSimilarItemExample: {\r\n fontSize: 8,\r\n color: COLORS.gray\r\n },\r\n roomTotal: {\r\n marginVertical: 10,\r\n textAlign: \"right\",\r\n },\r\n roomTotalSecond: {\r\n marginTop: 0,\r\n marginBottom: 10,\r\n textAlign: \"right\",\r\n },\r\n roomTotalText: {\r\n fontFamily: COLORS.bold,\r\n },\r\n roomTotalAmount: {\r\n fontSize: 12,\r\n color: COLORS.blue,\r\n },\r\n footer: {\r\n marginTop: 20,\r\n flexDirection: \"row\",\r\n justifyContent: \"space-around\",\r\n alignSelf: \"stretch\",\r\n width: \"100%\",\r\n },\r\n footerLeft: {\r\n flexGrow: 1,\r\n flexShrink: 1,\r\n textAlign: \"center\"\r\n },\r\n notification: {\r\n padding: 20,\r\n borderColor: COLORS.red,\r\n borderStyle: \"solid\",\r\n borderWidth: 1,\r\n borderRadius: 5,\r\n },\r\n notificationMargin: {\r\n marginTop: 20,\r\n },\r\n notificationImage: {\r\n width: 25,\r\n height: 21,\r\n marginTop: -5,\r\n marginBottom: 10,\r\n marginHorizontal: \"auto\"\r\n },\r\n notificationText: {\r\n color: COLORS.red,\r\n width: \"66.5%\",\r\n },\r\n total: {\r\n flexBasis: 160,\r\n textAlign: \"right\",\r\n },\r\n totalSectionFirst: {\r\n textAlign: \"right\",\r\n },\r\n totalSection: {\r\n marginTop: 15,\r\n textAlign: \"right\",\r\n },\r\n totalSectionText: {\r\n fontFamily: COLORS.bold,\r\n },\r\n totalSectionAmount: {\r\n fontSize: 14,\r\n color: COLORS.blue,\r\n },\r\n totalSectionFinal: {\r\n marginTop: 30,\r\n textAlign: \"right\",\r\n },\r\n totalSectionAmountFinal: {\r\n fontSize: 22,\r\n color: COLORS.green,\r\n },\r\n pageNumber: {\r\n position: \"absolute\",\r\n fontSize: 13,\r\n bottom: 30,\r\n left: 0,\r\n right: 0,\r\n textAlign: \"center\",\r\n color: COLORS.gray,\r\n },\r\n signature: {\r\n width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"flex-end\",\r\n marginTop: 30,\r\n height: 50,\r\n },\r\n signatureText: {\r\n width: \"100%\",\r\n borderTopWidth: 1,\r\n borderTopColor: COLORS.light,\r\n borderTopStyle: \"solid\",\r\n textAlign: \"center\"\r\n },\r\n signatureValue: {\r\n textAlign: \"center\",\r\n marginBottom: 5,\r\n },\r\n signatureImage: {\r\n maxWidth: \"100%\",\r\n width: \"auto\",\r\n marginHorizontal: \"auto\",\r\n },\r\n discountSection: {\r\n marginTop: 10,\r\n marginLeft: 10, // to remove negative margin of subTitle\r\n },\r\n ...printDocumentStylesDiscounts,\r\n});\r\n","export default {\r\n width100: {\r\n width: \"100%\",\r\n },\r\n flex: {\r\n display: \"flex\",\r\n },\r\n flexRow: {\r\n flexDirection: \"row\",\r\n },\r\n flexColumn: {\r\n flexDirection: \"column\",\r\n },\r\n flexCenter: {\r\n alignItems: \"center\",\r\n },\r\n marginT5: {\r\n marginTop: 5\r\n },\r\n marginT8: {\r\n marginTop: 8\r\n },\r\n marginT10: {\r\n marginTop: 10\r\n },\r\n marginT16: {\r\n marginTop: 16\r\n },\r\n marginT20: {\r\n marginTop: 20\r\n },\r\n marginT30: {\r\n marginTop: 30\r\n },\r\n marginT40: {\r\n marginTop: 40\r\n },\r\n marginB5: {\r\n marginBottom: 5\r\n },\r\n marginB8: {\r\n marginBottom: 8\r\n },\r\n marginB10: {\r\n marginBottom: 10\r\n },\r\n marginB16: {\r\n marginBottom: 16\r\n },\r\n marginB20: {\r\n marginBottom: 20\r\n },\r\n marginB30: {\r\n marginBottom: 30\r\n },\r\n marginB40: {\r\n marginBottom: 40\r\n },\r\n marginL10: {\r\n marginLeft: 10\r\n },\r\n marginL20: {\r\n marginLeft: 20\r\n },\r\n marginR10: {\r\n marginRight: 10\r\n },\r\n marginR20: {\r\n marginRight: 20\r\n },\r\n}\r\n","export default {\r\n discountDeposit: {\r\n backgroundColor: \"#d8d8d8\",\r\n padding: 8,\r\n marginTop: 0,\r\n marginBottom: 5\r\n },\r\n discountPercent: {\r\n paddingLeft: 10,\r\n },\r\n financeCell: {\r\n flexGrow: 1,\r\n borderWidth: 1,\r\n borderColor: \"#d8d8d8\",\r\n borderStyle: \"solid\",\r\n borderRadius: 5,\r\n padding: 5,\r\n },\r\n financeCellMonths: {\r\n fontSize: 11,\r\n },\r\n financeCellText: {\r\n fontSize: 15,\r\n }\r\n}\r\n","import React, {useContext} from \"react\";\r\nimport {Text, Image, View} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\n\r\nconst PrintDocumentHeader = (props) => {\r\n const {styles, jobId, fabricatorData, printLogo} = props;\r\n\r\n const date = new Date();\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n const logoView = printLogo ? (\r\n \r\n \r\n \r\n ) : null;\r\n\r\n const jobInfoView = (\r\n \r\n {document.kvConfig.jobId || jobId ? (\r\n \r\n {printContext.messages[\"receipt.header.quoteNumber\"]}\r\n {document.kvConfig.jobId || jobId}\r\n \r\n ) : null}\r\n \r\n {printContext.messages[\"receipt.header.date\"]}\r\n {date.toLocaleDateString().replace(/\\//gi, \"-\")}\r\n \r\n \r\n {printContext.messages[\"receipt.header.time\"]}\r\n {date.toLocaleTimeString()}\r\n \r\n \r\n )\r\n\r\n if (fabricatorData.isAmericanStandard) {\r\n return (\r\n \r\n \r\n Specification Sheet\r\n \r\n {logoView}\r\n {jobInfoView}\r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n \r\n {logoView}\r\n {jobInfoView}\r\n \r\n )\r\n};\r\n\r\nPrintDocumentHeader.propTypes = {\r\n fabricatorData: PropTypes.object,\r\n jobId: PropTypes.number,\r\n styles: PropTypes.object.isRequired,\r\n printLogo: PropTypes.string,\r\n};\r\n\r\nexport default PrintDocumentHeader\r\n","import React, {useContext, Fragment} from \"react\";\r\nimport {Text, View} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {ADDRESSES_TYPES} from \"./constants\";\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\n\r\n\r\nconst PrintDocumentInfoFabricator = (props) => {\r\n const {styles, fabricatorData, threeColumns} = props;\r\n\r\n const mainAddress = Array.isArray(fabricatorData.addresses) && fabricatorData.addresses.find(adr => {\r\n return adr.addressType === ADDRESSES_TYPES.Shipping\r\n })\r\n\r\n const city = mainAddress && mainAddress.city ? mainAddress.city : fabricatorData.city || \"\";\r\n const address = mainAddress && mainAddress.address1 ? mainAddress.address1 : fabricatorData.address1 || fabricatorData.address2 || \"\";\r\n const postal = mainAddress && mainAddress.postal ? mainAddress.postal : fabricatorData.postal || \"\";\r\n const provence = mainAddress && mainAddress.provence ? mainAddress.provence : fabricatorData.provence || \"\";\r\n let displayAddress = \"\";\r\n [city, provence, postal].forEach(addressPart => { // 1) city 2) provence 3) postal\r\n if (addressPart) {\r\n if (displayAddress) {\r\n displayAddress += \", \"\r\n }\r\n displayAddress += addressPart\r\n }\r\n });\r\n const contactEmail = fabricatorData.contactEmail || \"\";\r\n const emails = contactEmail.includes(\",\") ? contactEmail.split(\",\") : [];\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n return (\r\n \r\n {printContext.messages[\"receipt.mainInfo.fabricatorInformation\"]}\r\n {fabricatorData.companyName}\r\n {address ? {address} : null}\r\n {displayAddress ? {displayAddress} : null}\r\n {fabricatorData.isCaesarStone ? null : (\r\n \r\n {emails ? emails.map((email, emailIndex) => {\r\n return (\r\n \r\n {email}\r\n \r\n )\r\n }) : {contactEmail}}\r\n {fabricatorData.phone || \"\"}\r\n \r\n )}\r\n \r\n )\r\n};\r\n\r\nPrintDocumentInfoFabricator.propTypes = {\r\n fabricatorData: PropTypes.object.isRequired,\r\n threeColumns: PropTypes.bool,\r\n styles: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default PrintDocumentInfoFabricator\r\n","export const ADDRESSES_TYPES = {\r\n Billing: \"Billing\",\r\n Shipping: \"Shipping\",\r\n}\r\n","import React, {Fragment, useContext} from \"react\";\r\nimport {View, Text} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {getCurrencySign, getPriceWithCurrency, getRoomName, getTotalPrice, toFixedPrice} from \"../../../misc/helpers\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport PrintDocumentBodyCartItem from \"./printDocumentBodyCartItem\";\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\nimport PrintSimilarProducts from \"./similarProducts/printSimilarProducts\";\r\nimport {filterCartItems} from \"../../look/lookNavigation/lookFunctions2\";\r\nimport {getCommonVisualizerType, IS_LIXIL_UI} from \"../../../config\";\r\nimport {getShowPrice} from \"../../../misc/priceFunctions\";\r\nimport {\r\n getFeatureGroupFromWizardGroup,\r\n showWizardInsteadOfQT\r\n} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {WIZARD_GROUP_TYPES} from \"../../../interfaces/wizardItemInterface\";\r\nimport PrintDocumentBodyWizardItem from \"./printDocumentBodyWizardItem\";\r\nimport {getDifferentCurrencyCartItems} from \"../../../misc/misc2\";\r\nimport {\r\n getWizardGroupName,\r\n isSameVisualizerWizard\r\n} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\n\r\nconst PrintDocumentBody = (props) => {\r\n let {styles, quotes, cartItems, fabricatorData, locale, filterGroups, wizardState, sqftSlabState,\r\n cartItemsThumbnails} = props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n if (IS_LIXIL_UI) {\r\n cartItems = filterCartItems(cartItems, true, true);\r\n }\r\n\r\n const getGroupName = (featureGroup, quoteIndex) => {\r\n const lowerCasedName = featureGroup.partName.toLowerCase();\r\n if (featureGroup.customNames && featureGroup.customNames[quoteIndex]) {\r\n return featureGroup.customNames[quoteIndex]\r\n }\r\n if (fabricatorData.isLowes || fabricatorData.isCaesarStone) {\r\n if (locale === \"fr-FR\" && printContext.messages[\"transDoc.customDisplayName_FR.\"+ lowerCasedName]) {\r\n return printContext.messages[\"transDoc.customDisplayName_FR.\"+ lowerCasedName]\r\n } else if (locale === \"pl-PL\" && printContext.messages[\"transDoc.customTranslateName_PL.\"+ lowerCasedName]) {\r\n return printContext.messages[\"transDoc.customTranslateName_PL.\"+ lowerCasedName]\r\n }\r\n }\r\n return featureGroup.customGroupDisplayName || featureGroup.partName\r\n };\r\n\r\n const showPrice = getShowPrice(fabricatorData, true);\r\n\r\n return quotes.map((quote, quoteIndex) => {\r\n\r\n const layout = getCurrentLayout(fabricatorSettings.allowVisualizerSwitching && quote.room ? quote.room : document.kvConfig.visualizerType);\r\n const visType = getCommonVisualizerType(fabricatorSettings.allowVisualizerSwitching && quote.room ? quote.room : document.kvConfig.visualizerType);\r\n\r\n const quoteTotalPrice = getTotalPrice(quoteIndex, false);\r\n // const subTotalPrice = getQuotePriceWithTaxes(quoteTotalPrice);\r\n const subTotalPrice = quoteTotalPrice.materialPrice;\r\n const fixedPrice = toFixedPrice(subTotalPrice);\r\n\r\n let uniqueCartItemIds = [];\r\n const quoteCartItems = cartItems.filter((cartItem) => cartItem.cartFeature && (cartItem.currentQuote === quoteIndex));\r\n\r\n const {wizardList, wizardIsActive, allWizardsValues} = wizardState;\r\n const showWizardSteps = showWizardInsteadOfQT(wizardList, wizardIsActive);\r\n\r\n const differentCurrencyObjects = getDifferentCurrencyCartItems(fabricatorSettings, quoteCartItems);\r\n\r\n return (\r\n \r\n \r\n {printContext.messages[\"receipt.content.roomTitle\"]} {getRoomName(quoteIndex, cartItems, quotes, printContext.messages, locale, fabricatorData)}\r\n \r\n \r\n {showWizardSteps ? wizardList.map(wizardItem => {\r\n const existingAllObject = allWizardsValues.find(wizSelObject => {\r\n return wizSelObject.wizardItemId === wizardItem.id && wizSelObject.quoteIndex === quoteIndex\r\n && isSameVisualizerWizard(wizSelObject, visType)\r\n });\r\n if (!existingAllObject || !existingAllObject.wizardSelectedValues) {\r\n return null\r\n }\r\n return Object.keys(existingAllObject.wizardSelectedValues).map(key => {\r\n const wizardGroup = existingAllObject.wizardSelectedValues[key].wizardGroup;\r\n if (wizardGroup && wizardGroup.nodeType === WIZARD_GROUP_TYPES.custom && !wizardGroup.hideInCartAndReceipt) {\r\n return \r\n }\r\n let currentCartItems = cartItems.filter(cartItem => {\r\n if (cartItem.bundleParentId) {\r\n return false\r\n }\r\n return cartItem.cartFeature && (cartItem.currentQuote === quoteIndex)\r\n && (wizardGroup && cartItem.fromWizardGroupId\r\n ? (wizardGroup.id === cartItem.fromWizardGroupId)\r\n : +key === cartItem.fromWizardStep)\r\n && !uniqueCartItemIds.includes(cartItem.id)\r\n });\r\n if (currentCartItems.length) {\r\n uniqueCartItemIds = [...uniqueCartItemIds, ...currentCartItems.map(cItem => cItem.id)];\r\n const slabsCartItems = currentCartItems.filter(cartItem => cartItem.partId === \"slabs\");\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n const mainCartItems = (\r\n \r\n \r\n {featureGroup ? getGroupName(featureGroup, quoteIndex) || getWizardGroupName(wizardGroup) : getWizardGroupName(wizardGroup)}\r\n \r\n {currentCartItems.map((cartItem, cartItemIndex) => {\r\n if (cartItem.partId === \"slabs\") {\r\n return null\r\n }\r\n return \r\n })}\r\n \r\n )\r\n return slabsCartItems.length ? (\r\n \r\n {mainCartItems}\r\n \r\n \r\n {printContext.messages[\"sqftFeaturesPopup.title.slabs\"]}\r\n \r\n {slabsCartItems.map((cartItem, cartItemIndex) => {\r\n return \r\n })}\r\n \r\n \r\n ) : mainCartItems\r\n // } else if (wizardGroup && existingAllObject.wizardSelectedValues[key].selectedFeature && !wizardGroup.hideInCartAndReceipt) {\r\n // return \r\n }\r\n })\r\n }) : null}\r\n {layout.qtCategories && !showWizardSteps ? (\r\n layout.qtCategories.map(qtCategory => {\r\n return qtCategory.subParts.map((subPart, subPartIndex) => {\r\n let currentCartItems = quoteCartItems.filter(cartItem => {\r\n if (cartItem.bundleParentId) {\r\n return false\r\n }\r\n return (subPart.part.partId === cartItem.partId || (cartItem.relatedProductParent && subPart.part.partId === cartItem.relatedProductParent.partId))\r\n && !uniqueCartItemIds.includes(cartItem.id)\r\n });\r\n if (!currentCartItems.length) {\r\n return null\r\n }\r\n uniqueCartItemIds = [...uniqueCartItemIds, ...currentCartItems.map(cItem => cItem.id)];\r\n return (\r\n \r\n {getGroupName(subPart.part, quoteIndex)}\r\n {currentCartItems.map((cartItem, cartItemIndex) => {\r\n return \r\n })}\r\n \r\n )\r\n })\r\n })\r\n ) : null}\r\n {quoteCartItems.map((cartItem) => {\r\n if (!uniqueCartItemIds.includes(cartItem.id) && !cartItem.bundleParentId) {\r\n uniqueCartItemIds.push(cartItem.id);\r\n return (\r\n \r\n \r\n {cartItem.displayFakeFeatureGroupName\r\n ? printContext.messages[\"sqftFeaturesPopup.title.\" + cartItem.displayFakeFeatureGroupName]\r\n : cartItem.cartFeature.dbFeature.customGroupName || cartItem.selectionGroup\r\n || (cartItem.cartFeature && cartItem.cartFeature.getParent ? getGroupName(cartItem.cartFeature.getParent(), quoteIndex) : null)}\r\n \r\n \r\n \r\n )\r\n }\r\n return null\r\n })}\r\n \r\n {showPrice ? (\r\n \r\n \r\n {printContext.messages[\"shoppingCart.totalColumnsSubTotal\"]}: \r\n \r\n {getPriceWithCurrency(fabricatorSettings, fixedPrice)}\r\n \r\n \r\n {differentCurrencyObjects.length ? differentCurrencyObjects.map(currObject => {\r\n const currentTotal = getTotalPrice(quoteIndex, false, currObject.cartItems);\r\n return (\r\n \r\n {printContext.messages[\"shoppingCart.totalColumnsSubTotal\"]}: \r\n \r\n {getCurrencySign(currObject.currency, fabricatorSettings) + toFixedPrice(currentTotal.materialPrice, true)}\r\n \r\n \r\n )\r\n }) : null}\r\n \r\n \r\n ) : null}\r\n \r\n )\r\n })\r\n};\r\n\r\nPrintDocumentBody.propTypes = {\r\n quotes: PropTypes.array.isRequired,\r\n cartItems: PropTypes.array.isRequired,\r\n fabricatorData: PropTypes.object.isRequired,\r\n locale: PropTypes.string.isRequired,\r\n filterGroups: PropTypes.array,\r\n styles: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default PrintDocumentBody\r\n","import React, {useContext} from \"react\";\r\nimport {View, Text} from \"@react-pdf/renderer\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\nimport {cartItemInterface} from \"../../shoppingCart/cartItemInterface\";\r\nimport PrintDocumentBodyCartItem from \"./printDocumentBodyCartItem\";\r\nimport {IS_LIXIL_UI} from \"../../../config\";\r\n\r\n\r\nconst PrintDocumentBodyBundledCartItems = (props) => {\r\n const {styles, cartItem, fabricatorData, locale, cartItems} = props;\r\n // const fabricatorSettings = fabricatorData.settings;\r\n\r\n const bundleProducts = cartItems ? cartItems.filter(cItem => {\r\n return cItem.bundleParentId && (cItem.bundleParentId === cartItem.id)\r\n }) : [];\r\n\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n if (fabricatorData.isAmericanStandard && !IS_LIXIL_UI) {\r\n // the quoting tool needs to have the bundled products hidden (only for American standard) in the cart and receipt,\r\n // but still send items through the API to LP.\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n {printContext.messages[\"shoppingCart.bundledItems\"]}\r\n \r\n \r\n {bundleProducts.map(bundleCartItem => {\r\n return \r\n })}\r\n \r\n \r\n )\r\n};\r\n\r\nPrintDocumentBodyBundledCartItems.propTypes = {\r\n cartItem: PropTypes.shape(cartItemInterface),\r\n fabricatorData: PropTypes.object.isRequired,\r\n locale: PropTypes.string.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default PrintDocumentBodyBundledCartItems\r\n","export default [\r\n \"granite_transformations_of_cambridge\",\r\n \"granite_transformations_of_watford\",\r\n \"granite_transformations_of_norwich\",\r\n \"granite_transformations_of_holt\",\r\n \"granite_transformations_of_newcastle\",\r\n \"granite_transformations_of_newark\",\r\n \"granite_transformations_of_nottingham\",\r\n \"granite_transformations_of_wakefield\",\r\n \"granite_transformations_of_york\",\r\n \"granite_transformations_north_leeds\",\r\n \"granite_transformations_of_ipswich\",\r\n \"granite_transformations_of_colchester\",\r\n \"granite_transformations_of_belfast\",\r\n \"granite_transformations_of_hinckley\",\r\n \"granite_transformations_of_tees_valley\",\r\n \"granite_transformations_of_tunbridge_wells\",\r\n \"granite_transformations_of_ruxley\",\r\n \"granite_transformations_of_sevenoaks\",\r\n \"granite_transformations_of_derby\",\r\n \"granite_transformations_of_bridgemere\",\r\n \"granite_transformations_congleton\",\r\n \"granite_transformations_of_cheltenham\",\r\n \"granite_transformations_of_bristol\",\r\n \"granite_transformations_of_banbury\",\r\n \"granite_transformations_of_warwick\",\r\n \"granite_transformations_of_rugby\",\r\n \"granite_transformations_of_gyle\",\r\n \"granite_transformations_of_exeter\",\r\n \"trend_transformations_of_bolton\",\r\n \"trend_transformations_of_kutsford\",\r\n \"trend_transformations_of_maidstone\",\r\n \"trend_transformations_of_ellesmere_port\",\r\n \"trend_transformations_of_burton\",\r\n \"trend_transformations_of_speke\",\r\n \"trend_transformations_of_perth\",\r\n \"trend_transformations_of_plymouth\",\r\n \"trend_transformations_of_birmingham_east\",\r\n \"trend_transformations_of_milton_keynes\",\r\n \"trend_transformations_of_eastbourne\",\r\n \"trend_transformations_uk\"\r\n];\r\n","import React, {useContext} from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {View, Text} from \"@react-pdf/renderer\";\r\n\r\nimport PrintSimilarProductsListItem from \"./printSimilarProductsListItem\";\r\nimport {PrintDocumentContext} from \"../printDocumentContext\";\r\nimport {getFeaturesCollectionsList} from \"../../../shoppingCart/similarProducts/similarProductsFunctions\";\r\n\r\nconst PrintSimilarProducts = (props) => {\r\n\r\n const {styles, cartItems, fabricatorData, filterGroups, locale, quoteIndex} = props;\r\n const similarOpened = true;\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n const insideQuote = Number.isInteger(quoteIndex);\r\n\r\n const addedCountertops = insideQuote\r\n ? cartItems.filter(cItem => cItem.currentQuote === quoteIndex && cItem.partId.includes(\"countertop\"))\r\n : cartItems.filter(cItem => cItem.partId.includes(\"countertop\"));\r\n\r\n const cartItem = addedCountertops[0];\r\n\r\n if (!cartItem) {\r\n return null\r\n }\r\n\r\n const featuresCollectionsList = getFeaturesCollectionsList(cartItem, filterGroups);\r\n if (!featuresCollectionsList || !featuresCollectionsList.length) {\r\n return null\r\n }\r\n\r\n const totalCountertopsQuantity = addedCountertops.reduce(((accumulator, cItem) => accumulator + cItem.quantity), 0);\r\n\r\n return (\r\n \r\n \r\n {printContext.messages[\"similar.title\"]}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {printContext.messages[\"similar.filterName\"]}\r\n \r\n \r\n {printContext.messages[\"similar.product.priceProject\"]}\r\n \r\n \r\n {similarOpened ? featuresCollectionsList.map((featureCollection, featureCollectionIndex) => {\r\n return \r\n }) : null}\r\n \r\n \r\n \r\n )\r\n};\r\n\r\nPrintSimilarProducts.propTypes = {\r\n quoteIndex: PropTypes.number,\r\n cartItems: PropTypes.array.isRequired,\r\n filterGroups: PropTypes.array,\r\n fabricatorData: PropTypes.object.isRequired,\r\n locale: PropTypes.string.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default PrintSimilarProducts\r\n","import React, {useContext} from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {View, Text} from \"@react-pdf/renderer\";\r\n\r\nimport {cartItemInterface} from \"../../../shoppingCart/cartItemInterface\";\r\nimport {getPriceWithCurrency} from \"../../../../misc/helpers\";\r\nimport {PrintDocumentContext} from \"../printDocumentContext\";\r\nimport {getCartItemName} from \"../printDocumentFunctions\";\r\nimport {getSimilarItemInfoObject} from \"../../../shoppingCart/similarProducts/similarProductsFunctions\";\r\nimport {featureCollectionInterface} from \"../../../../interfaces/featureInterface\";\r\n\r\nconst PrintSimilarProductsListItem = (props) => {\r\n\r\n const {styles, cartItem, addedCountertops, fabricatorData, locale, featureCollection, filterGroups, quoteIndex, lastItem,\r\n totalCountertopsQuantity} = props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n const {filterValueName, feature, subTotalPrice} = getSimilarItemInfoObject(\r\n cartItem,\r\n addedCountertops,\r\n featureCollection,\r\n totalCountertopsQuantity,\r\n quoteIndex,\r\n filterGroups\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n {filterValueName}\r\n \r\n \r\n {printContext.messages[\"similar.product.example\"]} {getCartItemName(feature, fabricatorData, printContext, locale)}\r\n \r\n \r\n \r\n {getPriceWithCurrency(fabricatorSettings, subTotalPrice, feature)}\r\n \r\n \r\n )\r\n};\r\n\r\nPrintSimilarProductsListItem.propTypes = {\r\n quoteIndex: PropTypes.number.isRequired,\r\n cartItem: PropTypes.shape(cartItemInterface),\r\n addedCountertops: PropTypes.arrayOf(PropTypes.shape(cartItemInterface)),\r\n featureCollection: PropTypes.shape(featureCollectionInterface),\r\n fabricatorData: PropTypes.object.isRequired,\r\n locale: PropTypes.string.isRequired,\r\n filterGroups: PropTypes.array.isRequired,\r\n lastItem: PropTypes.bool.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n totalCountertopsQuantity: PropTypes.number.isRequired,\r\n};\r\n\r\n\r\nexport default PrintSimilarProductsListItem\r\n","export const getGroupDescription = (groupName) => {\r\n groupName = (groupName || '').toLowerCase();\r\n // console.log(\"groupName\", groupName);\r\n switch (groupName) {\r\n case 'material':\r\n return \"quotingTool.featureGroupDescription.material\";\r\n case \"room\":\r\n return \"quotingTool.featureGroupDescription.room\";\r\n case \"edge profile\":\r\n case \"edge\":\r\n return \"quotingTool.featureGroupDescription.edgeProfile\";\r\n case \"cutouts\":\r\n return \"quotingTool.featureGroupDescription.cutouts\";\r\n case \"faucets\":\r\n case \"faucet\":\r\n return \"quotingTool.featureGroupDescription.faucet\";\r\n case \"sinks\":\r\n case \"sink\":\r\n return \"quotingTool.featureGroupDescription.sink\";\r\n case \"counter top removal\":\r\n case \"countertop removal\":\r\n return \"quotingTool.featureGroupDescription.countertopRemoval\";\r\n case \"counter top disposal\":\r\n case \"countertop disposal\":\r\n return \"quotingTool.featureGroupDescription.countertopDisposal\";\r\n case \"radius\":\r\n return \"quotingTool.featureGroupDescription.radius\";\r\n case \"plumbing\":\r\n return \"quotingTool.featureGroupDescription.plumbing\";\r\n case \"backsplash\":\r\n return \"quotingTool.featureGroupDescription.backsplash\";\r\n case \"sealer\":\r\n return \"quotingTool.featureGroupDescription.sealer\";\r\n case \"hourly labor\":\r\n return \"quotingTool.featureGroupDescription.hourly\";\r\n case \"trip charge\":\r\n return \"quotingTool.featureGroupDescription.tripCharge\";\r\n case \"milling down\":\r\n return \"quotingTool.featureGroupDescription.millingDown\";\r\n case \"template\":\r\n return \"quotingTool.featureGroupDescription.template\";\r\n case \"15 year sealer\":\r\n return \"quotingTool.featureGroupDescription.15YearsSealer\";\r\n case \"10 year sealer\":\r\n return \"quotingTool.featureGroupDescription.10YearsSealer\";\r\n case \"finishes\":\r\n return \"quotingTool.featureGroupDescription.finishes\";\r\n case \"flat metal support brackets\":\r\n return \"quotingTool.featureGroupDescription.flatMetalSupportBrackets\";\r\n case \"bump out\":\r\n return \"quotingTool.featureGroupDescription.bumpOut\";\r\n case \"inside corner\":\r\n return \"quotingTool.featureGroupDescription.insideCorner\";\r\n case \"45 degree inside corner\":\r\n return \"quotingTool.featureGroupDescription.45DegreeInsideCorner\";\r\n case \"arch\":\r\n return \"quotingTool.featureGroupDescription.arch\";\r\n case \"cooktop type\":\r\n return \"quotingTool.featureGroupDescription.cooktopType\";\r\n case \"sink type\":\r\n return \"quotingTool.featureGroupDescription.sinkType\";\r\n case 'stove type':\r\n return 'quotingTool.featureGroupDescription.stoveType';\r\n case 'protection plan':\r\n return 'quotingTool.featureGroupDescription.protectionPlan';\r\n default:\r\n return 'quotingTool.featureGroupDescription.default';\r\n }\r\n}\r\n","import axios from \"axios\";\r\nimport store from \"../store\";\r\nimport {setNetworkConnection} from \"../actions/serverFunctions\";\r\n\r\nconst headers = {\r\n \"Content-Type\": \"application/json\"\r\n};\r\n\r\nconst AxiosInstance = axios.create({\r\n // baseURL: process.env.REACT_APP_API_BASE_URL + '/api/',\r\n // timeout: 120000,\r\n headers\r\n});\r\n\r\nAxiosInstance.interceptors.response.use((response) => {\r\n const {serverState} = store.getState();\r\n if (!serverState.networkConnection) {\r\n store.dispatch(setNetworkConnection(true))\r\n }\r\n return response;\r\n}, (error) => {\r\n // Do something with response error\r\n if (error && error.toJSON && error.toJSON().message === \"Network Error\") {\r\n store.dispatch(setNetworkConnection(false))\r\n }\r\n return Promise.reject(error);\r\n});\r\n\r\nexport default AxiosInstance;\r\n\r\n\r\nexport const apiResponseError = response => {\r\n // console.log(\"apiResponseError\", response);\r\n if (response && response.data && response.data.errors) {\r\n return Object.keys(response.data.errors)\r\n .map(k => `${k} - ${response.data.errors[k]}`)\r\n .join('
    ');\r\n }\r\n if (response && response.error) {\r\n return response.error;\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport const apiGet = async url => {\r\n try {\r\n const response = await AxiosInstance.get(url);\r\n return {data: {...response.data}, error: apiResponseError(response)};\r\n } catch (error) {\r\n return {error: apiResponseError(error)};\r\n }\r\n};\r\n\r\nexport const apiPost = async (url, data) => {\r\n console.log(\"url to post\", url);\r\n console.log(\"data to post\", data);\r\n try {\r\n const response = await AxiosInstance.post(url, data);\r\n console.log(\"response1\", response);\r\n return {data: {...response.data}, error: apiResponseError(response)};\r\n } catch (error) {\r\n console.log(\"response1 error\", error);\r\n return {error: apiResponseError(error)};\r\n }\r\n}\r\n\r\n","export default \"// This is our input from js world\\r\\nattribute vec2 coords;\\r\\n// This is output for the fragment shader\\r\\n// varying variables are a little special\\r\\n// you will see why later\\r\\nvarying highp vec2 vTextureCoord;\\r\\n\\r\\nvoid main (void) {\\r\\n // Texture and verticies have different coordinate spaces\\r\\n // we do this to invert Y axis\\r\\n vTextureCoord = -coords;\\r\\n\\r\\n // Setting vertix position for shape assembler\\r\\n // GLSL has many convenient vector functions\\r\\n // here we extending 2D coords vector to 4D with 2 values\\r\\n // 0.0 is a Z coordinate\\r\\n // 1.1 is a W, special value needed for 3D math\\r\\n // just leave it 1 for now\\r\\n gl_Position = vec4(coords, 0.0, 1.0);\\r\\n}\";","export default \"precision mediump float;\\r\\nvarying highp vec2 vTextureCoord;\\r\\nuniform sampler2D uSampler;\\r\\n\\r\\nvec2 coords;\\r\\nfloat x;\\r\\nfloat y;\\r\\nfloat l;\\r\\nfloat a;\\r\\nvec4 color;\\r\\nvec4 color2;\\r\\n\\r\\nfloat to_srgb(float v) {\\r\\n float result = 0.0;\\r\\n if (v < 0.003) {\\r\\n result = v * 12.920;\\r\\n } else {\\r\\n result = pow(v, 0.417);\\r\\n result = result * 1.055;\\r\\n result = result - 0.055;\\r\\n }\\r\\n return result;\\r\\n}\\r\\n\\r\\nvec4 vec_to_srgb(vec4 v) {\\r\\n vec4 result;\\r\\n result.r = to_srgb(v.r);\\r\\n result.g = to_srgb(v.g);\\r\\n result.b = to_srgb(v.b);\\r\\n result.a = v.a;\\r\\n return result;\\r\\n}\\r\\n\\r\\nfloat from_srgb(float v) {\\r\\n float result = 0.0;\\r\\n if (v < 0.040) {\\r\\n result = v / 12.920;\\r\\n } else {\\r\\n result = v + 0.055;\\r\\n result = result / 1.055;\\r\\n result = pow(result, 2.4);\\r\\n }\\r\\n return result;\\r\\n}\\r\\n\\r\\nvec4 vec_from_srgb(vec4 v) {\\r\\n vec4 result;\\r\\n result.r = from_srgb(v.r);\\r\\n result.g = from_srgb(v.g);\\r\\n result.b = from_srgb(v.b);\\r\\n result.a = v.a;\\r\\n return result;\\r\\n}\\r\\n\\r\\nvoid main(void){\\r\\n float gamma = 2.4;\\r\\n float out_gamma = 0.41666;\\r\\n x = vTextureCoord[0];\\r\\n y = vTextureCoord[1];\\r\\n coords[0] = (1.0 - x) / 2.0;\\r\\n coords[1] = (y + 1.0) / 2.0;\\r\\n color = vec_from_srgb(texture2D(uSampler, coords));\\r\\n a = color.a;\\r\\n color2 = vec4(8, 8, 8, 0) * color + vec4(1, 1, 1, 0);\\r\\n color2 = vec4(8, 8, 8, 0) * color / color2;\\r\\n color2.a = a;\\r\\n gl_FragColor = vec_to_srgb(color2);\\r\\n}\";","import $ from \"jquery\";\r\n\r\nconst sqftCursorManager = {\r\n canvas: null,\r\n currentCursor: null,\r\n currentCursorOwner: null,\r\n noCursorStealing: false,\r\n\r\n init(canvas) {\r\n this.canvas = canvas;\r\n this.resetCursor(null);\r\n },\r\n\r\n setCursor(cursor, owner, noStealing = false) {\r\n this.noCursorStealing = noStealing || this.noCursorStealing;\r\n\r\n if (this.currentCursorOwner === null || this.currentCursorOwner === owner) {\r\n if (this.currentCursor !== cursor) {\r\n const prefix = \"cursor-\";\r\n const classes = this.canvas.className.split(\" \").filter(c => c.lastIndexOf(prefix, 0) !== 0);\r\n this.canvas.className = classes.join(\" \").trim();\r\n $(this.canvas).addClass(`cursor-${cursor}`);\r\n $(this.canvas).css({ cursor: null });\r\n this.currentCursorOwner = owner;\r\n this.currentCursor = cursor;\r\n }\r\n }\r\n },\r\n\r\n setCursorImage(cursorImage, owner, noStealing = false) {\r\n this.setCursor(\"image\", owner, noStealing);\r\n $(this.canvas).css({ cursor: `url(${cursorImage}), default !important` });\r\n },\r\n\r\n resetCursor(owner) {\r\n if (this.currentCursorOwner === owner) {\r\n this.currentCursorOwner = null;\r\n this.setCursor(\"grab\", null);\r\n this.releaseStealLock(owner);\r\n }\r\n },\r\n\r\n getCursor() {\r\n const prefix = \"cursor-\";\r\n const classes = this.canvas.className.split(\" \").filter(c => c.lastIndexOf(prefix, 0) === 0);\r\n return classes.map(c => c.replace(prefix, \"\"));\r\n },\r\n\r\n stealCursor(override = false, revertBackAfterMouseUp = false) {\r\n if (override && this.currentCursorOwner) {\r\n if (this.currentCursorOwner.destroy) {\r\n this.currentCursorOwner.destroy(true, revertBackAfterMouseUp);\r\n }\r\n }\r\n\r\n if (!this.noCursorStealing || override) {\r\n this.resetCursor(this.currentCursorOwner);\r\n }\r\n },\r\n\r\n releaseStealLock(owner) {\r\n if (this.currentCursorOwner === owner) {\r\n this.noCursorStealing = false;\r\n }\r\n }\r\n};\r\n\r\nexport default sqftCursorManager;\r\n","import EventManager from \"../../../store/sqftEventManager\";\r\nimport config from \"../../../store/sqftConfig\";\r\nimport {getFontsize, inchesToMm, isDisabledInPopupWithParents, isInnerCorner} from \"../../../../../helpers/sqftHelper\";\r\n//import shapeHelper from \"../../../../../helpers/shapeHelper\";\r\nimport {isDisabledInPopupShouldBeHidden} from \"../../../../../constants\";\r\n\r\nexport default function() {\r\n var self = this,\r\n point = null;\r\n\r\n function setPoint(value) { point = value; }\r\n\r\n this.destroy = function(protect) {\r\n if(!protect) {\r\n EventManager.removeEvent(self);\r\n }\r\n };\r\n\r\n this.init = function(point) {\r\n setPoint(point);\r\n this.initEvents();\r\n };\r\n this.initEvents = () => {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n self.render,\r\n self,\r\n EventManager.priorities.OVERLAY\r\n );\r\n }\r\n this.deregisterPartEvents = () => {\r\n EventManager.removeEvent(this);\r\n };\r\n this.reInitPartEvents = () => {\r\n this.initEvents();\r\n };\r\n this.render = (ctx) => {\r\n if (isDisabledInPopupShouldBeHidden() && isDisabledInPopupWithParents(point)) {\r\n return\r\n }\r\n\r\n if (point.arcLength > 0 || point.angle > 0) {\r\n const line = point.getParent(),\r\n shape = line.getParent(),\r\n //nextLine = shape.getNextLine(line),\r\n //nextLineTo = nextLine.calculateRenderPosition(nextLine.to),\r\n prevLine = shape.getPrevLine(line),\r\n prevLineFrom = prevLine.calculateRenderPosition(prevLine.from),\r\n renderTo = line.calculateRenderPosition(line.to),\r\n renderFrom = line.calculateRenderPosition(line.from),\r\n isInner = isInnerCorner(shape, prevLineFrom, renderFrom, renderTo);\r\n\r\n let fontSize = getFontsize(),\r\n font = (config.measureUnit === \"Imperial\" ? fontSize : fontSize - 5).toString() + \"px \" + config.activeFontBold,\r\n radius = point.arcLength || point.angle,\r\n //dir = shape.getAngleDirection(shape.getPrevLine(line)),\r\n //isInner = shapeHelper.isAngleInner(dir),\r\n pointCorner = point.corner ? point.corner : isInner,\r\n cornerMargin = pointCorner\r\n ? point.arcLength ? +point.arcLength - 8 : +point.angle\r\n : point.arcLength ? -point.arcLength + 8 : -point.angle,\r\n radiusLetter = point.arcLength ? \"r\" : \"\",\r\n dstring = config.measureUnit === \"Metric\"\r\n ? radiusLetter + new Fraction(inchesToMm(radius)) + \"mm\"\r\n : radiusLetter + new Fraction(radius) + \"\\\"\",\r\n mtext = ctx.measureText(dstring),\r\n tLen = mtext.width,\r\n offset = point.getPointField(),\r\n renderPos = {\r\n x: offset.x + offset.width,\r\n y: offset.y + (offset.height / 2)\r\n };\r\n ctx.beginPath();\r\n ctx.font = font;\r\n ctx.textAlign = \"center\";\r\n renderPos.y += fontSize / 2;\r\n // ctx.fillStyle = \"rgb(178, 99, 168)\";\r\n // ctx.fillRect(offset.x - 4, offset.y + 2 + (fontSize * 2), tLen + 6, fontSize + 4);\r\n ctx.beginPath();\r\n ctx.fillStyle = \"#b263a8\";\r\n\r\n //todo correct positions\r\n switch (point.pointDirection) {\r\n case \"lefttop\":\r\n ctx.wrapText(\r\n dstring,\r\n renderPos.x - offset.width + tLen,//- (tLen + cornerMargin) * config.scale / config.defaultScale,\r\n renderPos.y - (fontSize + cornerMargin) * config.scale / config.defaultScale, mtext, fontSize\r\n );\r\n break;\r\n case \"righttop\":\r\n ctx.wrapText(\r\n dstring,\r\n renderPos.x + cornerMargin * config.scale / config.defaultScale,\r\n renderPos.y - (fontSize + cornerMargin) * config.scale / config.defaultScale, mtext, fontSize\r\n );\r\n break;\r\n case \"rightbottom\":\r\n ctx.wrapText(\r\n dstring,\r\n renderPos.x + (fontSize + cornerMargin) * config.scale / config.defaultScale,\r\n renderPos.y + (fontSize + cornerMargin) * config.scale / config.defaultScale, mtext, fontSize\r\n );\r\n break;\r\n case \"leftbottom\":\r\n ctx.wrapText(\r\n dstring,\r\n renderPos.x - (60 + cornerMargin) * config.scale / config.defaultScale,\r\n renderPos.y + (fontSize + cornerMargin) * config.scale / config.defaultScale,\r\n mtext, fontSize\r\n );\r\n break;\r\n default:\r\n ctx.wrapText(\r\n dstring,\r\n renderPos.x,\r\n renderPos.y - (fontSize / 2) + (fontSize * 2), mtext, fontSize\r\n );\r\n break;\r\n }\r\n }\r\n };\r\n}\r\n","import {SQFTResourceController} from \"./SQFTResourceController\";\r\nimport Spacer from \"../../core/shapes/spacer\";\r\nimport {WORKSPACE_RESOURCES} from \"../../../../constants\";\r\n\r\nexport class SpacersController extends SQFTResourceController {\r\n isJustCreated: false;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.resourceName = WORKSPACE_RESOURCES.spacers;\r\n }\r\n\r\n setIsJustCreated(value) {\r\n this.isJustCreated = value\r\n }\r\n\r\n createSpacer(point1, point2, pos) {\r\n if (!this.isNotCreatedSpacerExist()) {\r\n this.addResource(new Spacer([point1, point2], pos));\r\n }\r\n }\r\n\r\n /**\r\n * Used to skip mouse up in workspace events\r\n **/\r\n isNotCreatedSpacerExist() {\r\n const resources = this.getResources();\r\n return resources.some(spacer => !spacer.getIsCreated())\r\n }\r\n}\r\n\r\n","import * as uuid from \"uuid\";\r\n\r\nimport EventManager from \"../../store/sqftEventManager\";\r\nimport {SHAPE_PART_ID, SIDEBAR_BUTTONS_MENU} from \"../../../../constants\";\r\nimport COLOR_THEMES from \"../../../../../../colorThemes\";\r\nimport eventManager from \"../../store/sqftEventManager\";\r\nimport store from \"../../../../../../store\";\r\nimport workspaceControllers from \"../../store/workspaceControllers\";\r\nimport {\r\n getDistanceFromPointToLine,\r\n getMousePositionOnShape,\r\n getParallelPoints,\r\n getPointField\r\n} from \"../../../../helpers/sqftHelper\";\r\nimport sqftEventManager from \"../../store/sqftEventManager\";\r\nimport {\r\n adjustPointsRelativeToTopLeft,\r\n findTopLeftPoint,\r\n getThePositionOfAPointToTheLeftOrRightOfALine, sortPointsClockwise\r\n} from \"../../../../helpers/coordinatesHelper\";\r\nimport sqftConfig from \"../../store/sqftConfig\";\r\nimport {createShapeFromPoints} from \"../../../../helpers/freeDrawHelper\";\r\nimport sqftShapeManager from \"../../store/sqftShapeManager\";\r\nimport ShapeCabinet from \"./shapeParts/shapeCabinet\";\r\n\r\nexport default class Spacer {\r\n id;\r\n state = {\r\n centerPoint: {x: 0, y: 0},\r\n betweenPoints: [],\r\n isCreated: false,\r\n isHovering: false,\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n };\r\n\r\n constructor(points, centerPoint) {\r\n this.id = uuid.v4();\r\n this.state.betweenPoints = points\r\n this.state.centerPoint = centerPoint\r\n this.initEvents();\r\n }\r\n\r\n getIsCreated() { return this.state.isCreated }\r\n setCreated(value) { this.state.isCreated = value}\r\n\r\n initEvents() {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render.bind(this),\r\n this,\r\n EventManager.priorities.WALL\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n this.onMouseDown.bind(this),\r\n this,\r\n EventManager.priorities.OVERALL\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n this.onMouseMove.bind(this),\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n }\r\n\r\n destroy() {\r\n this.deregisterEvents();\r\n this.destroyPoints();\r\n }\r\n\r\n destroyPoints() {\r\n for (const addedPoints of this.state.betweenPoints) {\r\n addedPoints.destroy()\r\n }\r\n }\r\n\r\n deregisterEvents() {\r\n eventManager.removeEvent(this);\r\n }\r\n\r\n onMouseDown(mousePos) {\r\n void mousePos;\r\n if (this.state.isHovering) {\r\n const reduxState = store.getState();\r\n if (reduxState.sqftMenuState.activeButton === SIDEBAR_BUTTONS_MENU.delete) {\r\n workspaceControllers.spacer.destroyResource(this)\r\n return true\r\n }\r\n }\r\n\r\n if (!this.state.isCreated) {\r\n this.createShapeFromSpacerPoints()\r\n this.setCreated(true);\r\n workspaceControllers.spacer.destroyResource(this);\r\n workspaceControllers.spacer.setIsJustCreated(true);\r\n return true\r\n }\r\n\r\n return false\r\n }\r\n\r\n createShapeFromSpacerPoints = () => {\r\n const [point3, point4] = this.getPointsToTheMouse();\r\n const shape = this.state.betweenPoints[0].getParent().getParent();\r\n\r\n // Получаем позиции точек на шейпе\r\n const point3PointField = getMousePositionOnShape(point3.x, point3.y, shape);\r\n const point4PointField = getMousePositionOnShape(point4.x, point4.y, shape);\r\n\r\n // Собираем точки шейпа\r\n const shapePoints = [\r\n this.state.betweenPoints[1],\r\n point3PointField,\r\n point4PointField,\r\n this.state.betweenPoints[0]\r\n ];\r\n\r\n const topLeftPoint = findTopLeftPoint(shapePoints);\r\n const adjustedShapePoints = adjustPointsRelativeToTopLeft(shapePoints, topLeftPoint);\r\n const sortedPoints = sortPointsClockwise(adjustedShapePoints);\r\n if (!sortedPoints) {\r\n console.warn(\"Shape creation skipped due to undefined points.\");\r\n return;\r\n }\r\n\r\n const shapePosition = shape.getPosition();\r\n const newShapePosition = {\r\n x: topLeftPoint.x + shapePosition.x,\r\n y: topLeftPoint.y + shapePosition.y\r\n };\r\n\r\n const shapeParams = {\r\n ...shape.shapeParams,\r\n isSpacer: true,\r\n canSnap: true,\r\n };\r\n\r\n const spacerShapeId = createShapeFromPoints(sortedPoints, SHAPE_PART_ID.spacer,\r\n false,\r\n newShapePosition,\r\n false,\r\n null,\r\n shapeParams\r\n );\r\n\r\n let spacerShape = sqftShapeManager.getShapeById(spacerShapeId);\r\n spacerShape.featureId = shape.featureId;\r\n spacerShape.relatedParentFeatureId = shape.relatedParentFeatureId;\r\n spacerShape.parentPartId = shape.partId;\r\n spacerShape.featureName = shape.featureName;\r\n spacerShape.colorSet = shape.colorSet;\r\n if (shape.shapeCabinet) {\r\n spacerShape.shapeCabinet = new ShapeCabinet(spacerShape)\r\n }\r\n }\r\n\r\n onMouseMove(mousePos) {\r\n void mousePos\r\n //this.state.isHovering = this.isMouseOverWall(mousePos) || this.state.mouseDown;\r\n }\r\n\r\n render(ctx) {\r\n if (this.state.isCreated) {\r\n //this.renderLines(ctx);\r\n } else {\r\n this.renderLinesToMouse(ctx);\r\n }\r\n }\r\n\r\n getPointsToTheMouse() {\r\n const betweenPoint1 = this.state.betweenPoints[0];\r\n const betweenPoint2 = this.state.betweenPoints[1];\r\n let pointField1 = getPointField(betweenPoint1.x, betweenPoint1.y, betweenPoint1.getParent().getParent());\r\n let pointField2 = getPointField(betweenPoint2.x, betweenPoint2.y, betweenPoint1.getParent().getParent());\r\n let mousePos = sqftEventManager.LastKnownMousePos;\r\n const distanceFromMouseToTheLine = getDistanceFromPointToLine(\r\n mousePos.x,\r\n mousePos.y,\r\n pointField1.x,\r\n pointField1.y,\r\n pointField2.x,\r\n pointField2.y,\r\n )\r\n const pointLeftRightPosition = getThePositionOfAPointToTheLeftOrRightOfALine(pointField1, pointField2, mousePos);\r\n const parallelPoints = getParallelPoints(\r\n pointField1,\r\n pointField2,\r\n pointLeftRightPosition > 0\r\n ? -distanceFromMouseToTheLine\r\n : distanceFromMouseToTheLine\r\n );\r\n void parallelPoints;\r\n // console.log(\"pointField1\", pointField1);\r\n // console.log(\"pointField2\", pointField2);\r\n // console.log(\"distanceFromMouseToTheLine\", distanceFromMouseToTheLine);\r\n // console.log(\"mousePos\", mousePos);\r\n // console.log(\"parallelPoints0\", parallelPoints[0]);\r\n // console.log(\"parallelPoints1\", parallelPoints[1]);\r\n // console.log(\"pointLeftRightPosition\", pointLeftRightPosition);\r\n return parallelPoints\r\n }\r\n\r\n renderLinesToMouse(ctx) {\r\n const [point3, point4] = this.getPointsToTheMouse();\r\n ctx.lineWidth = this.state.lineWidth;\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n ctx.strokeStyle = this.state.lineColor;\r\n\r\n const betweenPoint1 = this.state.betweenPoints[0];\r\n const betweenPoint2 = this.state.betweenPoints[1];\r\n let pointField1 = getPointField(betweenPoint1.x, betweenPoint1.y, betweenPoint1.getParent().getParent());\r\n let pointField2 = getPointField(betweenPoint2.x, betweenPoint2.y, betweenPoint1.getParent().getParent());\r\n ctx.beginPath()\r\n ctx.moveTo(pointField1.x, pointField1.y);\r\n ctx.lineTo(pointField2.x, pointField2.y);\r\n ctx.lineTo(point3.x, point3.y);\r\n ctx.lineTo(point4.x, point4.y);\r\n ctx.fill();\r\n ctx.closePath();\r\n ctx.stroke();\r\n }\r\n\r\n // renderLines(ctx) {\r\n // const reduxState = store.getState();\r\n // const activeButton = reduxState.sqftMenuState.activeButton;\r\n // ctx.lineWidth = this.state.lineWidth;\r\n // ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n // ctx.strokeStyle = this.state.isHovering && activeButton === SIDEBAR_BUTTONS_MENU.delete\r\n // ? COLORS.red\r\n // : this.state.lineColor;\r\n //\r\n // const betweenPoint1 = this.state.betweenPoints[0];\r\n // const betweenPoint2 = this.state.betweenPoints[1];\r\n // const betweenPoint3 = this.state.betweenPoints[3];\r\n // const betweenPoint4 = this.state.betweenPoints[4];\r\n // let pointField1 = getPointField(betweenPoint1.x, betweenPoint1.y, betweenPoint1.getParent().getParent());\r\n // let pointField2 = getPointField(betweenPoint2.x, betweenPoint2.y, betweenPoint1.getParent().getParent());\r\n // let pointField3 = getPointField(betweenPoint3.x, betweenPoint3.y, betweenPoint1.getParent().getParent());\r\n // let pointField4 = getPointField(betweenPoint4.x, betweenPoint4.y, betweenPoint1.getParent().getParent());\r\n //\r\n // ctx.beginPath()\r\n // ctx.moveTo(pointField1.x, pointField1.y);\r\n // ctx.lineTo(pointField2.x, pointField2.y);\r\n // ctx.lineTo(pointField3.x, pointField3.y);\r\n // ctx.lineTo(pointField4.x, pointField4.y);\r\n // ctx.fill();\r\n // ctx.closePath();\r\n // ctx.stroke();\r\n // }\r\n}\r\n","import sqftConfig from \"../../../../store/sqftConfig\";\r\nimport workspace from \"../../../workspace\";\r\n\r\nexport default class ModelCorePoint {\r\n _x;\r\n _y;\r\n _parent;\r\n _mixins = {\r\n movable: null\r\n };\r\n\r\n constructor(x, y, parent, mixins) {\r\n this._x = x;\r\n this._y = y;\r\n this._parent = parent;\r\n this._mixins = mixins;\r\n }\r\n\r\n get x() {\r\n return this.mixins.movable ? this.mixins.movable.posX : this._x;\r\n }\r\n\r\n set x(value) {\r\n this.mixins.movable ? this.mixins.movable.posX = value : this._x = value;\r\n }\r\n\r\n get y() {\r\n return this.mixins.movable ? this.mixins.movable.posX : this._y;\r\n }\r\n\r\n set y(value) {\r\n this.mixins.movable ? this.mixins.movable.posY = value : this._y = value;\r\n }\r\n\r\n get parent() {\r\n return this._parent;\r\n }\r\n\r\n set parent(value) {\r\n this._parent = value;\r\n }\r\n\r\n get mixins() {\r\n return this._mixins;\r\n }\r\n\r\n set mixins(value) {\r\n this._mixins = value;\r\n }\r\n\r\n getPosX() {\r\n return this.mixins.movable ? this.mixins.movable.posX : this.x;\r\n }\r\n\r\n getPosY() {\r\n return this.mixins.movable ? this.mixins.movable.posY : this.y;\r\n }\r\n\r\n setPosX(value) {\r\n return this.mixins.movable ? this.mixins.movable.posX = value : this.x = value;\r\n }\r\n\r\n setPosY(value) {\r\n return this.mixins.movable ? this.mixins.movable.posY = value : this.y = value;\r\n }\r\n\r\n rotate = (origin, angle, isSlabMode) => {\r\n let ret = {x: 0, y: 0};\r\n let tr = {x: this.getPosX() - origin.x, y: this.getPosY() - origin.y};\r\n\r\n ret.x = tr.x * Math.cos(angle) - tr.y * Math.sin(angle);\r\n ret.y = tr.x * Math.sin(angle) + tr.y * Math.cos(angle);\r\n\r\n //console.log(\"isSlabMode in point rotation\", isSlabMode)\r\n if (isSlabMode) {\r\n //todo rotation in slab mode\r\n this.setPosX(Math.round10(ret.x, -5) + Math.round10(origin.x, -1));\r\n this.setPosY(Math.round10(ret.y, -5) + Math.round10(origin.y, -1));\r\n } else {\r\n this.setPosX(Math.round10(ret.x, -5) + Math.round10(origin.x, -1));\r\n this.setPosY(Math.round10(ret.y, -5) + Math.round10(origin.y, -1));\r\n }\r\n };\r\n\r\n getPointField = () => {\r\n let fieldWidth = sqftConfig.fieldWidth,\r\n center = fieldWidth / 2,\r\n scale = workspace.getScale(),\r\n offset = parent.getOffset();\r\n\r\n return {\r\n x: (this.x * scale) - center + offset.x,\r\n y: (this.y * scale) - center + offset.y,\r\n width: fieldWidth\r\n };\r\n };\r\n\r\n getPointCords = () => {\r\n let pointField = this.getPointField();\r\n\r\n return {\r\n x: pointField.x + pointField.width / 2,\r\n y: pointField.y + pointField.width / 2\r\n }\r\n };\r\n}\r\n","import RenderMeasurementsInsideShape from \"./renderMeasurementsInsideShape\";\r\nimport workspace from \"../../workspace\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport {getPointField} from \"../../../../../helpers/sqftHelper\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\nimport RenderSVG from \"./renderSVG\";\r\n\r\nclass RenderMovableImage {\r\n constructor(movableImage) {\r\n this.movableImage = movableImage;\r\n this.renderMeasurementsInsideShape = new RenderMeasurementsInsideShape(movableImage);\r\n this.renderSVG = new RenderSVG(movableImage);\r\n }\r\n\r\n destroy = () => {\r\n //this.renderMeasurementsInsideShape.destroy();\r\n }\r\n\r\n setOuterShape = (value) => {\r\n this.renderMeasurementsInsideShape.outerShape = value\r\n }\r\n\r\n render = (ctx) => {\r\n if (workspace && workspace.getState().loading) return;\r\n if (this.movableImage.getIsRotatable()) {\r\n this.movableImage.shapeRotatable.render(ctx);\r\n }\r\n\r\n if (this.movableImage.attachedTo) {\r\n //this.renderSVG.renderAttachedTo(ctx);\r\n } else {\r\n this.renderSVG.render(ctx);\r\n\r\n //render measurements inside the shape\r\n const outerShape = this.movableImage.getOuterShape();\r\n if (this.movableImage.shouldRenderMeasurementsInsideTheShape() && outerShape) {\r\n this.movableImage.revealMeasurementsInsideShape();\r\n this.setOuterShape(outerShape);\r\n this.renderMeasurementsInsideShape.render(ctx);\r\n } else {\r\n this.movableImage.hideMeasurementsInsideShape();\r\n }\r\n }\r\n\r\n //render in dev mode\r\n if (sqftConfig.isDevMode()) {\r\n\r\n //render lines\r\n this.movableImage.getLines().forEach((activeShapeLine) => {\r\n let pointFieldActiveShapeLineFrom = getPointField(activeShapeLine.from.x, activeShapeLine.from.y, this.movableImage);\r\n RenderFigures.renderCircle(pointFieldActiveShapeLineFrom, 5, 1, '#63b141');\r\n });\r\n\r\n //render position\r\n RenderFigures.renderCircle(this.movableImage.getPosField(), 15, 1, '#b1417f');\r\n }\r\n return []; //no triangles for images\r\n }\r\n}\r\n\r\nexport default RenderMovableImage\r\n","import store from \"../../../../../../../store\";\r\nimport {\r\n rotatePoint,\r\n getPointDistance,\r\n getPointField,\r\n findClosestPointPairs, inchesToMm,\r\n} from \"../../../../../helpers/sqftHelper\";\r\n// import ShapeHelper from \"../../../../../helpers/shapeHelper\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\nimport {getClosestIntersectionPoints, getIntersectionPointsAndLines} from \"../shapeParts/slabParts/seamToolHelper\";\r\nimport {COLORS} from \"../../../../../../../colorThemes\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport {MEASURE_UNITS} from \"../../../../../constants\";\r\n\r\nclass RenderMeasurementsInsideShape {\r\n constructor(movableImage) {\r\n this.movableImage = movableImage;\r\n this.outerShape = null;\r\n this.lineOffset = 1;\r\n\r\n const serverState = store.getState().serverState;\r\n this.lineStartVertical = { x: -serverState.windowWidth, y: 0 };\r\n this.lineEndVertical = { x: serverState.windowWidth, y: 0 };\r\n this.lineStartHorizontal = { x: 0, y: -serverState.windowHeight };\r\n this.lineEndHorizontal = { x: 0, y: serverState.windowHeight };\r\n }\r\n\r\n setOuterShape = (value) => {\r\n this.outerShape = value\r\n }\r\n\r\n updateLinePoints() {\r\n const serverState = store.getState().serverState;\r\n const imageCenter = this.movableImage.getCenter();\r\n const angle = this.movableImage.rotatedDegrees;\r\n const imagePosOnField = this.movableImage.getCenterPosition();\r\n const pos = this.outerShape.getPosition();\r\n const imagePosOnShape = {x: imagePosOnField.x - pos.x, y: imagePosOnField.y - pos.y};\r\n void imagePosOnShape;\r\n void imageCenter;\r\n\r\n this.lineStartVertical = rotatePoint({ x: -serverState.windowWidth, y: imagePosOnShape.y }, imagePosOnShape, -angle);\r\n this.lineEndVertical = rotatePoint( { x: serverState.windowWidth, y: imagePosOnShape.y }, imagePosOnShape, -angle);\r\n this.lineStartVerticalOnImage = rotatePoint( { x: -serverState.windowWidth, y: imageCenter.y }, imageCenter, -angle);\r\n this.lineEndVerticalOnImage = rotatePoint({ x: serverState.windowWidth, y: imageCenter.y }, imageCenter, -angle);\r\n\r\n this.lineStartHorizontal = rotatePoint( { x: imagePosOnShape.x, y: -serverState.windowHeight }, imagePosOnShape, -angle);\r\n this.lineEndHorizontal = rotatePoint({ x: imagePosOnShape.x, y: serverState.windowHeight }, imagePosOnShape, -angle);\r\n this.lineStartHorizontalOnImage = rotatePoint( { x: imageCenter.x, y: -serverState.windowHeight }, imageCenter, -angle);\r\n this.lineEndHorizontalOnImage = rotatePoint({ x: imageCenter.x, y: serverState.windowHeight }, imageCenter, -angle);\r\n }\r\n\r\n render = (ctx) => {\r\n this.updateLinePoints();\r\n const imageCenterPosOnField = this.movableImage.getCenterPosition();\r\n const pos = this.outerShape.getPosition();\r\n const imageCenterPosOnShape = {x: imageCenterPosOnField.x - pos.x, y: imageCenterPosOnField.y - pos.y};\r\n const imagePosOnField = this.movableImage.getPosition();\r\n const imagePosOnShape = {x: imagePosOnField.x - pos.x, y: imagePosOnField.y - pos.y};\r\n\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = COLORS.red; //COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n\r\n // horizontal line\r\n const sideImagePoints = this.getImageSidePoints(this.lineStartVerticalOnImage, this.lineEndVerticalOnImage);\r\n const sideShapePoints = this.getShapeSidePoints(this.lineStartVertical, this.lineEndVertical);\r\n this.renderLineToBorder(ctx, sideShapePoints, sideImagePoints, imagePosOnShape);\r\n\r\n // vertical line\r\n this.renderArrowLineToCenter(ctx, imageCenterPosOnShape);\r\n }\r\n\r\n getImageSidePoints = (verticalLinePoint1, verticalLinePoint2) => {\r\n const lines = this.movableImage.getLines();\r\n\r\n return getIntersectionPointsAndLines(\r\n lines, verticalLinePoint1, verticalLinePoint2\r\n );\r\n }\r\n\r\n getShapeSidePoints = (verticalLinePoint1, verticalLinePoint2) => {\r\n return getIntersectionPointsAndLines(\r\n this.outerShape.getLines(true), verticalLinePoint1, verticalLinePoint2\r\n );\r\n }\r\n\r\n renderLineToBorder = (ctx, sideShapePoints, sideImagePoints, imagePosOnShape) => {\r\n if (!sideShapePoints.length) {\r\n return\r\n }\r\n const shapePos = this.outerShape.getPosition();\r\n const intersectionsWithShape = sideShapePoints.map(sideShapePoint => {\r\n return sideShapePoint.intersectionCords;\r\n });\r\n\r\n const intersectionsWithImage = sideImagePoints.map(sideImagePoint => {\r\n return {\r\n x: sideImagePoint.intersectionCords.x + imagePosOnShape.x,\r\n y: sideImagePoint.intersectionCords.y + imagePosOnShape.y,\r\n imageLine: sideImagePoint.line\r\n };\r\n });\r\n\r\n const closestPointPairs = findClosestPointPairs(intersectionsWithShape, intersectionsWithImage);\r\n\r\n for (const [index, closestPointPair] of closestPointPairs.entries()) {\r\n if (closestPointPair.pointA && closestPointPair.pointB) {\r\n const startPointField = getPointField(closestPointPair.pointA.x, closestPointPair.pointA.y, this.outerShape);\r\n const endPointField = getPointField(closestPointPair.pointB.x, closestPointPair.pointB.y, this.outerShape);\r\n\r\n ctx.beginPath();\r\n ctx.moveTo(startPointField.x, startPointField.y);\r\n ctx.lineTo(endPointField.x, endPointField.y);\r\n\r\n ctx.closePath();\r\n ctx.stroke();\r\n\r\n //const fontSize = getFontSizeFromContext(ctx);\r\n //let midPoint = getMidPoint(closestPointPair.pointA, closestPointPair.pointB);\r\n //midPoint = {x: midPoint.x + shapePos.x, y: midPoint.y + shapePos.y - fontSize / 2 / scale}\r\n const length = sqftConfig.measureUnit === MEASURE_UNITS.Metric\r\n ? inchesToMm(closestPointPair.distance, false, true)\r\n : closestPointPair.distance;\r\n\r\n // this.renderLineMeasurement(ctx,\r\n // midPoint,\r\n // length < 0.3 ? '' : length,\r\n // )\r\n const betweenPointFrom = {\r\n x: closestPointPair.pointA.x + shapePos.x,\r\n y: closestPointPair.pointA.y + shapePos.y\r\n }\r\n const betweenPointTo = {\r\n x: closestPointPair.pointB.x + shapePos.x,\r\n y: closestPointPair.pointB.y + shapePos.y\r\n }\r\n\r\n //closestPointPair.pointB.imageLine.measurementInsideShape.setPos(midPoint);\r\n closestPointPair.pointB.imageLine.measurementInsideShape.setPos({x: 1, y: 1}); // this is needed to render measurements\r\n closestPointPair.pointB.imageLine.measurementInsideShape.setValue(length);\r\n\r\n void index;\r\n if (closestPointPair.pointB.imageLine.lineIndex === 1) {\r\n closestPointPair.pointB.imageLine.measurementInsideShape.setBetweenPoints(betweenPointTo, betweenPointFrom); // this will override pos value\r\n } else {\r\n closestPointPair.pointB.imageLine.measurementInsideShape.setBetweenPoints(betweenPointFrom, betweenPointTo); // this will override pos value\r\n }\r\n }\r\n }\r\n }\r\n\r\n renderArrowLineToCenter = (ctx, imageCenterPosOnShape) => {\r\n let imageCenterPosOnShapePointField = getPointField(imageCenterPosOnShape.x, imageCenterPosOnShape.y, this.outerShape);\r\n let [intersectionXPointAndLine1, intersectionXPointAndLine2] = getClosestIntersectionPoints(\r\n this.outerShape.getLines(true), this.lineStartHorizontal, this.lineEndHorizontal, imageCenterPosOnShape\r\n );\r\n\r\n // we need only image lines that was intersected with the center line that supposed to be lines with the index 0 and 2\r\n let [intersectionXPointAndLine1WithImage, intersectionXPointAndLine2WithImage] = getClosestIntersectionPoints(\r\n this.movableImage.getLines(true), this.lineStartHorizontalOnImage, this.lineEndHorizontalOnImage, this.movableImage.getCenterPosition()\r\n );\r\n\r\n if (intersectionXPointAndLine1 && intersectionXPointAndLine2) {\r\n let intersectionXPoint1 = intersectionXPointAndLine1.intersectionCords;\r\n let intersectionXPoint2 = intersectionXPointAndLine2.intersectionCords;\r\n let intersectionXPoint1PointField = getPointField(intersectionXPoint1.x, intersectionXPoint1.y, this.outerShape);\r\n let intersectionXPoint2PointField = getPointField(intersectionXPoint2.x, intersectionXPoint2.y, this.outerShape);\r\n\r\n ctx.beginPath();\r\n RenderFigures.drawArrow(ctx,\r\n intersectionXPoint1PointField.x,\r\n intersectionXPoint1PointField.y + this.lineOffset,\r\n imageCenterPosOnShapePointField.x,\r\n imageCenterPosOnShapePointField.y - this.lineOffset\r\n );\r\n\r\n RenderFigures.drawArrow(ctx,\r\n imageCenterPosOnShapePointField.x,\r\n imageCenterPosOnShapePointField.y + this.lineOffset,\r\n intersectionXPoint2PointField.x,\r\n intersectionXPoint2PointField.y - this.lineOffset\r\n );\r\n ctx.closePath();\r\n ctx.stroke();\r\n\r\n //const scale = sqftConfig.scale;\r\n let measurement1Distance = getPointDistance(intersectionXPoint1, imageCenterPosOnShape);\r\n measurement1Distance = sqftConfig.measureUnit === MEASURE_UNITS.Metric\r\n ? inchesToMm(measurement1Distance, false, true)\r\n : measurement1Distance;\r\n\r\n const shapePos = this.outerShape.getPosition();\r\n const betweenPointTo = {\r\n x: intersectionXPoint1.x + shapePos.x,\r\n y: intersectionXPoint1.y + shapePos.y\r\n }\r\n const betweenPointFrom = {\r\n x: imageCenterPosOnShape.x + shapePos.x,\r\n y: imageCenterPosOnShape.y + shapePos.y\r\n }\r\n if (intersectionXPointAndLine1WithImage) {\r\n intersectionXPointAndLine1WithImage.line.measurementInsideShape.setPos({x: 1, y: 1});\r\n intersectionXPointAndLine1WithImage.line.measurementInsideShape.setValue(measurement1Distance);\r\n intersectionXPointAndLine1WithImage.line.measurementInsideShape.setBetweenPoints(betweenPointFrom, betweenPointTo);\r\n }\r\n\r\n // THIS CALCULATIONS WAS USED TO GET POS WITHOUT USING BETWEEN POINTS\r\n //const measurement1Midpoint = getMidPoint(intersectionXPoint1, imageCenterPosOnShape);\r\n //const metrics1Point = ctx.measureText(measurement1Distance);\r\n //const shapePos = this.outerShape.getPosition();\r\n // const offsetPoint1 = {\r\n // x: measurement1Midpoint.x + shapePos.x + metrics1Point.width / 2 / scale,\r\n // y: measurement1Midpoint.y + shapePos.y\r\n // }\r\n //const measurement1angle = getAngleBetweenTwoPoints(intersectionXPoint2, imageCenterPosOnShape);\r\n //intersectionXPointAndLine1WithImage.line.measurementInsideShape.setAngle(measurement1angle);\r\n //intersectionXPointAndLine1WithImage.line.measurementInsideShape.setPos(offsetPoint2);\r\n //intersectionXPointAndLine1WithImage.line.measurementInsideShape.setBetweenPoints(null, null);\r\n\r\n // THIS CALCULATIONS WAS USED TO GET POS WITHOUT USING BETWEEN POINTS\r\n // const measurement2Midpoint = getMidPoint(intersectionXPoint2, imageCenterPosOnShape);\r\n // const metrics2Point = ctx.measureText(measurement2Distance);\r\n // const offsetPoint2 = {\r\n // x: measurement2Midpoint.x + shapePos.x + metrics2Point.width / 2 / scale,\r\n // y: measurement2Midpoint.y + shapePos.y\r\n // }\r\n // const measurement2angle = getAngleBetweenTwoPoints(intersectionXPoint2, imageCenterPosOnShape);\r\n // intersectionXPointAndLine2WithImage.line.measurementInsideShape.setPos(offsetPoint2);\r\n // intersectionXPointAndLine2WithImage.line.measurementInsideShape.setAngle(measurement2angle);\r\n\r\n let measurement2Distance = getPointDistance(intersectionXPoint2, imageCenterPosOnShape);\r\n measurement2Distance = sqftConfig.measureUnit === MEASURE_UNITS.Metric\r\n ? inchesToMm(measurement2Distance, false, true)\r\n : measurement2Distance;\r\n\r\n const measurement2BetweenPointTo = {\r\n x: intersectionXPoint2.x + shapePos.x,\r\n y: intersectionXPoint2.y + shapePos.y\r\n }\r\n const measurement2BetweenPointFrom = {\r\n x: imageCenterPosOnShape.x + shapePos.x,\r\n y: imageCenterPosOnShape.y + shapePos.y\r\n }\r\n if (intersectionXPointAndLine1WithImage) {\r\n intersectionXPointAndLine2WithImage.line.measurementInsideShape.setPos({x: 1, y: 1});\r\n intersectionXPointAndLine2WithImage.line.measurementInsideShape.setValue(measurement2Distance);\r\n intersectionXPointAndLine2WithImage.line.measurementInsideShape.setBetweenPoints(measurement2BetweenPointFrom, measurement2BetweenPointTo);\r\n }\r\n }\r\n }\r\n\r\n // renderLineMeasurement = (ctx, measurementPos, measurementDistance) => {\r\n // this.__measurement.pos.x = measurementPos.x;\r\n // this.__measurement.pos.y = measurementPos.y;\r\n // this.__measurement.value = measurementDistance;\r\n //\r\n // this.__measurement.render(ctx);\r\n // }\r\n}\r\n\r\nexport default RenderMeasurementsInsideShape\r\n","import sqftConfig from \"../../../store/sqftConfig\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\nimport {SQFT_APPLIANCES} from \"../../../../../constants\";\r\nimport RenderParts from \"../../../helpers/renderParts\";\r\n\r\nclass RenderSVG {\r\n constructor(movableImage) {\r\n this.movableImage = movableImage;\r\n }\r\n\r\n render = (ctx) => {\r\n let svgImageDataURI = \"\";\r\n const scale = sqftConfig.scale;\r\n\r\n if (this.movableImage.isIE() && this.movableImage.isSVG(this.movableImage.image)) {\r\n svgImageDataURI = atob(this.movableImage.getSrc(this.movableImage.image).replace(/data:image\\/svg\\+xml;base64,/, ''));\r\n }\r\n\r\n //let canvas = workspace.getCanvas();\r\n\r\n ctx.save();\r\n let posField = this.movableImage.getPosField();\r\n ctx.translate(posField.x, posField.y);\r\n ctx.rotate(-this.movableImage.rotatedDegrees * Math.PI / 180);\r\n let imgOffset = {\r\n x: this.movableImage.size.width / -2 * scale,\r\n y: this.movableImage.size.height / -2 * scale\r\n };\r\n\r\n this.renderHovering(ctx, imgOffset);\r\n\r\n if (!this.movableImage.isIE()) {\r\n if (this.movableImage.subType === SQFT_APPLIANCES.sink) {\r\n RenderFigures.sink(ctx, imgOffset.x, imgOffset.y, this.movableImage.size.width * scale, this.movableImage.size.height * scale);\r\n } else if (this.movableImage.subType === SQFT_APPLIANCES.doubleSink) {\r\n RenderFigures.doubleSink(ctx, imgOffset.x, imgOffset.y, this.movableImage.size.width * scale, this.movableImage.size.height * scale);\r\n } else {\r\n const containerSize = {width: this.movableImage.size.width * scale, height: this.movableImage.size.height * scale}\r\n const size = this.getContainSize();\r\n RenderParts.drawStripedRectangle(ctx, imgOffset.x, imgOffset.y, containerSize.width, containerSize.height);\r\n RenderFigures.drawBorder(ctx, imgOffset, containerSize.width, containerSize.height);\r\n ctx.drawImage(this.movableImage.image, imgOffset.x, imgOffset.y, size.width, size.height);\r\n }\r\n } else if (svgImageDataURI) {\r\n ctx.drawSvg(svgImageDataURI, imgOffset.x, imgOffset.y, this.movableImage.size.width * scale, this.movableImage.size.height * scale);\r\n }\r\n ctx.restore();\r\n\r\n //render border points in dev mode\r\n if (sqftConfig.isDevMode()) {\r\n //dev movable point\r\n // ctx.beginPath();\r\n // ctx.strokeStyle = '#000'\r\n // ctx.arc(imgOffset.x, imgOffset.y, 20, 0, 2 * Math.PI);\r\n // ctx.stroke();\r\n // ctx.closePath();\r\n //\r\n // //dev border points\r\n // let testImagePoints = this.movableImage.getLinePointsPointField();\r\n // for (let testPoint of testImagePoints) {\r\n // ctx.beginPath();\r\n // ctx.strokeStyle = '#a02f2f';\r\n // ctx.lineWidth = 1;\r\n // ctx.arc(testPoint.x, testPoint.y, 10, 0, 2 * Math.PI);\r\n // ctx.stroke();\r\n // ctx.closePath();\r\n // //debugger // eslint-disable-line no-debugger\r\n // }\r\n }\r\n }\r\n\r\n getContainSize = () => {\r\n const aspectRatio = this.movableImage.initialSize.width / this.movableImage.initialSize.height;\r\n const scale = sqftConfig.scale;\r\n let newWidth, newHeight;\r\n if (this.movableImage.size.width / this.movableImage.size.height > aspectRatio) {\r\n // The width is larger than needed by the aspect ratio, so we base it on the height\r\n newHeight = this.movableImage.size.height;\r\n newWidth = newHeight * aspectRatio;\r\n } else {\r\n // The height is larger than needed based on the aspect ratio, so we base it on the width\r\n newWidth = this.movableImage.size.width;\r\n newHeight = newWidth / aspectRatio;\r\n }\r\n\r\n return {width: newWidth * scale, height: newHeight * scale}\r\n }\r\n\r\n renderHovering = (ctx, imgOffset) => {\r\n let scale = sqftConfig.scale;\r\n\r\n if (this.movableImage.isHovering() && !this.movableImage.isAnyLineHovering()) {\r\n ctx.beginPath();\r\n ctx.rect(imgOffset.x, imgOffset.y, this.movableImage.size.width * scale, this.movableImage.size.height * scale);\r\n ctx.strokeStyle = this.movableImage.hoverColor;\r\n ctx.lineWidth = 5;\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n }\r\n\r\n renderAttachedTo = () => {\r\n // if (this.movableImage.image) {\r\n // let midPoint = getMidPoint(this.movableImage.attachedTo.from, this.movableImage.attachedTo.to);\r\n // let lineOffset = this.movableImage.attachedTo.getOffset();\r\n // let imgOffset = {\r\n // x: 0,\r\n // y: -32\r\n // },\r\n // pointData = {\r\n // x: (midPoint.x * scale) + lineOffset.x - 4,\r\n // y: (midPoint.y * scale) + lineOffset.y - (size.height * scale) - 4,\r\n // radius: size.width * scale / 2 + 8,\r\n // arcStart: 0,\r\n // arcEnd: 2 * Math.PI\r\n // };\r\n // if (this.movableImage.attachedTo.getOrientation) {\r\n // if (this.movableImage.attachedTo.getOrientation() == 1) { //horizontal\r\n // pointData.x -= 64;\r\n // pointData.y += 5 * scale;\r\n // } else {\r\n // // console.log(scale);\r\n // if (scale >= 6) {\r\n // pointData.y -= ((6 - scale) * scale / 2);\r\n // } else {\r\n // pointData.y += (6 - scale) * 6;\r\n // }\r\n // }\r\n // }\r\n // if (!this.movableImage.isIE() || !this.movableImage.isSVG()) {\r\n // ctx.drawImage(this.movableImage.image, pointData.x - (size.width * scale / 2) + imgOffset.x, (midPoint.y * scale) + lineOffset.y - (size.height * scale / 2) - 4 + imgOffset.y + (this.movableImage.attachedTo.getOrientation() == 1 ? 32 : 0), size.width * scale, size.height * scale);\r\n // } else {\r\n // ctx.drawSvg(svgImageDataURI, pointData.x - (size.width * scale / 2) + imgOffset.x, (midPoint.y * scale) + lineOffset.y - (size.height * scale / 2) - 4 + imgOffset.y + (this.movableImage.attachedTo.getOrientation() == 1 ? 32 : 0), size.width * scale, size.height * scale);\r\n // }\r\n // ctx.save();\r\n // ctx.beginPath();\r\n // ctx.arc(pointData.x, pointData.y, pointData.radius, pointData.arcStart, pointData.arcEnd);\r\n // ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n // ctx.lineWidth = 4;\r\n // ctx.stroke();\r\n // ctx.fillStyle = \"RGBA(0,0,192,0.1)\";\r\n // ctx.fill();\r\n // ctx.closePath();\r\n // ctx.restore();\r\n // }\r\n }\r\n}\r\n\r\nexport default RenderSVG\r\n","import { v4 as uuidv4 } from 'uuid';\r\n\r\nexport default class MiteredSegment {\r\n id;\r\n _length = {}; /* NumberText */\r\n height; /* int */\r\n thickness = {}; /* NumberText */\r\n priority; /* int */\r\n\r\n\r\n constructor(length, height, thickness) {\r\n this.id = uuidv4();\r\n this._length = length;\r\n this.height = height;\r\n this.thickness = thickness;\r\n this.priority = 0;\r\n }\r\n\r\n set length(length) {\r\n this._length = length;\r\n }\r\n\r\n get length() {\r\n return this._length;\r\n }\r\n\r\n setPriority = (priority) => {\r\n this.priority = priority\r\n };\r\n\r\n exportSegment = () => ({\r\n height: this.height,\r\n thickness: this.thickness ? this.thickness.value : this.thickness,\r\n length: this.length.value,\r\n })\r\n}\r\n","import workspace from \"../workspace\";\r\nimport {getBacksplashesPos, getBumpoutPointCords, getShapePosAndPoints} from \"./slabHelper\";\r\nimport sqftShapeManager from \"../../store/sqftShapeManager\";\r\nimport {SHAPE_PART_ID, WATERFALL_SHAPES_KEY} from \"../../../../constants\";\r\nimport SlabAdditionalShape from \"./slabAdditionalShape\";\r\nimport Polygon from \"../shapes/layouts/polygon\";\r\nimport sqftConfig from \"../../store/sqftConfig\";\r\nimport {\r\n getParallelPoints,\r\n getPointOnTheLine,\r\n mmToInches\r\n} from \"../../../../helpers/sqftHelper\";\r\nimport {addEdgeToTheLines, addFakeEdgeToLines, setLineParams} from \"../../helpers/lineHelper\";\r\nimport workspaceControllers from \"../../store/workspaceControllers\";\r\nimport {getMiterEdgeFeature, getMiterEdgeHeight, isFeatureUnitUseEach} from \"../../../../helpers/featureHelper\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport sqftResourcesManager from \"../../store/sqftResoursesManager\";\r\n\r\nclass SlabAdditionalShapes {\r\n additionalShapes = [];\r\n\r\n initBacksplashAndEdgeShapes = () => {\r\n let lines = workspace.getLines();\r\n lines.forEach((line) => {\r\n if (!this.isInited(line)) {\r\n let posOnField, pointsCords;\r\n const parentShape = line.getParent();\r\n const attachedToLineResource = sqftResourcesManager.getAttachedToLineResource(line);\r\n const miterEdgeHeight = getMiterEdgeHeight(attachedToLineResource ? attachedToLineResource.featureId : null);\r\n\r\n // 1.) init backsplash shapes\r\n if (line.isWithBacksplash()) {\r\n [posOnField, pointsCords] = getBacksplashesPos(line, +line.getBacksplashHeight());\r\n\r\n // 2.) init mitered edgeShapes for waterfall tool\r\n } else if ((line.isWithMiterEdge() || line.isWithFakeEdge())\r\n && parentShape.partId === SHAPE_PART_ID.waterfallPiece\r\n ) {\r\n // skip creation for one mitered edge shape that was created with waterfall tool\r\n if (line.getState().slabModeSkipMiteredEdgeCreation) {\r\n return;\r\n }\r\n const segment = workspaceControllers.waterfall.getSegmentById(parentShape.slabModeWaterfallSegmentId);\r\n if (!segment) {\r\n //todo fix missing segment\r\n return;\r\n }\r\n [posOnField, pointsCords] = getBacksplashesPos(line, segment.thickness);\r\n // 3.) init mitered edgeShapes but skip mitered tool\r\n } else if (line.isWithMiterEdge() && !line.isWithMitered() && miterEdgeHeight > 0.5) {\r\n [posOnField, pointsCords] = getBacksplashesPos(line, miterEdgeHeight);\r\n\r\n // 4.) init waterfall edgeShapes but skip mitered tool\r\n } else if (line.isWithWaterfallEdgeFeature() && !isFeatureUnitUseEach(line.getAttachedFeature())) {\r\n [posOnField, pointsCords] = getBacksplashesPos(line, sqftConfig.waterfallImperialHeight);\r\n } else {\r\n return; // Skip the current iteration if neither condition is met\r\n }\r\n\r\n // create shape\r\n let shapeId = sqftShapeManager.addShape(new Polygon(pointsCords), 'square', posOnField, SHAPE_PART_ID.backsplashPiece);\r\n const shape = workspace.getShapeById(shapeId);\r\n\r\n // set shape additional params\r\n shape.setIsPointsChanged(false);\r\n shape.setSlabModeCoreParentId(\r\n line.getParent().slabModeCoreParentId ? line.getParent().slabModeCoreParentId : line.getParent().id\r\n );\r\n shape.setSlabModeCoreParentPartId(\r\n line.getParent().slabParentPartId ? line.getParent().slabParentPartId : line.getParent().partId\r\n )\r\n //set shape feature id\r\n let featureId\r\n if (line.isWithBacksplash()) {\r\n featureId = line.getBacksplashFeatureId();\r\n featureId = featureId ? featureId : line.getParent().featureId;\r\n } else {\r\n featureId = line.getParent().featureId;\r\n }\r\n shape.setFeatureId(featureId);\r\n shape.setColorSet(line.getParent().colorSet);\r\n\r\n this.addActiveBacksplash(new SlabAdditionalShape(line, shapeId));\r\n }\r\n });\r\n };\r\n\r\n initBumpoutShapes = () => {\r\n let lines = workspace.getLines();\r\n lines.forEach((line) => {\r\n if (line.isWithBumpout() && !this.isInited(line)) {\r\n let pointsCords = getBumpoutPointCords(line);\r\n let posOnFiled = line.getParent().getPosition();//ShapeHelper.getCenterPoint(pointsCords);\r\n let shapeId = sqftShapeManager.addShape(new Polygon(pointsCords), 'square', posOnFiled, SHAPE_PART_ID.backsplashPiece);\r\n const shape = workspace.getShapeById(shapeId);\r\n shape.setIsPointsChanged(false);\r\n shape.setFeatureId(line.getParent().featureId);\r\n shape.setSlabModeCoreParentId(line.getParent().id);\r\n shape.setSlabModeCoreParentPartId(line.getParent().partId);\r\n shape.setColorSet(line.getParent().colorSet);\r\n\r\n this.addActiveBacksplash(new SlabAdditionalShape(line, shapeId));\r\n }\r\n });\r\n };\r\n\r\n initMiteredToolShapes = () => {\r\n let lines = workspace.getLines();\r\n lines.forEach((line) => {\r\n if (line.isWithMitered() && !this.isInited(line)) {\r\n const miteredPoints = line.miteredOverlay.getPoints();\r\n miteredPoints.forEach((point, index) => {\r\n let next = index + 1;\r\n if (miteredPoints[next]) {\r\n let segment = line.miteredOverlay.getSegmentBetweenPoints(point, miteredPoints[next]);\r\n //let widthValue = segment.width.value;\r\n let heightValue = segment.height / sqftConfig.getMeasureMultiplier();\r\n if (heightValue > 0.005) {\r\n let [posOnFiled, pointsCords] = getShapePosAndPoints(line.getParent(), point, miteredPoints[next], heightValue);\r\n\r\n let shapeId = sqftShapeManager.addShape(new Polygon(pointsCords), 'square', posOnFiled, SHAPE_PART_ID.backsplashPiece);\r\n const shape = workspace.getShapeById(shapeId);\r\n shape.setIsPointsChanged(false);\r\n shape.setFeatureId(line.getParent().featureId);\r\n shape.setSlabModeCoreParentId(line.getParent().id);\r\n shape.setSlabModeCoreParentPartId(line.getParent().partId);\r\n shape.setColorSet(line.getParent().colorSet);\r\n\r\n this.addActiveBacksplash(new SlabAdditionalShape(line, shapeId));\r\n }\r\n }\r\n });\r\n }\r\n });\r\n };\r\n\r\n initUnderlaymentToolShapes = () => {\r\n let lines = workspace.getLines();\r\n lines.forEach((line) => {\r\n if (line.isWithUnderlayment() && !this.isInited(line)) {\r\n const underlaymentPoints = line.underlaymentOverlay.getPoints();\r\n underlaymentPoints.forEach((point, index) => {\r\n let next = index + 1;\r\n if (underlaymentPoints[next]) {\r\n let segment = line.underlaymentOverlay.getSegmentBetweenPoints(point, underlaymentPoints[next]);\r\n //let widthValue = segment.width.value;\r\n let heightValue = segment.height;\r\n let [posOnFiled, pointsCords] = getShapePosAndPoints(line.getParent(), point, underlaymentPoints[next], heightValue);\r\n\r\n let shapeId = sqftShapeManager.addShape(new Polygon(pointsCords), 'square', posOnFiled, SHAPE_PART_ID.backsplashPiece);\r\n const shape = workspace.getShapeById(shapeId);\r\n shape.setIsPointsChanged(false);\r\n shape.setFeatureId(line.getParent().featureId);\r\n shape.setSlabModeCoreParentId(line.getParent().id);\r\n shape.setSlabModeCoreParentPartId(line.getParent().partId);\r\n shape.setColorSet(line.getParent().colorSet);\r\n\r\n this.addActiveBacksplash(new SlabAdditionalShape(line, shapeId));\r\n }\r\n });\r\n }\r\n });\r\n };\r\n\r\n initWaterfallToolShapes = () => {\r\n let lines = workspace.getLines();\r\n lines.forEach((line) => {\r\n if ((line.isWithWaterfallToolEdge() || line.isWithPeninsulaUnderwrapEdge())\r\n && !this.isInited(line)\r\n ) {\r\n const waterfallSegments = line.waterfallOverlay.getSegments();\r\n\r\n waterfallSegments.forEach((segment) => {\r\n const [from, to] = this.getWaterfallPoints(line, segment);\r\n if (from && to) {\r\n const height = config.measureUnit === \"Imperial\" ? segment.height : mmToInches(segment.height);\r\n let [posOnFiled, pointsCords] = getShapePosAndPoints(line.getParent(), from, to, height);\r\n\r\n let shapeId = sqftShapeManager.addShape(new Polygon(pointsCords.reverse()), 'square', posOnFiled, SHAPE_PART_ID.waterfallPiece);\r\n const shape = workspace.getShapeById(shapeId);\r\n shape.setIsPointsChanged(false);\r\n shape.setFeatureId(line.getParent().featureId);\r\n shape.setColorSet(line.getParent().colorSet);\r\n shape.setSlabModeCoreParentId(line.getParent().id);\r\n shape.setSlabModeCoreParentPartId(line.getParent().partId);\r\n shape.setSlabModeWaterfallSegmentId(segment.id);\r\n\r\n this.addMiteredEdgesToWaterfallShape(shapeId, segment);\r\n\r\n this.addActiveBacksplash(new SlabAdditionalShape(line, shapeId));\r\n\r\n }\r\n });\r\n }\r\n });\r\n };\r\n\r\n addMiteredEdgesToWaterfallShape = (shapeId, segment) => {\r\n const miteredEdge = getMiterEdgeFeature();\r\n\r\n const waterfallShapes = WATERFALL_SHAPES_KEY;\r\n const edgeParams = {\r\n [waterfallShapes.cabinetReturn]: [3],\r\n [waterfallShapes.waterfall]: [1, 2, 3],\r\n [waterfallShapes.overhangReturn]: [1],\r\n [waterfallShapes.underlayment]: [0]\r\n };\r\n if (edgeParams[segment.name]) {\r\n if (miteredEdge) {\r\n addEdgeToTheLines(shapeId, miteredEdge, edgeParams[segment.name], false);\r\n } else {\r\n addFakeEdgeToLines(shapeId, edgeParams[segment.name]);\r\n }\r\n }\r\n\r\n if (segment.name === waterfallShapes.waterfall) {\r\n setLineParams(shapeId, [1, 2, 3], { slabModeSkipMiteredEdgeCreation: true });\r\n }\r\n };\r\n\r\n getWaterfallPoints = (line, segment) => {\r\n const key = segment.key;\r\n const length = config.measureUnit === \"Imperial\" ? segment.length : mmToInches(segment.length);\r\n if (segment.isDisabled) {\r\n return [null, null]\r\n }\r\n switch (key) {\r\n case WATERFALL_SHAPES_KEY.cabinetReturn: {\r\n const secondPoint = getPointOnTheLine(line.to, line.from, -length);\r\n return [secondPoint, line.to]\r\n }\r\n case WATERFALL_SHAPES_KEY.waterfall: {\r\n const distanceFromLine = -segment.height * 2 / sqftConfig.getMeasureMultiplier();\r\n const [firstPoint, secondPoint] = getParallelPoints(line.from, line.to, distanceFromLine);\r\n return [firstPoint, secondPoint]\r\n }\r\n case WATERFALL_SHAPES_KEY.overhangReturn: {\r\n const secondPoint = getPointOnTheLine(line.from, line.to, -length);\r\n return [line.from, secondPoint]\r\n }\r\n case WATERFALL_SHAPES_KEY.underlayment: {\r\n const nextLine = line.getParent().getNextLine(line);\r\n //const secondPoint = getPointOnTheLine(nextLine.to, line.from, -segment.length);\r\n //return [nextLine.from, nextLine.to]\r\n const miteredEdgeDistance = -getMiterEdgeHeight();\r\n const [firstPoint, secondPoint] = getParallelPoints(nextLine.from, nextLine.to, miteredEdgeDistance);\r\n return [secondPoint, firstPoint]\r\n }\r\n case WATERFALL_SHAPES_KEY.peninsulaUnderwrap: {\r\n const [firstPoint, secondPoint] = getParallelPoints(line.from, line.to, -segment.height);\r\n return [firstPoint, secondPoint]\r\n }\r\n default:\r\n return [null, null]\r\n }\r\n }\r\n\r\n isInited = (line) => {\r\n return this.additionalShapes.some( SlabAdditionalShape => {\r\n return SlabAdditionalShape.line.id === line.id\r\n })\r\n }\r\n\r\n getShapeAdditionalShapes = (shape) => {\r\n return this.additionalShapes.filter( SlabAdditionalShape => {\r\n return SlabAdditionalShape.line.getParent().id === shape.id\r\n })\r\n }\r\n\r\n updateAdditionalShapeFeature = (line, featureId) => {\r\n const additionalShape = this.findAdditionalShapeByLine(line);\r\n if (additionalShape) {\r\n const backsplashShape = workspace.getShapeById(additionalShape.backsplashShapeId);\r\n backsplashShape.setFeatureId(featureId);\r\n }\r\n }\r\n\r\n resetBacksplashes = () => {\r\n this.additionalShapes = [];\r\n }\r\n\r\n importData = (data) => {\r\n for (let activeBacksplashData of data) {\r\n let shape = workspace.importShape(activeBacksplashData.backsplashShape);\r\n shape.deregisterEvents();\r\n let line = workspace.getLineById(activeBacksplashData.line.id);\r\n let slabAdditionalShape = new SlabAdditionalShape(line, shape.id);\r\n this.addActiveBacksplash(slabAdditionalShape);\r\n }\r\n }\r\n\r\n exportData = () => {\r\n return this.additionalShapes\r\n .filter( SlabAdditionalShape => {\r\n let backsplashShape = workspace.getShapeById(SlabAdditionalShape.backsplashShapeId);\r\n return backsplashShape.partId !== SHAPE_PART_ID.seamPiece;\r\n })\r\n .map( SlabAdditionalShape => {\r\n let backsplashShape = workspace.getShapeById(SlabAdditionalShape.backsplashShapeId);\r\n\r\n return {\r\n backsplashShape: backsplashShape.export(),\r\n line: SlabAdditionalShape.line.export()\r\n }\r\n })\r\n }\r\n\r\n addActiveBacksplash = (SlabAdditionalShape) => {\r\n this.additionalShapes.push(SlabAdditionalShape);\r\n }\r\n\r\n findAdditionalShapeByLine = (line) => {\r\n return this.additionalShapes.find(additionalShape => additionalShape.line.id === line.id);\r\n }\r\n\r\n removeActiveBacksplashByLine = (line) => {\r\n for (let i = this.additionalShapes.length - 1; i >= 0; i--) {\r\n if (this.additionalShapes[i].line.id === line.id) {\r\n const shape = workspace.getShapeById(this.additionalShapes[i].backsplashShapeId);\r\n this.removeAllActiveBacksplashesAttachedToShape(shape);\r\n workspace.removeShapeById(this.additionalShapes[i].backsplashShapeId);\r\n }\r\n }\r\n }\r\n\r\n findOneByBacksplashShapeId = (backsplashShapeId) => {\r\n return this.additionalShapes.find(activeBacksplash => {\r\n return activeBacksplash.backsplashShapeId === backsplashShapeId\r\n })\r\n };\r\n\r\n /**\r\n * This will hide all additional shapes that was created for mitered edges, backsplashes and mitered segments\r\n */\r\n hideAdditionalShapes = () => {\r\n this.additionalShapes.forEach(SlabAdditionalShape => {\r\n let backsplashShape = workspace.getShapeById(SlabAdditionalShape.backsplashShapeId);\r\n if (backsplashShape) {\r\n backsplashShape.deregisterEvents();\r\n } else {\r\n console.error(\"SlabAdditionalShape not found, backsplashShapeId:\", SlabAdditionalShape.backsplashShapeId);\r\n }\r\n });\r\n };\r\n\r\n removeAllActiveBacksplashesAttachedToShape = (shape) => {\r\n const lines = shape.getLines();\r\n for (const line of lines) {\r\n this.removeActiveBacksplashByLine(line);\r\n }\r\n };\r\n\r\n restoreBacksplashShapes = () => {\r\n this.additionalShapes.forEach(SlabAdditionalShape => {\r\n let backsplashShape = workspace.getShapeById(SlabAdditionalShape.backsplashShapeId);\r\n if (backsplashShape.isHidden && backsplashShape.shapePieces.length === 0) {\r\n backsplashShape.reInitEvents();\r\n }\r\n });\r\n };\r\n\r\n removeShapeFromList = (shapeToRemove) => {\r\n this.additionalShapes = this.additionalShapes.filter(additionalShape => additionalShape.backsplashShapeId !== shapeToRemove.id);\r\n }\r\n}\r\n\r\nexport default SlabAdditionalShapes;\r\n","import {getParallelPoints, mmToInches} from \"../../../../helpers/sqftHelper\";\r\nimport config from \"../../store/sqftConfig\";\r\n\r\nexport const getBacksplashesPos = (line, thickness = -5) => {\r\n thickness = config.measureUnit === \"Imperial\" ? thickness : mmToInches(thickness);\r\n const shape = line.getParent();\r\n let shapePoints = [];\r\n const parallelPoints = getParallelPoints(line.from, line.to, -thickness);\r\n shapePoints.push(...parallelPoints);\r\n shapePoints.push(line.from);\r\n shapePoints.push(line.to);\r\n\r\n return [shape.pos, shapePoints]\r\n}\r\n\r\nexport const getShapePosAndPoints = (parent, from, to, thickness = -5) => {\r\n const shape = parent;\r\n let shapePoints = [];\r\n const parallelPoints = getParallelPoints(from, to, -thickness);\r\n shapePoints.push(...parallelPoints);\r\n shapePoints.push(from);\r\n shapePoints.push(to);\r\n\r\n return [shape.pos, shapePoints]\r\n}\r\n\r\nexport const getBumpoutPointCords = (line) => {\r\n return line.bumpoutOverlay.getBumpoutPointCords()\r\n}\r\n","import eventManager from \"../../store/sqftEventManager\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport workspace from \"../workspace\";\r\nimport store from \"../../../../../../store\";\r\nimport {setSQFTMenuOpened} from \"../../../../../../actions/sqftMenuFunctions\";\r\nimport {updateSQFTCalculations} from \"../../../../../../actions/sqftFunctions\";\r\nimport {attachResource} from \"./resourseCanas\";\r\nimport $ from \"jquery\";\r\nimport {iconPlusBlue} from \"../../../../assetsSQFT\";\r\nimport {\r\n RESOURCE_ATTACHED_TO_TYPE,\r\n SIDEBAR_NAVIGATION_BUTTONS,\r\n SIDEBAR_NAVIGATION_CABINET_BUTTONS,\r\n SQFT_GROUP\r\n} from \"../../../../constants\";\r\n\r\nconst endCapCanvas = function() {\r\n this.cursorImage = null;\r\n this.addedImages = null; //like in edges\r\n this.img = null;\r\n this.isWaitingToRestoreCursor = false;\r\n\r\n this.setHighlighting = (disallowDemo) => {\r\n eventManager.stealCursor(true); // remove all other cursors\r\n workspace.setAllowEdges(false); // removing sizing lines\r\n workspace.setAllowBumpoutEdges(false); // removing bumpout lines\r\n config.highlight.points = false;\t// remove radiuses\r\n config.highlight.lines = true; // enable lines highlighting\r\n config.highlight.type = RESOURCE_ATTACHED_TO_TYPE.end_cap;\r\n\r\n if (!disallowDemo) {\r\n config.highlight.demoShow = true;\r\n }\r\n setTimeout(function () {\r\n config.highlight.demoShow = false;\r\n }, 1000);\r\n };\r\n\r\n this.setCursorImage = () => {\r\n let bounds = 18,\r\n imgWidth = bounds,\r\n imgHeight = bounds;\r\n\r\n let domImg = document.createElement('img');\r\n domImg.crossOrigin = \"Anonymous\";\r\n\r\n let $img = $(domImg);\r\n $img.css({\r\n position: 'absolute',\r\n width: '1px',\r\n height: '1px'\r\n });\r\n\r\n const imgOnLoad = () => {\r\n let bounds = 18;\r\n let ratio;\r\n if (imgWidth > imgHeight) {\r\n ratio = imgHeight / imgWidth;\r\n imgWidth = bounds;\r\n imgHeight = bounds * ratio;\r\n } else {\r\n ratio = imgWidth / imgHeight;\r\n imgHeight = bounds;\r\n imgWidth = bounds * ratio;\r\n }\r\n eventManager.setCursor('edge-select', this, true);\r\n this.cursorImage = { image: domImg, width: imgWidth, height: imgHeight };\r\n this.registerEvents(); // only after image is load!\r\n }\r\n $img.on('load', imgOnLoad);\r\n $img.appendTo($('body'));\r\n $img.attr('src', iconPlusBlue);\r\n\r\n this.img = $img;\r\n };\r\n\r\n this.registerEvents = () => {\r\n eventManager.setCursor('radius-select', this, true);\r\n eventManager.addEvent(\r\n eventManager.events.RENDER,\r\n this.renderCursor,\r\n this,\r\n eventManager.priorities.OVERALL\r\n );\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_UP,\r\n this.onMouseUp,\r\n this,\r\n eventManager.priorities.OVERALL\r\n );\r\n };\r\n\r\n this.deregisterEvents = () => {\r\n eventManager.resetCursor(this);\r\n eventManager.removeEvent(this);\r\n config.highlight.lines = false;\r\n }\r\n this.destroy = (protect, revertBackAfterMouseUp) => {\r\n if (revertBackAfterMouseUp) {\r\n eventManager.removeEvent(this, eventManager.events.RENDER); //remove render only, but wait for mouse up to set cursor again\r\n this.isWaitingToRestoreCursor = true;\r\n } else {\r\n this.deregisterEvents();\r\n }\r\n };\r\n\r\n this.onMouseUp = (mousePos) => {\r\n void mousePos;\r\n let hoveredLine = workspace.getHoveredLine();\r\n let hoveredLineCorner = workspace.getHoveredLineCorner();\r\n if (hoveredLine) {\r\n const state = store.getState();\r\n const updateCalculations = state.sqftState.updateCalculations;\r\n const SQFTGroup = state.sqftMenuState.SQFTGroup;\r\n const button = SQFTGroup === SQFT_GROUP.cabinets ? SIDEBAR_NAVIGATION_CABINET_BUTTONS.end_panel : SIDEBAR_NAVIGATION_BUTTONS.end_cap;\r\n const selectedFeature = state.sqftResourceState.selectedFeature;\r\n const featureNameTranslated = selectedFeature.getFeatureName();\r\n\r\n if (hoveredLine || hoveredLineCorner) {\r\n attachResource(hoveredLine, hoveredLineCorner, RESOURCE_ATTACHED_TO_TYPE.end_cap, selectedFeature.dbFeature.id, selectedFeature.partId, featureNameTranslated);\r\n } else {\r\n store.dispatch(setSQFTMenuOpened(button));\r\n }\r\n\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n }\r\n this.checkForRestoreCursor();\r\n };\r\n this.checkForRestoreCursor = function() {\r\n if (this.isWaitingToRestoreCursor) {\r\n this.isWaitingToRestoreCursor = false;\r\n eventManager.removeEvent(this, eventManager.events.MOUSE_UP); //remove mouse up, it will be added in setCursorImage\r\n this.setHighlighting(true);\r\n this.setCursorImage();\r\n }\r\n };\r\n this.renderCursor = (ctx) => {\r\n if (this.cursorImage.image && ($(window).width() > 768)) {\r\n let mPos = eventManager.LastKnownMousePos;\r\n if (mPos) {\r\n ctx.drawImage(this.cursorImage.image, mPos.x + 10, mPos.y + 10, this.cursorImage.width, this.cursorImage.height);\r\n }\r\n }\r\n };\r\n};\r\n\r\nexport default new endCapCanvas();\r\n","import store from \"../../../store\";\r\nimport sqftConfig from \"../components/canvas/store/sqftConfig\";\r\nimport {setSlabImageHeight, setSlabImageWidth} from \"../../../actions/sqftSlabFunctions\";\r\nimport Radius from \"../components/canvas/core/controls/radius\";\r\n\r\nexport const onMeasureUnitChange = () => {\r\n Radius.onMeasureUnitChange();\r\n\r\n switch(sqftConfig.measureUnit) {\r\n case \"Metric\":\r\n store.dispatch(setSlabImageWidth(sqftConfig.slab.imageWidthMetric));\r\n store.dispatch(setSlabImageHeight(sqftConfig.slab.imageHeightMetric));\r\n break;\r\n case \"Imperial\":\r\n default:\r\n store.dispatch(setSlabImageWidth(sqftConfig.slab.imageWidthImperial));\r\n store.dispatch(setSlabImageHeight(sqftConfig.slab.imageHeightImperial));\r\n }\r\n}\r\n","import sqftEventManager from \"../../../store/sqftEventManager\";\r\nimport DrawImage from \"../textBox/draw/drawImage\";\r\nimport {pnpolyArray} from \"../../../../../lib/pnpoly\";\r\nimport config from \"../../../store/sqftConfig\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\n\r\nclass StaticImage {\r\n svgImageId;\r\n ctx;\r\n x;\r\n y;\r\n width;\r\n height;\r\n isCentered = true;\r\n isScale = true;\r\n beforeRenderCallback = function (){};\r\n\r\n /**\r\n * returns a list needed for integration\r\n * @param svgImageId {string}\r\n * @param x {int}\r\n * @param y {int}\r\n * @param width {int}\r\n * @param height {int}\r\n * @param isCentered {boolean}\r\n * @param isScale {boolean}\r\n * @param beforeRenderCallback {function}\r\n */\r\n constructor(svgImageId, x, y, width, height, isCentered, isScale, beforeRenderCallback) {\r\n this.svgImageId = svgImageId;\r\n this.ctx = sqftEventManager.getCtx();\r\n this.x = x;\r\n this.y = y;\r\n this.width = width;\r\n this.height = height;\r\n this.isCentered = isCentered;\r\n this.isScale = isScale;\r\n this.beforeRenderCallback = beforeRenderCallback ? beforeRenderCallback : function (){};\r\n }\r\n\r\n isHovered = (mousePos) => {\r\n return pnpolyArray(this.getHoverArray(), mousePos);\r\n }\r\n\r\n getHoverArray = () => {\r\n const width = this.width * config.defaultScale;\r\n const height = this.height * config.defaultScale;\r\n\r\n if (this.isCentered) {\r\n return [\r\n [this.x - width / 2, this.y - height / 2],\r\n [this.x + width / 2, this.y - height / 2],\r\n [this.x + width / 2, this.y + height / 2],\r\n [this.x - width / 2, this.y + height / 2],\r\n ];\r\n } else {\r\n return [\r\n [this.x, this.y],\r\n [this.x + width, this.y],\r\n [this.x + width, this.y + height],\r\n [this.x, this.y + height],\r\n ];\r\n }\r\n }\r\n\r\n render = () => {\r\n this.beforeRenderCallback();\r\n DrawImage.renderImage(this.svgImageId,\r\n this.ctx,\r\n this.x,\r\n this.y,\r\n this.width,\r\n this.height,\r\n this.isCentered,\r\n this.isScale\r\n );\r\n if (sqftConfig.isDevMode()) {\r\n RenderFigures.renderPolygonArray(this.getHoverArray());\r\n }\r\n }\r\n}\r\n\r\nexport default StaticImage\r\n","import * as uuid from \"uuid\";\r\nimport EventManager from \"../../store/sqftEventManager\";\r\nimport workspace from \"../workspace\";\r\n\r\nexport default class SQFTShapeOffset {\r\n id;\r\n parent;\r\n animationPoints = [];\r\n state = {\r\n isHidden: false\r\n };\r\n params = {\r\n priority: EventManager.priorities.SEGMENT,\r\n };\r\n design = {\r\n lineWidth: 1,\r\n strokeStyle: 'rgba(137,137,137,0.6)',\r\n };\r\n\r\n constructor(parent, state = {}, params = {}, design = {}) {\r\n this.state = Object.assign(this.state, state);\r\n this.params = Object.assign(this.params, params);\r\n this.design = Object.assign(this.design, design);\r\n this.parent = parent;\r\n this.id = uuid.v4();\r\n this.initEvents();\r\n }\r\n\r\n getParent = () => {\r\n return this.parent;\r\n }\r\n\r\n setParent = (value) => {\r\n this.parent = value;\r\n }\r\n\r\n getPosition = () => {\r\n return this.parent.getPosition();\r\n }\r\n\r\n init = () => {\r\n this.initEvents();\r\n }\r\n\r\n initEvents() {\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n this.onMouseMove.bind(this),\r\n this,\r\n this.params.priority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n this.onMouseDown.bind(this),\r\n this,\r\n this.params.priority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n this.onMouseUp.bind(this),\r\n this,\r\n this.params.priority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render.bind(this),\r\n this,\r\n this.params.priority\r\n );\r\n }\r\n\r\n onMouseMove() {\r\n }\r\n\r\n onMouseUp() {\r\n }\r\n\r\n onMouseDown() {\r\n }\r\n\r\n delete() {\r\n this.deregisterEvents();\r\n }\r\n\r\n destroy() {\r\n this.delete();\r\n }\r\n\r\n hide() {\r\n if (!this.state.isHidden) {\r\n this.deregisterEvents();\r\n this.state.isHidden = true\r\n }\r\n }\r\n\r\n restore() {\r\n if (this.state.isHidden) {\r\n this.reInitEvents();\r\n this.state.isHidden = false\r\n }\r\n }\r\n\r\n deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n }\r\n\r\n reInitEvents = () => {\r\n this.initEvents();\r\n }\r\n\r\n animateShapeTransition(newShape, callback, duration = 0.75 * 1000) { // 10 seconds = 10000 milliseconds\r\n if (!newShape) {\r\n console.error(\"Invalid new shape.\");\r\n return;\r\n }\r\n\r\n if (newShape.id === this.parent.id) {\r\n return;\r\n }\r\n\r\n const originalShapePoints = this.calculateOutlineV2(this.parent.getPointsPointField(), 10);\r\n const newShapePoints = this.calculateOutlineV2(newShape.getPointsPointField(), 10);\r\n\r\n // Animation start time\r\n const startTime = new Date().getTime();\r\n\r\n const animate = () => {\r\n const elapsed = new Date().getTime() - startTime;\r\n const t = Math.min(elapsed / duration, 1);\r\n\r\n let interpolatedShape = [];\r\n for (let i = 0; i < Math.max(originalShapePoints.length, newShapePoints.length); i++) {\r\n // if we have less points in new shape\r\n const pointNew = newShapePoints[i % newShapePoints.length];\r\n // if we have less points in original shape\r\n const pointOriginal = originalShapePoints[i % originalShapePoints.length];\r\n\r\n interpolatedShape.push({\r\n x: pointOriginal.x + t * (pointNew.x - pointOriginal.x),\r\n y: pointOriginal.y + t * (pointNew.y - pointOriginal.y)\r\n });\r\n }\r\n\r\n this.animationPoints = interpolatedShape;\r\n\r\n if (t < 1) {\r\n requestAnimationFrame(animate);\r\n } else {\r\n this.animationPoints = [];\r\n this.setParent(newShape);\r\n callback();\r\n }\r\n };\r\n // begin animation\r\n animate();\r\n }\r\n\r\n render = (ctx) => {\r\n if (workspace && workspace.getState().loading) return;\r\n let offsetPoints;\r\n\r\n // if we have animation points the we will render them otherwise we will render shape points\r\n if (this.animationPoints.length > 0) {\r\n offsetPoints = this.calculateOutlineV2(this.animationPoints, 10);\r\n } else {\r\n const parentPoints = this.parent.getPointsPointField();\r\n offsetPoints = this.calculateOutlineV2(parentPoints, 10);\r\n }\r\n\r\n //console.log(\"parentPoints\", parentPoints);\r\n //console.log(\"offsetPoints\", offsetPoints);\r\n\r\n // let tempPoints = [\r\n // {x: 50, y: 50},\r\n // {x: 150, y: 50},\r\n // {x: 150, y: 150},\r\n // {x: 50, y: 150}\r\n // ];\r\n //let tempPointsOffset = this.calculateOffsetPoints(tempPoints, 10);\r\n //console.log(\"tempPoints\", tempPoints);\r\n //console.log(\"tempPointsOffset\", tempPointsOffset);\r\n\r\n //debugger // eslint-disable-line no-debugger\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.setLineDash([7, 5]);\r\n offsetPoints.forEach((p, i) => {\r\n if (i === 0) ctx.moveTo(p.x, p.y);\r\n else ctx.lineTo(p.x, p.y);\r\n });\r\n ctx.strokeStyle = this.design.strokeStyle;\r\n ctx.lineWidth = 1;\r\n ctx.closePath();\r\n ctx.stroke();\r\n ctx.restore();\r\n };\r\n\r\n calculateOutlineV2(points, offset) {\r\n let outlinePoints = [];\r\n\r\n for (let i = 0; i < points.length; i++) {\r\n let A = points[i];\r\n let B = points[(i + 1) % points.length];\r\n\r\n // Вектор AB\r\n let dx = B.x - A.x;\r\n let dy = B.y - A.y;\r\n\r\n // Вектор нормали (-dy, dx) или (dy, -dx)\r\n // В зависимости от того, в каком направлении идут точки\r\n let nx = dy;\r\n let ny = -dx;\r\n\r\n // Нормализуем вектор нормали\r\n let length = Math.sqrt(nx * nx + ny * ny);\r\n nx /= length;\r\n ny /= length;\r\n\r\n // Добавляем точки обводки с учетом смещения\r\n outlinePoints.push({\r\n x: A.x + nx * offset,\r\n y: A.y + ny * offset\r\n });\r\n outlinePoints.push({\r\n x: B.x + nx * offset,\r\n y: B.y + ny * offset\r\n });\r\n }\r\n\r\n return outlinePoints;\r\n }\r\n\r\n calculateOffsetPoints = (points, offsetDistance) => {\r\n let offsetPoints = [];\r\n\r\n points = [points[points.length-1], ...points, points[0], points[1]];\r\n\r\n for (let i = 1; i < points.length-2; i++) {\r\n let prev = points[i-1];\r\n let curr = points[i];\r\n let next = points[i+1];\r\n\r\n let dir1 = {x: curr.x - prev.x, y: curr.y - prev.y};\r\n let dir2 = {x: next.x - curr.x, y: next.y - curr.y};\r\n\r\n let norm1 = {x: dir1.y, y: -dir1.x};\r\n let norm2 = {x: dir2.y, y: -dir2.x};\r\n\r\n // Проверка острого угла\r\n let dotProduct = norm1.x * norm2.x + norm1.y * norm2.y;\r\n let avgNorm;\r\n if (dotProduct < 0) {\r\n avgNorm = i === 1 ? norm1 : norm2; // Использование нормали для более \"плоского\" отрезка\r\n } else {\r\n avgNorm = {x: (norm1.x + norm2.x) / 2, y: (norm1.y + norm2.y) / 2};\r\n }\r\n\r\n let length = Math.sqrt(avgNorm.x * avgNorm.x + avgNorm.y * avgNorm.y);\r\n let unitNorm = {x: avgNorm.x / length, y: avgNorm.y / length};\r\n\r\n offsetPoints.push({\r\n x: curr.x + unitNorm.x * offsetDistance,\r\n y: curr.y + unitNorm.y * offsetDistance\r\n });\r\n }\r\n return offsetPoints;\r\n }\r\n\r\n // offsetLine = (points, distance) => {\r\n // let offsetPoints = [];\r\n //\r\n // for (let i = 0; i < points.length - 1; i++) {\r\n // let p0 = points[i];\r\n // let p1 = points[i + 1];\r\n //\r\n // // Вычислить направление отрезка\r\n // let dx = p1.x - p0.x;\r\n // let dy = p1.y - p0.y;\r\n //\r\n // // Вычислить длину вектора\r\n // let len = Math.sqrt(dx * dx + dy * dy);\r\n //\r\n // // Нормализовать вектор\r\n // dx /= len;\r\n // dy /= len;\r\n //\r\n // // Вычислить нормаль (перпендикуляр)\r\n // //let nx = -dy;\r\n // //let ny = dx;\r\n // let nx = dy;\r\n // let ny = -dx;\r\n //\r\n // // Создать офсетную точку\r\n // offsetPoints.push({\r\n // x: p0.x + nx * distance,\r\n // y: p0.y + ny * distance\r\n // });\r\n // }\r\n //\r\n // // Добавить последнюю точку\r\n // let p0 = points[points.length - 2];\r\n // let p1 = points[points.length - 1];\r\n //\r\n // // Вычислить направление отрезка\r\n // let dx = p1.x - p0.x;\r\n // let dy = p1.y - p0.y;\r\n //\r\n // // Вычислить длину вектора\r\n // let len = Math.sqrt(dx * dx + dy * dy);\r\n //\r\n // // Нормализовать вектор\r\n // dx /= len;\r\n // dy /= len;\r\n //\r\n // // Вычислить нормаль (перпендикуляр)\r\n // //let nx = -dy;\r\n // //let ny = dx;\r\n // let nx = dy;\r\n // let ny = -dx;\r\n //\r\n // offsetPoints.push({\r\n // x: p1.x + nx * distance,\r\n // y: p1.y + ny * distance\r\n // });\r\n // //console.log(\"offsetPoints\", offsetPoints);\r\n // return offsetPoints;\r\n // }\r\n}\r\n","export default function createEventManager() {\r\n const listeners = {};\r\n\r\n return {\r\n on(eventName, callback) {\r\n if (!listeners[eventName]) {\r\n listeners[eventName] = [];\r\n }\r\n listeners[eventName].push(callback);\r\n },\r\n off(eventName, callback) {\r\n if (!listeners[eventName]) return;\r\n const index = listeners[eventName].indexOf(callback);\r\n if (index !== -1) {\r\n listeners[eventName].splice(index, 1);\r\n }\r\n },\r\n emit(eventName, data) {\r\n if (!listeners[eventName]) return;\r\n listeners[eventName].forEach(callback => callback(data));\r\n },\r\n };\r\n}\r\n","import Polygon from \"../shapes/layouts/polygon\";\r\nimport {IRONING_BOARD_DIRECTION} from \"./cabinetShapes\";\r\n\r\nexport const createIroningBoardShape = (width, height, radius, direction) => {\r\n const points = [];\r\n const steps = 20; // number of points for the arc\r\n\r\n // Straight lines\r\n points.push({ x: 0, y: 0 });\r\n points.push({ x: width, y: 0 });\r\n //points.push({ x: width, y: height});\r\n\r\n if (direction === IRONING_BOARD_DIRECTION.left) {\r\n for (let i = steps; i >= 0; i--) {\r\n const angle = (Math.PI / 2) * (i / steps); // quarter circle\r\n const x = width - radius * Math.cos(angle);\r\n const y = height - radius + radius * Math.sin(angle);\r\n points.push({x, y});\r\n }\r\n }\r\n\r\n if (direction === IRONING_BOARD_DIRECTION.right) {\r\n for (let i = 0; i <= steps; i++) {\r\n const angle = (Math.PI / 2) * (i / steps); // quarter circle\r\n const x = width - radius + radius * Math.cos(angle);\r\n const y = height - radius + radius * Math.sin(angle);\r\n points.push({ x, y });\r\n }\r\n }\r\n\r\n // Straight lines\r\n //points.push({ x: 0, y: height - radius });\r\n\r\n return new Polygon(points, true, true);\r\n};\r\n","import {post} from \"../../../api/api\";\r\n//import {getResponse, handleHttpError} from \"../../../api/api\";\r\n\r\nexport function getUrlBase() {\r\n let {subDomain} = document.kvConfig;\r\n let {domain} = document.kvConfig;\r\n domain = domain || 'quotesflooring.com';\r\n subDomain = subDomain ? subDomain + '.' : '';\r\n\r\n return (location.port === \"9007\" || document.kvConfig.kioskMode) ? `${subDomain}${domain}` : \"\";\r\n}\r\n\r\nexport const sqftPost = async (url, data, options = {}) => {\r\n return post(url, data, options);\r\n //void post;\r\n\r\n // const fullUrl = 'https://quotekitchenandbath.com' + url;\r\n // const isFormData = Object.prototype.toString.call(data) === '[object FormData]';\r\n // const headers = {\r\n // 'Accept': 'application/json'\r\n // };\r\n // if (!isFormData) {\r\n // headers['Content-Type'] = 'application/json';\r\n // }\r\n //\r\n // return fetch(fullUrl, {\r\n // method: 'post',\r\n // body: isFormData ? data : JSON.stringify(data),\r\n // headers: new Headers(headers),\r\n // signal: options.signal,\r\n // })\r\n // .then(handleHttpError)\r\n // .then(response => getResponse(response))\r\n // .catch(reason => {\r\n // if (reason.name === 'AbortError') {\r\n // console.log('Fetch aborted');\r\n // } else {\r\n // return Promise.reject(reason);\r\n // }\r\n // });\r\n};\r\n\r\nexport const fetchDataWithCancellation = (url, key, shouldSaveDataInStore = false) => {\r\n return async () => {\r\n const controller = new AbortController();\r\n const signal = controller.signal;\r\n\r\n store.dispatch({ type: 'REQUEST_STARTED', payload: { key, controller } });\r\n\r\n try {\r\n const response = await fetch(url, { signal });\r\n if (!response.ok) {\r\n throw new Error('Network response was not ok.');\r\n }\r\n\r\n const data = await response.json();\r\n store.dispatch({ type: 'REQUEST_SUCCESS', payload: { key, data: shouldSaveDataInStore ? data : null} });\r\n\r\n return data\r\n } catch (error) {\r\n if (error.name === 'AbortError') {\r\n console.log('Fetch aborted:', key);\r\n } else {\r\n store.dispatch({ type: 'REQUEST_FAILURE', payload: { key, error: error.message } });\r\n }\r\n }\r\n };\r\n};\r\n\r\nexport const cancelFetch = (key) => {\r\n return () => {\r\n const state = store.getState();\r\n const controller = state.sqftState.requests[key];\r\n\r\n if (controller) {\r\n controller.abort();\r\n store.dispatch({ type: 'REQUEST_CANCELLED', payload: { key } });\r\n store.dispatch({ type: 'REMOVE_CONTROLLER', payload: { key } });\r\n }\r\n };\r\n};\r\n","import LineImage from \"../core/shapes/imageParts/lineImage\";\r\nimport EventManager from \"../store/sqftEventManager\";\r\nimport PointV2, {CORE_POINT_LAYOUTS} from \"../core/shapes/pointV2\";\r\n//import line from \"../core/shapes/line\";\r\n\r\n/**\r\n *\r\n * @param points[]\r\n * @param parent\r\n * @return lines[{}]\r\n */\r\nexport const createImageLinesFromPoints = (points, parent) => {\r\n let lines = [];\r\n\r\n for (let i = 0; i < points.length; i++) {\r\n const shapeLine = new LineImage(\r\n points[i],\r\n points[(i + 1) % points.length],\r\n parent,\r\n i,\r\n {isResizable: parent.params.isResizable}\r\n );\r\n // const shapeLine = new line([i], points[(i + 1) % points.length]);\r\n // void parent;\r\n\r\n lines.push(shapeLine);\r\n }\r\n\r\n return lines;\r\n};\r\n\r\n\r\n/**\r\n * @param x\r\n * @param y\r\n * @param parent\r\n * @return {PointV2}\r\n */\r\nexport const getImagePoint = (x, y, parent) => {\r\n let pointState = {\r\n priority: EventManager.priorities.BOX_POINT,\r\n movable: false,\r\n isCentered: true,\r\n isResizedByPoint: false,\r\n isScaledByPoint: false,\r\n isVisibleOnHover: false,\r\n };\r\n let pointDesign = {\r\n radius: 0, // hide corner points\r\n lineWidth: 1,\r\n layout: CORE_POINT_LAYOUTS.black\r\n };\r\n\r\n return new PointV2(x, y, parent, pointState, pointDesign);\r\n}\r\n","import SimpleLine from \"../simpleLine\";\r\nimport NumberText from \"../../workspace/text/numberText\";\r\nimport {COLORS} from \"../../../../../../../colorThemes\";\r\nimport workspace from \"../../workspace\";\r\nimport sqftEventManager from \"../../../store/sqftEventManager\";\r\nimport EventManager from \"../../../store/sqftEventManager\";\r\nimport {DIRECTIONS, getLineDirection, getLineOrientation} from \"../../../../../helpers/shapeHelper\";\r\nimport {mmToInches, orientation} from \"../../../../../helpers/sqftHelper\";\r\nimport moveDiagonalLine from \"../../../../../lib/moveDiagonalLine\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport {MEASURE_UNITS} from \"../../../../../constants\";\r\n\r\nclass LineImage extends SimpleLine {\r\n constructor(from, to, parent, lineIndex, settings) {\r\n super(from, to, parent, settings)\r\n\r\n this.movableImage = parent;\r\n this.lineIndex = lineIndex;\r\n const design = {fontColor: COLORS.red, eventsPriority: sqftEventManager.priorities.IMAGE_LINE};\r\n let xOffset = 0;\r\n let yOffset = 0;\r\n switch (lineIndex) {\r\n case 0:\r\n xOffset = 0;\r\n yOffset = 15;\r\n break;\r\n case 1:\r\n xOffset = 0;\r\n yOffset = -15;\r\n break;\r\n case 2:\r\n xOffset = 0;\r\n yOffset = 15;\r\n break;\r\n case 3:\r\n xOffset = 0;\r\n yOffset = 15;\r\n break;\r\n }\r\n // const xOffset = lineIndex === 0 || lineIndex === 2 ? 0 : 15;\r\n // const yOffset = lineIndex === 0 || lineIndex === 2 ? 15 : 0;\r\n\r\n this.measurementInsideShape = new NumberText(0,\r\n {xOffset: xOffset, yOffset},\r\n design,\r\n workspace,\r\n this.updatePosInsideShape,\r\n false\r\n );\r\n }\r\n\r\n destroy = (protect) => {\r\n if (!protect) {\r\n EventManager.removeEvent(this);\r\n this.from.destroy(protect);\r\n this.lineLengthText.destroy();\r\n this.measurementInsideShape.destroy();\r\n }\r\n };\r\n\r\n deregisterEvents = (protect) => {\r\n if (!protect) {\r\n EventManager.removeEvent(this);\r\n this.isHidden = true;\r\n this.from.deregisterEvents();\r\n this.lineLengthText.deregisterEvents();\r\n this.measurementInsideShape.deregisterEvents();\r\n }\r\n };\r\n\r\n reInitEvents = () => {\r\n if (this.isHidden) {\r\n this.initEvents();\r\n this.isHidden = false;\r\n\r\n this.from.reInitEvents();\r\n this.lineLengthText.reInitEvents();\r\n\r\n if (this.movableImage.shouldRenderMeasurementsInsideTheShape()) {\r\n const outerShape = this.movableImage.getOuterShape();\r\n if (outerShape) {\r\n this.measurementInsideShape.reInitEvents();\r\n }\r\n }\r\n }\r\n }\r\n\r\n updatePosInsideShape = (val, numberText, prevValue) => {\r\n let diff = prevValue - val;\r\n diff = sqftConfig.measureUnit === MEASURE_UNITS.Metric\r\n ? mmToInches(diff)\r\n : diff;\r\n\r\n const angleInRadians = this.movableImage.rotatedDegrees * Math.PI / 180; // Предполагая, что rotationAngle - это угол вращения в градусах\r\n\r\n // Calculate the offset taking into account the rotation angle\r\n const deltaX = diff * Math.cos(angleInRadians);\r\n const deltaY = diff * Math.sin(angleInRadians);\r\n\r\n const movableImage = this.from.parent;\r\n const lineIndex = this.lineIndex;\r\n let posXDiff = 0;\r\n let posYDiff = 0;\r\n switch (lineIndex) {\r\n case 0:\r\n posXDiff = -deltaY;\r\n posYDiff = -deltaX;\r\n break;\r\n case 1:\r\n posXDiff = +deltaX;\r\n posYDiff = +deltaY;\r\n break;\r\n case 2:\r\n posXDiff = +deltaY;\r\n posYDiff = +deltaX;\r\n break;\r\n case 3:\r\n posXDiff = -deltaX;\r\n posYDiff = -deltaY;\r\n break;\r\n }\r\n\r\n const newPosition = {x: movableImage.pos.x + posXDiff, y: movableImage.pos.y + posYDiff}\r\n movableImage.setPosition(newPosition);\r\n movableImage.shapeAbsolute.setAbsolutePos(newPosition);\r\n };\r\n\r\n /**\r\n * parent method override\r\n * @param xDiff\r\n * @param yDiff\r\n */\r\n moveLine = (xDiff, yDiff) => {\r\n const currentSize = this.parent.getSize();\r\n let newImageWidth = currentSize.width;\r\n let newImageHeight = currentSize.height;\r\n\r\n const o = getLineOrientation(this.from, this.to);\r\n const lineDirection = getLineDirection(this.from, this.to);\r\n\r\n if (o === orientation.VERTICAL) {\r\n if (lineDirection === DIRECTIONS.SOUTH) {\r\n //set min and max line length\r\n let testNewImageValue = newImageWidth - xDiff;\r\n if (sqftConfig.maxApplianceLineLength > testNewImageValue\r\n && sqftConfig.minApplianceLineLength < testNewImageValue\r\n ) {\r\n newImageWidth = testNewImageValue;\r\n this.from.x -= xDiff;\r\n this.to.x -= xDiff;\r\n }\r\n } else if (lineDirection === DIRECTIONS.NORTH) {\r\n let testNewImageValue = newImageWidth + xDiff;\r\n if (sqftConfig.maxApplianceLineLength > testNewImageValue\r\n && sqftConfig.minApplianceLineLength < testNewImageValue\r\n ) {\r\n newImageWidth = testNewImageValue;\r\n this.parent.setPosition({x: this.parent.pos.x - xDiff, y: this.parent.pos.y});\r\n this.parent.updateSnappedPos(); //resolve snapping v1\r\n //this.parent.resetAbsolutePos(); //resolve snapping v2\r\n\r\n //move points for the parallel line\r\n const parallelLine = this.getParallelLine();\r\n parallelLine.from.x += xDiff;\r\n parallelLine.to.x += xDiff;\r\n\r\n //console.log(\"newImageWidth\", testNewImageValue);\r\n //console.log(\"parallelLine.from.y\", parallelLine.to.x);\r\n //console.log(\"parallelLine.to.y\", parallelLine.to.x);\r\n //console.log(\"xDiff\", xDiff);\r\n }\r\n }\r\n } else if (o === orientation.HORIZONTAL) {\r\n if (lineDirection === DIRECTIONS.WEST) {\r\n let testNewImageValue = newImageHeight - yDiff;\r\n if (sqftConfig.maxApplianceLineLength > testNewImageValue\r\n && sqftConfig.minApplianceLineLength < testNewImageValue\r\n ) {\r\n newImageHeight = testNewImageValue;\r\n this.from.y -= yDiff;\r\n this.to.y -= yDiff;\r\n }\r\n } else if (lineDirection === DIRECTIONS.EAST) {\r\n let testNewImageValue = newImageHeight + yDiff;\r\n if (sqftConfig.maxApplianceLineLength > testNewImageValue\r\n && sqftConfig.minApplianceLineLength < testNewImageValue\r\n ) {\r\n newImageHeight = testNewImageValue;\r\n this.parent.setPosition({x: this.parent.pos.x, y: this.parent.pos.y - yDiff});\r\n this.parent.updateSnappedPos(); //resolve snapping v1\r\n //this.parent.resetAbsolutePos(); //resolve snapping v2\r\n\r\n //move points for the parallel line\r\n const parallelLine = this.getParallelLine();\r\n parallelLine.from.y += yDiff;\r\n parallelLine.to.y += yDiff;\r\n }\r\n }\r\n } else {\r\n const nextLine = this.parent.getNextLine(this);\r\n const prevLine = this.parent.getPrevLine(this);\r\n moveDiagonalLine(this, nextLine, prevLine, this.state.movePointDistance, yDiff, o);\r\n //newImageWidth += xDiff;\r\n //newImageHeight += yDiff;\r\n }\r\n\r\n this.parent.updateLinesLength();\r\n this.updatePrentSize(newImageWidth, newImageHeight);\r\n }\r\n getMaxLength = () => sqftConfig.maxApplianceLineLength * sqftConfig.getMeasureMultiplier()\r\n}\r\n\r\nexport default LineImage;\r\n","import * as uuid from \"uuid\";\r\n\r\nimport sqftConfig from \"../../store/sqftConfig\";\r\nimport workspace from \"../workspace\";\r\nimport EventManager from \"../../store/sqftEventManager\";\r\nimport {getMidPoint, getPointDistance, getPointField, orientation} from \"../../../../helpers/sqftHelper\";\r\nimport {\r\n DIRECTIONS,\r\n getLineDirection,\r\n getLineLengthNumberTextV2ForTheImage,\r\n getLineOrientation,\r\n getPointDirection\r\n} from \"../../../../helpers/shapeHelper\";\r\nimport {isPointInsidePolygon} from \"../../../../lib/pnpoly\";\r\nimport {getLineBordersArrayV2} from \"../../helpers/lineHelper\";\r\nimport moveDiagonalLine from \"../../../../lib/moveDiagonalLine\";\r\nimport SqftStore from \"../../store/sqftStore\";\r\nimport COLOR_THEMES from \"../../../../../../colorThemes\";\r\nimport store from \"../../../../../../store\";\r\nimport {SIDEBAR_NAVIGATION_BUTTONS} from \"../../../../constants\";\r\nimport resizeLine from \"./overlays/resizeLine\";\r\n\r\nclass SimpleLine {\r\n id;\r\n from;\r\n to;\r\n parent;\r\n settings;\r\n lineLengthText;\r\n\r\n constructor(from, to, parent, settings = {isResizable: true}) {\r\n this.id = uuid.v4();\r\n this.from = from;\r\n this.to = to;\r\n this.parent = parent;\r\n this.settings = settings;\r\n this.design = {\r\n lineThickness: 1,\r\n lineHoveredArea: 10\r\n };\r\n this.state = {\r\n isHovering: false,\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n movePointDistance: null\r\n };\r\n this.initLineLength(settings.isResizable);\r\n this.initEvents();\r\n }\r\n\r\n exportData = () => {\r\n return {\r\n id: this.id,\r\n from: this.from.exportData(),\r\n to: this.to.exportData()\r\n }\r\n }\r\n\r\n importData = (lineData) => {\r\n this.id = lineData.id;\r\n this.from.importData(lineData.from);\r\n this.to.importData(lineData.to);\r\n }\r\n\r\n isHovering = () => {\r\n return this.state.isHovering\r\n }\r\n\r\n getParent = () => {\r\n return this.parent\r\n }\r\n\r\n initEvents = () => {\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n this.onMouseMove,\r\n this,\r\n EventManager.priorities.IMAGE_LINE\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n this.onMouseDown,\r\n this,\r\n EventManager.priorities.IMAGE_LINE\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n this.onMouseUp,\r\n this,\r\n EventManager.priorities.IMAGE_LINE\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_LEAVE,\r\n this.onMouseLeave,\r\n this,\r\n EventManager.priorities.OVERALL\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_LEAVE,\r\n this.onMouseLeave,\r\n this,\r\n EventManager.priorities.OVERALL\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render,\r\n this,\r\n EventManager.priorities.IMAGE_LINE\r\n );\r\n };\r\n\r\n initLineLength = (isResizable = true) => {\r\n this.lineLengthText = getLineLengthNumberTextV2ForTheImage(\r\n this.from,\r\n this.to,\r\n this,\r\n this.setLineLengthFromNumberValue,\r\n !isResizable\r\n );\r\n }\r\n\r\n destroy = (protect) => {\r\n if (!protect) {\r\n EventManager.removeEvent(this);\r\n this.from.destroy(protect);\r\n this.lineLengthText.destroy();\r\n }\r\n };\r\n\r\n deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n this.isHidden = true;\r\n this.from.deregisterEvents();\r\n this.lineLengthText.deregisterEvents();\r\n }\r\n\r\n reInitEvents = () => {\r\n if (this.isHidden) {\r\n this.initEvents();\r\n this.isHidden = false;\r\n\r\n this.from.reInitEvents();\r\n this.lineLengthText.reInitEvents();\r\n }\r\n }\r\n\r\n onMouseLeave() {\r\n this.state.isHovering = false;\r\n this.state.mouseDown = false;\r\n }\r\n\r\n onMouseUp(mousePos, e) {\r\n void mousePos;\r\n void e;\r\n if (this.state.mouseDown) {\r\n this.state.mouseDown = false;\r\n this.state.mouseDownPosition = null;\r\n //this.from.snapToGrid();\r\n //this.to.snapToGrid();\r\n }\r\n }\r\n onMouseDown(mousePos, e) {\r\n void e;\r\n if (this.state.isHovering) {\r\n this.state.mouseDown = true;\r\n this.state.movePointDistance = getPointDistance(this.from, this.to);\r\n this.state.mouseDownPosition = mousePos;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n isMouseOverLineV2 = (mousePos) => {\r\n const lineBordersArray = getLineBordersArrayV2(this.from,\r\n this.to,\r\n this.design.lineHoveredArea\r\n )\r\n //this.state.isHovering\r\n return isPointInsidePolygon(mousePos, lineBordersArray);// || this.state.mouseDown;\r\n }\r\n\r\n onMouseMove = (mousePos, e) => {\r\n void e;\r\n // if (e.terminate && !parent.isHovering()) {\r\n // this.state.isHovering = false;\r\n // return false;\r\n // }\r\n const isMouseOverLine = this.isMouseOverLineV2(mousePos);\r\n this.state.isHovering = isMouseOverLine;\r\n\r\n if (this.state.mouseDown || isMouseOverLine) {\r\n if (workspace.getAllowEdges() && !this.from.angleIsChanged && !this.to.angleIsChanged) {\r\n if (this.state.mouseDown && this.settings.isResizable) {\r\n this.moveLineWithMouse(mousePos);\r\n }\r\n EventManager.releaseStealLock(this.parent);\r\n EventManager.stealCursor();\r\n switch(getLineOrientation(this.from, this.to)) {\r\n case orientation.HORIZONTAL:\r\n EventManager.setCursor(\"n-resize\", this);\r\n break;\r\n case orientation.VERTICAL:\r\n EventManager.setCursor(\"e-resize\", this);\r\n break;\r\n case orientation.NORTHWEST:\r\n case orientation.SOUTHEAST:\r\n EventManager.setCursor(\"ne-resize\", this);\r\n break;\r\n case orientation.NORTHEAST:\r\n case orientation.SOUTHWEST:\r\n EventManager.setCursor(\"nw-resize\", this);\r\n break;\r\n }\r\n return this.state.mouseDown;\r\n }\r\n\r\n if (sqftConfig.highlight.lines && this.state.isHovering) {\r\n EventManager.releaseStealLock(this.parent);\r\n EventManager.stealCursor();\r\n return false;\r\n }\r\n // prevent all other mouseover's\r\n }\r\n\r\n if (workspace.getHoverShape() !== this.parent) {\r\n this.state.isHovering = false;\r\n }\r\n EventManager.resetCursor(this);\r\n return false;\r\n }\r\n\r\n setLineLengthFromNumberValue = (newValue) => {\r\n newValue = newValue / sqftConfig.getMeasureMultiplier()\r\n const currentDistance = getPointDistance(this.from, this.to);\r\n const diff = newValue - currentDistance;\r\n resizeLine(this, diff, false);\r\n\r\n //adjust parent size\r\n const currentSize = this.parent.getSize();\r\n let newImageWidth = currentSize.width;\r\n let newImageHeight = currentSize.height;\r\n const o = getLineOrientation(this.from, this.to);\r\n const lineDirection = getLineDirection(this.from, this.to);\r\n\r\n if (o === orientation.VERTICAL) {\r\n this.parent.setPosition({x: this.parent.pos.x, y: this.parent.pos.y - diff / 2});\r\n if (lineDirection === DIRECTIONS.SOUTH) {\r\n newImageHeight = newValue;\r\n } else if (lineDirection === DIRECTIONS.NORTH) {\r\n newImageHeight = newValue;\r\n }\r\n this.from.y += diff / 2;\r\n this.to.y += diff / 2;\r\n //move points for the parallel line\r\n const parallelLine = this.getParallelLine();\r\n parallelLine.from.y += diff / 2;\r\n parallelLine.to.y += diff / 2;\r\n } else if (o === orientation.HORIZONTAL) {\r\n this.parent.setPosition({x: this.parent.pos.x - diff / 2, y: this.parent.pos.y});\r\n if (lineDirection === DIRECTIONS.WEST) {\r\n newImageWidth = newValue;\r\n } else if (lineDirection === DIRECTIONS.EAST) {\r\n newImageWidth = newValue;\r\n }\r\n\r\n this.from.x += diff / 2;\r\n this.to.x += diff / 2;\r\n //move points for the parallel line\r\n const parallelLine = this.getParallelLine();\r\n parallelLine.from.x += diff / 2;\r\n parallelLine.to.x += diff / 2;\r\n } else {\r\n // const nextLine = this.parent.getNextLine(this);\r\n // const prevLine = this.parent.getPrevLine(this);\r\n // moveDiagonalLine(this, nextLine, prevLine, this.state.movePointDistance, yDiff, o);\r\n //newImageWidth += xDiff;\r\n //newImageHeight += yDiff;\r\n }\r\n\r\n this.parent.updateLinesLength();\r\n this.parent.updateSnappedPos(); //resolve snapping v1\r\n this.updatePrentSize(newImageWidth, newImageHeight);\r\n }\r\n\r\n moveLineWithMouse = (mousePos) => {\r\n\r\n // console.log(\"mousePos\", mousePos);\r\n // console.log(\"this.from.x\", this.from.x);\r\n // console.log(\"this.from.x\", this.to.x);\r\n\r\n const scale = workspace.getScale();\r\n const xDiff = (this.state.mouseDownPosition.x - mousePos.x) / scale;\r\n const yDiff = (this.state.mouseDownPosition.y - mousePos.y) / scale;\r\n const o = getLineOrientation(this.from, this.to);\r\n if (o === orientation.VERTICAL) {\r\n this.state.mouseDownPosition.x = mousePos.x;\r\n } else if (o === orientation.HORIZONTAL) {\r\n this.state.mouseDownPosition.y = mousePos.y;\r\n } else {\r\n this.state.mouseDownPosition = mousePos;\r\n }\r\n\r\n // console.log(\"xDiff\", xDiff);\r\n // console.log(\"yDiff\", yDiff);\r\n // console.log(\"this.state.mouseDownPosition\", this.state.mouseDownPosition);\r\n // console.log(\"mousePos\", mousePos);\r\n this.moveLine(xDiff, yDiff);\r\n };\r\n\r\n moveLine = (xDiff, yDiff) => {\r\n const currentSize = this.parent.getSize();\r\n let newImageWidth = currentSize.width;\r\n let newImageHeight = currentSize.height;\r\n\r\n const o = getLineOrientation(this.from, this.to);\r\n const lineDirection = getLineDirection(this.from, this.to);\r\n\r\n if (o === orientation.VERTICAL) {\r\n if (lineDirection === DIRECTIONS.SOUTH) {\r\n newImageWidth -= xDiff;\r\n this.from.x -= xDiff;\r\n this.to.x -= xDiff;\r\n } else if (lineDirection === DIRECTIONS.NORTH) {\r\n newImageWidth += xDiff;\r\n this.parent.setPosition({x: this.parent.pos.x - xDiff, y: this.parent.pos.y});\r\n this.parent.updateSnappedPos(); //resolve snapping v1\r\n //this.parent.resetAbsolutePos(); //resolve snapping v2\r\n\r\n //move points for the parallel line\r\n const parallelLine = this.getParallelLine();\r\n parallelLine.from.x += xDiff;\r\n parallelLine.to.x += xDiff;\r\n }\r\n } else if (o === orientation.HORIZONTAL) {\r\n if (lineDirection === DIRECTIONS.WEST) {\r\n newImageHeight -= yDiff;\r\n this.from.y -= yDiff;\r\n this.to.y -= yDiff;\r\n } else if (lineDirection === DIRECTIONS.EAST) {\r\n newImageHeight += yDiff;\r\n this.parent.setPosition({x: this.parent.pos.x, y: this.parent.pos.y - yDiff});\r\n this.parent.updateSnappedPos(); //resolve snapping v1\r\n //this.parent.resetAbsolutePos(); //resolve snapping v2\r\n\r\n //move points for the parallel line\r\n const parallelLine = this.getParallelLine();\r\n parallelLine.from.y += yDiff;\r\n parallelLine.to.y += yDiff;\r\n }\r\n } else {\r\n const nextLine = this.parent.getNextLine(this);\r\n const prevLine = this.parent.getPrevLine(this);\r\n moveDiagonalLine(this, nextLine, prevLine, this.state.movePointDistance, yDiff, o);\r\n //newImageWidth += xDiff;\r\n //newImageHeight += yDiff;\r\n }\r\n\r\n this.parent.updateLinesLength();\r\n this.updatePrentSize(newImageWidth, newImageHeight);\r\n }\r\n\r\n updatePrentSize = (newImageWidth, newImageHeight) => {\r\n const imageState = this.parent.getState();\r\n if (newImageHeight >= imageState.minimumHeight && newImageWidth >= imageState.minimumWidth ) {\r\n this.parent.setSize({\r\n width: +newImageWidth,\r\n height: +newImageHeight\r\n });\r\n }\r\n\r\n SqftStore.updateCalculations();\r\n }\r\n\r\n updateLineLength = () => {\r\n const midPoint = getMidPoint(this.from, this.to);\r\n const distance = getPointDistance(this.from, this.to);\r\n this.lineLengthText.pos.x = midPoint.x;\r\n this.lineLengthText.pos.y = midPoint.y;\r\n this.lineLengthText.value = distance;\r\n }\r\n\r\n getLineDirection = () => {\r\n const prevLine = this.parent.getPrevLine(this);\r\n const nextLine = this.parent.getNextLine(this);\r\n\r\n return getPointDirection(this.from, this.to, nextLine.to, prevLine.from);\r\n }\r\n\r\n render = (ctx) => {\r\n this.renderHovering(ctx);\r\n }\r\n\r\n renderHovering = (ctx) => {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (this.state.isHovering && activeButton === SIDEBAR_NAVIGATION_BUTTONS.resize) {\r\n let pointFieldFrom = getPointField(this.from.x, this.from.y, this.parent);\r\n let pointFieldTo = getPointField(this.to.x, this.to.y, this.parent);\r\n void pointFieldFrom;\r\n void pointFieldTo;\r\n void ctx;\r\n\r\n ctx.beginPath();\r\n ctx.lineWidth = 3;\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n ctx.moveTo(pointFieldFrom.x, pointFieldFrom.y);\r\n ctx.lineTo(pointFieldTo.x, pointFieldTo.y);\r\n\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n }\r\n\r\n getParallelLine = () => {\r\n const lines = this.parent.getLines();\r\n const lineIndex = lines.indexOf(this);\r\n const parallelLineIndex = (lineIndex + 2) % 4;\r\n\r\n return lines[parallelLineIndex];\r\n }\r\n\r\n getOffset = () => {\r\n let scale = sqftConfig.scale;\r\n let workspacePos = workspace.getOffset();\r\n if (this.parent) {\r\n let _pos = this.parent.getPosition();\r\n if (sqftConfig.workspace.snapToGrid) {\r\n _pos = this.parent.getSnappedPosition();\r\n }\r\n return {\r\n x: workspacePos.x + (_pos.x * scale),\r\n y: workspacePos.y + (_pos.y * scale)\r\n }\r\n } else {\r\n return {x: 0, y: 0};\r\n }\r\n };\r\n\r\n deleteAttachedItem = () => {\r\n return true\r\n }\r\n\r\n isWithBumpout = () => {\r\n return false\r\n }\r\n\r\n isWithMitered = () => {\r\n return false\r\n }\r\n}\r\n\r\nexport default SimpleLine;\r\n","import {RENDER_TEMPLATES} from \"../../../../../constants\";\r\nimport workspace from \"../../workspace\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport COLOR_THEMES from \"../../../store/colorThemes\";\r\nimport store from \"../../../../../../../store\";\r\nimport sqftShapeManager from \"../../../store/sqftShapeManager\";\r\nimport EventManager from \"../../../store/sqftEventManager\";\r\nimport PointV2, {CORE_POINT_LAYOUTS} from \"../pointV2\";\r\nimport {getParallelPoints, getPointField, getPointOnTheLine} from \"../../../../../helpers/sqftHelper\";\r\nimport {getAngleBetween3Points} from \"../../../../../helpers/shapeHelper\";\r\nimport {changeValuePopup} from \"../../../../../../../actions/sqftMenuFunctions\";\r\nimport SqftStore from \"../../../store/sqftStore\";\r\nimport sqftImageManager from \"../../../store/sqftImageManager\";\r\nimport sqftShape from \"../sqftShape\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\n\r\nexport default class ShapeRotatable {\r\n __shape;\r\n __cornerPoints = [];\r\n rotateToPointAngle = null; // angle between shape center, hovered point and zero shape point\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n //this.__shape.setCenter(ShapeHelper.getCenterPoint(shape.getLines().map(line => line.from)));\r\n this.initCornerBorderPoints();\r\n if (shape instanceof sqftShape) {\r\n this.hideShapePoints();\r\n }\r\n }\r\n\r\n getCornerPoint() {\r\n return this.__shape.staticCenterPoint\r\n }\r\n\r\n getCornerPoints() {\r\n return this.__cornerPoints\r\n }\r\n\r\n reInitShapePoints() {\r\n if (this.__shape instanceof sqftShape) {\r\n const lines = this.__shape.getLines();\r\n for (const line of lines) {\r\n line.from.initEvents();\r\n }\r\n }\r\n }\r\n\r\n hideShapePoints() {\r\n const lines = this.__shape.getLines();\r\n for (const line of lines) {\r\n line.from.deregisterEvents();\r\n }\r\n }\r\n\r\n initCornerBorderPoints = () => {\r\n let minMaxPoints;\r\n if (this.__shape instanceof sqftShape) {\r\n minMaxPoints = sqftShapeManager.getMinMaxShapePoints(this.__shape, true, false)\r\n } else {\r\n minMaxPoints = sqftImageManager.getMinMaxShapePoints(this.__shape, true, false);\r\n }\r\n const {minX, maxX, minY, maxY} = minMaxPoints;\r\n console.log(\"minX, maxX, minY, maxY\", minX, maxX, minY, maxY);\r\n\r\n let pointParams = {\r\n priority: EventManager.priorities.BOX_POINT,\r\n movable: true,\r\n isCentered: true,\r\n // isCenteredByY: pointParams.isCenteredByY,\r\n // isResizedByPoint: pointParams.isResizedByPoint,\r\n // isScaledByPoint: pointParams.isScaledByPoint,\r\n isVisibleOnHover: false,\r\n\r\n // Move point callback\r\n moveCallback: (mousePos, movablePoint) => {\r\n // get angles\r\n const isSlabMode = store.getState().sqftSlabState.isShowSlabTool;\r\n const shape = movablePoint.grandParent;\r\n const shapeCenter = shape.getCenter();\r\n const shapeCenterOnField = getPointField(shapeCenter.x, shapeCenter.y, shape);\r\n const movablePointOnField = getPointField(movablePoint.posX, movablePoint.posY, shape);\r\n const shapeZeroAnglePoint = {x: shapeCenterOnField.x, y: shapeCenterOnField.y - 50};\r\n let rotateToMouseAngle = getAngleBetween3Points(mousePos, shapeCenterOnField, shapeZeroAnglePoint);\r\n let rotatedDegrees;\r\n isSlabMode ? rotatedDegrees = shape.rotatedDegreesSlab : rotatedDegrees = shape.rotatedDegrees;\r\n\r\n if (!shape.shapeRotatable) {\r\n return;\r\n }\r\n\r\n // remember rotateToPointAngle angle (it is always the same)\r\n if (!shape.shapeRotatable.rotateToPointAngle) {\r\n shape.shapeRotatable.rotateToPointAngle = getAngleBetween3Points(movablePointOnField, shapeCenterOnField, shapeZeroAnglePoint);\r\n shape.shapeRotatable.rotateToPointAngle = mousePos.x < shapeCenterOnField.x ? 360 - shape.shapeRotatable.rotateToPointAngle : shape.shapeRotatable.rotateToPointAngle;\r\n //shape.shapeRotatable.rotateToPointAngle -= rotatedDegrees;\r\n }\r\n\r\n // ROTATE TO LEFT\r\n const rotateToAngleIn360 = mousePos.x < shapeCenterOnField.x ? 360 - rotateToMouseAngle : rotateToMouseAngle;\r\n const rotateToAngleWithoutHoveredPointAngle = shape.shapeRotatable.rotateToPointAngle - rotateToAngleIn360 - rotatedDegrees;\r\n const rotateToDegreesValue = Math.round(rotateToAngleWithoutHoveredPointAngle);\r\n\r\n // Normalize angle to range [0, 360)\r\n const normalizedRotateToDegreesValue = (rotateToDegreesValue % 360 + 360) % 360;\r\n\r\n if (normalizedRotateToDegreesValue) {\r\n this.__shape.rotate(normalizedRotateToDegreesValue, shape.Direction.LEFT, isSlabMode, this.getCornerPoint());\r\n\r\n // ROTATE TO RIGHT\r\n // const rotateToAngleWithoutHoveredPointAngle = rotateToAngle - shape.shapeRotatable.rotateToPointAngle - rotatedDegrees;\r\n // const rotateToDegreesValue = Math.round(rotateToAngleWithoutHoveredPointAngle);\r\n // this.__shape.rotate(rotateToDegreesValue, shape.Direction.RIGHT, isSlabMode, this.getCornerPoint());\r\n\r\n isSlabMode\r\n ? shape.rotatedDegreesSlab = (shape.rotatedDegreesSlab % 360 + 360) % 360\r\n : shape.rotatedDegrees = (shape.rotatedDegrees % 360 + 360) % 360;\r\n\r\n // update valuePopup\r\n const state = store.getState();\r\n const valuePopup = state.sqftMenuState.changeValuePopups.find(valuePopup => valuePopup.id === 'shape' + shape.id);\r\n const displayValueInPopup = isSlabMode ? shape.rotatedDegreesSlab : shape.rotatedDegrees;\r\n store.dispatch(changeValuePopup({\r\n ...valuePopup,\r\n value: displayValueInPopup\r\n }));\r\n }\r\n\r\n\r\n // Debugging information\r\n // console.log(\"rotateToDegreesValue\", rotateToDegreesValue);\r\n // console.log(\"normalizedRotateToDegreesValue\", normalizedRotateToDegreesValue);\r\n // console.log(\"shape.rotatedDegrees2\", shape.rotatedDegrees);\r\n // console.log('movablePointOnField', movablePointOnField);\r\n // console.log(\"mousePos.x < shapeCenter.x\", mousePos.x < shapeCenter.x);\r\n // console.log('rotatePointAngle', shape.shapeRotatable.rotateToPointAngle);\r\n // console.log('rotateToMouseAngle', rotateToMouseAngle);\r\n // console.log('rotateToAngle', rotateToAngle);\r\n // console.log(\"rotateToAngleWithoutHoveredPointAngle\", rotateToAngleWithoutHoveredPointAngle);\r\n // console.log('shapeCenterOnField', shapeCenterOnField);\r\n // console.log('mousePos', mousePos);\r\n // console.log('movablePoint', movablePoint);\r\n // console.log('-------------------------------');\r\n },\r\n mouseUpCallback: (mousePos, movablePoint) => {\r\n const shape = movablePoint.grandParent;\r\n shape.shapeRotatable.rotateToPointAngle = null;\r\n }\r\n };\r\n let pointDesign = {\r\n radius: 5,\r\n lineWidth: 1,\r\n layout: CORE_POINT_LAYOUTS.green\r\n };\r\n this.__cornerPoints = [\r\n new PointV2(minX, minY, this.__shape, pointParams, pointDesign),\r\n new PointV2(maxX, minY, this.__shape, pointParams, pointDesign),\r\n new PointV2(maxX, maxY, this.__shape, pointParams, pointDesign),\r\n new PointV2(minX, maxY, this.__shape, pointParams, pointDesign),\r\n ];\r\n }\r\n\r\n destroy = () => {\r\n for (const cornerPoint of this.__cornerPoints) {\r\n cornerPoint.destroy()\r\n }\r\n }\r\n\r\n rotateShapeRotatablePoints = (aroundPoint, angle, isSlabMode) => {\r\n if (this.__shape) {\r\n for (const cornerPoint of this.getCornerPoints()) {\r\n cornerPoint.rotate(aroundPoint, angle, isSlabMode);\r\n }\r\n }\r\n }\r\n\r\n getCornerPointsPointField = () => {\r\n let cornerPointsPointField = [];\r\n for (const currentPoint of this.__cornerPoints) {\r\n cornerPointsPointField.push(\r\n getPointField( currentPoint.modelCorePoint.getPosX(), currentPoint.modelCorePoint.getPosY(), this.__shape)\r\n );\r\n }\r\n\r\n return cornerPointsPointField;\r\n }\r\n\r\n render = (ctx, template= RENDER_TEMPLATES.default) => {\r\n //this.updatePointCords();\r\n this.renderFrameBorder(ctx, this.__shape);\r\n this.renderFramePoints(ctx, this.__shape);\r\n if (this.__shape instanceof sqftShape) {\r\n this.renderLines(ctx, template);\r\n }\r\n };\r\n\r\n renderLines = (ctx, template= RENDER_TEMPLATES.default) => {\r\n if (workspace && workspace.getState().loading) return;\r\n const isSlabMode = SqftStore.isSlabMode();\r\n let lines = this.__shape.getLines();\r\n\r\n ctx.beginPath();\r\n for (let i = 0; i < lines.length; i++) {\r\n lines[i].render(ctx, i > 0);\r\n }\r\n if (this.__shape.isHovering() && workspace.getHoverShape() === this.__shape ) {\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].active_hover;\r\n } else {\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].active;\r\n }\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].active_disabled;\r\n switch (template) {\r\n case RENDER_TEMPLATES.linesOnly:\r\n ctx.lineWidth = 0;\r\n ctx.fill();\r\n ctx.closePath();\r\n break;\r\n case RENDER_TEMPLATES.default:\r\n default:\r\n ctx.fillStyle = isSlabMode ? COLOR_THEMES[sqftConfig.activeTheme].active_disabled : this.__shape.getFillColor();\r\n ctx.lineWidth = 2; // Math.ceil(scale);\r\n ctx.fill();\r\n ctx.closePath();\r\n ctx.stroke();\r\n break;\r\n }\r\n\r\n if (this.__shape.isHovering() && workspace.getHoveredSqftShape() === this.__shape ) {\r\n let sqftMenuState = store.getState().sqftMenuState;\r\n void sqftMenuState;\r\n }\r\n };\r\n\r\n renderFrameBorder = (ctx) => {\r\n ctx.beginPath();\r\n ctx.lineWidth = 2;\r\n\r\n let pointField = getPointField(\r\n this.__cornerPoints[0].modelCorePoint.getPosX(),\r\n this.__cornerPoints[0].modelCorePoint.getPosY(),\r\n this.__shape\r\n );\r\n ctx.moveTo(pointField.x, pointField.y);\r\n\r\n for (const cornerPoint of this.__cornerPoints) {\r\n pointField = getPointField(\r\n cornerPoint.modelCorePoint.getPosX(),\r\n cornerPoint.modelCorePoint.getPosY(),\r\n this.__shape\r\n );\r\n ctx.lineTo(pointField.x, pointField.y);\r\n }\r\n\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].active;\r\n ctx.closePath();\r\n ctx.stroke();\r\n }\r\n\r\n renderFramePoints = (ctx) => {\r\n let len = this.__cornerPoints.length;\r\n const cornerPointsPointField = this.getCornerPointsPointField();\r\n for (const index in cornerPointsPointField) {\r\n //cornerPoint.render(ctx);\r\n if (cornerPointsPointField.hasOwnProperty(index)) {\r\n let current = cornerPointsPointField[+index];\r\n let previous = cornerPointsPointField[(+index + len - 1) % len];\r\n let next = cornerPointsPointField[(+index + 1) % len];\r\n\r\n ctx.save();\r\n ctx.beginPath();\r\n // ctx.translate(\r\n // cornerPointsPointField[index].x,\r\n // cornerPointsPointField[index].y,\r\n // );\r\n //ctx.rotate(90 * cornerPointIndex * (Math.PI / 180));\r\n // RenderFigures.drawRotatedArrow(ctx,\r\n // - 20, 0,\r\n // 0, - 20,\r\n // - 20, - 20,\r\n // 10\r\n // )\r\n const from = getPointOnTheLine(current, previous, 20);\r\n const to = getPointOnTheLine(current, next, 20);\r\n const [midPoint, midPoint2] = getParallelPoints(from, current,20);\r\n void midPoint;\r\n RenderFigures.drawRotatedArrow(ctx,\r\n from.x, from.y,\r\n to.x, to.y,\r\n midPoint2.x, midPoint2.y,\r\n 10\r\n )\r\n\r\n //console.log(\"from\", from);\r\n //console.log(\"to\", to);\r\n //debugger // eslint-disable-line no-debugger\r\n ctx.lineWidth = 2;\r\n ctx.strokeStyle = 'rgba(159,197,34,0.47)';\r\n ctx.fillStyle = 'rgba(159,197,34,0.47)';\r\n ctx.stroke();\r\n ctx.closePath();\r\n ctx.restore();\r\n\r\n //RenderFigures.renderCircle(from, 5,1, '#63b141');\r\n //RenderFigures.renderCircle(to, 8,1, '#63b141');\r\n //RenderFigures.renderCircle({x:to.x, y: from.y}, 12,1, '#63b141');\r\n }\r\n }\r\n }\r\n\r\n\r\n // renderLinesBetweenPoints = (ctx) => {\r\n // ctx.beginPath();\r\n // ctx.lineWidth = lineWidth;\r\n // ctx.strokeStyle = color;\r\n // drawLines(ctx);\r\n //\r\n // ctx.stroke();\r\n // };\r\n}\r\n","export default class ChangeValuePopup {\r\n id;\r\n min;\r\n max;\r\n confirmCallback;\r\n increaseCallback;\r\n decreaseCallback;\r\n inputChangeCallback;\r\n value;\r\n position;\r\n\r\n constructor(id, min, max, confirmCallback, increaseCallback, decreaseCallback, inputChangeCallback, value, position) {\r\n this.id = id;\r\n this.min = min;\r\n this.max = max;\r\n this.confirmCallback = confirmCallback;\r\n this.increaseCallback = increaseCallback;\r\n this.decreaseCallback = decreaseCallback;\r\n this.inputChangeCallback = inputChangeCallback;\r\n this.value = value;\r\n this.position = position;\r\n }\r\n}\r\n","import {SQFTResourceController} from \"./SQFTResourceController\";\r\nimport {WORKSPACE_RESOURCES} from \"../../../../constants\";\r\nimport store from \"../../../../../../store\";\r\nimport workspace from \"../../core/workspace\";\r\nimport {LineHandlesModel} from \"../models/LineHandlesModel\";\r\nimport * as uuid from \"uuid\";\r\nimport {getQtCatName} from \"../../../../helpers/sqftQuotesHelper\";\r\n\r\nexport class HandlesController extends SQFTResourceController {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.resourceName = WORKSPACE_RESOURCES.handles;\r\n }\r\n\r\n generateHandles() {\r\n const reduxState = store.getState();\r\n const selectedPartIds = reduxState.sqftResourceState.selectedPartIds\r\n const shapes = workspace.getShapes();\r\n for (const shape of shapes) {\r\n if (selectedPartIds.includes(shape.partId)) {\r\n this.addHandleToTheShape(shape);\r\n }\r\n }\r\n }\r\n\r\n addHandleToTheShape(shape) {\r\n const reduxState = store.getState();\r\n const selectedFeature = reduxState.sqftResourceState.selectedFeature\r\n const lines = shape.getLines();\r\n for (const lineIndex in lines) {\r\n if (+lineIndex === 2) {\r\n if (lines.hasOwnProperty(lineIndex)) {\r\n lines[lineIndex].setHandleId(selectedFeature.part.dbFeature.id);\r\n const handle3dURL = this.findGLBModel(selectedFeature.part.dbFeature.thirdPartyAR3DUrls, 'V')\r\n lines[lineIndex].setHandle3dURL(handle3dURL);\r\n this.addResource(new LineHandlesModel(\r\n lines[lineIndex].id,\r\n selectedFeature.part.dbFeature.id,\r\n getQtCatName(),\r\n uuid.v4(),\r\n selectedFeature.part.partId,\r\n 1)\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Function to find a .glb model in the array based on H or V suffix.\r\n * If the parameter is not passed or no matching model is found, it returns the first .glb model found.\r\n *\r\n * @param {Array} urls - Array of URLs.\r\n * @param {String} [suffix] - Optional. Suffix 'H' or 'V' to search for in the URL.\r\n * @returns {String} - The found .glb model URL or the first .glb model in the array.\r\n */\r\n findGLBModel(urls, suffix) {\r\n if (!urls) {\r\n return null\r\n }\r\n\r\n const glbModels = urls.filter(url => url.endsWith('.glb'));\r\n\r\n if (!glbModels.length) {\r\n return null;\r\n }\r\n\r\n // If suffix is provided (either 'H' or 'V'), search for a model with that suffix\r\n if (suffix) {\r\n const modelWithSuffix = glbModels.find(url => url.endsWith(`-${suffix}.glb`));\r\n if (modelWithSuffix) {\r\n return modelWithSuffix;\r\n }\r\n }\r\n\r\n return glbModels[0];\r\n }\r\n\r\n exportHandles() {\r\n return this.exportData()\r\n }\r\n\r\n updateResourcesId(featureId, partId) {\r\n const resources = this.getResources();\r\n for (const resource of resources) {\r\n if (resource.partId === partId) {\r\n resource.featureId = featureId\r\n }\r\n }\r\n }\r\n}\r\n\r\n","import {SQFTResourceController} from \"./SQFTResourceController\";\r\nimport {WORKSPACE_RESOURCES} from \"../../../../constants\";\r\nimport workspace from \"../../core/workspace\";\r\nimport {createWallFromPointsV2} from \"../../../../helpers/freeDrawHelper\";\r\nimport PointV2 from \"../../core/shapes/pointV2\";\r\n\r\n\r\nexport class WallsController extends SQFTResourceController {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.resourceName = WORKSPACE_RESOURCES.walls;\r\n }\r\n\r\n getWallByPoint(searchPoint) {\r\n return workspace.walls.find(wall => {\r\n for (const wallPoint of wall.getPoints()) {\r\n if (wallPoint.id === searchPoint.id) {\r\n return wall\r\n }\r\n }\r\n })\r\n }\r\n\r\n importData(data) {\r\n workspace[this.resourceName] = [];\r\n for (let resource of data) {\r\n const points = resource.addedPoints.map(pointData => {\r\n const pointV2 = new PointV2(pointData.x, pointData.y, workspace, pointData.params, pointData.design);\r\n pointV2.importData(pointData);\r\n\r\n return pointV2\r\n });\r\n createWallFromPointsV2(points, resource.centerPoint, resource.lockedAngleStep);\r\n }\r\n }\r\n\r\n}\r\n\r\n","import * as uuid from \"uuid\";\r\nimport {SQFTResourceController} from \"./SQFTResourceController\";\r\nimport {WORKSPACE_RESOURCES} from \"../../../../constants\";\r\nimport {ShapeColorModel} from \"../models/ShapeColor\";\r\nimport {getFeatureNameById} from \"../../../../helpers/featureHelper\";\r\n\r\nexport class ShapeColorsController extends SQFTResourceController {\r\n\r\n defaultColorSets = [\r\n {\r\n id: uuid.v4(),\r\n primary: 'rgba(74, 144, 226, 0.17)',\r\n primary_border: '#4a90e2',\r\n primary_hover: 'rgba(61,115,173,0.33)',\r\n }, {\r\n id: uuid.v4(),\r\n primary: 'rgba(159, 197, 34, 0.17)',\r\n primary_border: '#9fc522',\r\n primary_hover: 'rgba(138,173,30,0.33)',\r\n }, {\r\n id: uuid.v4(),\r\n primary: 'rgba(201, 28, 123, 0.17)',\r\n primary_border: '#c91c7b',\r\n primary_hover: 'rgba(146,20,91, 0.33)',\r\n }, {\r\n id: uuid.v4(),\r\n primary: 'rgba(28, 201, 201, 0.17)',\r\n primary_border: '#1cc9c9',\r\n primary_hover: 'rgba(28, 201, 201, 0.33)',\r\n }, {\r\n id: uuid.v4(),\r\n primary: 'rgba(175, 201, 28, 0.17)',\r\n primary_border: '#afc91c',\r\n primary_hover: 'rgba(175, 201, 28, 0.33)',\r\n }, {\r\n id: uuid.v4(),\r\n primary: 'rgba(201, 158, 28, 0.17)',\r\n primary_border: '#c99e1c',\r\n primary_hover: 'rgba(201, 158, 28,0.33)',\r\n }, {\r\n id: uuid.v4(),\r\n primary: 'rgba(201, 109, 28, 0.17)',\r\n primary_border: '#c96d1c',\r\n primary_hover: 'rgba(201, 109, 28, 0.33)',\r\n }, {\r\n id: uuid.v4(),\r\n primary: 'rgba(28, 201, 146, 0.17)',\r\n primary_border: '#1cc992',\r\n primary_hover: 'rgba(28, 201, 146, 0.33)',\r\n }, {\r\n id: uuid.v4(),\r\n primary: 'rgba(28, 201, 86, 0.17)',\r\n primary_border: '#1cc956',\r\n primary_hover: 'rgba(28, 201, 86, 0.33)',\r\n }, {\r\n id: uuid.v4(),\r\n primary: 'rgba(94, 201, 28, 0.17)',\r\n primary_border: '#5ec91c',\r\n primary_hover: 'rgba(94, 201, 28, 0.33)',\r\n },{\r\n id: uuid.v4(),\r\n primary: 'rgba(169, 28, 201, 0.17)',\r\n primary_border: '#a91cc9',\r\n primary_hover: 'rgba(169, 28, 201, 0.33)',\r\n }, {\r\n id: uuid.v4(),\r\n primary: 'rgba(94, 28, 201, 0.17)',\r\n primary_border: '#5e1cc9',\r\n primary_hover: 'rgba(94, 28, 201,0.33)',\r\n },\r\n ]\r\n\r\n constructor(props) {\r\n super(props);\r\n this.resourceName = WORKSPACE_RESOURCES.shapeColors;\r\n }\r\n\r\n getShapeColorByFeatureId(featureId) {\r\n return this.getResources().find(resource => resource.featureId === featureId);\r\n }\r\n\r\n getOrGenerateNewShapeColorByFeatureId(featureId) {\r\n let colorSet = this.getShapeColorByFeatureId(featureId);\r\n if (!colorSet) {\r\n return this.createShapeColor(featureId);\r\n }\r\n return colorSet;\r\n }\r\n\r\n generateRandomRGB() {\r\n return {\r\n r: Math.floor(Math.random() * 256),\r\n g: Math.floor(Math.random() * 256),\r\n b: Math.floor(Math.random() * 256)\r\n };\r\n }\r\n\r\n darkenColor({r, g, b}, factor = 0.9) {\r\n return {\r\n r: Math.floor(r * factor),\r\n g: Math.floor(g * factor),\r\n b: Math.floor(b * factor)\r\n };\r\n }\r\n\r\n createShapeColor(featureId) {\r\n let colorSet = this.defaultColorSets.find(set => !this.getResourceById(set.id));\r\n if (!colorSet) {\r\n const baseColor = this.generateRandomRGB();\r\n const hoverColor = baseColor//this.darkenColor(baseColor);\r\n\r\n colorSet = {\r\n id: uuid.v4(),\r\n primary: `rgba(${baseColor.r}, ${baseColor.g}, ${baseColor.b}, 0.17)`,\r\n primary_border: `rgb(${baseColor.r}, ${baseColor.g}, ${baseColor.b})`,\r\n primary_hover: `rgb(${hoverColor.r}, ${hoverColor.g}, ${hoverColor.b}, 0.33)`\r\n };\r\n } else {\r\n this.defaultColorSets = this.defaultColorSets.filter(set => set.id !== colorSet.id);\r\n }\r\n\r\n const featureName = getFeatureNameById(featureId);\r\n\r\n const shapeColorModel = new ShapeColorModel(\r\n colorSet.id,\r\n featureId,\r\n featureName,\r\n colorSet.primary,\r\n colorSet.primary_border,\r\n colorSet.primary_hover\r\n );\r\n\r\n this.addResource(shapeColorModel);\r\n\r\n return shapeColorModel\r\n }\r\n}\r\n","export class ShapeColorModel {\r\n id;\r\n featureId;\r\n primary;\r\n primary_border;\r\n primary_hover;\r\n\r\n constructor(id, featureId, featureName, primary, primary_border, primary_hover) {\r\n this.id = id;\r\n this.featureId = featureId;\r\n this.featureName = featureName;\r\n this.primary = primary;\r\n this.primary_border = primary_border;\r\n this.primary_hover = primary_hover;\r\n }\r\n}\r\n","import {SQFTResourceController} from \"../SQFTResourceController\";\r\nimport {\r\n RESOURCE_TYPE,\r\n WATERFALL_OVERLAY_TYPE,\r\n WATERFALL_SHAPES_KEY,\r\n WORKSPACE_RESOURCES\r\n} from \"../../../../../constants\";\r\nimport store from \"../../../../../../../store\";\r\nimport WaterfallOverlay from \"../../../core/shapes/overlays/waterfallOverlay\";\r\nimport {addResource, changeResource, deleteResource} from \"../../../../../../../actions/sqftResourceFunctions\";\r\nimport workspace from \"../../../core/workspace\";\r\nimport {WaterfallSegmentController} from \"./WaterfallSegmentController\";\r\n\r\nexport class WaterfallController extends SQFTResourceController {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.resourceName = WORKSPACE_RESOURCES.waterfall;\r\n this.segmentController = new WaterfallSegmentController(this);\r\n }\r\n\r\n createWaterfallOverlay = (line, waterfallData = null) => {\r\n const reduxState = store.getState();\r\n const waterfallSectionsData = reduxState.sqftResourceState.waterfallSectionsData;\r\n const waterfallOverlay = new WaterfallOverlay(line, waterfallSectionsData.length + 1, waterfallData);\r\n\r\n this.addResource(waterfallOverlay);\r\n this.addWaterfallToStore(waterfallOverlay);\r\n\r\n return waterfallOverlay\r\n }\r\n\r\n createPeninsulaUnderwrapOverlay = (line, waterfallData = null) => {\r\n const reduxState = store.getState();\r\n const waterfallSectionsData = reduxState.sqftResourceState.waterfallSectionsData;\r\n\r\n const sectionIndex = waterfallSectionsData.length + 1;\r\n const waterfallOverlay = new WaterfallOverlay(line, sectionIndex, waterfallData, WATERFALL_OVERLAY_TYPE.peninsulaUnderwrap);\r\n\r\n this.addResource(waterfallOverlay);\r\n this.addWaterfallToStore(waterfallOverlay);\r\n\r\n return waterfallOverlay\r\n }\r\n\r\n getResources = () => {\r\n return workspace[this.resourceName]\r\n }\r\n\r\n getResourceByLineId = (id) => {\r\n return workspace[this.resourceName].find(waterFallOverlay => waterFallOverlay.line.id === id);\r\n }\r\n\r\n getSegmentById = (id) => {\r\n for (const overlay of this.getResources()) {\r\n for (const segment of overlay.getSegments()) {\r\n if (segment.id === id) {\r\n return segment\r\n }\r\n }\r\n }\r\n }\r\n\r\n updateWaterfallLength = (line) => {\r\n if (line.isWithWaterfallToolEdge() || line.isWithPeninsulaUnderwrapEdge()) {\r\n const waterfallOverlay = this.getResourceByLineId(line.id);\r\n for (const waterfallOverlaySegment of waterfallOverlay.getSegments()) {\r\n if (waterfallOverlaySegment.name === WATERFALL_SHAPES_KEY.waterfall) {\r\n waterfallOverlaySegment.length = line.getLineLength();\r\n }\r\n if (waterfallOverlaySegment.name === WATERFALL_SHAPES_KEY.underlayment) {\r\n const nextLine = line.getParent().getNextLine(line);\r\n waterfallOverlaySegment.length = nextLine.getLineLength();\r\n }\r\n }\r\n this.changeWaterfallSectionInStore(waterfallOverlay.exportData());\r\n }\r\n }\r\n\r\n changeWaterfallSectionInStore = (waterfallSectionData) => {\r\n store.dispatch(changeResource(RESOURCE_TYPE.waterfallSectionsData, waterfallSectionData));\r\n }\r\n\r\n addWaterfallToStore = (waterfallOverlay) => {\r\n store.dispatch(addResource(RESOURCE_TYPE.waterfallSectionsData, waterfallOverlay.exportData()));\r\n }\r\n\r\n destroy = (waterfallOverlay) => {\r\n store.dispatch(deleteResource(RESOURCE_TYPE.waterfallSectionsData, waterfallOverlay.id));\r\n this.destroyResource(waterfallOverlay);\r\n }\r\n}\r\n","import uuid from \"uuid\";\r\nimport EventManager from \"../../../store/sqftEventManager\";\r\nimport WaterfallSegment from \"../shapeParts/models/waterfallSegment\";\r\nimport {WATERFALL_OVERLAY_TYPE, WATERFALL_SHAPES_KEY, WATERFALL_SHAPES_NAME} from \"../../../../../constants\";\r\nimport config from \"../../../store/sqftConfig\";\r\nimport {isWesternHemisphere} from \"../../../helpers/lineHelper\";\r\n\r\nexport default class WaterfallOverlay {\r\n id;\r\n sectionIndex;\r\n line;\r\n type; // WATERFALL_OVERLAY_TYPE\r\n state = {\r\n };\r\n design = {\r\n };\r\n segments = []; // array of WaterfallSegments\r\n\r\n constructor(line, sectionIndex, importData, type = WATERFALL_OVERLAY_TYPE.waterfall) {\r\n this.line = line;\r\n this.sectionIndex = sectionIndex;\r\n this.id = uuid();\r\n this.type = type;\r\n if (importData) {\r\n this.importData(importData)\r\n } else {\r\n switch (type) {\r\n case WATERFALL_OVERLAY_TYPE.peninsulaUnderwrap:\r\n this.createPeninsulaUnderwrapSections();\r\n break;\r\n case WATERFALL_OVERLAY_TYPE.waterfall:\r\n default:\r\n this.createWaterfallSections();\r\n break;\r\n }\r\n }\r\n }\r\n\r\n getSegments = () => { return this.segments; }\r\n getEnabledSegments = () => { return this.segments.filter(segment => !segment.isDisabled) }\r\n getParent = () => { return this.line; }\r\n setSegments = (value) => { this.segments = value; }\r\n addSegment = (segment) => { this.segments.push(segment); }\r\n\r\n destroy = (protect) => {\r\n if (!protect) {\r\n EventManager.removeEvent(this);\r\n this.segments.forEach((segment) => {\r\n segment.destroy();\r\n });\r\n }\r\n };\r\n\r\n initEvents = () => {\r\n };\r\n\r\n deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n };\r\n\r\n reInitEvents = () => {\r\n this.initEvents();\r\n };\r\n\r\n export = () => {\r\n return this.exportData();\r\n }\r\n\r\n exportData = () => {\r\n return {\r\n id: this.id,\r\n lineId: this.line.id,\r\n state: this.state,\r\n type: this.type,\r\n segments: this.segments.map((segment) => {\r\n return segment.exportData()\r\n }),\r\n }\r\n };\r\n\r\n importData = (importData) => {\r\n this.state = importData.state;\r\n for (const segmentData of importData.segments) {\r\n this.addSegment(new WaterfallSegment(\r\n segmentData.key,\r\n segmentData.name,\r\n segmentData.length,\r\n segmentData.height,\r\n segmentData.thickness,\r\n this,\r\n segmentData.isDisabled\r\n ));\r\n }\r\n };\r\n\r\n createWaterfallSections = () => {\r\n const nextLine = this.line.getParent().getNextLine(this.line);\r\n const thickness = config.measureUnit === \"Imperial\" ? 1.5 : 40;\r\n const height = config.measureUnit === \"Imperial\" ? 36 : 900;\r\n const waterfallLength = config.measureUnit === \"Imperial\" ? this.line.getLineLength() : this.line.getLineLengthMm();\r\n const underlaymentLength = config.measureUnit === \"Imperial\" ? nextLine.getLineLength() : nextLine.getLineLengthMm();\r\n\r\n //place mirror shape in the slab mode\r\n const lineDirection = this.line.getLineDirectionV2();\r\n const isLineInWesternHemisphere = isWesternHemisphere(lineDirection) ;\r\n const defaultCabinetReturnLength = config.measureUnit === \"Imperial\" ? 4 : 60;\r\n const defaultOverhangReturnLength = config.measureUnit === \"Imperial\" ? 20 : 300;\r\n const cabinetReturnLength = isLineInWesternHemisphere ? defaultCabinetReturnLength : defaultOverhangReturnLength;\r\n const overhangReturnLength = isLineInWesternHemisphere ? defaultOverhangReturnLength : defaultCabinetReturnLength;\r\n\r\n const segments = [\r\n new WaterfallSegment(WATERFALL_SHAPES_KEY.waterfall, WATERFALL_SHAPES_NAME.waterfall, waterfallLength, height, thickness, this),\r\n new WaterfallSegment(WATERFALL_SHAPES_KEY.cabinetReturn, WATERFALL_SHAPES_NAME.cabinetReturn, cabinetReturnLength, height, thickness, this, true),\r\n new WaterfallSegment(WATERFALL_SHAPES_KEY.overhangReturn, WATERFALL_SHAPES_NAME.overhangReturn,overhangReturnLength, height, thickness, this, true),\r\n new WaterfallSegment(WATERFALL_SHAPES_KEY.underlayment, WATERFALL_SHAPES_NAME.underlayment, underlaymentLength, height, thickness, this, true),\r\n ];\r\n this.setSegments(segments);\r\n }\r\n\r\n createPeninsulaUnderwrapSections = () => {\r\n const segments = [\r\n new WaterfallSegment(WATERFALL_SHAPES_KEY.peninsulaUnderwrap, WATERFALL_SHAPES_NAME.peninsulaUnderwrap, this.line.getLineLength(), 36, 1.5, this, false),\r\n ];\r\n this.setSegments(segments);\r\n }\r\n\r\n getArea = () => {\r\n return this.segments.reduce((sum, segment) => sum + segment.getArea(), 0)\r\n }\r\n}\r\n","import { v4 as uuidv4 } from 'uuid';\r\nimport {WATERFALL_SHAPES_KEY} from \"../../../../../../constants\";\r\n\r\nexport default class WaterfallSegment {\r\n id;\r\n key; /* string */\r\n name; /* string */\r\n length; /* int */\r\n height; /* int */\r\n thickness; /* int */\r\n parentSection; /* object */\r\n isDisabled; /* bool */\r\n COMMON_HEIGHT = [\r\n // WATERFALL_SHAPES_KEY.waterfall,\r\n // WATERFALL_SHAPES_KEY.cabinetReturn,\r\n // WATERFALL_SHAPES_KEY.overhangReturn,\r\n ];\r\n USE_DEPTH_INSTEAD_OF_HEIGHT = [\r\n WATERFALL_SHAPES_KEY.underlayment,\r\n WATERFALL_SHAPES_KEY.peninsulaUnderwrap\r\n ];\r\n USE_LINE_LENGTH = [\r\n WATERFALL_SHAPES_KEY.underlayment,\r\n WATERFALL_SHAPES_KEY.waterfall\r\n ];\r\n\r\n constructor(key, name, length, height, thickness, parentSection, isDisabled = false) {\r\n this.id = uuidv4();\r\n this.key = key;\r\n this.name = name;\r\n this.length = length;\r\n this.height = height;\r\n this.thickness = thickness;\r\n this.parentSection = parentSection;\r\n this.isDisabled = isDisabled;\r\n }\r\n\r\n exportData = () => ({\r\n id: this.id,\r\n overlayId: this.getParent().id,\r\n key: this.key,\r\n name: this.name,\r\n height: this.height,\r\n thickness: this.thickness,\r\n length: this.length,\r\n isDisabled: this.isDisabled,\r\n })\r\n\r\n setIsDisabled = (value) => {\r\n this.isDisabled = value\r\n }\r\n\r\n getParent = () => {\r\n return this.parentSection\r\n }\r\n\r\n getArea = () => {\r\n if (this.isDisabled) {\r\n return 0\r\n }\r\n\r\n let area = 0;\r\n\r\n // this will add mitered edge area\r\n if (this.key === WATERFALL_SHAPES_KEY.overhangReturn) {\r\n area += this.height * this.thickness\r\n } else if (this.key === WATERFALL_SHAPES_KEY.waterfall) {\r\n area += (this.height * this.thickness) * 2 //we have two mitered edges from sides\r\n } else if (this.key === WATERFALL_SHAPES_KEY.cabinetReturn) {\r\n area += this.height * this.thickness\r\n }\r\n\r\n // shape area\r\n area += this.height * this.length\r\n\r\n return area\r\n }\r\n\r\n destroy = () => {\r\n\r\n }\r\n}\r\n","import {WATERFALL_SHAPES_KEY} from \"../../../../../constants\";\r\nimport SqftStore from \"../../sqftStore\";\r\nimport SlabWorkspace from \"../../../core/slab/slabWorkspace\";\r\nimport {createSlabModeWaterfallShapes} from \"../../canvasHelper\";\r\n\r\nexport class WaterfallSegmentController {\r\n\r\n constructor(parentController) {\r\n this.parentController = parentController;\r\n }\r\n\r\n updateWaterfallLength = (line) => {\r\n if (!line.isWithWaterfallToolEdge() || !line.isWithPeninsulaUnderwrapEdge()) {\r\n return\r\n }\r\n const waterfallOverlay = this.parentController.getResourceByLineId(line.id);\r\n for (const waterfallOverlaySegment of waterfallOverlay.getSegments()) {\r\n if (waterfallOverlaySegment.name === WATERFALL_SHAPES_KEY.waterfall\r\n || waterfallOverlaySegment.name === WATERFALL_SHAPES_KEY.underlayment\r\n ) {\r\n waterfallOverlaySegment.length = line.getLineLength();\r\n }\r\n }\r\n this.parentController.changeWaterfallSectionInStore(waterfallOverlay.exportData());\r\n }\r\n\r\n changeSegmentLength = (segmentId, newValue) => {\r\n const segment = this.parentController.getSegmentById(segmentId);\r\n const waterfallOverlay = segment.getParent();\r\n segment.length = +newValue\r\n\r\n this.parentController.changeWaterfallSectionInStore(waterfallOverlay.exportData());\r\n this.postChangeValue(waterfallOverlay.id);\r\n }\r\n\r\n changeSegmentHeight = (segmentId, newValue) => {\r\n const updatedSegment = this.parentController.getSegmentById(segmentId);\r\n const waterfallOverlay = updatedSegment.getParent();\r\n\r\n if (updatedSegment.COMMON_HEIGHT.includes(updatedSegment.name)) {\r\n for (const waterfallOverlaySegment of waterfallOverlay.getSegments()) {\r\n if (waterfallOverlaySegment.COMMON_HEIGHT.includes(waterfallOverlaySegment.name)) {\r\n waterfallOverlaySegment.height = +newValue;\r\n }\r\n }\r\n } else {\r\n updatedSegment.height = +newValue;\r\n }\r\n\r\n this.parentController.changeWaterfallSectionInStore(waterfallOverlay.exportData());\r\n this.postChangeValue(waterfallOverlay.id);\r\n }\r\n\r\n changeSegmentThickness = (segmentId, newValue) => {\r\n const segment = this.parentController.getSegmentById(segmentId);\r\n const waterfallOverlay = segment.getParent();\r\n segment.thickness = +newValue\r\n\r\n this.parentController.changeWaterfallSectionInStore(waterfallOverlay.exportData());\r\n this.postChangeValue(waterfallOverlay.id);\r\n }\r\n\r\n changeSegmentIsDisabled = (segmentId, newValue) => {\r\n const waterfallSegment = this.parentController.getSegmentById(segmentId);\r\n const waterfallOverlay = waterfallSegment.getParent();\r\n waterfallSegment.setIsDisabled(newValue);\r\n\r\n this.parentController.changeWaterfallSectionInStore(waterfallOverlay.exportData());\r\n this.postChangeValue(waterfallOverlay.id);\r\n }\r\n\r\n postChangeValue = (overlayId) => {\r\n // remove all slab shapes\r\n const overlay = this.parentController.getResourceById(overlayId);\r\n SlabWorkspace.slabAdditionalShapes.removeActiveBacksplashByLine(overlay.line);\r\n\r\n //reCreate Slab Shapes\r\n createSlabModeWaterfallShapes();\r\n\r\n // update calculations\r\n SqftStore.updateCalculations();\r\n }\r\n\r\n}\r\n","import {SQFTResourceController} from \"./SQFTResourceController\";\r\nimport {WORKSPACE_RESOURCES} from \"../../../../constants\";\r\n\r\nexport class RemovedFeaturesController extends SQFTResourceController {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.resourceName = WORKSPACE_RESOURCES.walls;\r\n }\r\n\r\n}\r\n\r\n","import sqftShapeManager from \"../sqftShapeManager\";\r\nimport workspace from \"../../core/workspace\";\r\nimport {WORKSPACE_RESOURCES} from \"../../../../constants\";\r\nimport {SQFTResourceController} from \"./SQFTResourceController\";\r\nimport ShapeHelper from \"../../../../helpers/shapeHelper\";\r\nimport workspaceControllers from \"../workspaceControllers\";\r\nimport store from \"../../../../../../store\";\r\nimport sqftShape from \"../../core/shapes/sqftShape\";\r\nimport MovableImage from \"../../core/shapes/movableImage\";\r\n//import sqftShapeIntersectionsManager from \"../sqftShapeIntersectionsManager\";\r\n\r\nexport class SnappedShapeGroupsController extends SQFTResourceController {\r\n //snappedShapeGroups = [];\r\n\r\n constructor(props) {\r\n super(props);\r\n this.resourceName = WORKSPACE_RESOURCES.snappedShapeGroups;\r\n }\r\n\r\n addNewSnappedShapeGroupNumber = () => {\r\n const snappedShapeGroups = this.getResources();\r\n const newNumber = snappedShapeGroups.length > 0\r\n ? snappedShapeGroups[snappedShapeGroups.length - 1] + 1\r\n : 0;\r\n this.addResource(newNumber);\r\n\r\n return newNumber\r\n }\r\n\r\n setSameSnappedShapesGroup = (snappedShape, snappedWithShape) => {\r\n const snappedShapeGroup = snappedShape.shapeAbsolute.getSnappedShapeGroup();\r\n const snappedWithShapeGroup = snappedWithShape.shapeAbsolute.getSnappedShapeGroup();\r\n if (snappedWithShapeGroup !== null) {\r\n snappedShape.shapeAbsolute.setSnappedShapeGroup(snappedWithShapeGroup);\r\n } else if (snappedShapeGroup !== null) {\r\n snappedWithShape.shapeAbsolute.setSnappedShapeGroup(snappedShapeGroup);\r\n } else {\r\n const groupNumber = this.addNewSnappedShapeGroupNumber();\r\n snappedShape.shapeAbsolute.setSnappedShapeGroup(groupNumber);\r\n snappedWithShape.shapeAbsolute.setSnappedShapeGroup(groupNumber);\r\n }\r\n }\r\n\r\n // isShapeGroupConsistsOfOnlyCabinetShapes = (snappedShapeGroup) => {\r\n // const shapes = this.getSnappedShapes(snappedShapeGroup);\r\n // return !shapes.some(shape => shape.shapeCabinet === null);\r\n // }\r\n\r\n getMeasurementPoints = (snappedShapeGroup) => {\r\n const shapes = this.getSnappedShapes(snappedShapeGroup);\r\n if (shapes.length > 0) {\r\n let shapesPoints = [];\r\n shapes.forEach(shp => {\r\n shapesPoints.push(...shp.getPointsPointField());\r\n });\r\n let pointsMinMax = sqftShapeManager.getMinMaxPoints(shapesPoints, false);\r\n\r\n //console.log(\"shapesMinMax\", pointsMinMax);\r\n\r\n return [\r\n {x: pointsMinMax.minX, y: pointsMinMax.minY},\r\n {x: pointsMinMax.maxX, y: pointsMinMax.minY},\r\n {x: pointsMinMax.maxX, y: pointsMinMax.maxY},\r\n {x: pointsMinMax.minX, y: pointsMinMax.maxY}\r\n ];\r\n }\r\n return []\r\n }\r\n\r\n getSnappedShapes = (snappedShapeGroup) => {\r\n const shapes = workspace.getShapes(true);\r\n return shapes.filter(shp => {\r\n return !!(shp.shapeAbsolute && (shp.shapeAbsolute.getSnappedShapeGroup() === snappedShapeGroup))\r\n || !!(shp.shapeSlab && shp.shapeSlab.shapeAbsolute && (shp.shapeSlab.shapeAbsolute.getSnappedShapeGroup() === snappedShapeGroup))\r\n })\r\n }\r\n\r\n // Updates the groups of snapped shapes in the workspace\r\n updateShapesSnappedGroups = (shouldUpdateAbsolutePos = false) => {\r\n // Sort shapes by their position\r\n const shapes = workspace.getShapes(true)\r\n .filter(shp => shp instanceof MovableImage || shp instanceof sqftShape)\r\n .sort((a, b) => {\r\n let aPos = a.getPosition();\r\n let bPos = b.getPosition();\r\n return aPos.x - bPos.x || aPos.y - bPos.y;\r\n });\r\n //const shapesPosition = shapes.map(shp => {return {id: shp.id, ...shp.getPosition()}});\r\n //sqftShapeIntersectionsManager.logSnappedShapeGroups();\r\n //console.log(\"shapesPosition\", shapesPosition);\r\n const visitedShapes = new Set(); // To keep track of already processed shapes\r\n\r\n this.resetShapesSnappedGroups();\r\n\r\n for (const shape of shapes) {\r\n if ((shape instanceof sqftShape || shape instanceof MovableImage) && !visitedShapes.has(shape)) {\r\n this.updateGroupForShapeAndConnected(shape, visitedShapes, shouldUpdateAbsolutePos);\r\n }\r\n }\r\n\r\n //sqftShapeIntersectionsManager.logSnappedShapeGroups();\r\n }\r\n\r\n // Updates the groups of snapped shapes in the workspace\r\n resetShapesSnappedGroups = () => {\r\n const isShowSlabTool = store.getState().sqftSlabState.isShowSlabTool;\r\n const shapes = workspace.getShapes(true);\r\n\r\n for (const shape of shapes) {\r\n if (shape instanceof sqftShape) {\r\n const shapeAbsolute = isShowSlabTool ? shape.shapeSlab.shapeAbsolute : shape.shapeAbsolute;\r\n this.resetShapeSnappedGroup(shapeAbsolute);\r\n } else if (shape instanceof MovableImage) {\r\n this.resetShapeSnappedGroup(shape.shapeAbsolute);\r\n }\r\n }\r\n }\r\n\r\n // Updates the groups of snapped shapes in the workspace\r\n resetShapeSnappedGroup = (shapeAbsolute) => {\r\n shapeAbsolute.setSnappedWithShape(null);\r\n shapeAbsolute.setSnappedShapeGroup(null);\r\n }\r\n\r\n // Recursive function to update groups for a shape and all connected shapes\r\n updateGroupForShapeAndConnected = (shape, visitedShapes, shouldUpdateAbsolutePos) => {\r\n visitedShapes.add(shape);\r\n const connectedShapes = this.updateShapeSnappedGroup(shape, shouldUpdateAbsolutePos); // Update group for the current shape\r\n\r\n //console.log(\"shape id\", shape.id);\r\n //console.log(\"shape shapeSlab.shapeAbsolute.getSnappedShapeGroup()\", shape.shapeSlab.shapeAbsolute.getSnappedShapeGroup());\r\n // if (connectedShapes[0]) {\r\n // console.log(\"connectedShapes 0 id\", connectedShapes[0].id);\r\n // console.log(\"shape shapeSlab.shapeAbsolute.getSnappedShapeGroup()\", connectedShapes[0].shapeSlab.shapeAbsolute.getSnappedShapeGroup());\r\n // }\r\n // if (connectedShapes[1]) {\r\n // console.log(\"connectedShapes 1 id\", connectedShapes[1].id);\r\n // console.log(\"shape shapeSlab.shapeAbsolute.getSnappedShapeGroup()\", connectedShapes[1].shapeSlab.shapeAbsolute.getSnappedShapeGroup());\r\n // }\r\n //debugger // eslint-disable-line no-debugger\r\n\r\n // Retrieve connected shapes (this logic might vary based on your application)\r\n //const connectedShapes = ShapeHelper.getConnectedShapes(shape);\r\n\r\n for (const connectedShape of connectedShapes) {\r\n if (!visitedShapes.has(connectedShape)) {\r\n this.updateGroupForShapeAndConnected(connectedShape, visitedShapes);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Update absolute shape position in regular or in slab mode. Also updates snapped shape group.\r\n * @param shape\r\n * @param shouldUpdateAbsolutePos\r\n * @return {*[]}\r\n */\r\n updateShapeSnappedGroup = (shape, shouldUpdateAbsolutePos) => {\r\n let isShowSlabTool = store.getState().sqftSlabState.isShowSlabTool;\r\n let snapPossibilitiesToShapes = [];\r\n let snapPossibilitiesToImages = [];\r\n let snapPossibilitiesToWalls = [];\r\n let shapeAbsolute;\r\n let pos;\r\n\r\n if (shape instanceof sqftShape) {\r\n shapeAbsolute = isShowSlabTool ? shape.shapeSlab.shapeAbsolute : shape.shapeAbsolute;\r\n pos = isShowSlabTool ? shape.slabPos : shape.pos;\r\n } else if (shape instanceof MovableImage) {\r\n shapeAbsolute = shape.shapeAbsolute;\r\n pos = shape.pos;\r\n }\r\n\r\n if (shouldUpdateAbsolutePos) {\r\n shapeAbsolute.setAbsolutePos(null); //reset minLength for correct calculations without stacking\r\n }\r\n // shapeAbsolute.setSnappedWithShape(null);\r\n // shapeAbsolute.setSnappedShapeGroup(null);\r\n\r\n let distancesToWalls = ShapeHelper.getDistancesToWalls(shape);\r\n let distancesToShapes = ShapeHelper.getDistancesToShapes(shape);\r\n let distancesToImages = ShapeHelper.getDistancesToImages(shape);\r\n //console.log(\"distancesToWalls\", distancesToWalls);\r\n //console.log(\"distancesToShapes\", distancesToShapes);\r\n //console.log(\"distancesToImages\", distancesToImages);\r\n\r\n const itemBoundsWithSamePartId = ShapeHelper.getItemBoundsForTheSamePartIdIfExist(distancesToShapes, shape.partId);\r\n snapPossibilitiesToShapes = ShapeHelper.getSnappingPossibilities(itemBoundsWithSamePartId);\r\n if (snapPossibilitiesToShapes.length === 0) {\r\n snapPossibilitiesToShapes = ShapeHelper.getSnappingPossibilities(distancesToShapes);\r\n }\r\n //console.log(\"snapPossibilitiesToShapes\", snapPossibilitiesToShapes);\r\n snapPossibilitiesToImages = ShapeHelper.getSnappingPossibilities(distancesToImages);\r\n snapPossibilitiesToWalls = ShapeHelper.getSnappingPossibilities(distancesToWalls);\r\n //console.log(\"snapPossibilitiesToShapes\", snapPossibilitiesToShapes);\r\n\r\n //walls\r\n let [absolutePosToWalls, snappedWithWalls] = ShapeHelper.getAbsolutePosFromSnapPossibilities(snapPossibilitiesToWalls, pos);\r\n if (absolutePosToWalls) {\r\n if (shouldUpdateAbsolutePos) {\r\n shapeAbsolute.setAbsolutePos(absolutePosToWalls);\r\n }\r\n void snappedWithWalls;\r\n //snappedWithImage.shapeAbsolute.setSnappedWithImage(this);\r\n }\r\n\r\n //shapes\r\n let [absolutePosToShapes, snappedWithShape] = ShapeHelper.getAbsolutePosFromSnapPossibilities(snapPossibilitiesToShapes, pos);\r\n if (absolutePosToShapes) {\r\n if (shouldUpdateAbsolutePos) {\r\n shapeAbsolute.setAbsolutePos(absolutePosToShapes);\r\n }\r\n if (isShowSlabTool) {\r\n if (snappedWithShape.shapeSlab && snappedWithShape.shapeSlab.shapeAbsolute) {\r\n snappedWithShape.shapeSlab.shapeAbsolute.setSnappedWithShape(shape.shapeSlab);\r\n }\r\n if (shape.shapeSlab && shape.shapeSlab.shapeAbsolute) {\r\n shape.shapeSlab.shapeAbsolute.setSnappedWithShape(snappedWithShape);\r\n }\r\n } else {\r\n snappedWithShape.shapeAbsolute.setSnappedWithShape(shape);\r\n shape.shapeAbsolute.setSnappedWithShape(snappedWithShape);\r\n }\r\n\r\n // set same snapped shape group for all shapes\r\n const snappedShape = isShowSlabTool && shape.shapeSlab ? shape.shapeSlab : shape;\r\n const snappedShapeIds = Object.keys(distancesToShapes);\r\n for (const shapeId of snappedShapeIds) {\r\n const snappedShapeFromAllPossibilities = workspace.getShapeById(parseInt(shapeId));\r\n const shapeSlab = snappedShapeFromAllPossibilities.shapeSlab\r\n snappedWithShape = isShowSlabTool && shapeSlab ? shapeSlab : snappedShapeFromAllPossibilities;\r\n workspaceControllers.snappedShapeGroups.setSameSnappedShapesGroup(snappedShape, snappedWithShape);\r\n }\r\n }\r\n\r\n //images\r\n let [absolutePosToImages, snappedWithImage] = ShapeHelper.getAbsolutePosFromSnapPossibilities(snapPossibilitiesToImages, pos);\r\n if (absolutePosToImages) {\r\n if (shouldUpdateAbsolutePos) {\r\n shapeAbsolute.setAbsolutePos(absolutePosToImages);\r\n }\r\n void snappedWithImage;\r\n //snappedWithImage.shapeAbsolute.setSnappedWithImage(this);\r\n }\r\n\r\n //allSnappedPossibilities\r\n return [\r\n ...snapPossibilitiesToShapes.map(snapPossibility => snapPossibility.shape),\r\n ...snapPossibilitiesToImages.map(snapPossibility => snapPossibility.shape)\r\n ];\r\n }\r\n}\r\n","import {SQFTResourceController} from \"./SQFTResourceController\";\r\nimport {WORKSPACE_RESOURCES} from \"../../../../constants\";\r\n\r\nexport class SelectedShapesController extends SQFTResourceController {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.resourceName = WORKSPACE_RESOURCES.selectedShapes;\r\n }\r\n\r\n addShapeToSelection = (shape) => {\r\n this.addResource(shape);\r\n };\r\n\r\n removeShapeFromSelection = (shape) => {\r\n this.removeResource(shape);\r\n };\r\n\r\n clearSelection = () => {\r\n this.removeAllResources();\r\n };\r\n\r\n isShapeSelected = (shape) => {\r\n return this.getResources().includes(shape);\r\n };\r\n\r\n render = (ctx) => {\r\n void ctx\r\n // for (const ctx1 of ctx) {\r\n //\r\n // }\r\n\r\n }\r\n}\r\n\r\n","import {WORKSPACE_RESOURCES} from \"../../../../../constants\";\r\nimport workspace from \"../../../core/workspace\";\r\nimport {CabinetsHelper} from \"../../../../../helpers/sqftCabinetsDataMapper\";\r\n\r\nexport class CrownMoldingController {\r\n\r\n constructor() {\r\n this.resourceName = WORKSPACE_RESOURCES.crownMolding;\r\n }\r\n\r\n /**\r\n * Not used.\r\n */\r\n getCrownMoldings() {\r\n const shapes = workspace.getShapesWithoutAttachedResources();\r\n const contours = [];\r\n\r\n for (const shape of shapes) {\r\n contours.push(...this.getCrownMoldingForShape(shape.id));\r\n }\r\n\r\n return contours;\r\n }\r\n\r\n getCrownMoldingForShape(shapeId) {\r\n const shape = workspace.getShapeById(shapeId);\r\n const contours = [];\r\n\r\n if (shape) {\r\n const lines = shape.getLines();\r\n const contoursByFeatureId = new Map();\r\n\r\n for (const line of lines) {\r\n const isWithCrownMolding = line.isWithCrownMolding && line.isWithCrownMolding();\r\n\r\n if (isWithCrownMolding) {\r\n const featureId = line.getCrownMoldingFeatureId();\r\n let contour = contoursByFeatureId.get(featureId);\r\n\r\n if (!contour) {\r\n contour = {\r\n featureId,\r\n feature3dUrl: line.getCrownMolding3dURL(),\r\n contour_points: [],\r\n };\r\n contoursByFeatureId.set(featureId, contour);\r\n }\r\n\r\n this.addUniquePoint(contour.contour_points, line.from);\r\n this.addUniquePoint(contour.contour_points, line.to);\r\n }\r\n }\r\n const posY = CabinetsHelper.getCabinetPosYFromShape(shape);\r\n const shapeHeight = shape.shapeCabinet ? shape.shapeCabinet.getShapeHeight() : shape.getHeight();\r\n contoursByFeatureId.forEach(({ featureId, feature3dUrl, contour_points }) => {\r\n contours.push({\r\n shapeId: shape.id,\r\n posY: posY + shapeHeight - 3.0,\r\n height: 3.0,\r\n cabinet_position: shape.getPosition(),\r\n featureId,\r\n feature3dUrl,\r\n contour_points\r\n });\r\n });\r\n }\r\n\r\n return contours;\r\n }\r\n\r\n addUniquePoint(pointsArray, point) {\r\n const exists = pointsArray.some(existingPoint =>\r\n existingPoint.x === point.x && existingPoint.y === point.y\r\n );\r\n\r\n if (!exists) {\r\n pointsArray.push({x: point.x, y: point.y});\r\n }\r\n }\r\n}\r\n\r\n","import {SQFTResourceController} from \"./SQFTResourceController\";\r\nimport {WORKSPACE_RESOURCES} from \"../../../../constants\";\r\n\r\nexport class Images3dController extends SQFTResourceController {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.resourceName = WORKSPACE_RESOURCES.images3d;\r\n }\r\n}\r\n\r\n","import {SQFTResourceController} from \"./SQFTResourceController\";\r\nimport {WORKSPACE_RESOURCES} from \"../../../../constants\";\r\nimport store from \"../../../../../../store\";\r\nimport * as uuid from \"uuid\";\r\nimport {getQtCatName} from \"../../../../helpers/sqftQuotesHelper\";\r\nimport {HingesModel} from \"../models/HingesModel\";\r\n\r\nexport class HingesController extends SQFTResourceController {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.resourceName = WORKSPACE_RESOURCES.hinge;\r\n }\r\n\r\n addHingesToTheShape(shape) {\r\n const reduxState = store.getState();\r\n const selectedFeature = reduxState.sqftResourceState.selectedFeature\r\n this.addResource(new HingesModel(\r\n shape.id,\r\n selectedFeature.part.dbFeature.id,\r\n getQtCatName(),\r\n uuid.v4(),\r\n selectedFeature.part.partId,\r\n 1)\r\n );\r\n }\r\n\r\n updateResourcesId(featureId, partId) {\r\n const resources = this.getResources();\r\n for (const resource of resources) {\r\n if (resource.partId === partId) {\r\n resource.featureId = featureId\r\n }\r\n }\r\n }\r\n}\r\n\r\n","import {getDistanceFromPointToLine} from \"./sqftHelper\";\r\nimport {getAngleBetween3Points} from \"./shapeHelper\";\r\n\r\nexport default class FitSize {\r\n\r\n shape;\r\n line;\r\n nextLine;\r\n prevLine;\r\n outlineDistance = 0;\r\n\r\n constructor(line) {\r\n this.line = line;\r\n this.shape = line.getParent();\r\n this.nextLine = this.shape.getNextLine(line);\r\n this.prevLine = this.shape.getPrevLine(line);\r\n }\r\n\r\n isFitSize = (additionalLength) => {\r\n return [\r\n this.isFitLineLength(additionalLength),\r\n this.isFitSiblingLineCorner(additionalLength),\r\n this.isFitBumpout(additionalLength),\r\n this.isFitPontDistancesToCornerLine(additionalLength),\r\n this.isFitByAngleBetweenLines(additionalLength)\r\n ]\r\n .every(isFit => isFit)\r\n };\r\n\r\n isFitPontDistancesToCornerLine = (additionalLength) => {\r\n const prevPointToCurrentLineLength = getDistanceFromPointToLine(\r\n this.prevLine.from.x,\r\n this.prevLine.from.y,\r\n this.line.from.x,\r\n this.line.from.y,\r\n this.line.to.x,\r\n this.line.to.y,\r\n )\r\n const nextPointToCurrentLineLength = getDistanceFromPointToLine(\r\n this.line.to.x,\r\n this.line.to.y,\r\n this.prevLine.from.x,\r\n this.prevLine.from.y,\r\n this.prevLine.to.x,\r\n this.prevLine.to.y,\r\n )\r\n\r\n return [prevPointToCurrentLineLength, nextPointToCurrentLineLength].every((lineLength) => {\r\n return additionalLength + this.outlineDistance <= lineLength\r\n })\r\n }\r\n\r\n isFitLineLength = (additionalLength) => {\r\n return [this.line.getLineLength(), this.prevLine.getLineLength()].every((lineLength) => {\r\n return additionalLength <= lineLength\r\n })\r\n };\r\n\r\n isFitSiblingLineCorner = (additionalLength) => {\r\n let siblingCornerLength = 0;\r\n let cornerTotalLength = 0;\r\n\r\n if (this.nextLine.from.arcLength > 0 || this.nextLine.from.angle > 0) {\r\n siblingCornerLength = this.nextLine.from.getArcLength() || this.nextLine.from.getAngle();\r\n cornerTotalLength = +siblingCornerLength + +additionalLength;\r\n if(cornerTotalLength >= this.line.getLineLength()) {\r\n return false\r\n }\r\n }\r\n if (this.prevLine.from.arcLength > 0 || this.prevLine.from.angle > 0) {\r\n siblingCornerLength = this.prevLine.from.getArcLength() || this.prevLine.from.getAngle();\r\n cornerTotalLength = +siblingCornerLength + +additionalLength;\r\n if(cornerTotalLength >= this.prevLine.getLineLength() ) {\r\n return false\r\n }\r\n }\r\n\r\n return true\r\n };\r\n\r\n isFitBumpout = (additionalLength) => {\r\n if(this.line.isWithBumpout()){\r\n let bumpoutTextParameters = this.line.bumpoutOverlay.getBumpoutTextParameter();\r\n\r\n if(additionalLength >= bumpoutTextParameters.length4to.pointsDistance) {\r\n return false\r\n }\r\n } else if(this.prevLine.isWithBumpout()){\r\n let bumpoutTextParameters = this.prevLine.bumpoutOverlay.getBumpoutTextParameter();\r\n\r\n if(additionalLength >= bumpoutTextParameters.length4to.pointsDistance) {\r\n return false\r\n }\r\n }\r\n\r\n return true\r\n };\r\n\r\n isFitByAngleBetweenLines = (radius) => {\r\n const angle = getAngleBetween3Points(\r\n this.prevLine.from, this.line.from, this.line.to\r\n );\r\n\r\n // d = r/tan(α/2)\r\n const minDistanceNeeded = radius / Math.tan((angle / 2) * (Math.PI / 180));\r\n\r\n const prevLineLength = this.prevLine.getLineLength();\r\n const lineLength = this.line.getLineLength();\r\n\r\n return prevLineLength >= minDistanceNeeded && lineLength >= minDistanceNeeded;\r\n };\r\n}\r\n","import cloneDeep from \"lodash/cloneDeep\";\r\nimport uuid from \"uuid\";\r\n\r\nimport EventManager from \"../../../store/sqftEventManager\";\r\nimport {pnpolyArray} from \"../../../../../lib/pnpoly\";\r\nimport resizeLine, {getMaxResizeWidth} from \"./resizeLine\";\r\nimport config from \"../../../store/sqftConfig\";\r\nimport {\r\n getPointDistance,\r\n orientation,\r\n measureDistanceToInches,\r\n distanceToMillimeters,\r\n distanceToInches,\r\n getFontsize,\r\n get45CornerLegDistanceByHypotenuse,\r\n getAngleBetweenTwoPoints,\r\n getParallelPoints,\r\n getPointField,\r\n rotatePoint,\r\n mmToInches,\r\n} from \"../../../../../helpers/sqftHelper\";\r\nimport COLOR_THEMES, {COLOR} from \"../../../store/colorThemes\";\r\nimport store from \"../../../../../../../store\";\r\nimport {updateSQFTCalculations} from \"../../../../../../../actions/sqftFunctions\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport Config from \"../../../../../../../config\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\nimport {updateMiteredLength, updateShapeWaterfallLength, updateUnderlaymentLength} from \"../../../helpers/lineHelper\";\r\nimport workspace from \"../../workspace\";\r\nimport {createAdjustableInput} from \"../../../../../helpers/uiHelper\";\r\nimport {MEASURE_UNITS} from \"../../../../../constants\";\r\n\r\nexport default function() {\r\n var self = this,\r\n state = {\r\n isHovered: false,\r\n isEditInputDisplayed: false,\r\n hoveredColor: \"#FF9844\",\r\n textWidth: 0,\r\n withBumpout: false,\r\n midPoint: {\r\n x: 0,\r\n y: 0,\r\n xOffset: 0,\r\n yOffset: 0\r\n },\r\n originalLineText: '',\r\n lineTextResized: '',\r\n lineText: '',\r\n },\r\n line = null,\r\n lineType = 'edge', // by default\r\n lineTextColor = COLOR_THEMES[config.activeTheme].primary;\r\n this.id = uuid();\r\n this.isInited = false;\r\n this.design = {\r\n offsetFromLineEnd: 15\r\n }\r\n\r\n function setLine(value) { line = value; }\r\n this.getLine = () => { return line; }\r\n function getMidPoint(from, to) {\r\n return {\r\n x: from.x + (to.x - from.x)/2,\r\n y: from.y + (to.y - from.y)/2\r\n };\r\n }\r\n\r\n const isMouseOverText = (mousePos) => {\r\n const lineDirection = line.getLineDirection();\r\n const pointsArray = this.getHoveredArea();\r\n\r\n return {isHovered: pnpolyArray(pointsArray, mousePos), orientation: lineDirection.orientation};\r\n }\r\n\r\n this.getHoveredArea = () => {\r\n const lineDirection = line.getLineDirection();\r\n let pointsArray = [];\r\n //console.log(\"lineDirection.orientation\", lineDirection.orientation);\r\n switch (lineDirection.orientation) {\r\n case \"vertical\":\r\n if (lineDirection.newDirection === \"south\") {\r\n pointsArray = [\r\n [state.midPoint.x + 40, state.midPoint.y - state.textWidth / 2 - 10],\r\n [state.midPoint.x + 15, state.midPoint.y - state.textWidth / 2 - 10],\r\n [state.midPoint.x + 15, state.midPoint.y + state.textWidth / 2 - 5],\r\n [state.midPoint.x + 40, state.midPoint.y + state.textWidth / 2 - 5],\r\n ];\r\n } else if (lineDirection.newDirection === \"north\") {\r\n pointsArray = [\r\n [state.midPoint.x - 40, state.midPoint.y - state.textWidth / 2 - 10],\r\n [state.midPoint.x - 15, state.midPoint.y - state.textWidth / 2 - 10],\r\n [state.midPoint.x - 15, state.midPoint.y + state.textWidth / 2 - 5],\r\n [state.midPoint.x - 40, state.midPoint.y + state.textWidth / 2 - 5],\r\n ];\r\n }\r\n break;\r\n case \"horizontal\": {\r\n pointsArray = [\r\n [state.midPoint.x - state.textWidth / 2 - 10, state.midPoint.y - 15],\r\n [state.midPoint.x + state.textWidth / 2 + 10, state.midPoint.y - 15],\r\n [state.midPoint.x + state.textWidth / 2 + 10, state.midPoint.y + 10],\r\n [state.midPoint.x - state.textWidth / 2 - 10, state.midPoint.y + 10],\r\n ]\r\n break;\r\n }\r\n case \"northeast\":\r\n case \"northwest\":\r\n case \"southeast\":\r\n case \"southwest\":\r\n default: {\r\n let angle = getAngleBetweenTwoPoints(line.from, line.to);\r\n let pointToRotate1 = {x: state.midPoint.x - state.textWidth / 2 - 10, y: state.midPoint.y - 15};\r\n let rotatedPoint1 = rotatePoint(pointToRotate1, state.midPoint, angle);\r\n let pointToRotate2 = {x: state.midPoint.x + state.textWidth / 2 + 10, y: state.midPoint.y - 15};\r\n let rotatedPoint2 = rotatePoint(pointToRotate2, state.midPoint, angle);\r\n let pointToRotate3 = {x: state.midPoint.x + state.textWidth / 2 + 10, y: state.midPoint.y + 10};\r\n let rotatedPoint3 = rotatePoint(pointToRotate3, state.midPoint, angle);\r\n let pointToRotate4 = {x: state.midPoint.x - state.textWidth / 2 - 10, y: state.midPoint.y + 10};\r\n let rotatedPoint4 = rotatePoint(pointToRotate4, state.midPoint, angle);\r\n pointsArray = [\r\n [rotatedPoint1.x, rotatedPoint1.y],\r\n [rotatedPoint2.x, rotatedPoint2.y],\r\n [rotatedPoint3.x, rotatedPoint3.y],\r\n [rotatedPoint4.x, rotatedPoint4.y],\r\n // [state.midPoint.x - state.textWidth / 2 - 10, state.midPoint.y - 15],\r\n // [state.midPoint.x + state.textWidth / 2 + 10, state.midPoint.y - 15],\r\n // [state.midPoint.x + state.textWidth / 2 + 10, state.midPoint.y + 10],\r\n // [state.midPoint.x - state.textWidth / 2 - 10, state.midPoint.y + 10],\r\n ]\r\n break\r\n }\r\n }\r\n return pointsArray\r\n }\r\n\r\n function onMouseMove(mousePos, e) {\r\n void e;\r\n const {isHovered, orientation} = isMouseOverText(mousePos);\r\n state.isHovered = isHovered;\r\n if (state.isHovered) {\r\n EventManager.stealCursor();\r\n EventManager.setCursor((orientation === \"horizontal\") ? \"text\" : \"text-vertical\", self);\r\n } else {\r\n EventManager.resetCursor(self);\r\n }\r\n }\r\n\r\n const onMouseDown = () => {\r\n if (state.isHovered && !document.querySelector(\".line-input\")) {\r\n window.lineInputFocused = true;\r\n EventManager.stealCursor();\r\n state.isEditInputDisplayed = true;\r\n\r\n const maxLength = Math.round(getMaxResizeWidth(line) * config.getMeasureMultiplier());\r\n let initialValue;\r\n if (sqftConfig.measureUnit === MEASURE_UNITS.Imperial) {\r\n initialValue = Math.round10(self.getLineDistanceFull() * config.getMeasureMultiplier(), -6);\r\n initialValue = distanceToInches(initialValue).replace(\"\\\"\", \"\");\r\n } else if (sqftConfig.measureUnit === MEASURE_UNITS.Metric) {\r\n initialValue = Math.round10(self.getLineDistanceFull() * config.getMeasureMultiplier());\r\n }\r\n //console.log(\"initialValue\", initialValue);\r\n //const pointDistance = Math.sqrt(Math.pow(line.to.x - line.from.x, 2) + Math.pow(line.to.y - line.from.y, 2));\r\n //console.log(\"pointDistance\", pointDistance);\r\n\r\n\r\n const pos = { x: state.midPoint.x, y: state.midPoint.y };\r\n\r\n const inputWrapper = createAdjustableInput({\r\n position: pos,\r\n initialValue: initialValue.toString(),\r\n min: 1,\r\n max: maxLength,\r\n orientation: \"horizontal\",\r\n onChange: (value) => {\r\n if (sqftConfig.measureUnit === MEASURE_UNITS.Metric) {\r\n value = mmToInches(value);\r\n }\r\n setNewLineWidth(value - self.getAdditionalLineDistance())\r\n }, // Update line width on change\r\n onClose: () => {\r\n window.lineInputFocused = false;\r\n state.isEditInputDisplayed = false;\r\n },\r\n step: 1,\r\n });\r\n\r\n document.querySelector(\".sqft-main-grid\").appendChild(inputWrapper);\r\n\r\n // Focus and select input on creation\r\n const input = inputWrapper.querySelector(\".line-input-field\");\r\n input.focus();\r\n }\r\n };\r\n\r\n function setNewLineWidth(lineWidth) {\r\n const distance = getPointDistance(line.from, line.to);\r\n const diff = lineWidth - distance;\r\n const roundedDiff = Math.round10(diff, -4)\r\n //console.log(\"setNewLineWidth roundedDiff\", roundedDiff);\r\n const reduxState = store.getState();\r\n const isWallsLockMode = reduxState.sqftMenuState.isWallsLockMode;\r\n resizeLine(line, roundedDiff, isWallsLockMode);\r\n updateShapeWaterfallLength(line);\r\n updateMiteredLength(line);\r\n updateUnderlaymentLength(line);\r\n\r\n const state = store.getState();\r\n const updateCalculations = state.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n }\r\n function getCtxColor(ctx, lineType) {\r\n return (lineType === \"wall\")\r\n ? state.isHovered ? state.hoveredColor : ctx.fillStyle\r\n : state.isHovered ? state.hoveredColor : COLOR_THEMES[config.activeTheme].primary;\r\n }\r\n this.destroy = (protect) => {\r\n if (!protect) {\r\n EventManager.removeEvent(self);\r\n this.isInited = false\r\n }\r\n };\r\n this.import = (data) => {\r\n state = data.state;\r\n this.id = data.id\r\n };\r\n this.export = () => {\r\n return { id: this.id, state: cloneDeep(state) }\r\n };\r\n this.init = function(line) {\r\n setLine(line);\r\n this.initEvents();\r\n };\r\n this.initEvents = () => {\r\n this.isInited = true;\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n onMouseMove,\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n onMouseDown,\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render,\r\n this,\r\n EventManager.priorities.OVERLAY\r\n );\r\n };\r\n this.deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n this.isInited = false;\r\n };\r\n this.reInitEvents = () => {\r\n if (!this.isInited) {\r\n this.initEvents();\r\n }\r\n };\r\n this.removeLineText = function () {\r\n state.originalLineText = '';\r\n lineType = 'edge'; // by default\r\n lineTextColor = COLOR_THEMES[config.activeTheme].primary;\r\n };\r\n this.renderEdgeText = (edgeName) => {\r\n state.originalLineText = edgeName;\r\n lineType = 'edge';\r\n lineTextColor = COLOR_THEMES[config.activeTheme].active;\r\n };\r\n this.renderBacksplashText = (backsplashName, type) => {\r\n //lineText = backsplashName;\r\n state.originalLineText = line.getBacksplashHeight() + sqftConfig.getMeasureUnitPostfix() +\" \" + workspace.intl.formatMessage({id: \"sqft.navigation.submenu.backsplash\"});\r\n lineType = type;\r\n lineTextColor = (type === \"wall\") ? \"#000000\" : COLOR_THEMES[config.activeTheme].primary;\r\n };\r\n this.renderWaterfallText = (name, type) => {\r\n state.originalLineText = name;\r\n lineType = type;\r\n lineTextColor = (type === \"wall\") ? \"#000000\" : COLOR_THEMES[config.activeTheme].primary;\r\n };\r\n this.getMidpoint = function () {\r\n return state.midPoint;\r\n };\r\n this.setMidpointOffset = function (xOffset, yOffset) {\r\n state.midPoint.xOffset = xOffset;\r\n state.midPoint.yOffset = yOffset;\r\n };\r\n this.getLineLength = function () {\r\n var distance = getPointDistance(line.from, line.to);\r\n\r\n return measureDistanceToInches(distance);\r\n };\r\n this.getLineLengthText = function () {\r\n let distance = this.getLineDistanceFull();\r\n\r\n return config.measureUnit === \"Metric\" ? distanceToMillimeters(distance) : distanceToInches(distance);\r\n };\r\n this.getLineDistanceFull = function () {\r\n return getPointDistance(line.from, line.to) + this.getAdditionalLineDistance();\r\n };\r\n this.getLineDistanceFullInPixels = function () {\r\n const lineLengthInPx = getPointDistance(line.calculateRenderPosition(line.from), line.calculateRenderPosition(line.to));\r\n const scale = config.scale;\r\n let additionalLineDistance = this.getAdditionalLineDistance() * scale;\r\n if (additionalLineDistance < 0) {\r\n additionalLineDistance -= this.design.offsetFromLineEnd; // add gray line margin\r\n } else if (additionalLineDistance > 0) {\r\n additionalLineDistance += this.design.offsetFromLineEnd; // add gray line margin\r\n }\r\n\r\n return lineLengthInPx + additionalLineDistance;\r\n };\r\n this.getAdditionalLineDistance = function () {\r\n let additionalDistance = 0;\r\n const prevLine = line.getParent().getPrevLine(line);\r\n if (line.to.angle > 0 || line.to.arcLength > 0) {\r\n additionalDistance -= get45CornerLegDistanceByHypotenuse(line.to.angle || line.to.arcLength);\r\n }\r\n\r\n if (prevLine.to.angle > 0 || prevLine.to.arcLength > 0 ) {\r\n additionalDistance -= get45CornerLegDistanceByHypotenuse(prevLine.to.angle || prevLine.to.arcLength);\r\n }\r\n\r\n return +additionalDistance;\r\n };\r\n\r\n this.render = function(ctx) {\r\n if (state.isEditInputDisplayed) {\r\n return;\r\n }\r\n\r\n let scale = config.scale,\r\n fontSize = getFontsize(),\r\n font = (fontSize).toString() + \"px \" + config.activeFontBold,\r\n lineDirection = line.getLineDirection(),\r\n offset = line.getOffset(),\r\n distance = this.getLineDistanceFullInPixels(),\r\n dstring = this.getLineLengthText(),\r\n midPoint = getMidPoint(line.from, line.to),\r\n orientationValue = line.getOrientation(),\r\n space,\r\n mtext,\r\n medgeText,\r\n xOffset = 0,\r\n yOffset = 0,\r\n lineCornerWidth = 0,\r\n fromPosOnField = getPointField(line.from.x, line.from.y, line),\r\n prevLine;\r\n\r\n state.lineTextResized = _.clone(state.originalLineText);\r\n const parent = line.getParent();\r\n\r\n ctx.beginPath();\r\n ctx.font = font;\r\n\r\n mtext = ctx.measureText(dstring);\r\n medgeText = ctx.measureText(state.lineTextResized);\r\n space = ctx.measureText(' ');\r\n state.textWidth = Math.round(mtext.width * 100) / 100;\r\n\r\n let marginTotal = 0;\r\n\r\n for (let i in lineDirection.cornerMargins) {\r\n marginTotal += lineDirection.cornerMargins[i];\r\n }\r\n\r\n if (medgeText.width + ctx.measureText(dstring).width > distance) {\r\n fontSize = 14;\r\n ctx.font = \"14px \" + config.activeFontBold;\r\n mtext = ctx.measureText(dstring);\r\n medgeText = ctx.measureText(state.lineTextResized);\r\n space = ctx.measureText(' ');\r\n\r\n // Adjust text size based on distance\r\n if (distance < 20 * config.scale + marginTotal * 40) {\r\n state.lineTextResized = '';\r\n medgeText = ctx.measureText(state.lineTextResized);\r\n } else {\r\n if (state.originalLineText && (medgeText.width + ctx.measureText(dstring).width > distance - marginTotal * 40)) {\r\n while (medgeText.width && (medgeText.width + ctx.measureText(dstring).width > distance - marginTotal * 40)) {\r\n state.lineTextResized = state.lineTextResized.slice(0, -1);\r\n medgeText = ctx.measureText(state.lineTextResized);\r\n }\r\n }\r\n }\r\n }\r\n\r\n lineCornerWidth += line.get45CornerLegDistance() / 2 * scale;\r\n prevLine = parent.getPrevLine(line);\r\n lineCornerWidth -= prevLine.get45CornerLegDistance() / 2 * scale;\r\n\r\n midPoint.y = midPoint.y * scale + offset.y;\r\n midPoint.x = midPoint.x * scale + offset.x;\r\n ctx.textAlign = \"center\";\r\n //midPoint.y += fontSize / 2;\r\n // ctx.fillStyle = \"rgba(255,255,255,0)\";\r\n // ctx.fillRect(midPoint.x - tLen/2 - 4, midPoint.y - (fontSize), tLen + 4, fontSize + 4);\r\n ctx.beginPath();\r\n ctx.fillStyle = state.isHovered\r\n ? state.hoveredColor\r\n : (lineType === \"wall\") ? \"#000000\" : COLOR_THEMES[config.activeTheme].primary;\r\n\r\n let marginFrom = 0,\r\n marginTo = 0;\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n if (lineDirection.newDirection === \"east\") {\r\n midPoint.x -= lineCornerWidth;\r\n marginFrom = (lineDirection.cornerMargins.fromLeft) ? marginFrom + 9 : marginFrom;\r\n marginTo = (lineDirection.cornerMargins.fromRight) ? marginTo + 9 : marginTo;\r\n } else if (lineDirection.newDirection === \"west\") {\r\n midPoint.x += lineCornerWidth;\r\n marginFrom = (lineDirection.cornerMargins.fromRight) ? marginFrom + 9 : marginFrom;\r\n marginTo = (lineDirection.cornerMargins.fromLeft) ? marginTo + 9 : marginTo;\r\n }\r\n yOffset = (lineDirection.newDirection === \"west\" ? 33 : -20) + (state.midPoint.yOffset * scale);\r\n if (state.lineTextResized) {\r\n ctx.fillStyle = lineTextColor;\r\n ctx.wrapText(state.lineTextResized, midPoint.x - mtext.width / 2 - marginFrom + marginTo, midPoint.y + yOffset, medgeText, fontSize);\r\n ctx.fillStyle = getCtxColor(ctx, lineType);\r\n state.midPoint.x = midPoint.x + medgeText.width / 2 + space.width - marginFrom + marginTo;\r\n state.midPoint.y = midPoint.y + yOffset;\r\n } else {\r\n state.midPoint.x = midPoint.x - marginFrom + marginTo;\r\n state.midPoint.y = midPoint.y + yOffset;\r\n }\r\n ctx.wrapText(dstring, state.midPoint.x, state.midPoint.y, mtext, fontSize);\r\n break;\r\n }\r\n case \"vertical\": {\r\n if (lineDirection.newDirection === \"south\") {\r\n marginFrom = (lineDirection.cornerMargins.fromTop) ? marginFrom + 9 : marginFrom;\r\n marginTo = (lineDirection.cornerMargins.fromBottom) ? marginTo + 9 : marginTo;\r\n midPoint.y -= lineCornerWidth;\r\n } else if (lineDirection.newDirection === \"north\") {\r\n marginTo = (lineDirection.cornerMargins.fromTop) ? marginTo + 9 : marginTo;\r\n marginFrom = (lineDirection.cornerMargins.fromBottom) ? marginFrom + 9 : marginFrom;\r\n midPoint.y += lineCornerWidth;\r\n }\r\n xOffset += state.midPoint.xOffset * scale;\r\n state.midPoint.x = midPoint.x + xOffset;\r\n state.midPoint.y = midPoint.y + yOffset\r\n ? lineDirection.newDirection === \"south\"\r\n ? midPoint.y + medgeText.width / 2 + space.width\r\n : midPoint.y - medgeText.width / 2 + space.width\r\n : midPoint.y;\r\n ctx.save();\r\n ctx.translate(\r\n lineDirection.newDirection === \"south\" ? midPoint.x + xOffset : midPoint.x + xOffset,\r\n lineDirection.newDirection === \"south\" ? midPoint.y - 5 : midPoint.y - 10\r\n );\r\n ctx.rotate(lineDirection.newDirection === \"south\" ? Math.PI / 2 : -Math.PI / 2);\r\n if (state.lineTextResized) {\r\n ctx.fillStyle = lineTextColor;\r\n ctx.wrapText(state.lineTextResized, 0 - mtext.width / 2 + marginFrom - marginTo, -fontSize, medgeText, fontSize);\r\n ctx.fillStyle = getCtxColor(ctx, lineType);\r\n ctx.wrapText(dstring, 0 + medgeText.width / 2 + space.width + marginFrom - marginTo, -fontSize - yOffset, mtext, fontSize);\r\n } else {\r\n ctx.wrapText(dstring, 0 + marginFrom - marginTo, -fontSize, mtext, fontSize);\r\n }\r\n break;\r\n }\r\n case \"NORTHWEST\":\r\n case \"NORTHEAST\":\r\n case \"SOUTHWEST\":\r\n case \"SOUTHEAST\": {\r\n ctx.save();\r\n if (state.lineTextResized) {\r\n dstring = state.lineTextResized + ' ' + dstring;\r\n }\r\n //this.renderFrameBorder(ctx, dstring, fontSize, midPoint, orientationValue);\r\n const [parallelPoint1] = getParallelPoints(fromPosOnField, midPoint, -30);\r\n state.midPoint.x = parallelPoint1.x;\r\n state.midPoint.y = parallelPoint1.y;\r\n this.renderText(ctx, dstring, state.midPoint, fontSize, orientationValue);\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n\r\n ctx.restore();\r\n\r\n if (Config.isDevMode()) {\r\n this.renderHoveredArea(ctx);\r\n }\r\n };\r\n\r\n this.renderHoveredArea = (ctx) => {\r\n //console.log(\"state.midPoint.\", state.midPoint);\r\n const hoveredArea = this.getHoveredArea();\r\n ctx.beginPath();\r\n ctx.moveTo(hoveredArea[0][0], hoveredArea[0][1]);\r\n ctx.lineTo(hoveredArea[1][0], hoveredArea[1][1]);\r\n ctx.lineTo(hoveredArea[2][0], hoveredArea[2][1]);\r\n ctx.lineTo(hoveredArea[3][0], hoveredArea[3][1]);\r\n ctx.lineTo(hoveredArea[0][0], hoveredArea[0][1]);\r\n ctx.lineWidth = 2;\r\n ctx.strokeStyle = 'rgba(0, 0, 0, 0.5)';\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n\r\n this.getFrameBorderPosition = (ctx, pos, value, fontHeight, orientationValue) => {\r\n const mText = ctx.measureText(value);\r\n let position = {\r\n x: pos.x,\r\n y: pos.y\r\n };\r\n\r\n switch (orientationValue) {\r\n case orientation.HORIZONTAL: {\r\n break;\r\n }\r\n case orientation.VERTICAL: {\r\n break;\r\n }\r\n case orientation.NORTHWEST: {\r\n position = {\r\n x: pos.x - mText.width,\r\n y: pos.y - this.design.offsetFromLineEnd\r\n };\r\n break;\r\n }\r\n case orientation.NORTHEAST: {\r\n position = {\r\n x: pos.x - mText.width,\r\n y: pos.y - this.design.offsetFromLineEnd\r\n };\r\n break;\r\n }\r\n case orientation.SOUTHWEST: {\r\n\r\n break;\r\n }\r\n case orientation.SOUTHEAST: {\r\n\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n return position\r\n }\r\n\r\n this.renderFrameBorder = (ctx, value, fontHeight, pos, orientationValue) => {\r\n ctx.beginPath();\r\n const mText = ctx.measureText(value);\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n ctx.lineWidth = 2;\r\n ctx.fillStyle = COLOR.white\r\n\r\n const angle = getAngleBetweenTwoPoints(line.from, line.to);\r\n let position = this.getFrameBorderPosition(ctx, pos, value, fontHeight, orientationValue);\r\n\r\n ctx.save();\r\n ctx.translate(\r\n position.x,\r\n position.y,\r\n );\r\n ctx.rotate(angle * (Math.PI / 180));\r\n RenderFigures.roundedRect(ctx,\r\n 0, // absolute pos: //pos.x - mText.width / 1.25 / sqftConfig.scale * sqftConfig.defaultScale,\r\n 0, // absolute pos: //pos.y - fontHeight,\r\n mText.width * 1.5 + sqftConfig.scale / sqftConfig.defaultScale,\r\n fontHeight + 6,\r\n 5,\r\n true,\r\n true\r\n );\r\n ctx.restore();\r\n ctx.closePath();\r\n }\r\n\r\n this.renderText = (ctx, value, pos, fontHeight, orientationValue) => {\r\n const //scale = sqftConfig.scale,\r\n font = fontHeight + \"px \" + config.activeFontBold,\r\n mText = ctx.measureText(value);\r\n\r\n //let position = this.getTextPosition(ctx, pos, value, fontHeight, orientationValue);\r\n\r\n ctx.beginPath();\r\n ctx.font = font;\r\n ctx.textAlign = \"center\";\r\n ctx.fillStyle = getCtxColor(ctx, lineType);\r\n\r\n let angle = getAngleBetweenTwoPoints(line.from, line.to);\r\n //this will help to rotate upside down text\r\n if ([orientation.NORTHWEST, orientation.SOUTHWEST].indexOf(orientationValue) !== -1) {\r\n angle += 180;\r\n }\r\n ctx.save();\r\n //RenderFigures.renderCircle(pos, 5,1, '#284da8');\r\n ctx.translate(\r\n pos.x,\r\n pos.y\r\n );\r\n ctx.rotate(angle * (Math.PI / 180));\r\n //ctx.wrapText(value, fontHeight / 2, mText.width / ( 2 * scale), mText, fontHeight);\r\n ctx.wrapText(value, 0, 0, mText, fontHeight);\r\n ctx.restore();\r\n ctx.closePath();\r\n }\r\n}\r\n","import { v4 as uuidv4 } from 'uuid';\r\nimport {\r\n distanceToInches,\r\n distanceToMillimeters, getFontsize, getFontsizeSmall, getIntersectCordsBetweenLines,\r\n getMidPoint,\r\n getPointDistance, isDisabledInPopupWithParents,\r\n measureDistanceToInches,\r\n mmToInches,\r\n orientation\r\n} from \"../../../../../helpers/sqftHelper\";\r\nimport point from \"../point\";\r\nimport shapeLine from \"../line\";\r\nimport {getMaxResizeWidth} from \"./resizeLine\";\r\nimport COLOR_THEMES from \"../../../store/colorThemes\";\r\nimport Config from \"../../../store/sqftConfig\";\r\nimport configGlobal from \"../../../store/sqftConfig\";\r\nimport EventManager from \"../../../store/sqftEventManager\";\r\nimport {pnpolyArray} from \"../../../../../lib/pnpoly\";\r\nimport workspace from \"../../workspace\";\r\nimport $ from \"jquery\";\r\nimport store from \"../../../../../../../store\";\r\nimport {updateSQFTCalculations} from \"../../../../../../../actions/sqftFunctions\";\r\nimport sqftEventManager from \"../../../store/sqftEventManager\";\r\nimport {isDisabledInPopupShouldBeHidden, MEASURE_UNITS} from \"../../../../../constants\";\r\nimport SqftStore from \"../../../store/sqftStore\";\r\nimport {renderResetSeamPopup, shouldResetSlabModePopupOnPointMoveBeDisplayed} from \"../../../canvasPopup/resetSeam\";\r\nimport {crossProduct2D} from \"../../../../../helpers/coordinatesHelper\";\r\nimport {getBumpoutFeature} from \"../../../../../helpers/featureHelper\";\r\nimport {createAdjustableInput} from \"../../../../../helpers/uiHelper\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\n\r\nexport default function() {\r\n var self = this,\r\n state = {\r\n mousePos: {},\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n isHoveringRect: false,\r\n isHoveringPoint: false,\r\n hoveredPoint: null,\r\n isHoveredOverText: false,\r\n hoveredText: {\r\n area:[],\r\n midPoint: {x: 0, y: 0},\r\n pointsDistance: 0,\r\n points: {point1: null, point2: null},\r\n orientation: 0\r\n },\r\n midPoint: {\r\n x: 0,\r\n y: 0,\r\n }\r\n },\r\n config = {\r\n initialSize: 30,\r\n minBumpoutSize: 1,\r\n dragPointMargin: 28,\r\n rulerMargin: 25,\r\n movePointOffset: 100,\r\n lineTextColor: COLOR_THEMES[Config.activeTheme].primary\r\n },\r\n bumpoutPoints = {\r\n point1: null,\r\n point2: null,\r\n point3: null,\r\n point4: null,\r\n dragPoint: null\r\n },\r\n bumpoutTextParameters = {\r\n lengthFrom1 : {\r\n area:[],\r\n midPoint: {x: 0, y: 0},\r\n pointsDistance: 0,\r\n points: {point1: null, point2: null},\r\n orientation: 0\r\n },\r\n length14 : {\r\n area:[],\r\n midPoint: {x: 0, y: 0},\r\n pointsDistance: 0,\r\n points: {point1: null, point2: null},\r\n orientation: 0\r\n },\r\n length34 : {\r\n area:[],\r\n midPoint: {x: 0, y: 0},\r\n pointsDistance: 0,\r\n points: {point1: null, point2: null},\r\n orientation: 0\r\n },\r\n length4to : {\r\n area:[],\r\n midPoint: {x: 0, y: 0},\r\n pointsDistance: 0,\r\n points: {point1: null, point2: null},\r\n orientation: 0\r\n },\r\n },\r\n deleteFillStyle = \"rgba(253,2,33, 0.5)\",\r\n line = null,\r\n bumpoutLines = null;\r\n\r\n this.id = uuidv4(); // sqftId (this is not attached resource id)\r\n this.featureId = null; // will be assigned on init\r\n\r\n //private property setters\r\n function setLine(value) { line = value; }\r\n function setBumpoutPoints(value) { bumpoutPoints = value; }\r\n\r\n //private functions\r\n function preparePoints() {\r\n var midPoint = getMidPoint(line.from, line.to),\r\n point1,\r\n point2,\r\n point3,\r\n point4,\r\n dragPoint,\r\n dragPointMargin,\r\n flipPoints = false;\r\n\r\n const lineDirection = line.getLineDirection();\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n flipPoints = lineDirection.newDirection === \"west\";\r\n dragPointMargin = flipPoints ? config.dragPointMargin : -config.dragPointMargin;\r\n point1 = new point(midPoint.x - config.initialSize / 2, midPoint.y, undefined, undefined, false);\r\n point2 = new point(midPoint.x - config.initialSize / 2, midPoint.y, undefined, undefined, false);\r\n point3 = new point(midPoint.x + config.initialSize / 2, midPoint.y, undefined, undefined, false);\r\n point4 = new point(midPoint.x + config.initialSize / 2, midPoint.y, undefined, undefined, false);\r\n dragPoint = new point(midPoint.x, midPoint.y + dragPointMargin, undefined, undefined, false);\r\n\r\n break;\r\n }\r\n case \"vertical\": {\r\n flipPoints = lineDirection.newDirection === \"north\";\r\n dragPointMargin = flipPoints ? -config.dragPointMargin : config.dragPointMargin;\r\n point1 = new point(midPoint.x, midPoint.y - config.initialSize / 2, undefined, undefined, false);\r\n point2 = new point(midPoint.x, midPoint.y - config.initialSize / 2, undefined, undefined, false);\r\n point3 = new point(midPoint.x, midPoint.y + config.initialSize / 2, undefined, undefined, false);\r\n point4 = new point(midPoint.x, midPoint.y + config.initialSize / 2, undefined, undefined, false);\r\n dragPoint = new point(midPoint.x + dragPointMargin, midPoint.y, undefined, undefined, false);\r\n break;\r\n }\r\n case \"NORTHWEST\":\r\n case \"NORTHEAST\":\r\n case \"SOUTHWEST\":\r\n case \"SOUTHEAST\": {\r\n //todo rotation\r\n point1 = new point(midPoint.x, midPoint.y - bumpoutPoints.initialSize / 2, undefined, undefined, false);\r\n point4 = new point(midPoint.x, midPoint.y + bumpoutPoints.initialSize / 2, undefined, undefined, false);\r\n dragPoint = new point(midPoint.x, midPoint.y, undefined, undefined, false);\r\n\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n\r\n setBumpoutPoints ({\r\n point1: flipPoints ? point4 : point1,\r\n point2: flipPoints ? point3 : point2,\r\n point3: flipPoints ? point2 : point3,\r\n point4: flipPoints ? point1 : point4,\r\n dragPoint: dragPoint\r\n });\r\n }\r\n\r\n function movePointInOrStop(point1, point2, axis, diff, biggestPoint, smallestPoint, stopPoint) {\r\n // stop on other bumpout move point\r\n if (point1[axis] > stopPoint[axis]) {\r\n smallestPoint = stopPoint[axis] + config.minBumpoutSize;\r\n } else {\r\n biggestPoint = stopPoint[axis] - config.minBumpoutSize;\r\n }\r\n\r\n if (point1[axis] - diff >= biggestPoint) {\r\n point1[axis] = point2[axis] = biggestPoint;\r\n } else if (point1[axis] - diff <= smallestPoint) {\r\n point1[axis] = point2[axis] = smallestPoint;\r\n } else {\r\n point1[axis] -= diff;\r\n point2[axis] -= diff;\r\n }\r\n }\r\n\r\n function movePointOutOrStop(point1, point2, axis, diff, biggestPoint, smallestPoint) {\r\n let direction = line.getLineDirection().newDirection;\r\n let dragPointMargin;\r\n let lengthMidPoint;\r\n\r\n if (point1[axis] - diff > smallestPoint && (direction === \"east\" || direction === \"north\")) {\r\n dragPointMargin = -config.dragPointMargin;\r\n point1[axis] = point2[axis] = smallestPoint;\r\n bumpoutPoints.dragPoint[axis] = smallestPoint + dragPointMargin\r\n } else if (point1[axis] - diff < biggestPoint && (direction === \"west\" || direction === \"south\")) {\r\n dragPointMargin = +config.dragPointMargin;\r\n point1[axis] = point2[axis] = biggestPoint;\r\n bumpoutPoints.dragPoint[axis] = smallestPoint + dragPointMargin\r\n } else {\r\n point1[axis] -= diff;\r\n point2[axis] -= diff;\r\n bumpoutPoints.dragPoint[axis] -= diff;\r\n lengthMidPoint = line.overlay.getMidpoint();\r\n line.overlay.setMidpointOffset(lengthMidPoint.xOffset - diff, lengthMidPoint.yOffset - diff);\r\n }\r\n }\r\n\r\n function move23Point(point1, point2, axis, diff) {\r\n // Check for intersection with all lines in the parent shape\r\n point1[axis] -= diff;\r\n point2[axis] -= diff;\r\n let intersects = line.getParent().getLines().some(parentLine => {\r\n // Don't check against itself\r\n if (parentLine === line) return false;\r\n\r\n // Check if bumpoutPoints {from: point1, to: point2} line would intersect this parent line\r\n return getIntersectCordsBetweenLines(\r\n { x: parentLine.from.x, y: parentLine.from.y },\r\n { x: parentLine.to.x, y: parentLine.to.y },\r\n { x: bumpoutPoints.point1.x, y: bumpoutPoints.point1.y },\r\n { x: bumpoutPoints.point2.x, y: bumpoutPoints.point2.y }\r\n );\r\n });\r\n\r\n // Only move points if no intersection detected\r\n if (!intersects) {\r\n let lengthMidPoint = line.overlay.getMidpoint();\r\n bumpoutPoints.dragPoint[axis] -= diff;\r\n line.overlay.setMidpointOffset(lengthMidPoint.xOffset - diff, lengthMidPoint.yOffset - diff);\r\n } else {\r\n // rollback points if intersection was found\r\n point1[axis] += diff;\r\n point2[axis] += diff;\r\n }\r\n }\r\n\r\n function getMousePosPointDiff(diff, point, mousePos, sameOrientation = false) {\r\n if (configGlobal.measureUnit === \"Metric\") {\r\n var offset = 0;\r\n switch(line.getOrientation()) {\r\n case orientation.HORIZONTAL:\r\n offset = sameOrientation ? mousePos.x - point.getPointField().x : mousePos.y - point.getPointField().y;\r\n break;\r\n case orientation.VERTICAL:\r\n offset = sameOrientation? mousePos.y - point.getPointField().y : mousePos.x - point.getPointField().x;\r\n break;\r\n case orientation.NORTHWEST:\r\n case orientation.SOUTHEAST:\r\n break;\r\n case orientation.NORTHEAST:\r\n case orientation.SOUTHWEST:\r\n break;\r\n }\r\n\r\n if (-config.movePointOffset < offset && offset < config.movePointOffset) {\r\n diff = diff / configGlobal.millimetersMultiplier;\r\n }\r\n }\r\n\r\n return diff\r\n }\r\n\r\n //public property getters\r\n\r\n this.getParent = () => { return line; };\r\n this.getGrandParent = () => {\r\n const parent = this.getParent();\r\n if (parent && parent.getParent) {\r\n return parent.getParent();\r\n }\r\n return null\r\n };\r\n this.getBumpoutPoints = function() { return bumpoutPoints; };\r\n this.getBumpoutLines = () => {\r\n if (bumpoutLines) {\r\n return bumpoutLines\r\n }\r\n return this.createBumpoutLines();\r\n };\r\n this.createBumpoutLines = () => {\r\n const points = this.getBumpoutPoints();\r\n bumpoutLines = [\r\n new shapeLine(line.from, points.point1, line.getParent()),\r\n new shapeLine(points.point1, points.point2, line.getParent()),\r\n new shapeLine(points.point2, points.point3, line.getParent()),\r\n new shapeLine(points.point3, points.point4, line.getParent()),\r\n new shapeLine(points.point4, line.to, line.getParent()),\r\n ];\r\n\r\n return bumpoutLines\r\n };\r\n this.getBumpoutPointCords = function() {\r\n let bumpoutPointsCords = [];\r\n for (const bumpoutPointsKey in bumpoutPoints) {\r\n if (bumpoutPointsKey !== 'dragPoint') {\r\n bumpoutPointsCords.push(bumpoutPoints[bumpoutPointsKey]);\r\n }\r\n }\r\n return bumpoutPointsCords\r\n };\r\n this.getBumpoutTextParameter = function() { return bumpoutTextParameters; };\r\n\r\n this.destroy = function(protect) {\r\n if (!protect) {\r\n EventManager.removeEvent(self);\r\n }\r\n const reduxState = store.getState();\r\n const updateCalculations = reduxState.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n };\r\n\r\n this.init = (line, importPoints = null, featureId = null) => {\r\n setLine(line);\r\n if (!importPoints) {\r\n preparePoints();\r\n }\r\n this.featureId = featureId\r\n if (!featureId) {\r\n const bumpoutFeature = getBumpoutFeature();\r\n const isFeatureExist = Array.isArray(bumpoutFeature)\r\n && bumpoutFeature.length\r\n && bumpoutFeature[0].part\r\n && bumpoutFeature[0].part.dbFeature\r\n\r\n this.featureId = isFeatureExist ? bumpoutFeature[0].part.dbFeature.id : null;\r\n }\r\n this.initEvents();\r\n\r\n //points\r\n bumpoutPoints.point1.init(self);\r\n bumpoutPoints.point1.layout = 'white-circle';\r\n\r\n bumpoutPoints.point2.init(self);\r\n bumpoutPoints.point2.layout = 'blank';\r\n\r\n bumpoutPoints.point3.init(self);\r\n bumpoutPoints.point3.layout = 'blank';\r\n\r\n bumpoutPoints.point4.init(self);\r\n bumpoutPoints.point4.layout = 'white-circle';\r\n\r\n bumpoutPoints.dragPoint.init(self);\r\n bumpoutPoints.dragPoint.layout = 'arrow-circle';\r\n\r\n // set line overlay length offset\r\n if (!importPoints) {\r\n var xOffset = 0;\r\n var yOffset = 0;\r\n var lineDirection = line.getLineDirection();\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n yOffset = (lineDirection.newDirection === \"west\" ? config.dragPointMargin - 15 : -config.dragPointMargin + 15);\r\n break;\r\n }\r\n case \"vertical\": {\r\n xOffset = (lineDirection.newDirection === \"south\" ? config.dragPointMargin - 15 : -config.dragPointMargin + 15);\r\n break;\r\n }\r\n // todo rotation\r\n case \"NORTHWEST\": { break;}\r\n case \"NORTHEAST\": { break;}\r\n case \"SOUTHWEST\": { break;}\r\n case \"SOUTHEAST\": { break;}\r\n default:\r\n break;\r\n }\r\n line.overlay.setMidpointOffset(xOffset, yOffset)\r\n }\r\n\r\n // todo fix bumpout rotation and remove this\r\n $('.button--angle').addClass('button--disabled');\r\n /////////////////////////////////////////\r\n };\r\n this.initEvents = () => {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n self.render,\r\n self,\r\n EventManager.priorities.SEGMENT\r\n );\r\n //todo priority\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n onMouseMove,\r\n self,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n onMouseDown,\r\n self,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n onMouseUp,\r\n self,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_LEAVE,\r\n onMouseLeave,\r\n self,\r\n EventManager.priorities.OVERALL\r\n );\r\n }\r\n this.deregisterEvents = () => {\r\n sqftEventManager.removeEvent(this);\r\n this.isHidden = true;\r\n for (let i = 0; i < bumpoutPoints.length; i++) {\r\n bumpoutPoints[i].deregisterEvents();\r\n }\r\n };\r\n this.reInitEvents = () => {\r\n this.initEvents();\r\n this.isHidden = false;\r\n for (let i = 0; i < bumpoutPoints.length; i++) {\r\n bumpoutPoints[i].reInitEvents();\r\n }\r\n };\r\n this.export = function() {\r\n return {\r\n bumpoutPoints : {\r\n point1: bumpoutPoints.point1.export(),\r\n point2: bumpoutPoints.point2.export(),\r\n point3: bumpoutPoints.point3.export(),\r\n point4: bumpoutPoints.point4.export(),\r\n dragPoint: bumpoutPoints.dragPoint.export()\r\n },\r\n overlay: {\r\n midpoint: line.overlay.getMidpoint(),\r\n id: this.id\r\n }\r\n }\r\n };\r\n this.import = (line, bumpoutData) => {\r\n for (let bumpoutPoint in bumpoutData.bumpoutPoints) {\r\n bumpoutPoints[bumpoutPoint] = new point();\r\n bumpoutPoints[bumpoutPoint].import(bumpoutData.bumpoutPoints[bumpoutPoint])\r\n }\r\n this.init(line, bumpoutData.bumpoutPoints, bumpoutData.overlay.id);\r\n };\r\n this.getOffset = function() {\r\n return line.getOffset();\r\n };\r\n this.getBumpoutLength = function () {\r\n var bumpoutDistance = getPointDistance(bumpoutPoints.point1, bumpoutPoints.point2);\r\n\r\n return measureDistanceToInches(bumpoutDistance);\r\n };\r\n this.getBumpoutTotalHeight = function () {\r\n var bumpoutDistance = getPointDistance(bumpoutPoints.point1, bumpoutPoints.point2);\r\n\r\n return measureDistanceToInches(bumpoutDistance * 2);\r\n };\r\n this.getBumpoutTotalArea = () => {\r\n if (this.bumpoutInOrOut() === 'in') {\r\n return {\r\n inches: 0,\r\n millimeters: 0\r\n }\r\n }\r\n\r\n var lineLengthInches = line.getLineLength(),\r\n lineLengthMm = line.getLineLengthMm(),\r\n\r\n bumpoutLength = this.getBumpoutLength(),\r\n bumpoutLengthInches = line.addDecimalToLength(bumpoutLength),\r\n bumpoutLengthMM = bumpoutLength.millimeters;\r\n\r\n return {\r\n inches : lineLengthInches * bumpoutLengthInches,\r\n millimeters : lineLengthMm * bumpoutLengthMM\r\n }\r\n };\r\n\r\n this.isHoveringRect = () => { return state.isHoveringRect };\r\n\r\n this.moveBumpout = function(xDiff = 0, yDiff = 0) {\r\n for (let bumpoutPoint in bumpoutPoints ) {\r\n bumpoutPoints[bumpoutPoint].x -= xDiff;\r\n bumpoutPoints[bumpoutPoint].y -= yDiff;\r\n }\r\n };\r\n\r\n this.moveLineWithMouse = function(mousePos) {\r\n let scale = workspace.getScale();\r\n let xDiff = (state.mouseDownPosition.x - mousePos.x) / scale;\r\n let yDiff = (state.mouseDownPosition.y - mousePos.y) / scale;\r\n\r\n yDiff = getMousePosPointDiff(yDiff, bumpoutPoints.dragPoint, mousePos);\r\n xDiff = getMousePosPointDiff(xDiff, bumpoutPoints.dragPoint, mousePos);\r\n\r\n this.moveLine(xDiff, yDiff);\r\n\r\n state.mouseDownPosition.y = mousePos.y;\r\n state.mouseDownPosition.x = mousePos.x;\r\n };\r\n\r\n this.isBumpoutPointMoving = () => { return state.mouseDown};\r\n this.moveLine = function(xDiff, yDiff) {\r\n if (SqftStore.isRegularMode() && shouldResetSlabModePopupOnPointMoveBeDisplayed(this.getGrandParent())) {\r\n renderResetSeamPopup(this.getGrandParent())\r\n }\r\n\r\n var o = line.getOrientation();\r\n\r\n if (o === orientation.VERTICAL) {\r\n move23Point(bumpoutPoints.point2, bumpoutPoints.point3, 'x', xDiff);\r\n void movePointOutOrStop\r\n //movePointOutOrStop(bumpoutPoints.point2, bumpoutPoints.point3, 'x', xDiff, line.getBiggestXPoint().x, line.getSmallestXPoint().x, false);\r\n } else if (o === orientation.HORIZONTAL) {\r\n // let distance = line.getSmallestYPoint().y;\r\n // const closetParallelLineAndPoint = findClosestIntersectingPointAndLine(line, line.getParent().getLines());\r\n // if (closetParallelLineAndPoint) {\r\n // const midPoint = getMidPoint(line.from, line.to);\r\n // distance = getPointDistance(midPoint, closetParallelLineAndPoint.point);\r\n // }\r\n // movePointOutOrStop(bumpoutPoints.point2, bumpoutPoints.point3, 'y', yDiff, distance, distance, false);\r\n\r\n move23Point(bumpoutPoints.point2, bumpoutPoints.point3, 'y', yDiff);\r\n } else {\r\n //todo\r\n // const nextLine = parent.getNextLine(self);\r\n // const prevLine = parent.getPrevLine(self);\r\n // moveDiagonalLine(self, nextLine, prevLine, state.movePointDistance, yDiff, o);\r\n }\r\n\r\n const state = store.getState();\r\n const updateCalculations = state.sqftState.updateCalculations;\r\n\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n };\r\n\r\n this.movePointWithMouse = function(mousePos, point1, point2, stopPoint) {\r\n var scale = workspace.getScale();\r\n var xDiff = (state.mouseDownPosition.x - mousePos.x) / scale;\r\n var yDiff = (state.mouseDownPosition.y - mousePos.y) / scale;\r\n\r\n yDiff = getMousePosPointDiff(yDiff, point1, mousePos, true);\r\n xDiff = getMousePosPointDiff(xDiff, point1, mousePos, true);\r\n\r\n this.movePoint(xDiff, yDiff, point1, point2, stopPoint);\r\n\r\n state.mouseDownPosition.y = mousePos.y;\r\n state.mouseDownPosition.x = mousePos.x;\r\n };\r\n\r\n this.resizeBumpoutPart = function(value, hoveredText) {\r\n let yDiff = 0,\r\n xDiff = 0,\r\n pointDistance = getPointDistance(hoveredText.points.point1, hoveredText.points.point2),\r\n lineDirection = line.getLineDirection();\r\n\r\n switch(line.getOrientation()) {\r\n case orientation.HORIZONTAL:\r\n\r\n switch (hoveredText.part) {\r\n case \"lengthFrom1\":\r\n xDiff = lineDirection.newDirection === \"west\" ? value - pointDistance: -value + pointDistance;\r\n this.movePoint(xDiff, yDiff, bumpoutPoints.point1, bumpoutPoints.point2, bumpoutPoints.point4);\r\n break;\r\n case \"length4to\":\r\n xDiff = lineDirection.newDirection === \"west\" ? -value + pointDistance : value - pointDistance;\r\n this.movePoint(xDiff, yDiff, bumpoutPoints.point3, bumpoutPoints.point4, bumpoutPoints.point1);\r\n break;\r\n case \"length14\":\r\n xDiff = lineDirection.newDirection === \"west\" ? -value + pointDistance: value - pointDistance;\r\n this.movePoint(xDiff / 2, yDiff, bumpoutPoints.point1, bumpoutPoints.point2, bumpoutPoints.point4);\r\n\r\n xDiff = lineDirection.newDirection === \"west\" ? value - pointDistance: -value + pointDistance;\r\n this.movePoint(xDiff / 2, yDiff, bumpoutPoints.point3, bumpoutPoints.point4, bumpoutPoints.point1);\r\n\r\n break;\r\n case \"length34\":\r\n pointDistance = this.bumpoutInOrOut() === \"in\" ? -pointDistance : pointDistance;\r\n yDiff = lineDirection.newDirection === \"west\" ? -value + pointDistance: value - pointDistance;\r\n this.moveLine(xDiff, yDiff);\r\n break;\r\n }\r\n break;\r\n case orientation.VERTICAL:\r\n switch (hoveredText.part) {\r\n case \"lengthFrom1\":\r\n yDiff = lineDirection.newDirection === \"south\" ? -value + pointDistance: value - pointDistance;\r\n this.movePoint(xDiff, yDiff, bumpoutPoints.point1, bumpoutPoints.point2, bumpoutPoints.point4);\r\n break;\r\n case \"length4to\":\r\n yDiff = lineDirection.newDirection === \"south\" ? value - pointDistance : -value + pointDistance;\r\n this.movePoint(xDiff, yDiff, bumpoutPoints.point3, bumpoutPoints.point4, bumpoutPoints.point1);\r\n break;\r\n case \"length14\":\r\n yDiff = lineDirection.newDirection === \"south\" ? -value + pointDistance: value - pointDistance;\r\n this.movePoint(xDiff, yDiff / 2, bumpoutPoints.point3, bumpoutPoints.point4, bumpoutPoints.point1);\r\n\r\n yDiff = lineDirection.newDirection === \"south\" ? value - pointDistance : -value + pointDistance;\r\n this.movePoint(xDiff, yDiff / 2, bumpoutPoints.point1, bumpoutPoints.point2, bumpoutPoints.point4);\r\n break;\r\n case \"length34\":\r\n pointDistance = this.bumpoutInOrOut() === \"in\" ? -pointDistance : pointDistance;\r\n xDiff = lineDirection.newDirection === \"south\" ? -value + pointDistance: value - pointDistance;\r\n this.moveLine(xDiff, yDiff);\r\n break;\r\n }\r\n break;\r\n case orientation.NORTHWEST:\r\n case orientation.SOUTHEAST:\r\n break;\r\n case orientation.NORTHEAST:\r\n case orientation.SOUTHWEST:\r\n break;\r\n }\r\n };\r\n\r\n this.movePoint = function(xDiff, yDiff, point1, point2, stopPoint) {\r\n if (SqftStore.isRegularMode() && shouldResetSlabModePopupOnPointMoveBeDisplayed(this.getGrandParent())) {\r\n renderResetSeamPopup(this.getGrandParent())\r\n }\r\n let o = line.getOrientation(),\r\n midPoint,\r\n dragPointMargin,\r\n lineDirection = line.getLineDirection(),\r\n toCornerLength = line.to.getArcLength() || line.get45CornerLegDistance(),\r\n prevLine = line.getParent().getPrevLine(line),\r\n fromCornerLength = prevLine.to.getArcLength() || prevLine.get45CornerLegDistance(),\r\n toCornerMargin = 0,\r\n fromCornerMargin = 0;\r\n\r\n if (o === orientation.VERTICAL) {\r\n midPoint = getMidPoint(bumpoutPoints.point2, bumpoutPoints.point3);\r\n dragPointMargin = lineDirection.newDirection === \"north\" ? -config.dragPointMargin : +config.dragPointMargin;\r\n bumpoutPoints.dragPoint.x = midPoint.x + dragPointMargin;\r\n bumpoutPoints.dragPoint.y = midPoint.y;\r\n toCornerMargin = lineDirection.newDirection === \"north\" ? -fromCornerLength : -toCornerLength;\r\n fromCornerMargin = lineDirection.newDirection === \"north\" ? +toCornerLength : +fromCornerLength;\r\n\r\n // stop point on overline move\r\n movePointInOrStop(\r\n point1, point2, 'y', yDiff,\r\n line.getBiggestYPoint().y + toCornerMargin,\r\n line.getSmallestYPoint().y + fromCornerMargin,\r\n stopPoint\r\n );\r\n } else if (o === orientation.HORIZONTAL) {\r\n midPoint = getMidPoint(bumpoutPoints.point2, bumpoutPoints.point3);\r\n dragPointMargin = lineDirection.newDirection === \"east\" ? -config.dragPointMargin : +config.dragPointMargin;\r\n bumpoutPoints.dragPoint.x = midPoint.x;\r\n bumpoutPoints.dragPoint.y = midPoint.y + dragPointMargin;\r\n toCornerMargin = lineDirection.newDirection === \"east\" ? -toCornerLength : -fromCornerLength;\r\n fromCornerMargin = lineDirection.newDirection === \"east\" ? +fromCornerLength : +toCornerLength;\r\n\r\n // stop point on overline move\r\n movePointInOrStop(\r\n point1, point2, 'x', xDiff,\r\n line.getBiggestXPoint().x + toCornerMargin,\r\n line.getSmallestXPoint().x + fromCornerMargin,\r\n stopPoint\r\n );\r\n } else {\r\n //todo rotation\r\n // const nextLine = parent.getNextLine(self);\r\n // const prevLine = parent.getPrevLine(self);\r\n // moveDiagonalLine(self, nextLine, prevLine, state.movePointDistance, yDiff, o);\r\n // state.mouseDownPosition = mousePos;\r\n }\r\n\r\n\r\n // self.from = lockPointToCanvas(self.from); // removed locking because of this issue http://jira.mozidev.com/browse/QC-802\r\n // self.to = lockPointToCanvas(self.to);\r\n };\r\n\r\n\r\n\r\n // Define a function to determine if the bumpout is in or out.\r\n this.bumpoutInOrOut = (pointA = line.from, pointB = line.to, dragPoint = bumpoutPoints.point2) => {\r\n // Calculate vectors.\r\n const vectorAB = { x: pointB.x - pointA.x, y: pointB.y - pointA.y };\r\n const vectorADrag = { x: dragPoint.x - pointA.x, y: dragPoint.y - pointA.y };\r\n\r\n // Calculate the cross product of vectorAB and vectorADrag.\r\n const crossProdZ = crossProduct2D(vectorAB, vectorADrag);\r\n\r\n // Determine if the bumpout is in or out based on the cross product.\r\n if (crossProdZ > 0) {\r\n // Positive Z component indicates an outward bumpout (peak).\r\n return 'in';\r\n } else {\r\n // Negative Z component indicates an inward bumpout (valley).\r\n return 'out';\r\n }\r\n }\r\n\r\n this.drawBumpoutRect = (ctx) => {\r\n var point1 = line.calculateRenderPosition(bumpoutPoints.point1),\r\n point2 = line.calculateRenderPosition(bumpoutPoints.point2),\r\n point3 = line.calculateRenderPosition(bumpoutPoints.point3),\r\n point4 = line.calculateRenderPosition(bumpoutPoints.point4);\r\n //bumpoutHeight = getPointDistance(bumpoutPoints.point1, bumpoutPoints.point2),\r\n //bumpoutLength = getPointDistance(bumpoutPoints.point1, bumpoutPoints.point4);\r\n\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.moveTo(point1.x, point1.y);\r\n ctx.lineTo(point2.x, point2.y);\r\n ctx.lineTo(point3.x, point3.y);\r\n ctx.lineTo(point4.x, point4.y);\r\n ctx.closePath();\r\n ctx.fillStyle = deleteFillStyle;\r\n ctx.stroke();\r\n ctx.fill();\r\n ctx.restore();\r\n };\r\n\r\n this.render = function(ctx) {\r\n if (isDisabledInPopupShouldBeHidden() && isDisabledInPopupWithParents(line)) {\r\n return\r\n }\r\n renderTopBlueLine(ctx);\r\n renderRuler(ctx);\r\n renderMeasurements(ctx);\r\n };\r\n\r\n //blue line between middle points\r\n function renderTopBlueLine(ctx) {\r\n var renderFrom = line.calculateRenderPosition(bumpoutPoints.point2),\r\n renderTo = line.calculateRenderPosition(bumpoutPoints.point3);\r\n\r\n ctx.beginPath();\r\n ctx.moveTo(renderFrom.x, renderFrom.y);\r\n ctx.lineTo(renderTo.x, renderTo.y);\r\n ctx.lineWidth = 8;\r\n ctx.strokeStyle = config.lineTextColor;\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n\r\n const renderRuler = (ctx) => {\r\n let\r\n //toCornerLength = line.to.getAngle() || line.to.getArcLength(),\r\n //prevLine = line.getParent().getPrevLine(line),\r\n //fromCornerLength = prevLine.to.getAngle() || prevLine.to.getArcLength(),\r\n lineDirection = line.getLineDirection(),\r\n renderTo = line.calculateRenderPosition(line.to),\r\n renderFrom = line.calculateRenderPosition(line.from),\r\n point1 = line.calculateRenderPosition(bumpoutPoints.point1),\r\n point4 = line.calculateRenderPosition(bumpoutPoints.point4),\r\n xMargin = 0,\r\n yMargin = 0,\r\n xOffset = 3,\r\n yOffset = 3,\r\n bumpoutXOffset = 0,\r\n bumpoutYOffset = 0,\r\n scale = configGlobal.scale,\r\n pointDistance34 = getPointDistance(bumpoutPoints.point3, bumpoutPoints.point4);\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n yMargin = (lineDirection.newDirection === \"west\" ? config.rulerMargin : -config.rulerMargin);\r\n bumpoutYOffset = (lineDirection.newDirection === \"west\" ? pointDistance34 * scale : -(pointDistance34 * scale));\r\n // we need to change sign of bumpoutYOffset if it is bumoutIN\r\n if (this.bumpoutInOrOut(line.from, line.to, bumpoutPoints.point2) === \"in\") {\r\n bumpoutYOffset = -bumpoutYOffset\r\n }\r\n xOffset = (lineDirection.newDirection === \"west\") ? -xOffset : xOffset;\r\n yOffset = 0;\r\n break;\r\n }\r\n case \"vertical\": {\r\n xMargin = (lineDirection.newDirection === \"south\" ? config.rulerMargin: -config.rulerMargin);\r\n bumpoutXOffset = (lineDirection.newDirection === \"south\" ? pointDistance34 * scale: -(pointDistance34 * scale));\r\n // we need to change sign of bumpoutYOffset if it is bumoutIN\r\n if (this.bumpoutInOrOut(line.from, line.to, bumpoutPoints.point2) === \"in\") {\r\n bumpoutXOffset = -bumpoutXOffset\r\n }\r\n yOffset = (lineDirection.newDirection === \"south\") ? yOffset : -yOffset;\r\n xOffset = 0;\r\n break;\r\n }\r\n // todo rotation\r\n case \"NORTHWEST\": { break;}\r\n case \"NORTHEAST\": { break;}\r\n case \"SOUTHWEST\": { break;}\r\n case \"SOUTHEAST\": { break;}\r\n default:\r\n break;\r\n }\r\n\r\n ctx.beginPath();\r\n drawArrow(ctx, renderFrom.x + xMargin, renderFrom.y + yMargin, point1.x + xMargin, point1.y + yMargin);\r\n drawArrow( ctx,\r\n point1.x + xMargin + xOffset + bumpoutXOffset,\r\n point1.y + yMargin + yOffset + bumpoutYOffset,\r\n point4.x + xMargin - xOffset + bumpoutXOffset,\r\n point4.y + yMargin - yOffset + bumpoutYOffset\r\n );\r\n drawArrow(ctx, point4.x + xMargin, point4.y + yMargin, renderTo.x + xMargin, renderTo.y + yMargin);\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = config.lineTextColor;\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n\r\n const renderMeasurements = (ctx) => {\r\n var scale = configGlobal.scale,\r\n fontSize = getFontsizeSmall(),\r\n font = (fontSize).toString() + \"px \" + Config.activeFontBold,\r\n lineDirection = line.getLineDirection(),\r\n lineTextColor = config.lineTextColor,\r\n xOffset = 0,\r\n yOffset = 0;\r\n\r\n ctx.beginPath();\r\n ctx.font = font;\r\n ctx.textAlign = \"center\";\r\n ctx.fillStyle = lineTextColor;\r\n\r\n //todo rotation\r\n // const rotateAnglePart = line.from.rotateAnglePart;\r\n // const rotatedAngleValue = line.from.rotateAnglePart ? line.from.rotateAnglePart.rotatedAngleValue : 0;\r\n // const parent = line.getParent();\r\n // let moveFrom, moveTo, prevLine, nextLine, prevParallelLine, nextParallelLine;\r\n // if (lineDirection.orientation !== \"horizontal\" && lineDirection.orientation !== \"vertical\") {\r\n // prevLine = parent.getPrevLine(line);\r\n // nextLine = parent.getNextLine(line);\r\n // prevParallelLine = parent.getPrevLine(prevLine);\r\n // nextParallelLine = parent.getNextLine(nextLine);\r\n // }\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n // renderTextBetweenPoints34\r\n xOffset = (lineDirection.newDirection === \"west\" ? -45 : 45);\r\n yOffset = (lineDirection.newDirection === \"west\" ? 60 : -60);\r\n renderHorizontalText(bumpoutPoints.point3, bumpoutPoints.point4, xOffset, yOffset, fontSize, ctx, bumpoutTextParameters.length34, 'length34');\r\n\r\n //renderTextBetweenPoints14\r\n let pointDistance34 = getPointDistance(bumpoutPoints.point3, bumpoutPoints.point4);\r\n // we need to change sign of bumpoutYOffset if it is bumoutIN\r\n if (this.bumpoutInOrOut(line.from, line.to, bumpoutPoints.point2) === \"in\") {\r\n pointDistance34 = -pointDistance34\r\n }\r\n xOffset = (lineDirection.newDirection === \"west\" ? -10 : 10);\r\n yOffset = (lineDirection.newDirection === \"west\" ? 45 + (pointDistance34 * scale) : -45 - (pointDistance34 * scale));\r\n renderHorizontalText(bumpoutPoints.point1, bumpoutPoints.point4, xOffset, yOffset, fontSize, ctx, bumpoutTextParameters.length14, 'length14');\r\n\r\n // renderTextBetweenPointsFrom1\r\n xOffset = (lineDirection.newDirection === \"west\" ? 40 : -30);\r\n yOffset = (lineDirection.newDirection === \"west\" ? 45 : -45);\r\n renderHorizontalText(line.from, bumpoutPoints.point1, xOffset, yOffset, fontSize, ctx, bumpoutTextParameters.lengthFrom1, 'lengthFrom1');\r\n\r\n //renderTextBetweenPoints4To\r\n xOffset = (lineDirection.newDirection === \"west\" ? -40 : 40);\r\n yOffset = (lineDirection.newDirection === \"west\" ? 45 : -45);\r\n renderHorizontalText(bumpoutPoints.point4, line.to, xOffset, yOffset, fontSize, ctx, bumpoutTextParameters.length4to, 'length4to');\r\n\r\n //ctx.wrapText(dstring, state.midPoint.x, state.midPoint.y, medgeText, fontSize);\r\n break;\r\n }\r\n case \"vertical\": {\r\n //renderTextBetweenPoints34\r\n yOffset = (lineDirection.newDirection === \"south\" ? 25 : -25 );\r\n xOffset = (lineDirection.newDirection === \"south\" ? 80 : -80 );\r\n\r\n renderHorizontalText(bumpoutPoints.point3, bumpoutPoints.point4, xOffset, yOffset, fontSize, ctx, bumpoutTextParameters.length34, 'length34');\r\n\r\n xOffset = (lineDirection.newDirection === \"south\" ? 35 : -35);\r\n yOffset = (lineDirection.newDirection === \"south\" ? -45 : 30 );\r\n\r\n // renderTextBetweenPointsFrom1\r\n renderRotatedText(ctx, line.from, bumpoutPoints.point1, fontSize, xOffset, yOffset, bumpoutTextParameters.lengthFrom1, 'lengthFrom1');\r\n\r\n yOffset = (lineDirection.newDirection === \"south\" ? 30 : -45 );\r\n // renderTextBetweenPoints4To\r\n renderRotatedText(ctx, bumpoutPoints.point4, line.to, fontSize, xOffset, yOffset, bumpoutTextParameters.length4to, 'length4to');\r\n\r\n // renderTextBetweenPoints14\r\n let pointDistance34 = getPointDistance(bumpoutPoints.point3, bumpoutPoints.point4);\r\n // we need to change sign of bumpoutYOffset if it is bumoutIN\r\n if (this.bumpoutInOrOut(line.from, line.to, bumpoutPoints.point2) === \"in\") {\r\n pointDistance34 = -pointDistance34\r\n }\r\n xOffset = (lineDirection.newDirection === \"south\" ? 35 + (pointDistance34 * scale) : -35 - (pointDistance34 * scale));\r\n yOffset = 0;\r\n renderRotatedText(ctx, bumpoutPoints.point1, bumpoutPoints.point4, fontSize, xOffset, yOffset, bumpoutTextParameters.length14, 'length14');\r\n\r\n break;\r\n }\r\n //TODO rotation\r\n case \"NORTHWEST\": {\r\n break;\r\n }\r\n case \"NORTHEAST\": {\r\n break;\r\n }\r\n case \"SOUTHWEST\": {\r\n break;\r\n }\r\n case \"SOUTHEAST\": {\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n // private functions\r\n function renderHorizontalText(point1, point2, xOffset, yOffset, fontSize, ctx, bumpoutTextParameter, part) {\r\n let scale = configGlobal.scale,\r\n midPoint = getMidPoint(point1, point2),\r\n offset = line.getOffset(),\r\n pointsDistance = getPointDistance(point1, point2),\r\n renderText = configGlobal.measureUnit === \"Metric\" ? distanceToMillimeters(pointsDistance.toString()) : distanceToInches(pointsDistance.toString()),\r\n mText = ctx.measureText(renderText);\r\n\r\n midPoint.x = midPoint.x * scale + offset.x;\r\n midPoint.y = midPoint.y * scale + offset.y + fontSize / 2;\r\n ctx.wrapText(renderText, midPoint.x + xOffset, midPoint.y + yOffset, mText, fontSize);\r\n\r\n bumpoutTextParameter.area = getTextPointsArea(midPoint.x + xOffset, midPoint.y + yOffset, mText, orientation.HORIZONTAL);\r\n bumpoutTextParameter.midPoint = {x: midPoint.x + xOffset, y: midPoint.y + yOffset};\r\n bumpoutTextParameter.pointsDistance = pointsDistance;\r\n bumpoutTextParameter.points = { point1: point1, point2: point2 };\r\n bumpoutTextParameter.part = part;\r\n bumpoutTextParameter.orientation = orientation.HORIZONTAL;\r\n }\r\n\r\n function renderRotatedText(ctx, point1, point2, fontSize, xOffset, yOffset, bumpoutTextParameter, part) {\r\n let scale = configGlobal.scale,\r\n midPoint = getMidPoint(point1, point2),\r\n offset = line.getOffset(),\r\n pointsDistance = getPointDistance(point1, point2),\r\n textToRender = configGlobal.measureUnit === \"Metric\" ? distanceToMillimeters(pointsDistance.toString()) : distanceToInches(pointsDistance.toString()),\r\n mText = ctx.measureText(textToRender),\r\n lineDirection = line.getLineDirection();\r\n\r\n midPoint.x = midPoint.x * scale + offset.x;\r\n midPoint.y = midPoint.y * scale + offset.y + fontSize / 2;\r\n\r\n ctx.save();\r\n ctx.translate(\r\n lineDirection.newDirection === \"south\" ? midPoint.x + xOffset : midPoint.x + xOffset,\r\n lineDirection.newDirection === \"south\" ? midPoint.y + yOffset : midPoint.y + yOffset\r\n );\r\n ctx.rotate(lineDirection.newDirection === \"south\" ? Math.PI / 2 : -Math.PI / 2);\r\n ctx.wrapText(textToRender, 0, 0, ctx.measureText(textToRender), fontSize);\r\n ctx.restore();\r\n\r\n bumpoutTextParameter.area = getTextPointsArea(midPoint.x + xOffset, midPoint.y + yOffset, mText, orientation.VERTICAL);\r\n bumpoutTextParameter.midPoint = {x: midPoint.x + xOffset, y: midPoint.y + yOffset};\r\n bumpoutTextParameter.pointsDistance = pointsDistance;\r\n bumpoutTextParameter.points = { point1: point1, point2: point2 };\r\n bumpoutTextParameter.part = part;\r\n bumpoutTextParameter.orientation = orientation.VERTICAL;\r\n }\r\n\r\n function drawArrow(context, fromX, fromY, toX, toY) {\r\n var headLen = 10; // length of head in pixels\r\n var dx = toX - fromX;\r\n var dy = toY - fromY;\r\n var angle = Math.atan2(dy, dx);\r\n\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(toX, toY);\r\n context.lineTo(toX - headLen * Math.cos(angle - Math.PI / 6), toY - headLen * Math.sin(angle - Math.PI / 6));\r\n context.moveTo(toX, toY);\r\n context.lineTo(toX - headLen * Math.cos(angle + Math.PI / 6), toY - headLen * Math.sin(angle + Math.PI / 6));\r\n\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(fromX + headLen * Math.cos(angle - Math.PI / 6), fromY + headLen * Math.sin(angle - Math.PI / 6));\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(fromX + headLen * Math.cos(angle + Math.PI / 6), fromY + headLen * Math.sin(angle + Math.PI / 6));\r\n }\r\n\r\n function onMouseMove(mousePos, e) {\r\n void e;\r\n state.isHoveredOverText = false;\r\n state.isHoveringRect = false;\r\n\r\n for (const property in bumpoutTextParameters) {\r\n if (isMouseOverText(bumpoutTextParameters[property].area, mousePos)) {\r\n state.isHoveredOverText = true;\r\n state.hoveredText = bumpoutTextParameters[property];\r\n break;\r\n }\r\n }\r\n\r\n if (isMouseOverRect(mousePos)) {\r\n state.isHoveringRect = true;\r\n }\r\n\r\n if (isMouseOverPoint(mousePos, bumpoutPoints.dragPoint)) {\r\n // todo angle\r\n // if (workspace.getAllowBumpoutEdges() && !line.from.angleIsChanged && !line.to.angleIsChanged) {\r\n\r\n if (state.mouseDown) {\r\n self.moveLineWithMouse(mousePos);\r\n }\r\n EventManager.releaseStealLock(parent); //TODO Cursor\r\n EventManager.stealCursor(true, true);\r\n switch(line.getOrientation()) {\r\n case orientation.HORIZONTAL:\r\n EventManager.setCursor(\"n-resize\", self);\r\n break;\r\n case orientation.VERTICAL:\r\n EventManager.setCursor(\"e-resize\", self);\r\n break;\r\n case orientation.NORTHWEST:\r\n case orientation.SOUTHEAST:\r\n EventManager.setCursor(\"ne-resize\", self);\r\n break;\r\n case orientation.NORTHEAST:\r\n case orientation.SOUTHWEST:\r\n EventManager.setCursor(\"nw-resize\", self);\r\n break;\r\n }\r\n\r\n return state.mouseDown;\r\n\r\n\r\n // if (configGlobal.highlight.lines && state.isHoveringPoint) {\r\n // EventManager.releaseStealLock(line.parent);\r\n // EventManager.stealCursor();\r\n // return false;\r\n // }\r\n\r\n } else if (isMouseOverPoint(mousePos, bumpoutPoints.point1)) {\r\n // todo angle\r\n // if (workspace.getAllowBumpoutEdges() && !line.from.angleIsChanged && !line.to.angleIsChanged) {\r\n if (state.mouseDown) {\r\n self.movePointWithMouse(mousePos, bumpoutPoints.point1, bumpoutPoints.point2, bumpoutPoints.point4);\r\n }\r\n return state.mouseDown;\r\n\r\n } else if (isMouseOverPoint(mousePos, bumpoutPoints.point4)) {\r\n if (state.mouseDown) {\r\n self.movePointWithMouse(mousePos, bumpoutPoints.point4, bumpoutPoints.point3, bumpoutPoints.point1);\r\n }\r\n return state.mouseDown;\r\n\r\n } else if (state.isHoveredOverText) {\r\n EventManager.stealCursor();\r\n EventManager.setCursor((state.hoveredText.orientation === orientation.HORIZONTAL) ? \"text\" : \"text-vertical\", self);\r\n\r\n } else {\r\n EventManager.resetCursor(self);\r\n return false;\r\n }\r\n\r\n // if (workspace.getHoverShape() !== parent) {\r\n // state.isHoveringPoint = false;\r\n // }\r\n\r\n }\r\n\r\n function isMouseOverPoint(mousePos, point) {\r\n state.isHoveringPoint = !!point.isOverPointField();\r\n // console.log(\"point\", point.id);\r\n // console.log(\"state.hoveredPoint\", state.hoveredPoint.id);\r\n // console.log(\"mousePos\", state.isHoveringPoint);\r\n return state.isHoveringPoint || state.mouseDown && state.hoveredPoint && point.id === state.hoveredPoint.id;\r\n }\r\n\r\n function isMouseOverText(pointArea, mousePos) {\r\n return pnpolyArray(pointArea, mousePos);\r\n }\r\n\r\n function isMouseOverRect(mousePos) {\r\n let point1 = line.calculateRenderPosition(bumpoutPoints.point1),\r\n point2 = line.calculateRenderPosition(bumpoutPoints.point2),\r\n point3 = line.calculateRenderPosition(bumpoutPoints.point3),\r\n point4 = line.calculateRenderPosition(bumpoutPoints.point4);\r\n\r\n let pointArea = [\r\n [point1.x, point1.y],\r\n [point2.x, point2.y],\r\n [point3.x, point3.y],\r\n [point4.x, point4.y]\r\n ];\r\n\r\n return pnpolyArray(pointArea, mousePos);\r\n }\r\n\r\n function getTextPointsArea(x, y, mtext, textOrientation) {\r\n const lineDirection = line.getLineDirection();\r\n let pointsArray = [];\r\n if (textOrientation === orientation.HORIZONTAL) {\r\n pointsArray = [\r\n [x - Math.ceil10(mtext.width ,-2)/2 - 10, y - 15],\r\n [x + Math.ceil10(mtext.width ,-2)/2 + 10, y - 15],\r\n [x + Math.ceil10(mtext.width ,-2)/2 + 10, y + 10],\r\n [x - Math.ceil10(mtext.width ,-2)/2 - 10, y + 10],\r\n ]\r\n } else if (textOrientation === orientation.VERTICAL) {\r\n if (lineDirection.newDirection === \"south\") {\r\n pointsArray = [\r\n [x + 25, y - Math.ceil10(mtext.width ,-2)/2 - 10],\r\n [x + 5, y - Math.ceil10(mtext.width ,-2)/2 - 10],\r\n [x + 5, y + Math.ceil10(mtext.width ,-2)/2 - 5],\r\n [x + 25, y + Math.ceil10(mtext.width ,-2)/2 - 5],\r\n ];\r\n } else if (lineDirection.newDirection === \"north\") {\r\n pointsArray = [\r\n [x - 25, y - Math.ceil10(mtext.width ,-2)/2 - 10],\r\n [x - 5, y - Math.ceil10(mtext.width ,-2)/2 - 10],\r\n [x - 5, y + Math.ceil10(mtext.width ,-2)/2 + 5],\r\n [x - 25, y + Math.ceil10(mtext.width ,-2)/2 + 5],\r\n ];\r\n }\r\n } else {\r\n // debugger;//eslint-disable-line\r\n }\r\n\r\n return pointsArray;\r\n }\r\n\r\n function onMouseUp(mousePos, e) {\r\n void mousePos;\r\n void e;\r\n if (state.mouseDown) {\r\n state.mouseDown = false;\r\n state.mouseDownPosition = null;\r\n }\r\n }\r\n\r\n function onMouseDown(mousePos, e) {\r\n void e;\r\n if (state.isHoveringPoint) {\r\n state.mouseDown = true;\r\n state.mouseDownPosition = mousePos;\r\n for (const point in bumpoutPoints) {\r\n if (bumpoutPoints[point].isOverPointField(mousePos)) {\r\n state.hoveredPoint = bumpoutPoints[point];\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n if (state.isHoveredOverText && !document.querySelector(\".line-input\")) {\r\n window.lineInputFocused = true;\r\n EventManager.stealCursor();\r\n\r\n const maxLength = Math.round(getMaxResizeWidth(line) * configGlobal.getMeasureMultiplier());\r\n const fontSize = getFontsize();\r\n const parent = line.getParent();\r\n const nextLine = parent.getNextLine(line);\r\n const minValue = -nextLine.getLineDistance();\r\n const inputPosition = { x: state.hoveredText.midPoint.x, y: state.hoveredText.midPoint.y };\r\n\r\n // Set orientation and position adjustments based on line direction\r\n let inputClass = \"line-input\";\r\n if (state.hoveredText.orientation === orientation.HORIZONTAL) {\r\n inputClass = \"line-input\";\r\n } else if (state.hoveredText.orientation === orientation.VERTICAL) {\r\n const lineDirection = line.getLineDirection();\r\n if (lineDirection.newDirection === \"south\") {\r\n inputClass = \"line-input line-input--vertical-rotated\";\r\n inputPosition.x -= fontSize;\r\n } else {\r\n inputClass = \"line-input line-input--vertical\";\r\n inputPosition.x += fontSize;\r\n }\r\n }\r\n\r\n const inputValue = self.bumpoutInOrOut() === \"in\"\r\n ? -Math.round(state.hoveredText.pointsDistance * configGlobal.getMeasureMultiplier())\r\n : Math.round(state.hoveredText.pointsDistance * configGlobal.getMeasureMultiplier());\r\n\r\n const hoveredText = state.hoveredText;\r\n // Create adjustable input\r\n const inputWrapper = createAdjustableInput({\r\n position: inputPosition,\r\n initialValue: inputValue.toString(),\r\n min: minValue,\r\n max: maxLength,\r\n orientation: inputClass.includes(\"vertical\") ? \"vertical\" : \"horizontal\",\r\n onChange: (value) => {\r\n if (sqftConfig.measureUnit === MEASURE_UNITS.Metric) {\r\n value = mmToInches(value);\r\n }\r\n let scaledValue = Math.round10(value / configGlobal.getMeasureMultiplier(), -2);\r\n self.resizeBumpoutPart(scaledValue, hoveredText);\r\n },\r\n onClose: () => {\r\n window.lineInputFocused = false;\r\n EventManager.removeEvent({ name: 'lineInput' });\r\n },\r\n step: 1,\r\n });\r\n\r\n // Append the input wrapper to the DOM\r\n document.querySelector(\".sqft-main-grid\").appendChild(inputWrapper);\r\n // Focus and select input on creation\r\n const input = inputWrapper.querySelector(\".line-input-field\");\r\n input.focus();\r\n\r\n return false;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function onMouseLeave() {\r\n state.isHoveringPoint = false;\r\n state.mouseDown = false;\r\n state.hoveredPoint = null;\r\n state.isHoveredOverText = false;\r\n state.hoveredText = {};\r\n }\r\n}\r\n","import config from \"../../../../store/sqftConfig\";\r\nimport COLOR_THEMES, {COLOR} from \"../../../../store/colorThemes\";\r\nimport {RESOURCE_ATTACHED_TO_TYPE} from \"../../../../../../constants\";\r\n\r\nexport default class Color {\r\n static getOutlineHoverStrokeStyle() {\r\n switch (config.highlight.type) {\r\n case 'edge':\r\n default:\r\n return COLOR_THEMES[config.activeTheme].active_transparent;\r\n case 'backsplash':\r\n return COLOR_THEMES[config.activeTheme].primary_hover;\r\n case 'wall':\r\n return 'rgba(0,0,0,0.5)';\r\n }\r\n }\r\n\r\n static getOutlineStrokeStyle(type) {\r\n switch (type) {\r\n case 'edge':\r\n return COLOR_THEMES[config.activeTheme].active;\r\n case 'backsplash':\r\n return COLOR_THEMES[config.activeTheme].primary;\r\n case 'wall':\r\n return '#000000';\r\n case RESOURCE_ATTACHED_TO_TYPE.end_cap:\r\n return COLOR.red;\r\n default:\r\n return COLOR_THEMES[config.activeTheme].active_transparent;\r\n }\r\n }\r\n}\r\n","class LineAttachmentsComposite {\r\n constructor() {\r\n this.children = [];\r\n }\r\n\r\n add(component) {\r\n this.children.push(component);\r\n }\r\n\r\n execute() {\r\n this.children.forEach(child => child.execute());\r\n }\r\n}\r\n\r\nexport default LineAttachmentsComposite\r\n","import {orientation} from \"../../../../helpers/sqftHelper\";\r\nimport point from \"./point\";\r\n\r\nexport const getAngle = (rotateAnglePart, angleValue) => {\r\n return (rotateAnglePart && rotateAnglePart.angleDirection === \"right\")\r\n ? (angleValue < 90) ? -angleValue : 90 - angleValue\r\n : (angleValue < 90) ? angleValue : angleValue - 90;\r\n};\r\n\r\nexport const getRotationCentrePoint = (rotateAnglePart, angleValue, bottomLine, basePoint, secondaryPoint) => {\r\n let {\r\n basePointX, basePointX2, basePointY, basePointY2, baseOldX, baseOldY, baseOldX1, baseOldY1, widthDiff, rotated90_1, rotated90_2\r\n } = rotateAnglePart.baseConfiguration;\r\n\r\n void baseOldX; void baseOldY; void baseOldX1; void baseOldY1; void rotated90_1; void rotated90_2;\r\n let rotationCenterPoint;\r\n let line;\r\n let newDirection;\r\n widthDiff = Math.round(widthDiff);\r\n\r\n if (rotateAnglePart && rotateAnglePart.shapeType === \"horseshoe\" || rotateAnglePart && rotateAnglePart.shapeType === \"wideangle\") {\r\n if(angleValue < 90) {\r\n rotationCenterPoint = {\r\n x: basePointX2,\r\n y: basePointY2\r\n };\r\n } else {\r\n if(rotateAnglePart && rotateAnglePart.angleDirection === \"right\") {\r\n line = secondaryPoint.getParent();\r\n newDirection = line.getLineDirection().newDirection;\r\n\r\n switch (line.getOrientation()) {\r\n case orientation.HORIZONTAL:{\r\n if (newDirection === \"east\") { rotationCenterPoint = { x: basePointX + widthDiff, y: basePointY }}\r\n if (newDirection === \"west\") { rotationCenterPoint = { x: basePointX - widthDiff, y: basePointY }}\r\n break;\r\n }\r\n case orientation.VERTICAL: {\r\n if (newDirection === \"north\") { rotationCenterPoint = { x: basePointX, y: basePointY - widthDiff }}\r\n if (newDirection === \"south\") { rotationCenterPoint = { x: basePointX, y: basePointY + widthDiff }}\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n } else {\r\n line = basePoint.getParent();\r\n newDirection = line.getLineDirection().newDirection;\r\n\r\n switch (line.getOrientation()) {\r\n case orientation.HORIZONTAL:{\r\n if (newDirection === \"east\") { rotationCenterPoint = { x: basePointX + widthDiff, y: basePointY }}\r\n if (newDirection === \"west\") { rotationCenterPoint = { x: basePointX - widthDiff, y: basePointY }}\r\n break;\r\n }\r\n case orientation.VERTICAL: {\r\n if (newDirection === \"north\") { rotationCenterPoint = { x: basePointX, y: basePointY - widthDiff }}\r\n if (newDirection === \"south\") { rotationCenterPoint = { x: basePointX, y: basePointY + widthDiff }}\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (rotationCenterPoint === undefined) {\r\n var tempLinePointFrom = new point(line.from.x, line.from.y);\r\n var tempLinePointTo = new point(line.to.x, line.to.y);\r\n tempLinePointFrom.init(bottomLine);\r\n tempLinePointFrom.layout = 'white-circle';\r\n\r\n tempLinePointTo.init(bottomLine);\r\n tempLinePointTo.layout = 'white-circle';\r\n\r\n rotationCenterPoint = getRotationCentrePointByBottomLine(rotateAnglePart, angleValue, bottomLine);\r\n }\r\n\r\n return rotationCenterPoint\r\n};\r\n\r\nexport const getRotationCentrePointByBottomLine = (rotateAnglePart, angleValue, bottomLine) => {\r\n const {\r\n basePointX, basePointX2, basePointY, basePointY2, baseOldX, baseOldY, baseOldX1, baseOldY1, widthDiff, rotated90_1, rotated90_2\r\n } = rotateAnglePart.baseConfiguration;\r\n void baseOldX; void baseOldY; void baseOldX1; void baseOldY1; void rotated90_1; void rotated90_2;\r\n\r\n let rotationCenterPoint;\r\n if (rotateAnglePart && rotateAnglePart.shapeType === \"wideangle\") {\r\n rotationCenterPoint = {\r\n x: angleValue < 90 ? basePointX2 : (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") ? basePointX - widthDiff : basePointX + widthDiff,\r\n y: angleValue < 90 ? basePointY2 : basePointY,\r\n };\r\n } else if (rotateAnglePart && rotateAnglePart.shapeType === \"horseshoe\") {\r\n if(angleValue < 90) {\r\n rotationCenterPoint = {\r\n x: basePointX2,\r\n y: basePointY2\r\n };\r\n } else {\r\n if(rotateAnglePart && rotateAnglePart.angleDirection === \"right\") {\r\n switch (bottomLine.getOrientation()) {\r\n case orientation.HORIZONTAL:{ rotationCenterPoint = { x: basePointX, y: basePointY }; break;}\r\n case orientation.VERTICAL: { rotationCenterPoint = { x: basePointX, y: basePointY }; break;}\r\n case orientation.SOUTHEAST: { rotationCenterPoint = { x: basePointX - widthDiff, y: basePointY}; break;}\r\n case orientation.NORTHEAST: { rotationCenterPoint = { x: basePointX, y: basePointY + widthDiff }; break; }\r\n case orientation.SOUTHWEST: { rotationCenterPoint = { x: basePointX, y: basePointY - widthDiff}; break; }\r\n case orientation.NORTHWEST: { rotationCenterPoint = { x: basePointX + widthDiff, y: basePointY }; break; }\r\n default:\r\n break;\r\n }\r\n } else {\r\n switch (bottomLine.getOrientation()) {\r\n case orientation.HORIZONTAL: { rotationCenterPoint = { x: basePointX, y: basePointY }; break; }\r\n case orientation.VERTICAL: { rotationCenterPoint = { x: basePointX, y: basePointY }; break; }\r\n case orientation.SOUTHEAST: { rotationCenterPoint = { x: basePointX, y: basePointY + widthDiff}; break; }\r\n case orientation.NORTHEAST: { rotationCenterPoint = { x: basePointX + widthDiff, y: basePointY}; break; }\r\n case orientation.SOUTHWEST: { rotationCenterPoint = { x: basePointX - widthDiff, y: basePointY}; break; }\r\n case orientation.NORTHWEST: { rotationCenterPoint = { x: basePointX, y: basePointY - widthDiff}; break; }\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return rotationCenterPoint\r\n};\r\n","import workspace from \"../../workspace\";\r\nimport COLOR_THEMES from \"../../../store/colorThemes\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport store from \"../../../../../../../store\";\r\nimport SeamTool from \"./slabParts/seamTool\";\r\nimport {RENDER_TEMPLATES, SHAPE_PART_ID, SIDEBAR_SLAB_SEAM_BUTTONS} from \"../../../../../constants\";\r\nimport RenderParts from \"../../../helpers/renderParts\";\r\nimport ShapeMeasurementArrows from \"./shapeMeasurementArrows\";\r\nimport ShapeAbsolute from \"./shapeAbsolute\";\r\nimport workspaceControllers from \"../../../store/workspaceControllers\";\r\nimport {getPointField} from \"../../../../../helpers/sqftHelper\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\n\r\nclass ShapeSlab {\r\n __shape;\r\n __seamTool;\r\n __intersectionPoints = [];\r\n __minLengthToIntersectionPoints;\r\n __absolutePos = null; //not used?\r\n shapeAbsolute = new ShapeAbsolute(this);\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n this.__seamTool = new SeamTool(shape);\r\n this.__measurementArrows = new ShapeMeasurementArrows(shape);\r\n }\r\n setSlabPos(pos) {\r\n this.__shape.slabPos = pos\r\n }\r\n setParentId(parentId) {\r\n this.__shape.shapeParent = parentId\r\n }\r\n setRotationDegreesSlab(rotationDegrees) {\r\n this.__shape.rotatedDegreesSlab = rotationDegrees\r\n }\r\n addSeamPieceVertical = (mousePos) => {\r\n this.__seamTool.addSeamPieceVertical(mousePos);\r\n workspaceControllers.snappedShapeGroups.updateShapesSnappedGroups(false);\r\n };\r\n addSeamPieceHorizontal = (mousePos) => {\r\n this.__seamTool.addSeamPieceHorizontal(mousePos);\r\n workspaceControllers.snappedShapeGroups.updateShapesSnappedGroups(false);\r\n };\r\n setAbsolutePos = (pos) => {\r\n //this.__absolutePos = pos;\r\n this.shapeAbsolute.setAbsolutePos(pos);\r\n };\r\n getAbsolutePosition = () => {\r\n //return this.__absolutePos;\r\n return this.shapeAbsolute.getAbsolutePosition();\r\n };\r\n getPosition = () => {\r\n let absolutePos = this.getAbsolutePosition();\r\n\r\n if (absolutePos) {\r\n return absolutePos\r\n }\r\n\r\n return this.__shape.slabPos;\r\n };\r\n setIntersectionsPoints = (points) => {\r\n this.__intersectionPoints = points;\r\n };\r\n setMinLengthToIntersectionPoints = (length) => {\r\n this.__minLengthToIntersectionPoints = length;\r\n };\r\n resetShapeSeams = () => {\r\n for (let i = this.__shape.shapePieces.length - 1; i >= 0; i--) {\r\n let shp = workspace.getShapeById(this.__shape.shapePieces[i]);\r\n if (shp.shapePieces) {\r\n shp.shapeSlab.resetShapeSeams();\r\n }\r\n workspace.removeShape(shp);\r\n }\r\n this.__shape.shapePieces.splice(0, this.__shape.shapePieces.length);\r\n };\r\n import = (data) => {\r\n this.shapeAbsolute.setAbsolutePos(data ? data.absolutePosition : null);\r\n }\r\n export = () => {\r\n return {\r\n absolutePosition: this.getAbsolutePosition()\r\n }\r\n }\r\n\r\n render = (ctx,\r\n staticOffset = null,\r\n strokeTemplate= RENDER_TEMPLATES.default,\r\n fillTemplate = RENDER_TEMPLATES.accordingToFeature\r\n ) => {\r\n if (workspace && workspace.getState().loading) return;\r\n if (this.__shape.partId === SHAPE_PART_ID.slabPlaceHolder) {\r\n RenderParts.drawDiagonalStripes(ctx, this.__shape, 2);\r\n } else {\r\n RenderParts.drawShapeBorders(ctx, staticOffset, strokeTemplate, fillTemplate, this.__shape);\r\n }\r\n const reduxState = store.getState()\r\n let isMeasurementVisibleInSlabMode = reduxState.sqftSlabState.isMeasurementVisibleInSlabMode;\r\n if (isMeasurementVisibleInSlabMode) {\r\n this.renderMeasurementArrows(ctx);\r\n }\r\n this.renderSeamLinesOnHover(ctx);\r\n this.renderSeamCutPoints(ctx);\r\n };\r\n\r\n renderSeamLinesOnHover = (ctx) => {\r\n if (this.__shape.isHovering() && workspace.getHoveredSqftShape() === this.__shape ) {\r\n let sqftMenuState = store.getState().sqftMenuState;\r\n if (sqftMenuState.activeButton === SIDEBAR_SLAB_SEAM_BUTTONS.addSeamVertical) {\r\n this.__seamTool.seamToolRender.renderSeamVerticalIntersection(ctx);\r\n } else if (sqftMenuState.activeButton === SIDEBAR_SLAB_SEAM_BUTTONS.addSeamHorizontal) {\r\n this.__seamTool.seamToolRender.renderSeamHorizontalIntersection(ctx);\r\n }\r\n }\r\n }\r\n\r\n renderSeamCutPoints = (ctx) => {\r\n const strokeStyle = '#e01333';\r\n for (const seamCutPoint of this.__shape.seamCutPoints) {\r\n const seamCutPointOnField = getPointField(seamCutPoint.x, seamCutPoint.y, this.__shape);\r\n RenderFigures.renderCircle(seamCutPointOnField, 4, 1, strokeStyle, strokeStyle);\r\n RenderFigures.renderCircle(seamCutPointOnField, 7, 1, strokeStyle);\r\n }\r\n if (this.__shape.seamCutPoints.length === 2) {\r\n const startPoint = this.__shape.seamCutPoints[0];\r\n const endPoint = this.__shape.seamCutPoints[1];\r\n const startPointOnField = getPointField(startPoint.x, startPoint.y, this.__shape);\r\n const endPointOnField = getPointField(endPoint.x, endPoint.y, this.__shape);\r\n ctx.moveTo(startPointOnField.x, startPointOnField.y);\r\n ctx.lineTo(endPointOnField.x, endPointOnField.y);\r\n ctx.strokeStyle = strokeStyle;\r\n ctx.stroke();\r\n }\r\n }\r\n\r\n renderLinesWithoutStroke = (ctx, staticOffset = null, sqftMode) => {\r\n if (workspace && workspace.getState().loading) return;\r\n let lines = this.__shape.getLines();\r\n ctx.lineWidth = 2;\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].active;\r\n for (let i = 0; i < lines.length; i++) {\r\n lines[i].staticOffset = staticOffset;\r\n lines[i].render(ctx, i > 0, sqftMode);\r\n lines[i].staticOffset = null;\r\n }\r\n };\r\n\r\n renderMeasurementArrows = (ctx) => {\r\n const snappedShapeGroup = this.shapeAbsolute.getSnappedShapeGroup();\r\n //We will render measurement arrows only if there are no shapes snaps to the current shape;\r\n if (snappedShapeGroup !== null) {\r\n const snappedShapes = workspaceControllers.snappedShapeGroups.getSnappedShapes(snappedShapeGroup);\r\n if (snappedShapes.length > 1) {\r\n return\r\n }\r\n }\r\n\r\n this.__measurementArrows.render(ctx);\r\n };\r\n}\r\n\r\nexport default ShapeSlab\r\n","import _ from 'lodash';\r\n\r\nimport {\r\n getPointField,\r\n} from \"../../../../../../helpers/sqftHelper\";\r\nimport sqftShapeManager from \"../../../../store/sqftShapeManager\";\r\nimport {SHAPE_PART_ID, SHAPE_ROTATE_DIRECTION} from \"../../../../../../constants\";\r\nimport SqftStore from \"../../../../store/sqftStore\";\r\nimport ShapeHelper from \"../../../../../../helpers/shapeHelper\";\r\nimport SeamToolRender from \"./seamToolRender\";\r\nimport SlabWorkspace from \"../../../slab/slabWorkspace\";\r\nimport SlabAdditionalShape from \"../../../slab/slabAdditionalShape\";\r\nimport {getHorizontalLineIntersectionPoints, getVerticalLineIntersectionPoints} from \"./seamToolHelper\";\r\nimport {createShapeFromPoints} from \"../../../../../../helpers/freeDrawHelper\";\r\n\r\nclass SeamTool {\r\n __shape;\r\n seamToolRender;\r\n\r\n constructor(_shape) {\r\n this.__shape = _shape;\r\n this.seamToolRender = new SeamToolRender(this);\r\n }\r\n\r\n getMaxLength = () => {\r\n //todo\r\n return 10\r\n }\r\n //todo\r\n addSeamPieceHorizontal = (mousePos) => {\r\n // const mousePosOnFiled = getMousePositionOnField(mousePos.x, mousePos.y);\r\n // const serverState = store.getState().serverState;\r\n // const pos = this.__shape.getPosition();\r\n //let intersectionPoint1 = {x: -serverState.windowWidth, y: mousePosOnFiled.y - pos.y};\r\n //let intersectionPoint2 = {x: serverState.windowWidth, y: mousePosOnFiled.y - pos.y};\r\n\r\n let absoluteLinePoint1Pos = this.seamToolRender.absoluteLinePoint1Pos;\r\n let toPoint = {...mousePos};\r\n if (absoluteLinePoint1Pos && absoluteLinePoint1Pos.y) {\r\n let pf = getPointField(absoluteLinePoint1Pos.x, absoluteLinePoint1Pos.y, this.__shape);\r\n toPoint.y = pf.y;\r\n }\r\n const lines = this.__shape.getLines();\r\n console.log(\"linesPoints\", lines.map((line) => { return {x: line.from.x, y: line.from.y}}));\r\n\r\n const linesWithoutAnglePoints = this.__shape.createLinesWithoutAngle();\r\n let [intersectionPointAndLine1, intersectionPointAndLine2] = getHorizontalLineIntersectionPoints(toPoint, this.__shape, linesWithoutAnglePoints);\r\n if (intersectionPointAndLine1 && intersectionPointAndLine2) {\r\n let seamShapesPoints = this.splitShape(linesWithoutAnglePoints, intersectionPointAndLine1, intersectionPointAndLine2, 'vertical');\r\n console.log(\"intersectionPoint1\", intersectionPointAndLine1);\r\n console.log(\"intersectionPoint2\", intersectionPointAndLine2);\r\n\r\n console.log(\"linesWithoutAnglePoints\", linesWithoutAnglePoints.map((line) => { return {x: line.from.x, y: line.from.y}}));\r\n console.log(\"piece1Points\", seamShapesPoints[0].map(point => { return {x: point.x, y: point.y}}));\r\n console.log(\"piece2Points\", seamShapesPoints[1].map(point => { return {x: point.x, y: point.y}}));\r\n this.createShapesFromSeamPointsAndSetSlabRotation(seamShapesPoints);\r\n\r\n this.__shape.deregisterEvents();\r\n //this.__shape.shapeSlab.setRotationDegreesSlab(0); //? not needed\r\n SqftStore.addSeamHistory(this.__shape);\r\n } else {\r\n console.log(\"getHorizontalLineIntersectionPoints error missing intersections\");\r\n }\r\n }\r\n\r\n createShapesFromSeamPointsAndSetSlabRotation = (seamShapesPoints) => {\r\n let parentShapeCenter = this.__shape.getCenter();\r\n\r\n for (let seamPoints of seamShapesPoints) {\r\n let isBacksplashPiece = [SHAPE_PART_ID.backsplashPiece, SHAPE_PART_ID.waterfallPiece].includes(this.__shape.partId);\r\n let partId = SHAPE_PART_ID.seamPiece;\r\n seamPoints = this.preparePointCords(seamPoints);\r\n let shapePieceId = createShapeFromPoints(seamPoints, partId, true);\r\n let shapePiece = sqftShapeManager.getShapeById(shapePieceId);\r\n shapePiece.featureId = this.__shape.featureId;\r\n shapePiece.featureName = this.__shape.featureName;\r\n shapePiece.colorSet = this.__shape.colorSet;\r\n shapePiece.deregisterPartEvents();\r\n let rotatedDiffPos = {x: 0, y: 0};\r\n\r\n if (isBacksplashPiece) {\r\n //add additional backsplash to slabWorkspace\r\n let parentSlabAdditionalShape = SlabWorkspace.slabAdditionalShapes.findOneByBacksplashShapeId(this.__shape.id);\r\n let newSlabAdditionalShape = new SlabAdditionalShape(parentSlabAdditionalShape.line, shapePieceId);\r\n SlabWorkspace.slabAdditionalShapes.addActiveBacksplash(newSlabAdditionalShape);\r\n }\r\n\r\n shapePiece.shapeSlab.setSlabPos(Object.assign({}, this.__shape.slabPos));\r\n if (this.__shape.rotatedDegreesSlab !== 0) {\r\n\r\n // this will rotate sqft and slab shape points to 0 it is required for correct rotation and drawing images in the right part\r\n let shapePieceCenterPointBeforeRotation = ShapeHelper.getCenterPoint(shapePiece.getLines().map(line => line.from));\r\n let reqRotatedDegreesToZero = 360 - this.__shape.rotatedDegreesSlab;\r\n //console.log(\"piece before rotate1\", shapePiece.getLines().map((line) => { return {x: line.from.x, y: line.from.y}}));\r\n shapePiece.rotate(reqRotatedDegreesToZero, SHAPE_ROTATE_DIRECTION.left, true, parentShapeCenter);\r\n //console.log(\"piece rotate2\", shapePiece.getLines().map((line) => { return {x: line.from.x, y: line.from.y}}));\r\n shapePiece.rotate(360, SHAPE_ROTATE_DIRECTION.left, false, parentShapeCenter);\r\n //console.log(\"piece rotate3\", shapePiece.getLines().map((line) => { return {x: line.from.x, y: line.from.y}}));\r\n shapePiece.setRotationDegrees(0);\r\n shapePiece.shapeSlab.setRotationDegreesSlab(0);\r\n\r\n //rotate shape and move it to diff position (this is for correct displaying right part)\r\n shapePiece.rotate(this.__shape.rotatedDegreesSlab, SHAPE_ROTATE_DIRECTION.left, true);\r\n let shapePieceCenterPointAfterRotation = ShapeHelper.getCenterPoint(shapePiece.getLines().map(line => line.from));\r\n this.__shape.setIsPointsChanged(false); // prevent points change after rotation\r\n console.log(\"piece rotate4\", shapePiece.getLines().map((line) => { return {x: line.from.x, y: line.from.y}}));\r\n\r\n rotatedDiffPos = {\r\n x: shapePieceCenterPointBeforeRotation.x - shapePieceCenterPointAfterRotation.x,\r\n y: shapePieceCenterPointBeforeRotation.y - shapePieceCenterPointAfterRotation.y,\r\n }\r\n }\r\n let coreShapeAbsolutePosition = this.__shape.getSlabAbsolutePosition()\r\n let slabAbsolutePosition = coreShapeAbsolutePosition ? coreShapeAbsolutePosition : this.__shape.getSlabPosition();\r\n shapePiece.slabPos = {\r\n x: slabAbsolutePosition.x + rotatedDiffPos.x,\r\n y: slabAbsolutePosition.y + rotatedDiffPos.y,\r\n }\r\n\r\n shapePiece.shapeSlab.setParentId(this.__shape.id); //this is not needed maybe in future\r\n shapePiece.setPosition(Object.assign({}, this.__shape.getRegularPosition()));\r\n\r\n this.__shape.addShapePieceId(shapePiece.id);\r\n }\r\n };\r\n\r\n addSeamPieceVertical = (mousePos) => {\r\n // const mousePosOnFiled = getMousePositionOnField(mousePos.x, mousePos.y);\r\n // const serverState = store.getState().serverState;\r\n // const pos = this.__shape.getPosition();\r\n //\r\n // let intersectionPoint1 = {x: mousePosOnFiled.x - pos.x, y: -serverState.windowHeight};\r\n // let intersectionPoint2 = {x: mousePosOnFiled.x - pos.x, y: serverState.windowHeight};\r\n let absoluteLinePoint1Pos = this.seamToolRender.absoluteLinePoint1Pos;\r\n let toPoint = {...mousePos};\r\n if (absoluteLinePoint1Pos && absoluteLinePoint1Pos.x) {\r\n let pf = getPointField(absoluteLinePoint1Pos.x, absoluteLinePoint1Pos.y, this.__shape);\r\n toPoint.x = pf.x;\r\n }\r\n const linesWithoutAnglePoints = this.__shape.createLinesWithoutAngle();\r\n let [intersectionPointAndLine1, intersectionPointAndLine2] = getVerticalLineIntersectionPoints(toPoint, this.__shape, linesWithoutAnglePoints);\r\n\r\n if (intersectionPointAndLine1 && intersectionPointAndLine2) {\r\n let seamShapesPoints = this.splitShape(linesWithoutAnglePoints, intersectionPointAndLine1, intersectionPointAndLine2, 'horizontal');\r\n // console.log(\"intersectionPoint1\", intersectionPointAndLine1);\r\n // console.log(\"intersectionPoint2\", intersectionPointAndLine2);\r\n // console.log(\"shapePoints\", this.__shape.getLines().map((line) => { return {x: line.from.x, y: line.from.y}}));\r\n // console.log(\"piece1Points\", seamShapesPoints[0].map(point => { return {x: point.x, y: point.y}}));\r\n // console.log(\"piece2Points\", seamShapesPoints[1].map(point => { return {x: point.x, y: point.y}}));\r\n this.createShapesFromSeamPointsAndSetSlabRotation(seamShapesPoints);\r\n\r\n this.__shape.deregisterEvents();\r\n //this.__shape.shapeSlab.setRotationDegreesSlab(0); //? not needed\r\n SqftStore.addSeamHistory(this.__shape);\r\n } else {\r\n console.log(\"getVerticalLineIntersectionPoints error missing intersections\");\r\n }\r\n };\r\n\r\n preparePointCords = (seamPoints) => {\r\n return seamPoints.map((seamPoint) => {\r\n seamPoint.x = Math.round10(seamPoint.x, -1);\r\n seamPoint.y = Math.round10(seamPoint.y, -1);\r\n return seamPoint\r\n })\r\n };\r\n\r\n /**\r\n * @param {[]} lines\r\n * @param {*} intersectionPointAndLine1\r\n * @param {*} intersectionPointAndLine2\r\n * @param {string} splitOnlyOrientation\r\n */\r\n splitShape = (lines, intersectionPointAndLine1, intersectionPointAndLine2, splitOnlyOrientation) => {\r\n let piece1Points = [];\r\n let piece2Points = [];\r\n let intersectionNumber = 1;\r\n let lastPoint;\r\n let intersectionPoint1 = intersectionPointAndLine1.intersectionCords\r\n let intersectionPoint2 = intersectionPointAndLine2.intersectionCords\r\n\r\n lines.forEach((line) => {\r\n let intersectionCords = null;\r\n void splitOnlyOrientation;\r\n\r\n // version 1.0 search cords again\r\n //if (line.getLineDirection().orientation === splitOnlyOrientation || !splitOnlyOrientation) {\r\n // intersectionCords = getIntersectCords(\r\n // Math.round10(line.from.x, -1), Math.round10(line.from.y, -1),\r\n // Math.round10(line.to.x, -1), Math.round10(line.from.y, -1),\r\n // Math.round10(intersectionPoint1.x, -1), Math.round10(intersectionPoint1.y, -1),\r\n // Math.round10(intersectionPoint2.x, -1), Math.round10(intersectionPoint2.y,-1),\r\n // false\r\n // )\r\n //}\r\n\r\n // version 2.0 use existing intersection cords\r\n if ((line === intersectionPointAndLine1.line || line === intersectionPointAndLine2.line)) {\r\n intersectionCords = line === intersectionPointAndLine1.line\r\n ? intersectionPointAndLine1.intersectionCords\r\n : intersectionPointAndLine2.intersectionCords\r\n }\r\n\r\n if (intersectionCords) {\r\n let ip = (Math.round10(intersectionCords.x, -1) === Math.round10(intersectionPoint1.x, -1)\r\n && Math.round10(intersectionCords.y, -1) === Math.round10(intersectionPoint1.y, -1))\r\n ? intersectionPoint1 : intersectionPoint2\r\n if (piece2Points.length === 1) { // triangle shape\r\n piece2Points.push(line.from);\r\n }\r\n const nextLine = line.getParent().getNextLine(line, undefined, true);\r\n if (piece1Points.length === 1\r\n && (nextLine.id === intersectionPointAndLine1.line.id || nextLine.id === intersectionPointAndLine2.line.id)\r\n ) {\r\n piece1Points.push(line.to); // triangle shape\r\n }\r\n piece1Points.push(ip);\r\n piece2Points.push(ip);\r\n } else {\r\n if (intersectionNumber % 2 !== 0) {\r\n lastPoint = piece1Points[piece1Points.length - 1];\r\n if (!lastPoint || !lastPoint.id || lastPoint.id !== line.from.id) {\r\n piece1Points.push(line.from);\r\n }\r\n if (piece1Points[0] !== line.to) {\r\n piece1Points.push(line.to);\r\n }\r\n }\r\n if (intersectionNumber % 2 === 0) {\r\n lastPoint = piece2Points[piece2Points.length - 1];\r\n if (!lastPoint || !lastPoint.id || lastPoint.id !== line.from.id) {\r\n piece2Points.push(line.from);\r\n }\r\n if (piece2Points[0] !== line.to) {\r\n piece2Points.push(line.to);\r\n }\r\n }\r\n }\r\n\r\n if (intersectionCords) {\r\n intersectionNumber += 1;\r\n }\r\n //console.log(\"intersectionCords\", intersectionCords);\r\n });\r\n //console.log(\"piece1Points before filter\", piece1Points.map(point => { return {x: point.x, y: point.y}}));\r\n //console.log(\"piece2Points before filter\", piece2Points.map(point => { return {x: point.x, y: point.y}}));\r\n\r\n function filterEqualAndPointsOnTheSameLine(pointsArray) {\r\n return pointsArray.filter((point, index, array) => {\r\n let prev = array[index - 1];\r\n let next = array[index + 1];\r\n if (!prev) { // include first point\r\n prev = array[array.length - 1];\r\n }\r\n if (!next) {\r\n next = array[0]; // next point for the last point in array is the first point in array\r\n }\r\n const isEqual = _.isEqual({x: point.x, y: point.y}, {x: prev.x, y: prev.y});\r\n const isOnTheSameLine = point.x === prev.x && point.x === next.x || point.y === prev.y && point.y === next.y\r\n return !isEqual && !isOnTheSameLine\r\n })\r\n }\r\n\r\n return [filterEqualAndPointsOnTheSameLine(piece1Points), filterEqualAndPointsOnTheSameLine(piece2Points)]\r\n }\r\n}\r\n\r\nexport default SeamTool\r\n","import store from \"../../../../../../../../store\";\r\nimport sqftEventManager from \"../../../../store/sqftEventManager\";\r\nimport {\r\n getMidPoint,\r\n getMousePositionOnField,\r\n getPointDistance,\r\n getPointField\r\n} from \"../../../../../../helpers/sqftHelper\";\r\nimport COLOR_THEMES from \"../../../../store/colorThemes\";\r\nimport sqftConfig from \"../../../../store/sqftConfig\";\r\nimport NumberText from \"../../../workspace/text/numberText\";\r\nimport workspace from \"../../../workspace\";\r\nimport {\r\n getClosestIntersectionPoints,\r\n getIntersectionPointsAndLines,\r\n} from \"./seamToolHelper\";\r\nimport ShapeHelper from \"../../../../../../helpers/shapeHelper\";\r\nimport RenderFigures from \"../../../../helpers/renderFigures\";\r\nimport config from \"../../../../store/sqftConfig\";\r\n\r\nclass SeamToolRender {\r\n __measurement1 = new NumberText(0, {}, {}, workspace, Function(), false);\r\n __measurement2 = new NumberText(0, {}, {}, workspace, Function(), false);\r\n seamTool;\r\n absoluteLinePoint1Pos = {};\r\n absoluteLinePoint2Pos = {};\r\n\r\n constructor(seamTool) {\r\n this.seamTool = seamTool;\r\n }\r\n\r\n renderSeamHorizontalIntersection = (ctx) => {\r\n const serverState = store.getState().serverState;\r\n const mousePos = sqftEventManager.getMousePos();\r\n const mousePosOnFiled = getMousePositionOnField(mousePos.x, mousePos.y);\r\n const pos = this.seamTool.__shape.getPosition();\r\n const mousePosOnShape = {x: mousePosOnFiled.x - pos.x, y: mousePosOnFiled.y - pos.y};\r\n this.absoluteLinePoint1Pos = null; //reset minLength for correct calculations without stacking\r\n this.absoluteLinePoint2Pos = null; //reset minLength for correct calculations without stacking\r\n\r\n // vertical line\r\n let verticalLinePoint1 = {x: -serverState.windowWidth, y: mousePosOnShape.y};\r\n let verticalLinePoint2 = {x: serverState.windowWidth, y: mousePosOnShape.y};\r\n let distancesToLines = ShapeHelper.getDistancesToPoint(mousePos);\r\n let snappingPossibilitiesToLines = ShapeHelper.getSnappingPossibilitiesToLines(distancesToLines);\r\n if (snappingPossibilitiesToLines.length > 0) {\r\n //console.log(\"distancesToLines\", distancesToLines);\r\n //console.log(\"getSnappingPossibilitiesToLines\", snappingPossibilitiesToLines);\r\n this.setAbsolutePosFromSnapPossibilities(snappingPossibilitiesToLines, verticalLinePoint1, verticalLinePoint2);\r\n verticalLinePoint1 = this.absoluteLinePoint1Pos;\r\n verticalLinePoint2 = this.absoluteLinePoint2Pos;\r\n }\r\n this.renderSeamDashedLine(ctx, verticalLinePoint1, verticalLinePoint2);\r\n\r\n // horizontal line\r\n let horizontalLinePoint1 = {x: mousePosOnShape.x , y: -serverState.windowHeight};\r\n let horizontalLinePoint2 = {x: mousePosOnShape.x, y: serverState.windowHeight};\r\n if (snappingPossibilitiesToLines.length > 0) {\r\n mousePosOnShape.y = this.absoluteLinePoint1Pos.y\r\n }\r\n this.renderSeamArrowLine(ctx, horizontalLinePoint1, horizontalLinePoint2, mousePos, mousePosOnShape);\r\n }\r\n\r\n renderSeamVerticalIntersection = (ctx) => {\r\n const serverState = store.getState().serverState;\r\n const mousePos = sqftEventManager.getMousePos();\r\n const mousePosOnFiled = getMousePositionOnField(mousePos.x, mousePos.y);\r\n const pos = this.seamTool.__shape.getPosition();\r\n const mousePosOnShape = {x: mousePosOnFiled.x - pos.x, y: mousePosOnFiled.y - pos.y};\r\n this.absoluteLinePoint1Pos = null; //reset minLength for correct calculations without stacking\r\n this.absoluteLinePoint2Pos = null; //reset minLength for correct calculations without stacking\r\n\r\n // vertical line\r\n let verticalLinePoint1 = {x: mousePosOnShape.x, y: -serverState.windowHeight};\r\n let verticalLinePoint2 = {x: mousePosOnShape.x, y: serverState.windowHeight};\r\n let distancesToLines = ShapeHelper.getDistancesToPoint(mousePos);\r\n let snappingPossibilitiesToLines = ShapeHelper.getSnappingPossibilitiesToLines(distancesToLines);\r\n if (snappingPossibilitiesToLines.length > 0) {\r\n //console.log(\"distancesToLines\", distancesToLines);\r\n //console.log(\"getSnappingPossibilitiesToLines\", snappingPossibilitiesToLines);\r\n this.setAbsolutePosFromSnapPossibilities(snappingPossibilitiesToLines, verticalLinePoint1, verticalLinePoint2);\r\n verticalLinePoint1 = this.absoluteLinePoint1Pos;\r\n verticalLinePoint2 = this.absoluteLinePoint2Pos;\r\n }\r\n this.renderSeamDashedLine(ctx, verticalLinePoint1, verticalLinePoint2);\r\n\r\n // horizontal line\r\n let horizontalLinePoint1 = {x: -serverState.windowWidth , y: mousePosOnShape.y};\r\n let horizontalLinePoint2 = {x: serverState.windowWidth, y: mousePosOnShape.y};\r\n if (snappingPossibilitiesToLines.length > 0) {\r\n mousePosOnShape.x = this.absoluteLinePoint1Pos.x\r\n }\r\n this.renderSeamArrowLine(ctx, horizontalLinePoint1, horizontalLinePoint2, mousePos, mousePosOnShape);\r\n };\r\n\r\n setAbsolutePosFromSnapPossibilities = (snapPossibilities, verticalLinePoint1, verticalLinePoint2) => {\r\n if (snapPossibilities.length > 0) {\r\n let scale = sqftConfig.scale;\r\n let absoluteLinePoint1Pos = {...verticalLinePoint1};\r\n let absoluteLinePoint2Pos = {...verticalLinePoint2};\r\n snapPossibilities.forEach((snap) => {\r\n switch (snap.orientation) {\r\n case \"horizontal\":\r\n absoluteLinePoint1Pos.y -= snap.diff / scale\r\n absoluteLinePoint2Pos.y -= snap.diff / scale\r\n break;\r\n case \"vertical\":\r\n absoluteLinePoint1Pos.x -= snap.diff / scale\r\n absoluteLinePoint2Pos.x -= snap.diff / scale\r\n break;\r\n }\r\n this.absoluteLinePoint1Pos = absoluteLinePoint1Pos;\r\n this.absoluteLinePoint2Pos = absoluteLinePoint2Pos;\r\n })\r\n }\r\n }\r\n\r\n renderSeamDashedLine = (ctx, verticalLinePoint1, verticalLinePoint2) => {\r\n let [intersection1, intersection2] = getIntersectionPointsAndLines(\r\n this.seamTool.__shape.getLines(), verticalLinePoint1, verticalLinePoint2\r\n );\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n\r\n if (intersection1 && intersection2) {\r\n let intersectionYPoint1 = intersection1.intersectionCords;\r\n let intersectionYPoint2 = intersection2.intersectionCords;\r\n let intersectionYPoint1PointField = getPointField(intersectionYPoint1.x, intersectionYPoint1.y, this.seamTool.__shape);\r\n let intersectionYPoint2PointField = getPointField(intersectionYPoint2.x, intersectionYPoint2.y, this.seamTool.__shape);\r\n ctx.beginPath();\r\n ctx.setLineDash([10, 10]);\r\n ctx.moveTo(intersectionYPoint1PointField.x , intersectionYPoint1PointField.y);\r\n ctx.lineTo(intersectionYPoint2PointField.x, intersectionYPoint2PointField.y);\r\n ctx.closePath();\r\n ctx.stroke();\r\n ctx.setLineDash([0]);\r\n }\r\n }\r\n\r\n renderSeamArrowLine = (ctx, horizontalLinePoint1, horizontalLinePoint2, mousePos, mousePosOnShape) => {\r\n let mousePosOnShapePointField = getPointField(mousePosOnShape.x, mousePosOnShape.y, this.seamTool.__shape);\r\n let [intersectionXPointAndLine1, intersectionXPointAndLine2] = getClosestIntersectionPoints(\r\n this.seamTool.__shape.getLines(), horizontalLinePoint1, horizontalLinePoint2, mousePosOnShape\r\n );\r\n\r\n if (intersectionXPointAndLine1 && intersectionXPointAndLine2) {\r\n let intersectionXPoint1 = intersectionXPointAndLine1.intersectionCords;\r\n let intersectionXPoint2 = intersectionXPointAndLine2.intersectionCords;\r\n let intersectionXPoint1PointField = getPointField(intersectionXPoint1.x, intersectionXPoint1.y, this.seamTool.__shape);\r\n let intersectionXPoint2PointField = getPointField(intersectionXPoint2.x, intersectionXPoint2.y, this.seamTool.__shape);\r\n ctx.beginPath();\r\n RenderFigures.drawArrow(ctx,\r\n intersectionXPoint1PointField.x,\r\n intersectionXPoint1PointField.y,\r\n mousePosOnShapePointField.x,\r\n mousePosOnShapePointField.y\r\n );\r\n let measurement1Midpoint = getMidPoint(mousePosOnShapePointField, intersectionXPoint1PointField);\r\n let measurement1Distance = getPointDistance(intersectionXPoint1, mousePosOnShape);\r\n RenderFigures.drawArrow(ctx,\r\n mousePosOnShapePointField.x,\r\n mousePosOnShapePointField.y,\r\n intersectionXPoint2PointField.x,\r\n intersectionXPoint2PointField.y\r\n );\r\n let measurement2Midpoint = getMidPoint(mousePosOnShapePointField, intersectionXPoint2PointField);\r\n let measurement2Distance = getPointDistance(intersectionXPoint2, mousePosOnShape);\r\n ctx.closePath();\r\n ctx.stroke();\r\n\r\n this.renderMeasurements(ctx, measurement1Midpoint, measurement1Distance, measurement2Midpoint, measurement2Distance)\r\n }\r\n }\r\n\r\n renderMeasurements = (ctx, measurement1Midpoint, measurement1Distance, measurement2Midpoint, measurement2Distance) => {\r\n let measurement1Pos = getMousePositionOnField(measurement1Midpoint.x, measurement1Midpoint.y);\r\n let measurement2Pos = getMousePositionOnField(measurement2Midpoint.x, measurement2Midpoint.y);\r\n\r\n this.__measurement1.pos.x = measurement1Pos.x;\r\n this.__measurement1.pos.y = measurement1Pos.y;\r\n this.__measurement1.value = Math.round(config.getMeasureMultiplier() * measurement1Distance);\r\n\r\n this.__measurement2.pos.x = measurement2Pos.x;\r\n this.__measurement2.pos.y = measurement2Pos.y;\r\n this.__measurement2.value = Math.round(config.getMeasureMultiplier() * measurement2Distance);\r\n\r\n this.__measurement1.render(ctx);\r\n this.__measurement2.render(ctx);\r\n }\r\n}\r\n\r\nexport default SeamToolRender\r\n","import workspace from \"../../workspace\";\r\nimport RenderParts from \"../../../helpers/renderParts\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\n\r\nclass ShapeMeasurementArrows {\r\n __shape;\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n }\r\n\r\n import = (data) => {\r\n void data\r\n }\r\n\r\n render = (ctx) => {\r\n if (workspace && workspace.getState().loading) return;\r\n //this.renderDimensionsInsideShape(ctx);\r\n if (!this.__shape.shapeAbsolute.getAbsolutePosition() && !this.__shape.shapeAbsolute.getSnappedWithShape()) {\r\n this.renderDimensionsOutsideShape(ctx);\r\n }\r\n }\r\n\r\n renderMeasurementArrows = (ctx) => {\r\n const points = this.__shape.getPointsPointField();\r\n RenderFigures.drawArrowsAroundPoints(ctx, points, 10)\r\n }\r\n\r\n renderMeasurementLength = (ctx) => {\r\n const points = this.__shape.getPointsPointField();\r\n RenderParts.drawMeasurementAroundPoints(ctx, points);\r\n }\r\n\r\n renderDimensionsOutsideShape = (ctx) => {\r\n ctx.save();\r\n ctx.beginPath();\r\n this.renderMeasurementArrows(ctx);\r\n this.renderMeasurementLength(ctx);\r\n ctx.closePath();\r\n ctx.restore();\r\n }\r\n}\r\n\r\nexport default ShapeMeasurementArrows\r\n","import {RENDER_TEMPLATES} from \"../../../../../constants\";\r\nimport workspace from \"../../workspace\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport COLOR_THEMES from \"../../../store/colorThemes\";\r\nimport store from \"../../../../../../../store\";\r\n\r\nexport default class ShapeEditable {\r\n __shape;\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n }\r\n\r\n render = (ctx, template= RENDER_TEMPLATES.default) => {\r\n if (workspace && workspace.getState().loading) return;\r\n let lines = this.__shape.getLines();\r\n\r\n ctx.beginPath();\r\n for (let i = 0; i < lines.length; i++) {\r\n lines[i].render(ctx, i > 0);\r\n }\r\n if (this.__shape.isHovering() && workspace.getHoverShape() === this.__shape ) {\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].active_hover;\r\n } else {\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].active;\r\n }\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].active_disabled;\r\n switch (template) {\r\n case RENDER_TEMPLATES.linesOnly:\r\n ctx.lineWidth = 0;\r\n ctx.closePath();\r\n break;\r\n case RENDER_TEMPLATES.default:\r\n default:\r\n //ctx.fill();\r\n ctx.lineWidth = 2; // Math.ceil(scale);\r\n ctx.closePath();\r\n ctx.stroke();\r\n break;\r\n }\r\n\r\n if (this.__shape.isHovering() && workspace.getHoveredSqftShape() === this.__shape ) {\r\n let sqftMenuState = store.getState().sqftMenuState;\r\n void sqftMenuState;\r\n }\r\n };\r\n\r\n // renderLinesBetweenPoints = (ctx) => {\r\n // ctx.beginPath();\r\n // ctx.lineWidth = lineWidth;\r\n // ctx.strokeStyle = color;\r\n // drawLines(ctx);\r\n //\r\n // ctx.stroke();\r\n // };\r\n}\r\n","import workspace from \"../../workspace\";\r\nimport RenderParts from \"../../../helpers/renderParts\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\nimport COLOR_THEMES from \"../../../store/colorThemes\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\n\r\nclass ShapeSpacer {\r\n __shape;\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n }\r\n\r\n import = (data) => {\r\n void data\r\n }\r\n\r\n export = () => {\r\n return {\r\n }\r\n }\r\n\r\n render = (ctx, staticOffset = null) => {\r\n if (workspace && workspace.getState().loading) return;\r\n\r\n this.renderBorders(ctx, staticOffset);\r\n if (!this.__shape.shapeAbsolute.getAbsolutePosition() && !this.__shape.shapeAbsolute.getSnappedWithShape()) {\r\n //this.renderCrownMolding(ctx);\r\n this.renderDimensionsOutsideShape(ctx);\r\n }\r\n }\r\n\r\n renderBorders = (ctx,\r\n staticOffset = null,\r\n ) => {\r\n RenderParts.drawSpacerBorders(ctx, staticOffset, this.__shape);\r\n };\r\n\r\n renderDimensionsOutsideShape = (ctx) => {\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary_hover;\r\n this.renderMeasurementArrows(ctx);\r\n this.renderMeasurementLength(ctx);\r\n ctx.closePath();\r\n ctx.restore();\r\n }\r\n\r\n renderMeasurementArrows = (ctx) => {\r\n const points = this.__shape.getPointsPointField();\r\n void ctx; void points;\r\n RenderFigures.drawArrowsAroundPoints(ctx, points, 10)\r\n }\r\n\r\n renderMeasurementLength = (ctx) => {\r\n const points = this.__shape.getPointsPointField();\r\n RenderParts.drawMeasurementAroundPoints(ctx, points);\r\n }\r\n\r\n}\r\n\r\nexport default ShapeSpacer\r\n","import SqftStore from \"../../../store/sqftStore\";\r\nimport sqftSlabManager from \"../../../store/sqftSlabManager\";\r\nimport sqftShapeIntersectionsManager from \"../../../store/sqftShapeIntersectionsManager\";\r\n\r\nexport default class ShapeIntersections {\r\n __shape;\r\n overlappedWithShapeIds = [];\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n }\r\n\r\n setOverlappedWithShapeIds = (ids) => {\r\n this.overlappedWithShapeIds = ids\r\n }\r\n\r\n addOverlappedWithShape = (id) => {\r\n if (!this.overlappedWithShapeIds.includes(id)) {\r\n this.overlappedWithShapeIds.push(id);\r\n }\r\n }\r\n\r\n removeOverlappedWithShape = (id) => {\r\n if (this.overlappedWithShapeIds.includes(id)) {\r\n this.overlappedWithShapeIds = this.overlappedWithShapeIds.filter(overlappedId => id !== overlappedId);\r\n }\r\n }\r\n\r\n handleSlabPlaceholderIntersections = () => {\r\n if (SqftStore.isSlabMode()) {\r\n const slabPlaceHolderShapes = sqftSlabManager.getSlabPlaceHolderShapes();\r\n if (slabPlaceHolderShapes.length) {\r\n\r\n // if (this.__shape.partId === SHAPE_PART_ID.slabPlaceHolder) {\r\n // this.onSlabPlaceHolderMove();\r\n // } else {\r\n // this.onCountertopShapeMove(slabPlaceHolderShapes);\r\n // }\r\n sqftShapeIntersectionsManager.updateShapesIntersections();\r\n sqftShapeIntersectionsManager.updateSlabPlaceholderFeatureId();\r\n\r\n const errorCallback = () => {\r\n this.__shape.shapeMemory.restoreShapePosition();\r\n this.__shape.resetMouseDown();\r\n sqftShapeIntersectionsManager.updateShapesIntersections();\r\n }\r\n\r\n sqftShapeIntersectionsManager.showSlabPlaceHolderErrorMessage(slabPlaceHolderShapes, errorCallback);\r\n }\r\n }\r\n }\r\n\r\n // onSlabPlaceHolderMove = () => {\r\n // const counterTopShapes = sqftShapeManager.getCounterTopShapes();\r\n // let overlapsWithIds = [];\r\n // this.setOverlappedWithShapeIds([]);\r\n //\r\n // for (const counterTopShape of counterTopShapes) {\r\n // const shapeIntersections = ShapeHelper.getTwoShapesIntersections(this.__shape, counterTopShape);\r\n // const shapeIds = Object.keys(shapeIntersections);\r\n // if (shapeIds.length) {\r\n // this.__shape.setFeatureId(_.clone(counterTopShape.featureId))\r\n // overlapsWithIds.push(shapeIds[0]);\r\n // }\r\n // //console.log(\"shapeIntersections\", shapeIntersections);\r\n // }\r\n // this.setOverlappedWithShapeIds(overlapsWithIds);\r\n // }\r\n //\r\n // onCountertopShapeMove = (slabPlaceHolderShapes) => {\r\n // for (const slabPlaceHolderShape of slabPlaceHolderShapes) {\r\n // slabPlaceHolderShape.shapeIntersections.removeOverlappedWithShape(this.__shape.id);\r\n // const shapeIntersections = ShapeHelper.getTwoShapesIntersections(slabPlaceHolderShape, this.__shape);\r\n // //console.log(\"shapeIntersections\", shapeIntersections);\r\n // const shapeIds = Object.keys(shapeIntersections);\r\n // if (shapeIds.length) {\r\n // slabPlaceHolderShape.setFeatureId(_.clone(this.__shape.featureId));\r\n // slabPlaceHolderShape.shapeIntersections.addOverlappedWithShape(+shapeIds[0]);\r\n // }\r\n // }\r\n // }\r\n\r\n\r\n}\r\n","import _ from 'lodash';\r\n\r\nexport default class ShapeMemory {\r\n __shape;\r\n memory = {\r\n pos: {x: 0, y: 0},\r\n slabPos: {x: 0, y: 0},\r\n absolutePos: {x: 0, y: 0}\r\n };\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n }\r\n\r\n rememberShapePosition = () => {\r\n this.memory = {\r\n pos: _.clone(this.__shape.pos),\r\n slabPos: _.clone(this.__shape.slabPos),\r\n shapeSlabAbsolutePos: _.clone(this.__shape.shapeSlab.getAbsolutePosition()),\r\n shapeAbsolutePos: _.clone(this.__shape.shapeAbsolute.getAbsolutePosition())\r\n }\r\n }\r\n\r\n restoreShapePosition = () => {\r\n this.__shape.pos = _.clone(this.memory.pos)\r\n this.__shape.slabPos = _.clone(this.memory.slabPos)\r\n this.__shape.shapeSlab.setAbsolutePos( _.clone(this.memory.shapeSlabAbsolutePos));\r\n this.__shape.shapeAbsolute.setAbsolutePos( _.clone(this.memory.shapeAbsolutePos));\r\n }\r\n}\r\n","import workspace from \"../../workspace\";\r\nimport {isDisabledInPopupShouldBeHidden} from \"../../../../../constants\";\r\nimport {getPointField, isDisabledInPopupWithParents} from \"../../../../../helpers/sqftHelper\";\r\nimport SqftStore from \"../../../store/sqftStore\";\r\nimport config from \"../../../store/sqftConfig\";\r\nimport COLOR_THEMES from \"../../../store/colorThemes\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport sqftEventManager from \"../../../store/sqftEventManager\";\r\nimport BlinkingHighlight from \"../../../helpers/commonParts/blink\";\r\n\r\nexport default class ShapeRender {\r\n __shape;\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n this.blink = new BlinkingHighlight;\r\n }\r\n\r\n render(ctx) {\r\n // if (sqftStore && sqftStore.getState().loading) return;\r\n if (workspace && workspace.getState().loading) {\r\n return\r\n }\r\n if (isDisabledInPopupShouldBeHidden() && isDisabledInPopupWithParents(this)) {\r\n return\r\n }\r\n\r\n const isShowSlabTool = SqftStore.isSlabMode();\r\n const shapeState = this.__shape.getState();\r\n this.renderDevMode(ctx);\r\n\r\n if (isShowSlabTool) {\r\n return this.__shape.shapeSlab.render(ctx);\r\n } else if (shapeState.isPointsMovable) {\r\n return this.__shape.shapeEditable.render(ctx);\r\n } else if (shapeState.isRotatable) {\r\n return this.__shape.shapeRotatable.render(ctx);\r\n } else if (this.__shape.shapeParams !== undefined && this.__shape.shapeParams.shapeCabinet && !this.__shape.shapeParams.isSpacer) {\r\n return this.__shape.shapeCabinet.render(ctx);\r\n } else if (this.__shape.shapeParams !== undefined && this.__shape.shapeParams.isSpacer && this.__shape.shapeSpacer) {\r\n return this.__shape.shapeSpacer.render(ctx);\r\n }\r\n\r\n this.renderRegularShape(ctx);\r\n }\r\n\r\n renderDevMode = (ctx) => {\r\n if (config.isDevMode()) {\r\n // render center pos\r\n ctx.save();\r\n ctx.beginPath();\r\n let pf = getPointField(this.__shape.pos.x, this.__shape.pos.y);\r\n ctx.arc(pf.x, pf.y, 5, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n ctx.closePath();\r\n\r\n ctx.beginPath();\r\n let shapeCenter = this.__shape.getCenter();\r\n const pos = getPointField(shapeCenter.x, shapeCenter.y, this.__shape);\r\n ctx.arc(pos.x, pos.y, 12, 0, 2 * Math.PI);\r\n\r\n ctx.stroke();\r\n ctx.closePath();\r\n ctx.restore();\r\n\r\n // render shape group\r\n if (this.__shape.getSnappedShapeGroup) {\r\n const renderText = this.__shape.getSnappedShapeGroup() + \".group\";\r\n const mText = ctx.measureText(renderText);\r\n ctx.wrapText(renderText, pos.x, pos.y, mText, 16);\r\n }\r\n\r\n // render shape center\r\n // ctx.beginPath();\r\n // let position = this.__shape.getOffset();\r\n // ctx.arc(position.x, position.y, 50, 0, 2 * Math.PI);\r\n //\r\n // ctx.stroke();\r\n // ctx.closePath();\r\n }\r\n }\r\n\r\n renderRegularShape = (ctx) => {\r\n // const scale = sqftConfig.scale;\r\n // const canvas = sqftStore.getCanvas();\r\n const lines = this.__shape.getLines();\r\n const shapeDesign = this.__shape.getDesign();\r\n const shapeColorSet = this.__shape.getColorset();\r\n\r\n ctx.save();\r\n ctx.beginPath();\r\n for (let i = 0; i < lines.length; i++) {\r\n lines[i].render(ctx, i > 0);\r\n }\r\n if (this.__shape.isHovering() && workspace.getHoverShape() === this.__shape) {\r\n ctx.strokeStyle = shapeColorSet ? shapeColorSet.primary_border : COLOR_THEMES[sqftConfig.activeTheme].primary_hover;\r\n } else {\r\n ctx.strokeStyle = shapeColorSet ? shapeColorSet.primary_border : COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n }\r\n ctx.lineWidth = 2; // Math.ceil(scale);\r\n ctx.closePath();\r\n ctx.stroke();\r\n\r\n if (this.__shape.isHoveringOnlyShape()\r\n && workspace.getHoverShape()\r\n && !sqftConfig.highlight.rotateAngle\r\n && ( sqftEventManager.getCursor().indexOf(\"move\") >= 0\r\n || sqftEventManager.getCursor().indexOf(\"rotate-left\") >= 0\r\n || sqftEventManager.getCursor().indexOf(\"delete\") >= 0\r\n )\r\n ) {\r\n if (sqftEventManager.getCursor().indexOf(\"delete\") >= 0\r\n && !workspace.textBoxManager.isBoxActive()\r\n && !this.__shape.getHoverLabel()\r\n ) {\r\n const hoverLine = this.__shape.getHoverSegment(),\r\n hoverPoint = this.__shape.getHoverPointOnClick();\r\n\r\n // if ((hoverLine && hoverLine.getAttachedItems()) || (hoverPoint && (hoverPoint.getAngle() || hoverPoint.getArcLength()))) {\r\n if (hoverLine || hoverPoint) {\r\n ctx.fillStyle = shapeColorSet ? shapeColorSet.primary_hover : shapeDesign.fillColor;\r\n } else {\r\n ctx.fillStyle = shapeDesign.redHoverShapeColor;\r\n }\r\n } else {\r\n ctx.fillStyle = shapeColorSet ? shapeColorSet.primary_hover : shapeDesign.hoverShapeColor;\r\n }\r\n } else {\r\n if (this.blink.isHighlightedLightOn) {\r\n ctx.fillStyle = shapeColorSet ? shapeColorSet.primary_hover : shapeDesign.fillColor;\r\n } else {\r\n ctx.fillStyle = shapeColorSet ? shapeColorSet.primary : shapeDesign.fillColor;\r\n }\r\n }\r\n ctx.fill();\r\n ctx.restore();\r\n\r\n for (let i = 0; i < lines.length; i++) {\r\n lines[i].renderLineField(ctx); // renderLineField should be called after render method and ctx.fill()\r\n }\r\n\r\n // red highlight bumpout\r\n lines.forEach((line) => {\r\n if (line.isWithBumpout()) {\r\n if (sqftEventManager.getCursor().indexOf(\"delete\") >= 0 && line.bumpoutOverlay.isHoveringRect() && !workspace.textBoxManager.isBoxActive()) {\r\n line.bumpoutOverlay.drawBumpoutRect(ctx);\r\n }\r\n }\r\n });\r\n\r\n //green highlight selected part\r\n if (sqftConfig.highlight.rotateAngle) {\r\n // todo fix bumpout rotation and remove this\r\n if (!this.__shape.isWithBumpout() && !this.__shape.isWithBumpout() && !this.__shape.isPointsMoved && this.__shape.rotatedDegrees === 0) {\r\n /////////////////////////////////////////\r\n for (const rotateAnglePart of this.__shape.rotateAngleParts) {\r\n if (this.__shape.isAngleRotatedPartsWithCorner(rotateAnglePart)) {\r\n continue;\r\n }\r\n if (rotateAnglePart.isActive || rotateAnglePart.isHovered) {\r\n this.__shape.renderAnglePartActive(rotateAnglePart, ctx);\r\n }\r\n if (rotateAnglePart.isPulsing) { //green highlight selected part intro\r\n this.__shape.renderAnglePartActive(rotateAnglePart, ctx);\r\n setTimeout(() => {\r\n rotateAnglePart.isPulsing = false;\r\n }, 1000);\r\n }\r\n }\r\n }\r\n }\r\n\r\n //render counter?\r\n // var vertices = [];\r\n // for (var i = 0; i < lines.length; i++) {\r\n // var s = lines[i];\r\n // vertices.push([s.from.x, s.from.y]);\r\n // }\r\n //var newTriangles = earcut([vertices]);\r\n\r\n if (sqftConfig.workspace.debug) {\r\n ctx.beginPath();\r\n // for (var n = 0; n < newTriangles.length; n+=3) {\r\n // var lines = new triangle(newTriangles[n], newTriangles[n+1], newTriangles[n+2]);\r\n // for (let i = 0; i < lines.length; i++) {\r\n // var l = lines[i];\r\n // l.init(this.__shape, true); //initialize as temporary line\r\n // l.render(ctx, false); //render temp line\r\n // }\r\n // }\r\n ctx.lineWidth = 1;\r\n ctx.closePath();\r\n ctx.strokeStyle = \"#FF0000\";\r\n ctx.stroke();\r\n }\r\n //return newTriangles;\r\n };\r\n}\r\n","import {className} from \"../../misc/utils\";\r\n\r\nexport class Exception {\r\n message = '';\r\n\r\n /**\r\n *\r\n * @param message {string}\r\n */\r\n constructor(message) {\r\n this.message = message;\r\n }\r\n\r\n static NotImplemented(message) {\r\n console.error(message || \"Not implemented.\");\r\n }\r\n\r\n static NotImplementedBaseClass(instance) {\r\n console.error(`Not implemented in base class ${className(instance)}`);\r\n }\r\n}\r\n\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {createParentPositions} from \"../../constants\";\r\n\r\nexport default class VanityHandle extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_handle';\r\n this.partName = 'Handle';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_handle\";\r\n this.dbName = \"Vanity Handle\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = false;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const vanityParent = this.getParent();\r\n conditions.push({\r\n propName: \"VanitySize\",\r\n propValue: vanityParent.counterTopSize(this)\r\n })\r\n conditions.push({\r\n propName: \"CabinetStyle\",\r\n propValue: vanityParent.vanityCabinet && vanityParent.vanityCabinet.activeFeature\r\n && vanityParent.vanityCabinet.activeFeature.metaData[\"CabinetStyle\"]\r\n ? vanityParent.vanityCabinet.activeFeature.metaData[\"CabinetStyle\"]\r\n : \"No handles\" // if no cabinet style - hide handles\r\n });\r\n return conditions\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport store from \"../../../../../store\";\r\nimport {Layout} from \"../../layout\";\r\nimport {createParentPositions, METADATA, SIDE_POSITIONS, VANITY_TYPES, LOOK_ROOM_TYPES} from \"../../constants\";\r\nimport {updateSinkWithNewFeature} from \"../../../lookNavigation/lookNavigationFunctions\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\n\r\nexport default class VanityCabinet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_cabinet';\r\n this.partName = 'Vanity Cabinet';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_cabinet\";\r\n this.dbName = \"Vanitie\";\r\n this.homePageTitle = 'Vanity Bases';\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n this.canUseWizard = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.groupName === \"Vanitie\") {\r\n dbFeature.groupName = \"Vanity\"\r\n }\r\n if (!dbFeature.metaData[\"MatchingFeature\"]) {\r\n dbFeature.metaData[\"MatchingFeature\"] = [METADATA.NO];\r\n }\r\n if (!dbFeature.metaData[\"Side\"]) {\r\n dbFeature.metaData[\"Side\"] = [METADATA.LeftSide];\r\n }\r\n if (Array.isArray(dbFeature.metaData[\"VanitySize\"]) && dbFeature.metaData[\"VanitySize\"][0]) {\r\n dbFeature.metaData[\"VanityWidth\"] = +dbFeature.metaData[\"VanitySize\"][0];\r\n if (dbFeature.metaData[\"VanityWidth\"] === 72) {\r\n dbFeature.metaData[\"VanityWidth\"] = 64;\r\n }\r\n } else if (dbFeature.metaData[\"VanitySize\"]) {\r\n console.log(\"dbFeature.metaData[\\\"VanitySize\\\"] should be an array!\", dbFeature.metaData[\"VanitySize\"]);\r\n }\r\n return super.load(dbFeature);\r\n }\r\n\r\n disabledClick() {\r\n const vanityParent = this.getParent();\r\n if (getCurrentRoomType(vanityParent.layout) === LOOK_ROOM_TYPES.as) {\r\n this.toggleLayerPositions();\r\n [\"drawerPull\", \"vanityLegs\", \"vanityMiddle\"].forEach(name => {\r\n if (vanityParent && vanityParent[name]) {\r\n vanityParent[name].disabled = this.disabled || !vanityParent[name].canBeEnabled(); // true or check if it can be enabled;\r\n }\r\n });\r\n if (this.activeFeature && this.activeFeature.metaData[\"MatchingFeature\"] && this.activeFeature.metaData[\"MatchingFeature\"].includes(METADATA.NO)) {\r\n [\"sink\", \"countertop\", \"vanityPTrap\", \"faucet\"].forEach(name => {\r\n if (vanityParent && vanityParent[name]) {\r\n vanityParent[name].disabled = this.disabled || !vanityParent[name].canBeEnabled(); // true or check if it can be enabled;\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked, updateSink = true) {\r\n const vanityParent = this.getParent().getParent();\r\n vanityParent.vanity_type = VANITY_TYPES.vanity_cabinet;\r\n super.handleClick(ignoreLocked);\r\n if (updateSink) {\r\n updateSinkWithNewFeature(this);\r\n }\r\n vanityParent.updateVanityParts();\r\n }\r\n\r\n // navigationSubItems() {\r\n // return super.navigationSubItemsWithFilter('VanitySize', this.getParent().counterTopSize(this));\r\n // }\r\n\r\n // disabledClick() {\r\n // this.getParent().toggleVanityParts(this.disabled);\r\n // }\r\n\r\n hideLayerCondition() {\r\n const vanityParent = this.getParent();\r\n return (getCurrentRoomType(vanityParent.layout) === LOOK_ROOM_TYPES.as) && (vanityParent.vanity_type !== VANITY_TYPES.vanity_cabinet)\r\n }\r\n\r\n setActiveFeatureByFilter(filterName, filterValue) {\r\n\r\n // console.log('filterName', filterName);\r\n // console.log('filterValue', filterValue);\r\n\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const group = filterGroups.find(group => group.name === filterName);\r\n const groupId = group.id;\r\n const filterValueId = Layout.getfilterValueIdByValue(groupId, filterValue);\r\n const filteredFeatures = this.features.filter(\r\n feature => feature.dbFeature && feature.dbFeature.filterValueIDs[groupId] && feature.dbFeature.filterValueIDs[groupId].includes(filterValueId)\r\n ); // find among all features only those, who have filter with value === props size\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, null, \"ustom\")) {\r\n this.activeFeature = filteredFeatures[0];\r\n const placeholderAvailableFeatures = filteredFeatures.filter(feature => {\r\n return feature.dbFeature.displayName.includes(\"laceholder\") && feature.dbFeature.displayName.includes(\"ustom\")\r\n });\r\n this.placeholderFeature = placeholderAvailableFeatures[0];\r\n }\r\n }\r\n\r\n // getAvailableFeatures() {\r\n // return this.features.filter(f => f.vanitySize+'in' === this.getParent().counterTopSize(this));\r\n // }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as && parentObject.layerPosition === SIDE_POSITIONS[0]) {\r\n return false\r\n }\r\n return this.getParent().vanity_type === VANITY_TYPES.vanity_cabinet\r\n }\r\n}\r\n","import snakeCase from \"lodash/snakeCase\";\r\nimport {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport NonVisualizerSubPart from \"../subparts/nonVisualizerSubPart\";\r\n\r\nexport default class Other extends Part {\r\n static id = 'Other';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Other';\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n // console.log(\"load other\", dbFeature.groupName);\r\n const partId = snakeCase(dbFeature.groupName);\r\n let relatedItem = this.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, dbFeature.groupName);\r\n this.relatedItems.push(relatedItem);\r\n }\r\n relatedItem.getParent = () => this;\r\n relatedItem.load(dbFeature);\r\n return true\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport BackgroundBG from \"../subparts/backgrounds/BackgroundBG\";\r\n\r\nexport default class Background extends Part {\r\n static id = 'Background';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Background';\r\n this.categoryEnabled = false;\r\n this.relatedGroupNames = [\"Background\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Background\":\r\n switch (true) {\r\n case (!loadFeature || (dbFeature.displayName && dbFeature.displayName.includes(\"Background - BG\"))):\r\n relatedItemName = \"backgroundBG\";\r\n RelatedItemClass = BackgroundBG;\r\n break;\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {IS_BATHROOM_OLD_BV_SCENE} from \"../../../../../config\";\r\n\r\nexport default class BackgroundBG extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'background_bg';\r\n this.partName = 'Background BG';\r\n this.windowNeededLayouts = [1];\r\n }\r\n\r\n getArrayOfConditions() {\r\n const layout = this.getParent().layout;\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n // const windowParent = layout.parts[WindowParent.id];\r\n const showerParent = layout.parts[Shower.id];\r\n\r\n // const windowBody = windowParent.windowBody;\r\n // if (windowBody && this.windowNeededLayouts.includes(layout.type)) {\r\n // conditions.push({\r\n // propName: \"Window\",\r\n // propValue: (windowBody && windowBody.activeFeature && windowBody.disabled) ? \"Off\" : \"On\"\r\n // })\r\n // }\r\n\r\n if (showerParent && showerParent.showerSize() && !IS_BATHROOM_OLD_BV_SCENE) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n })\r\n }\r\n\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Background.BackgroundBG;\r\n }\r\n }\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class BathTubLiner extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"bathtub_liner\";\r\n this.bottomTubId = \"bathtub_liner\";\r\n this.visible = true;\r\n this.partName = \"Tub Liner\";\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.bathtub_liner\";\r\n this.dbName = \"Bathtub Liner\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n }\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\nimport {IS_LIXIL_SERVERS} from \"../../../../../config\";\r\n\r\nexport default class ReplacementTub extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'replacement_tub';\r\n this.bottomTubId = \"replacement_tub\";\r\n this.visible = true;\r\n this.partName = 'Replacement Tub';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.replacement_tub\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n this.canBeDisabled = IS_LIXIL_SERVERS; // request by Lixil\r\n if (isChild) {\r\n this.oneLayerPosition = true;\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationSubItemsWithSides(filters, searchText);\r\n }\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\nimport {getSkuWithoutDot} from \"../../../lookNavigation/lookFunctions2\";\r\n\r\nexport default class WalkInTub extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'walk_in_tub';\r\n this.bottomTubId = \"walk_in_tub\";\r\n this.visible = true;\r\n this.partName = 'Walk In Tub';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.walk_in_tub\";\r\n this.isStoneFeature = false;\r\n if (isChild) {\r\n this.oneLayerPosition = true;\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n if (dbFeature.metaData[\"ActualDisplayedName\"] && dbFeature.metaData[\"ActualDisplayedName\"][0]) {\r\n dbFeature.metaData[\"ActualDisplayedName\"] = getSkuWithoutDot(dbFeature.metaData[\"ActualDisplayedName\"][0]);\r\n } else {\r\n dbFeature.metaData[\"ActualDisplayedName\"] = getSkuWithoutDot(dbFeature.sharedFeatureName);\r\n }\r\n return super.load_(dbFeature, new WalkInTub());\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationSubItemsWithSides(filters, searchText);\r\n }\r\n\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class JettedTub extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'jetted_tub';\r\n this.bottomTubId = \"jetted_tub\";\r\n this.visible = true;\r\n this.partName = 'Jetted Tub';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.jetted_tub\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class WallConfiguration extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'wall_configuration';\r\n this.partName = 'Wall Configuration';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.wall_configuration\";\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n this.createdManually = true;\r\n }\r\n\r\n // setLayers(layout) {\r\n // this.activeFeature = this.features.find((feature) => {\r\n // return feature.partName === this.getParent().showerBody.activeFeature.partName // set the same glass as Body\r\n // });\r\n // return super.setLayers(layout);\r\n // }\r\n\r\n handleClick() {\r\n super.handleClick();\r\n const showerTubComboParent = this.getParent().getParent();\r\n showerTubComboParent.setShowerTubCombo();\r\n showerTubComboParent.setShowerSize(this.leftShowerWallType, this.showerComboSize);\r\n this.featureClicked();\r\n }\r\n\r\n setZIndex() {}\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class WalkInTubFixture extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'walk_in_tub_fixture';\r\n this.visible = true;\r\n this.partName = 'Walk In Tub Fixture';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.walk_in_tub_fixture\";\r\n this.bottomTubId = \"walk_in_tub\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerComboParent = this.getParent();\r\n if (showerComboParent.walkInTub && showerComboParent.walkInTub.activeFeature\r\n && !showerComboParent.walkInTub.disabled) {\r\n conditions.push({\r\n propName: \"MatchingFeature\",\r\n propValue: showerComboParent.walkInTub.activeFeature.metaData[\"ActualDisplayedName\"]\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {createParentPositions, LOOK_ROOM_TYPES, METADATA, ShowerHeadTypes} from \"../../constants\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\n\r\nexport default class ReplacementTubFixture extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'replacement_tub_fixture';\r\n this.visible = true;\r\n this.partName = 'Replacement Tub Fixture';\r\n this.dbName = 'Replacement tub Fixture';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.replacement_tub_fixture\";\r\n this.bottomTubId = \"replacement_tub\";\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Side\"] || (Array.isArray(dbFeature.metaData[\"Side\"]) && dbFeature.metaData[\"Side\"][0] === \"0\")) {\r\n dbFeature.metaData[\"Side\"] = [METADATA.LeftSide];\r\n }\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n if (Array.isArray(dbFeature.metaData[\"ShowerSize\"]) && dbFeature.metaData[\"ShowerSize\"].includes(\"0\")) {\r\n dbFeature.metaData[\"ShowerSize\"] = [METADATA.ALL];\r\n }\r\n return super.load(dbFeature)\r\n }\r\n\r\n handleClick() {\r\n const showerTubComboParent = this.getParent().getParent();\r\n const showerParent = showerTubComboParent.layout.parts[\"Shower\"];\r\n showerParent.setShowerHeadType(ShowerHeadTypes.shower_fixture);\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n if (Array.isArray(this.metaData[\"MountType\"]) && this.metaData[\"MountType\"].includes(\"S\")\r\n && ((showerParent.shower_head_type === ShowerHeadTypes.shower_arm && showerParent.showerArm && !showerParent.showerArm.disabled)\r\n || (showerParent.shower_head_type === ShowerHeadTypes.shower_head_bundle && showerParent.showerHeadBundle && !showerParent.showerHeadBundle.disabled))) {\r\n // store.dispatch(setLookOverlayOpened(LOOK_OVERLAYS.notCompatiblePopup));\r\n // return;\r\n this.applyFeatureIfNotCompatible();\r\n }\r\n }\r\n super.handleClick();\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const showerParent = this.getParent().getParent();\r\n if (showerParent.showerArm) {\r\n showerParent.showerArm.disabled = true;\r\n }\r\n if (showerParent.showerHead) {\r\n showerParent.showerHead.disabled = true;\r\n }\r\n if (showerParent.showerHeadBundle) {\r\n showerParent.showerHeadBundle.disabled = true;\r\n }\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerTubComboParent = this.getParent();\r\n const showerParent = showerTubComboParent.layout.parts[\"Shower\"];\r\n if (!showerTubComboParent.showerTubComboIsActive || showerTubComboParent.bottomTub === \"walk_in_tub\") { // they don't have repl tub fixture\r\n return false\r\n }\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_fixture && this.activeFeature\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n // const showerComboParent = this.getParent();\r\n // if (showerComboParent.replacementTub && showerComboParent.replacementTub.activeFeature\r\n // && !showerComboParent.replacementTub.disabled) {\r\n // conditions.push({\r\n // propName: \"MatchingFeature\",\r\n // propValue: showerComboParent.replacementTub.activeFeature.metaData[\"ActualDisplayedName\"]\r\n // });\r\n // } else if (showerComboParent.walkInTub && showerComboParent.walkInTub.activeFeature\r\n // && !showerComboParent.walkInTub.disabled) {\r\n // conditions.push({\r\n // propName: \"MatchingFeature\",\r\n // propValue: showerComboParent.walkInTub.activeFeature.metaData[\"ActualDisplayedName\"]\r\n // });\r\n // }\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {METADATA, LOOK_ROOM_TYPES, ShowerHeadTypes, createParentPositions, ShowerComboTubType} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\nimport {IS_LIXIL_SERVERS} from \"../../../../../config\";\r\n// import {setLookOverlayOpened} from \"../../../../../actions/lookFunctions\";\r\n// import store from \"../../../../../store\";\r\n\r\nexport default class ShowerFixture extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_fixture';\r\n this.partName = 'Fixture';\r\n this.translateId = \"visualizer.bathroom.shower.shower_fixture\";\r\n this.dbName = 'Shower Fixture';\r\n this.layerPriority = 4;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Side\"] || (Array.isArray(dbFeature.metaData[\"Side\"]) && dbFeature.metaData[\"Side\"][0] === \"0\")) {\r\n dbFeature.metaData[\"Side\"] = [METADATA.LeftSide];\r\n }\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n if (dbFeature.isFromAsRoom) {\r\n // Eugene Balan: добавил для Shower Fixture в метадату MountType значения для бандлов\r\n // S - прячем эти группы Shower Arm, Shower Head (т.к. они уже включены в набор)\r\n // T - показываем только если включен Replacement Tub + тоже что и S + прячем Tub Spout\r\n // 0 - можем показывать группы Shower Arm, Shower Head, Tub Spout (если включен Replacement Tub)\r\n // 0 - Hand Shower Kit должен показываться вместе с shower fixture у которых MountType: 0\r\n // if (Array.isArray(dbFeature.metaData[\"MountType\"]) && !dbFeature.metaData[\"MountType\"].includes(\"T\")) {\r\n // dbFeature.metaData[\"MountType\"].push(METADATA.ALL)\r\n // }\r\n if (!Array.isArray(dbFeature.metaData[\"MountType\"])) {\r\n console.log(\"alarm, alarm , this shower fixture has no MountType metadata!\", dbFeature);\r\n }\r\n if (Array.isArray(dbFeature.metaData[\"ShowerSize\"]) && dbFeature.metaData[\"ShowerSize\"].includes(\"0\")) {\r\n dbFeature.metaData[\"ShowerSize\"] = [METADATA.ALL];\r\n }\r\n }\r\n return super.load(dbFeature)\r\n }\r\n\r\n handleClick() {\r\n const showerParent = this.getParent().getParent();\r\n showerParent.setShowerHeadType(ShowerHeadTypes.shower_fixture);\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n if (Array.isArray(this.metaData[\"MountType\"]) && this.metaData[\"MountType\"].includes(\"S\")\r\n && ((showerParent.shower_head_type === ShowerHeadTypes.shower_arm && showerParent.showerArm && !showerParent.showerArm.disabled)\r\n || (showerParent.shower_head_type === ShowerHeadTypes.shower_head_bundle && showerParent.showerHeadBundle && !showerParent.showerHeadBundle.disabled))) {\r\n // store.dispatch(setLookOverlayOpened(LOOK_OVERLAYS.notCompatiblePopup));\r\n // return;\r\n this.applyFeatureIfNotCompatible();\r\n }\r\n }\r\n super.handleClick();\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n const showerTubComboParent = showerParent.layout.parts[\"Shower Tub Combo\"];\r\n if (showerTubComboParent && showerTubComboParent.showerTubComboIsActive\r\n && showerTubComboParent.bottomTub !== \"walk_in_tub\" && !IS_LIXIL_SERVERS) { // they don't have repl tub fixture\r\n return true\r\n }\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_fixture && this.activeFeature\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const showerParent = this.getParent().getParent();\r\n if (showerParent.showerArm) {\r\n showerParent.showerArm.disabled = true;\r\n }\r\n if (showerParent.showerHead) {\r\n showerParent.showerHead.disabled = true;\r\n }\r\n if (showerParent.showerHeadBundle) {\r\n showerParent.showerHeadBundle.disabled = true;\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n if (getCurrentRoomType(showerParent.layout) === LOOK_ROOM_TYPES.as) {\r\n const showerComboParent = showerParent.layout.parts[ShowerTubCombo.id];\r\n\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerSize = showerParent.showerSize();\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n })\r\n }\r\n conditions.push({\r\n propName: \"MountType\",\r\n propValue: (showerComboParent && showerParent.showerTubComboIsActive()\r\n && showerComboParent.bottomTub === ShowerComboTubType.replacement_tub) ? \"T\" : \"S\"\r\n })\r\n return conditions\r\n }\r\n return super.getArrayOfConditions()\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Walls from \"../../parts/walls\";\r\n\r\nexport default class ShowerScreen extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_screen';\r\n this.partName = 'Shower Screen';\r\n this.translateId = \"visualizer.bathroom.shower.shower_screen\";\r\n this.layerPriority = 12;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n handleClick() {\r\n const wallParent = this.getParent().getParent().layout.parts[Walls.id];\r\n if (wallParent && wallParent.splitWall) {\r\n wallParent.splitWall.disabled = true;\r\n }\r\n super.handleClick();\r\n }\r\n\r\n setLayers(layout) {\r\n const wallParent = layout.parts[Walls.id];\r\n if (wallParent && wallParent.splitWall && wallParent.splitWall.activeFeature && !wallParent.splitWall.disabled) {\r\n super.hideLayers();\r\n return;\r\n }\r\n return super.setLayers(layout);\r\n }\r\n\r\n}\r\n","import WallCommon from \"./wallCommon\";\r\nimport {createPageToLoadArray} from \"../../constants\";\r\n\r\nexport default class LeftWall extends WallCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'left_wall';\r\n this.partName = 'Left Wall';\r\n this.dbName = 'Left Wall';\r\n this.translateId = \"visualizer.bathroom.walls.left_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n this.hasAdditionalParts = true;\r\n this.additionalPartPartId = \"left_wall_crop\";\r\n if (isChild) {\r\n createPageToLoadArray(this);\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = dbFeature.groupName === this.dbName ? 1 : 2;\r\n return super.load_(dbFeature, new LeftWall(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n}\r\n","import WallCommon from \"./wallCommon\";\r\nimport {createPageToLoadArray} from \"../../constants\";\r\n\r\nexport default class RightWall extends WallCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'right_wall';\r\n this.partName = 'Right Wall';\r\n this.dbName = 'Right Wall';\r\n this.translateId = \"visualizer.bathroom.walls.right_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n this.hasAdditionalParts = true;\r\n this.additionalPartPartId = \"right_wall_crop\";\r\n if (isChild) {\r\n createPageToLoadArray(this);\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = dbFeature.groupName === this.dbName ? 1 : 2;\r\n return super.load_(dbFeature, new RightWall(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n}\r\n\r\n","import WallCommon from \"./wallCommon\";\r\nimport {createPageToLoadArray} from \"../../constants\";\r\n\r\nexport default class CenterWall extends WallCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_wall';\r\n this.partName = 'Center Wall';\r\n this.translateId = \"visualizer.bathroom.walls.center_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n if (isChild) {\r\n createPageToLoadArray(this);\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Background.CenterWall;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import WallCommon from \"./wallCommon\";\r\nimport {createPageToLoadArray} from \"../../constants\";\r\n\r\nexport default class BackWall extends WallCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'back_wall';\r\n this.partName = 'Back Wall';\r\n this.translateId = \"visualizer.bathroom.walls.back_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n if (isChild) {\r\n createPageToLoadArray(this);\r\n }\r\n }\r\n}\r\n","import WallCommon from \"./wallCommon\";\r\n\r\nexport default class Ceiling extends WallCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'walls_ceiling';\r\n this.partName = 'Ceiling';\r\n this.translateId = \"visualizer.kitchen.walls.walls_ceiling\";\r\n this.isStoneFeature = true;\r\n }\r\n}\r\n","import WallCommon from \"./wallCommon\";\r\nimport {createPageToLoadArray} from \"../../constants\";\r\n\r\nexport default class FrontWall extends WallCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'front_wall';\r\n this.partName = 'Front Wall';\r\n this.dbName = 'Front Wall';\r\n this.translateId = \"visualizer.bathroom.walls.front_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n this.hasAdditionalParts = true;\r\n this.additionalPartPartId = \"front_wall_crop\";\r\n if (isChild) {\r\n createPageToLoadArray(this);\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = dbFeature.groupName === this.dbName ? 1 : 2;\r\n return super.load_(dbFeature, new FrontWall(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n}\r\n","import WallCommon from \"./wallCommon\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {createPageToLoadArray} from \"../../constants\";\r\n\r\nexport default class SplitWall extends WallCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'split_wall';\r\n this.partName = 'Split Wall';\r\n this.translateId = \"visualizer.bathroom.walls.split_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n // this.hasAdditionalParts = true;\r\n // this.additionalPartPartId = \"split_wall_crop\";\r\n if (isChild) {\r\n createPageToLoadArray(this);\r\n }\r\n }\r\n\r\n handleClick() {\r\n const showerParent = this.getParent().getParent().layout.parts[Shower.id];\r\n if (showerParent && showerParent.showerScreen) {\r\n showerParent.showerScreen.disabled = true;\r\n }\r\n super.handleClick();\r\n }\r\n\r\n // setLayers(layout) { // we can't enable it since nothing will be selected on the very first load\r\n // const wallParent = layout.parts[Shower.id];\r\n // if (wallParent && wallParent.showerScreen && !wallParent.showerScreen.disabled) {\r\n // super.hideLayers();\r\n // return;\r\n // }\r\n // return super.setLayers(layout);\r\n // }\r\n\r\n}\r\n\r\n","import WallCommon from \"./wallCommon\";\r\nimport {createPageToLoadArray} from \"../../constants\";\r\n\r\nexport default class LeftWallSplitter extends WallCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'left_wall_splitter';\r\n this.partName = 'Left Wall Splitter';\r\n this.translateId = \"visualizer.bathroom.walls.left_wall_splitter\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n // this.hasAdditionalParts = true;\r\n // this.additionalPartPartId = \"split_wall_crop\";\r\n if (isChild) {\r\n createPageToLoadArray(this);\r\n }\r\n }\r\n}\r\n\r\n","import WallCommon from \"./wallCommon\";\r\n\r\nexport default class CeilingPanels extends WallCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'ceiling_panels';\r\n this.partName = 'Ceiling Panels';\r\n this.translateId = \"visualizer.bathroom.ceiling_panels\";\r\n this.isStoneFeature = true;\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class ShowerGlass extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_glass';\r\n this.partName = 'Shower Glass';\r\n this.translateId = \"visualizer.bathroom.shower.shower_glass\";\r\n this.layerPriority = 12;\r\n this.canBeDisabled = true;\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n\r\nimport {LayoutType} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {\r\n custom30in15X4Shower,\r\n custom30in30X8Shower,\r\n custom30inPonyShower,\r\n custom60in15X4Shower,\r\n custom60in30X8Shower,\r\n custom60inPonyShower\r\n} from \"../../../../bvComponent/core/assets\";\r\n\r\nexport default class ShowerBody extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partId = 'shower_body';\r\n this.partName = 'Shower Body';\r\n this.translateId = \"visualizer.bathroom.shower.shower_body\";\r\n this.homePageTitle = 'Shower Doors & Glass';\r\n this.partNumber = partNumber;\r\n this.activeFeatureParts = [];\r\n this.canBeDisabled = false;\r\n this.placeholderChanged = true; // never show placeholder to body\r\n this.firstClick = {\r\n \"0\": true // never show placeholder to body\r\n }\r\n this.layerPriority = 1;\r\n this.createdManually = true;\r\n }\r\n\r\n load(dbFeature) {\r\n const loadedShowerBody = super.load_(dbFeature, new ShowerBody());\r\n if (loadedShowerBody) { // it can be false (just skip it)\r\n const featureName = loadedShowerBody.dbFeature.sharedFeatureName;\r\n loadedShowerBody.featureName = featureName;\r\n loadedShowerBody.showerBodyType = 'Custom';\r\n loadedShowerBody.showerDimensions = this.loadShowerDimensions(featureName);\r\n loadedShowerBody.metaData = this.loadShowerMetaData(featureName, loadedShowerBody.showerDimensions);\r\n loadedShowerBody.showerBodyId = featureName.toLowerCase().replace(/ /gi, \"-\");\r\n loadedShowerBody.notAvailableInVisualizer = false;\r\n if (!loadedShowerBody.dbFeature.thumbnailUrl) {\r\n loadedShowerBody.customThumbnail = this.loadThumbnail(featureName)\r\n }\r\n }\r\n return loadedShowerBody\r\n }\r\n\r\n loadShowerDimensions(featureName = this.activeFeature.featureName) {\r\n switch (true) {\r\n case featureName.includes(\"15X4\"):\r\n return \"15X4\"\r\n case featureName.includes(\"Pony\"):\r\n return \"Pony\"\r\n case featureName.includes(\"30X8\"):\r\n default:\r\n return \"30X8\"\r\n }\r\n }\r\n\r\n loadShowerMetaData(featureName = this.activeFeature.featureName, showerDimensions) {\r\n const featureNameSplitted = featureName.split(\"in\")[0];\r\n return {\r\n \"ShowerSize\": featureNameSplitted.length > 1 ? [featureNameSplitted.substr(featureNameSplitted.length - 2)] : ['60'],\r\n \"CountertopSize\": showerDimensions === \"30X8\" ? [\"72in\"] : [\"20in\", \"24in\", \"30in\", \"36in\", \"48in\", \"60in\"]\r\n }\r\n }\r\n\r\n loadThumbnail(featureName = this.activeFeature.featureName) {\r\n switch (true) {\r\n case featureName.includes(\"15X4\"):\r\n return featureName.includes(\"30in\") ? custom30in15X4Shower : custom60in15X4Shower\r\n case featureName.includes(\"Pony\"):\r\n return featureName.includes(\"30in\") ? custom30inPonyShower : custom60inPonyShower\r\n case featureName.includes(\"30X8\"):\r\n default:\r\n return featureName.includes(\"30in\") ? custom30in30X8Shower : custom60in30X8Shower\r\n }\r\n }\r\n\r\n handleClick() {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick();\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.showerBody.activeFeature = this;\r\n }\r\n this.getParent().showerBodySelectedByUser = true;\r\n const shower = this.getParent().layout ? this.getParent() : this.getParent().getParent(); // workaround for complete & custom click\r\n if (shower.showerTubComboIsActive) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n disabledClick() {\r\n const showerParent = this.getParent();\r\n showerParent.relatedItems.forEach((relItem) => {\r\n relItem.disabled = this.disabled;\r\n if (relItem.activeFeatureParts && relItem.activeFeatureParts.length) {\r\n relItem.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart) {\r\n activeFeaturePart.disabled = this.disabled\r\n }\r\n });\r\n }\r\n });\r\n if (showerParent.layout && showerParent.showerTubComboIsActive) {\r\n const comboPart = showerParent.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const wallParent = showerParent.layout.parts.Walls;\r\n wallParent.wallExL.disabled = this.disabled;\r\n // wallParent.wallExR.disabled = this.disabled;\r\n\r\n const bathtubParent = showerParent.layout.parts.Bathtub;\r\n\r\n if (showerParent.layout.type === LayoutType.Small && !this.disabled && bathtubParent) { // switch off all bathtub features\r\n if (bathtubParent.bathTubBody) {\r\n bathtubParent.bathTubBody.disabled = true;\r\n }\r\n if (bathtubParent.bathTubBody) {\r\n bathtubParent.bathTubBase.disabled = true;\r\n bathtubParent.bathTubBase.disabledClick();\r\n }\r\n }\r\n }\r\n\r\n availableFeatures(filters) {\r\n const layout = this.getParent().layout;\r\n const filteredAvailableFeatures = filters ? super.getFilteredFeaturesByFilters(filters) : this.features;\r\n const counterTopSize = layout.parts[Vanity.id].counterTopSize(this);\r\n return filteredAvailableFeatures.filter((feature) => {\r\n if (counterTopSize === '72in' && layout.type === 1) {\r\n return feature.showerDimensions === \"30X8\" || feature.showerDimensions === \"Pony\"\r\n }\r\n return true\r\n })\r\n }\r\n\r\n getArrayOfConditions() {\r\n return []\r\n }\r\n\r\n setActiveFeatureParts() {\r\n const activeFeatureParts = (this.activeFeature && this.activeFeature.partNumber) ? this.featuresParts.filter((feature) => {\r\n return feature.partName === this.activeFeature.partName\r\n }) : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n return activeFeatureParts\r\n }\r\n\r\n setDefault() {\r\n const availableFeatures = this.availableFeatures();\r\n const layout = this.getParent().layout;\r\n let hardCodedDefault = availableFeatures.find((feature) => {\r\n return feature.partName === \"Custom B 60in 15X4\";\r\n });\r\n const counterTopSize = layout.parts[Vanity.id].counterTopSize(this);\r\n if (counterTopSize === '72in' && layout.type === 1 && this.activeFeature) {\r\n hardCodedDefault = availableFeatures.find((feature) => {\r\n return this.activeFeature.partName.includes(\"60in\")\r\n ? feature.partName.includes(\"60in\")\r\n : feature.partName.includes(\"30in\")\r\n });\r\n }\r\n this.activeFeature = hardCodedDefault || availableFeatures[0];\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.getParent().showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n super.setLayers(layout);\r\n }\r\n\r\n setZIndex() {}\r\n\r\n changeLayout(layoutType) {\r\n if (layoutType === 1 && this.disabled) {\r\n this.disabled = false;\r\n this.disabledClick();\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Walls from \"../../parts/walls\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\nimport {createPageToLoadArray, LOOK_ROOM_TYPES} from \"../../constants\";\r\n\r\nexport default class ShowerWall extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_wall';\r\n this.partName = 'Shower Wall';\r\n this.translateId = \"visualizer.bathroom.shower.shower_wall\";\r\n this.homePageTitle = 'Interior Shower Walls';\r\n this.isStoneFeature = true;\r\n this.canUseWizard = true;\r\n this.layerPriority = 2;\r\n if (isChild) {\r\n createPageToLoadArray(this);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const showerParent = this.getParent();\r\n const showerSize = showerParent ? showerParent.showerSize() : null;\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n })\r\n }\r\n // if (wallParent && wallParent.splitWallType) {\r\n // conditions.push({\r\n // propName: \"SplitWallType\",\r\n // propValue: wallParent.splitWallType\r\n // })\r\n // }\r\n const wallParent = showerParent.layout.parts[Walls.id];\r\n if (getCurrentRoomType(showerParent.layout) === LOOK_ROOM_TYPES.as && wallParent && wallParent.splitWall) {\r\n conditions.push({\r\n propName: \"SplitWallType\",\r\n propValue: wallParent.getSplitWallType()\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class ShowerWallAccent extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"shower_wall_accent\";\r\n this.partName = \"Shower Walls Accent\";\r\n this.translateId = \"visualizer.bathroom.shower.shower_wall_accent\";\r\n this.dbName = \"Shower Wall Accent\";\r\n this.homePageTitle = 'Interior Shower Walls';\r\n this.isStoneFeature = true;\r\n this.canUseWizard = true;\r\n this.layerPriority = 2;\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const parent = this.getParent();\r\n super.handleClick(ignoreLocked);\r\n const shower = parent.getParent();\r\n if (shower.showerWallAccent && shower.showerWallAccent.canBeDisabled\r\n && !shower.showerWallAccent.placeholderChanged && !getFeatureIsLocked(this)) {\r\n shower.showerWallAccent.disabled = true;\r\n shower.showerWallAccent.disabledClick();\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerParent = this.getParent();\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.ShowerWallAccent;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n// import {ShowerComboTubType} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {ShowerAccessories} from \"../../parts/showerAccessories\";\r\nimport {removeLookPointFor} from \"../../../lookNavigation/lookFunctions2\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\nimport {LayoutType, LOOK_ROOM_TYPES, METADATA, ShowerComboTubType} from \"../../constants\";\r\nimport {IS_QKB_UI} from \"../../../../../config\";\r\n\r\nexport default class ShowerDoor extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_door';\r\n this.partName = 'Shower Door';\r\n this.translateId = \"visualizer.bathroom.shower.shower_door\";\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.canBeDisabled = true;\r\n this.layerPriority = 5;\r\n\r\n /* only shower door properties */\r\n if (isChild) {\r\n this.previouslySelectedFeatures = {};\r\n this.oneLayerPosition = true;\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this.previouslySelectedFeatures[layoutName] = {};\r\n })\r\n }\r\n this.currentShowerBodyId = \"\"; // for example \"custom-a-60in-30x8\"\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Side\"]) {\r\n dbFeature.metaData[\"Side\"] = [METADATA.LeftSide];\r\n }\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n dbFeature.lixilProductSubCategory = \"Shower Doors\"; // because some of them are missing this subcategory!\r\n return super.load(dbFeature);\r\n }\r\n\r\n navigationSubItems(...props) {\r\n if (IS_QKB_UI) {\r\n return this.navigationSubItemsWithSides(...props);\r\n }\r\n return super.navigationSubItems(...props);\r\n }\r\n\r\n disabledClick() {\r\n const showerParent = this.getParent();\r\n const showerDoorHandle = showerParent.showerDoorHandle;\r\n if (showerDoorHandle && showerDoorHandle) {\r\n showerDoorHandle.disabled = this.disabled || !showerDoorHandle.canBeEnabled(); // true or check if it can be enabled;\r\n }\r\n const accParent = showerParent.layout.parts[ShowerAccessories.id]\r\n if (!this.disabled && accParent && accParent.showerRod && !accParent.showerRod.disabled\r\n && accParent.showerRod) {\r\n accParent.showerRod.disabled = true\r\n }\r\n }\r\n\r\n handleClick() {\r\n super.handleClick();\r\n if (!this.notAvailableInVisualizer && !getFeatureIsLocked(this)) {\r\n // this.getParent().getParent().setShowerTubCombo();\r\n // let doorWithLiner = false;\r\n // if(this.metaData && this.metaData.length) {\r\n // const activeDoorMetadata = this.metaData.find(metaDataObject => metaDataObject.isFor);\r\n // const showerPanValues = activeDoorMetadata.conditions.find(condition => condition.name === \"BathtubLiner\");\r\n // if (showerPanValues) {\r\n // doorWithLiner = true;\r\n // }\r\n // }\r\n // this.getParent().getParent().setLinerActive(doorWithLiner);\r\n const shower = this.getParent().getParent();\r\n const showerPanCondition = this.metaData[\"ShowerPan\"];\r\n if (!shower.showerTubComboIsActive()) {\r\n shower.showerFloorIsActive = showerPanCondition && showerPanCondition.includes(\"Threshold\");\r\n }\r\n const accParent = shower.layout.parts[ShowerAccessories.id]\r\n if (accParent && accParent.showerRod && !accParent.showerRod.disabled) {\r\n accParent.showerRod.disabled = true\r\n }\r\n if(!this.matchesMetaForArrayOfConditions(this.getParent().getArrayOfConditions())) {\r\n const showerSizeValues = this.metaData[\"ShowerSize\"];\r\n const showerBodyParent = this.getParent().getParent().showerBody;\r\n if (showerSizeValues) {\r\n const showerBodyThatFits = showerBodyParent.features.filter(showerBodyFeature => {\r\n const showerSizeValues2 = showerBodyFeature.metaData[\"ShowerSize\"];\r\n return showerSizeValues.some(condValue => {\r\n return showerSizeValues2.some(condValue2 => condValue === condValue2);\r\n });\r\n });\r\n if (showerBodyThatFits.length && showerBodyThatFits.every(shBody => shBody.partName !== showerBodyParent.activeFeature.partName)) {\r\n let showerBodyToSet = showerBodyThatFits.find(shBody => {\r\n return shBody.showerDimensions === showerBodyParent.activeFeature.showerDimensions\r\n }) || showerBodyThatFits[0];\r\n showerBodyParent.showerBodySelectedByUser = true;\r\n showerBodyParent.activeFeature = showerBodyToSet;\r\n }\r\n }\r\n }\r\n this.featureClicked();\r\n }\r\n }\r\n\r\n // setLayers(layout) {\r\n // const showerParent = this.getParent();\r\n // // const comboParent = showerParent.layout.parts[ShowerTubCombo.id];\r\n // // if (showerParent.showerTubComboIsActive() && comboParent.bottomTub === ShowerComboTubType.walk_in_tub) {\r\n // if (showerParent.showerTubComboIsActive()) {\r\n // super.hideLayers();\r\n // return;\r\n // }\r\n // return super.setLayers(layout);\r\n // }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n const comboParent = showerParent.layout.parts[ShowerTubCombo.id];\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerSize = showerParent.showerSize();\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n })\r\n }\r\n // if (showerParent.showerTubComboIsActive() && comboParent.bottomTub === ShowerComboTubType.replacement_tub\r\n // && comboParent.replacementTub && comboParent.replacementTub.activeFeature && comboParent.replacementTub.activeFeature.metaData[\"ShowerPanHeight\"]) {\r\n // conditions.push({\r\n // propName: \"ShowerPanHeight\",\r\n // propValue: comboParent.replacementTub.activeFeature.metaData[\"ShowerPanHeight\"]\r\n // })\r\n if (showerParent.showerTubComboIsActive()) {\r\n if (comboParent && comboParent.bottomTub === ShowerComboTubType.replacement_tub) {\r\n if (comboParent.replacementTub && comboParent.replacementTub.activeFeature\r\n && comboParent.replacementTub.activeFeature.metaData\r\n && comboParent.replacementTub.activeFeature.metaData[\"ShowerPanHeight\"]) {\r\n conditions.push({\r\n propName: \"ShowerPanHeight\",\r\n propValue: comboParent.replacementTub.activeFeature.metaData[\"ShowerPanHeight\"]\r\n })\r\n }\r\n } else {\r\n conditions.push({\r\n propName: \"NOT_EXISTING_METADATA\",\r\n propValue: \"whatever\"\r\n })\r\n }\r\n } else if (showerParent && showerParent.showerPanCombo\r\n && showerParent.showerPanCombo.activeFeature && showerParent.showerPanCombo.activeFeature.metaData[\"ShowerPanHeight\"]) {\r\n conditions.push({\r\n propName: \"ShowerPanHeight\",\r\n propValue: showerParent.showerPanCombo.activeFeature.metaData[\"ShowerPanHeight\"]\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n return removeLookPointFor(parentObject, 3, \"1\") && removeLookPointFor(parentObject, 6, \"1\")\r\n }\r\n return true\r\n }\r\n}\r\n","import {Shower} from \"../../parts/shower\";\r\nimport {createParentPositions} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class LargeCornerSeat extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'large_corner_seat';\r\n this.partName = 'Large Corner Seat';\r\n this.translateId = \"visualizer.bathroom.accessories.large_corner_seat\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n if (showerParent && showerParent.showerTubComboIsActive()) { // shower tub combo - remove\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n // this.checkIfFeaturePartIsMatching();\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // setZIndex(zIndexes) {\r\n // if (zIndexes) {\r\n // Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n // if (this.layerPositions[key]) {\r\n // this.layerPositions[key].layer.zIndex = zIndexes.Accessories.LargeCornerSeat + keyIndex*10;\r\n // }\r\n // })\r\n // }\r\n // }\r\n\r\n}\r\n\r\n","import {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {createParentPositions, METADATA, SIDE_POSITIONS} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class SoapDish extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'soap_dish';\r\n this.partName = 'Soap Dish';\r\n this.translateId = \"visualizer.bathroom.accessories.soap_dish\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : METADATA.LeftSide;\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === SIDE_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new SoapDish(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n disabledClick() {\r\n if (!this.disabled && this.activeFeature) {\r\n this.activeFeature.handleClick() // check soapDish\r\n }\r\n }\r\n\r\n availableFeatures(features) {\r\n return features.filter(feature => feature.partNumber === 1)\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n const showerComboParent = layout.parts[ShowerTubCombo.id];\r\n\r\n if (showerParent && showerComboParent && showerParent.showerTubComboIsActive() && showerComboParent.bottomTub === \"walk_in_tub\") {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if ((this.activeFeature && this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature && this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // setZIndex(zIndexes) {\r\n // if (zIndexes) {\r\n // Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n // if (this.layerPositions[key]) {\r\n // this.layerPositions[key].layer.zIndex = zIndexes.Accessories.SoapDish + keyIndex*10;\r\n // }\r\n // })\r\n // }\r\n // }\r\n}\r\n","import {createParentPositions} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class CornerCaddie extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'corner_caddie';\r\n this.partName = 'Corner Caddie';\r\n this.translateId = \"visualizer.bathroom.accessories.corner_caddie\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n availableFeatures(features) {\r\n return features.filter(feature => feature.partNumber === 1)\r\n }\r\n\r\n handleClick() {\r\n const accessoriesParent = this.getParent().getParent();\r\n accessoriesParent.caddie_type = this.partId;\r\n super.handleClick();\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const accessoriesParent = this.getParent();\r\n if (accessoriesParent.caddie_type !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n // this.checkIfFeaturePartIsMatching();\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // setZIndex(zIndexes) {\r\n // if (zIndexes) {\r\n // Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n // if (this.layerPositions[key]) {\r\n // this.layerPositions[key].layer.zIndex = zIndexes.Accessories.CornerCaddie + keyIndex*10;\r\n // }\r\n // })\r\n // }\r\n // }\r\n\r\n}\r\n","import {createParentPositions} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class LargeCornerCaddie extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'large_corner_caddie';\r\n this.partName = 'Large Corner Caddie';\r\n this.translateId = \"visualizer.bathroom.accessories.large_corner_caddie\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n handleClick() {\r\n const accessoriesParent = this.getParent().getParent();\r\n accessoriesParent.caddie_type = this.partId;\r\n super.handleClick();\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const accessoriesParent = this.getParent();\r\n if (accessoriesParent.caddie_type !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n // this.checkIfFeaturePartIsMatching();\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // setZIndex(zIndexes) {\r\n // if (zIndexes) {\r\n // Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n // if (this.layerPositions[key]) {\r\n // this.layerPositions[key].layer.zIndex = zIndexes.Accessories.LargeCornerCaddie + keyIndex*10;\r\n // }\r\n // })\r\n // }\r\n // }\r\n\r\n}\r\n","import {METADATA, SIDE_POSITIONS} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class GrabBar extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'grab_bar';\r\n this.partName = 'Grab Bar';\r\n this.translateId = \"visualizer.bathroom.accessories.grab_bar\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {\r\n [SIDE_POSITIONS[0]]: null,\r\n [SIDE_POSITIONS[1]]: null,\r\n [SIDE_POSITIONS[2]]: null,\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : METADATA.LeftSide;\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] !== SIDE_POSITIONS[1] ? 1 : 2;\r\n return super.load_(dbFeature, new GrabBar(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n disabledClick() {\r\n if (!this.disabled && this.activeFeature) {\r\n this.activeFeature.handleClick() // check soapDish\r\n }\r\n }\r\n\r\n availableFeatures(features) {\r\n return features.filter(feature => feature.partNumber === 1)\r\n }\r\n\r\n handleClick() { // \"this\" is feature!! not the feature group\r\n super.handleClick();\r\n const parent = this.getParent();\r\n const accessoriesParent = parent.getParent();\r\n const showerParent = accessoriesParent.layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerSize !== \"60\" && parent.activeFeature) {\r\n parent.layerPositions[parent.activeFeature.metaData[\"layerPosition\"]] = parent.activeFeature;\r\n }\r\n // parent.checkRelatedFeatureGroupPositions(this.metaData[\"layerPosition\"]);\r\n }\r\n\r\n checkCenterGrabWall(clickedPosition) { // L or R and C can't be together\r\n if (!clickedPosition) {\r\n return\r\n }\r\n Object.keys(this.layerPositions).forEach(position => {\r\n if (clickedPosition === \"C\") {\r\n if (position !== \"C\") {\r\n this.layerPositions[position] = null;\r\n }\r\n } else if (position === \"C\") {\r\n this.layerPositions[position] = null;\r\n }\r\n })\r\n }\r\n\r\n checkCurrentPositions(position) {\r\n const feature = this.layerPositions[position];\r\n if (!feature) {\r\n return\r\n }\r\n const nameSplitted = feature.dbFeature.sharedFeatureName.split(\" \");\r\n const size = nameSplitted[nameSplitted.length - 1] ? nameSplitted[nameSplitted.length - 1].replace(\"in\", \"\") : \"\";\r\n const newPosition = position === SIDE_POSITIONS[0] ? SIDE_POSITIONS[1] : SIDE_POSITIONS[0];\r\n if (!size || !this.layerPositions[newPosition]) {\r\n return\r\n }\r\n if (this.layerPositions[newPosition]) {\r\n const nameSplitted2 = this.layerPositions[newPosition].dbFeature.sharedFeatureName.split(\" \");\r\n const size2 = nameSplitted2[nameSplitted2.length - 1] ? nameSplitted2[nameSplitted2.length - 1].replace(\"in\", \"\") : \"\";\r\n if (!size || (+size2 === 12 && +size === 12)) { // last chance to keep other side layer\r\n return;\r\n }\r\n }\r\n this.layerPositions[newPosition] = null;\r\n }\r\n\r\n showLayerPositionsModal(forFeature) {\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n if (showerParent.showerSize() !== \"60\") {\r\n return false\r\n }\r\n return super.showLayerPositionsModal(forFeature)\r\n }\r\n\r\n}\r\n","import {CORNER_SHELVES_POSITIONS} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class CornerShelf extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = \"corner_shelf\";\r\n this.partName = \"Corner Shelf\";\r\n this.translateId = \"visualizer.bathroom.accessories.corner_shelf\";\r\n this.dbName = \"Small Corner Shelf\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {};\r\n CORNER_SHELVES_POSITIONS.forEach(pos => {\r\n this.layerPositions[pos] = null\r\n })\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = (dbFeature.metaData[\"Side\"] && dbFeature.metaData[\"Part\"])\r\n ? dbFeature.metaData[\"Side\"][0] + dbFeature.metaData[\"Part\"][0]\r\n : \"\"\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === CORNER_SHELVES_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new CornerShelf(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n handleClick() {\r\n const accessoriesParent = this.getParent().getParent();\r\n accessoriesParent.caddie_type = this.partId;\r\n super.handleClick();\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const accessoriesParent = this.getParent();\r\n if (accessoriesParent.caddie_type !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n // this.checkIfFeaturePartIsMatching();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n\r\n // if (this.layerPositions) {\r\n // const windowParent = this.getParent().layout.parts.Window;\r\n // if (windowParent && windowParent.windowKits && !windowParent.windowKits.disabled) {\r\n // Object.keys(this.layerPositions).forEach(key => {\r\n // if (!key.includes(\"3\") && this.layerPositions[key]) {\r\n // this.layerPositions[key].layer.src = '';\r\n // }\r\n // })\r\n // }\r\n // }\r\n\r\n }\r\n\r\n // setZIndex(zIndexes) {\r\n // if (zIndexes) {\r\n // Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n // if (this.layerPositions[key]) {\r\n // this.layerPositions[key].layer.zIndex = zIndexes.Accessories.CornerShelf1 + keyIndex*10;\r\n // }\r\n // })\r\n // }\r\n // }\r\n\r\n showLayerPositionsModal() {\r\n return true\r\n }\r\n\r\n}\r\n","import AccessoryCommon from \"./accessoryCommon\";\r\n// import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class ShowerPod extends AccessoryCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_pod';\r\n this.partName = 'Shower Pod';\r\n this.translateId = \"visualizer.bathroom.accessories.shower_pod\";\r\n this.dbName = document.kvConfig.userId === 157639 ? 'Storage Pods' : 'Storage Pod'; // window.location.href.includes(\"american_standard_website\")\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (document.kvConfig.userId !== 157639 && dbFeature.groupName !== 'Storage Pod') {\r\n return false\r\n }\r\n return super.load_(dbFeature, new ShowerPod());\r\n }\r\n\r\n // navigationSubItems(filters, searchText) {\r\n // const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n // const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n // const parent = this.getParent();\r\n // featuresToDisplay.forEach(feature => {\r\n // if (parent.layout.parts.Window && parent.layout.parts.Window.windowKits && !parent.layout.parts.Window.windowKits.disabled) {\r\n // feature.matchesMetaFailed = true;\r\n // } else if (feature.matchesMetaFailed) {\r\n // feature.matchesMetaFailed = false;\r\n // }\r\n // });\r\n // return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n // }\r\n\r\n handleChangeParent(nonCompatibleWith) {\r\n if (nonCompatibleWith === \"Window Kit\") {\r\n const showerPodParent = this.getParent();\r\n const accessoriesParent = showerPodParent.getParent();\r\n accessoriesParent.layout.parts.Window.windowKits.disabled = true;\r\n showerPodParent.disabled = false;\r\n this.handleClick();\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const accessoriesParent = this.getParent();\r\n const windowParent = accessoriesParent.layout.parts.Window;\r\n if (windowParent && windowParent.windowKits && !windowParent.windowKits.disabled) {\r\n windowParent.windowKits.disabled = true;\r\n }\r\n }\r\n\r\n // setZIndex(zIndexes) {\r\n // const zIndex = zIndexes.Accessories.ShowerPod;\r\n // if (zIndexes && this.activeFeature) {\r\n // this.activeFeature.layer.zIndex = zIndex;\r\n // }\r\n // if (zIndexes && this.placeholderFeature) {\r\n // this.placeholderFeature.layer.zIndex = zIndex;\r\n // }\r\n // }\r\n\r\n}\r\n","import AccessoryCommon from \"./accessoryCommon\";\r\nimport {createParentPositions, SIDE_POSITIONS} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class Seats extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'shower_seats';\r\n this.partName = 'Seats';\r\n this.dbName = 'Seats';\r\n this.translateId = \"visualizer.bathroom.accessories.shower_seats\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n this.conflictingPositions = [\"valve_trim\"];\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === SIDE_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new Seats(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n setLayers(layout) {\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n if (showerParent && showerParent.showerTubComboIsActive()) { // shower tub combo - remove\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n return super.setLayers(layout);\r\n }\r\n //\r\n // setZIndex(zIndexes) {\r\n // if (zIndexes) {\r\n // Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n // if (this.layerPositions[key]) {\r\n // this.layerPositions[key].layer.zIndex = zIndexes.Accessories.Seats + keyIndex*10;\r\n // }\r\n // })\r\n // }\r\n // }\r\n\r\n}\r\n","import AccessoryCommon from \"./accessoryCommon\";\r\nimport {Shower} from \"../../parts/shower\";\r\n// import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class ShowerRod extends AccessoryCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_rod';\r\n this.partName = 'Shower Rod';\r\n this.translateId = \"visualizer.bathroom.accessories.shower_rod\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n handleClick(ignoreLocked = false) {\r\n const parent = this.getParent()\r\n const showerParent = parent.getParent().layout.parts[Shower.id];\r\n if (showerParent && showerParent.showerDoor && !showerParent.showerDoor.disabled) { // shower tub combo - remove\r\n showerParent.showerDoor.disabled = true\r\n }\r\n super.handleClick(ignoreLocked);\r\n }\r\n\r\n // navigationSubItems(filters, searchText) {\r\n // const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n // const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n // const parent = this.getParent();\r\n // featuresToDisplay.forEach(feature => {\r\n // if (parent.layout.parts.Window && parent.layout.parts.Window.windowKits && !parent.layout.parts.Window.windowKits.disabled) {\r\n // feature.matchesMetaFailed = true;\r\n // } else if (feature.matchesMetaFailed) {\r\n // feature.matchesMetaFailed = false;\r\n // }\r\n // });\r\n // return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n // }\r\n\r\n // handleChangeParent(nonCompatibleWith) {\r\n // if (nonCompatibleWith === \"Window Kit\") {\r\n // const showerRodParent = this.getParent();\r\n // const accessoriesParent = showerRodParent.getParent();\r\n // accessoriesParent.layout.parts.Window.windowKits.disabled = true;\r\n // showerRodParent.disabled = false;\r\n // this.handleClick();\r\n // }\r\n // }\r\n\r\n disabledClick() {\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n if (!this.disabled && showerParent && showerParent.showerDoor && !showerParent.showerDoor.disabled) { // shower tub combo - remove\r\n showerParent.showerDoor.disabled = true\r\n }\r\n }\r\n\r\n // setZIndex(zIndexes) {\r\n // const zIndex = zIndexes.Accessories.ShowerRod;\r\n // if (zIndexes && this.activeFeature) {\r\n // this.activeFeature.layer.zIndex = zIndex;\r\n // }\r\n // }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class ToiletBrush extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'toilet_brush';\r\n this.partName = 'Toilet Brush';\r\n this.translateId = \"visualizer.bathroom.accessories.toilet_brush\";\r\n this.canBeDisabled = true;\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Toilet} from \"../../parts/toilet\";\r\nimport {removeLookPointFor} from \"../../../lookNavigation/lookFunctions2\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\nimport {LOOK_ROOM_TYPES} from \"../../constants\";\r\n\r\nexport default class PaperHolder extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'paper_holder';\r\n this.partName = 'Paper Holder';\r\n this.translateId = \"visualizer.bathroom.accessories.paper_holder\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n disabledClick() {\r\n const toiletParent = this.getParent().layout.parts[Toilet.id];\r\n if (toiletParent && toiletParent.toilet && toiletParent.toilet.disabled) {\r\n toiletParent.toilet.disabled = this.disabled || !toiletParent.toilet.canBeEnabled(); // true or check if it can be enabled;\r\n }\r\n }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n return true\r\n }\r\n return removeLookPointFor(parentObject, 3, \"2\")\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {createParentPositions, LOOK_ROOM_TYPES, SIDE_POSITIONS} from \"../../constants\";\r\nimport {removeLookPointFor} from \"../../../lookNavigation/lookFunctions2\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\n\r\nexport default class RobeHook extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'robe_hook';\r\n this.partName = 'Robe Hook';\r\n this.translateId = \"visualizer.bathroom.accessories.robe_hook\";\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n return true\r\n }\r\n return removeLookPointFor(parentObject, 1, \"1\", SIDE_POSITIONS[1])\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {createParentPositions} from \"../../constants\";\r\n\r\nexport default class TowelBar extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'towel_bar';\r\n this.partName = 'Towel Bar';\r\n this.translateId = \"visualizer.bathroom.accessories.towel_bar\";\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {LOOK_ROOM_TYPES, SIDE_POSITIONS} from \"../../constants\";\r\nimport {removeLookPointFor} from \"../../../lookNavigation/lookFunctions2\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\n\r\nexport default class TowelRing extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'towel_ring';\r\n this.partName = 'Towel Ring';\r\n this.translateId = \"visualizer.bathroom.accessories.towel_ring\";\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {\r\n [SIDE_POSITIONS[0]]: null,\r\n [SIDE_POSITIONS[1]]: null,\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.lixilProductSubCategory = \"Towel Rings\"; // hardcode to match other towel rings // LX-846\r\n return super.load(dbFeature);\r\n }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n return removeLookPointFor(parentObject, 6, \"1\", SIDE_POSITIONS[1])\r\n }\r\n return removeLookPointFor(parentObject, 3, \"2\", SIDE_POSITIONS[1])\r\n && removeLookPointFor(parentObject, 1, \"1\", SIDE_POSITIONS[1])\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {createParentPositions} from \"../../constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\n\r\nexport default class GlassHolder extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'glass_holder';\r\n this.partName = 'Glass Holder';\r\n this.translateId = \"visualizer.bathroom.shower.glass_holder\";\r\n this.layerPriority = 13;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n return IS_PRODUCT_JOURNEY\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class TowelRack extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'towel_rack';\r\n this.partName = 'Towel Rack';\r\n this.translateId = \"visualizer.bathroom.accessories.towel_rack\";\r\n this.canBeDisabled = true;\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Wainscoting extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'wainscoting';\r\n this.partName = 'Wainscoting';\r\n this.translateId = \"visualizer.bathroom.accessories.wainscoting\";\r\n this.canBeDisabled = true;\r\n this.isStoneFeature = true;\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Towel extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"towel\";\r\n this.partName = \"Towel\";\r\n this.translateId = \"visualizer.bathroom.accessories.towel\";\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {createParentPositions} from \"../../constants\";\r\n\r\nexport default class TowelTowelRing extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"towel_towel_ring\";\r\n this.partName = \"Towel\";\r\n this.translateId = \"visualizer.bathroom.accessories.towel\";\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const towelRing = this.getParent().towelRing;\r\n if (towelRing && towelRing.layerPositions && towelRing.activeFeature) {\r\n conditions.push({\r\n propName: \"MatchingFeature\",\r\n propValue: towelRing.activeFeature.getSplittedSku()\r\n });\r\n }\r\n return conditions\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {createParentPositions} from \"../../constants\";\r\n\r\nexport default class TowelTowelBar extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"towel_towel_bar\";\r\n this.partName = \"Towel\";\r\n this.translateId = \"visualizer.bathroom.accessories.towel\";\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const towelBar = this.getParent().towelBar;\r\n if (towelBar && towelBar.layerPositions && towelBar.activeFeature) {\r\n conditions.push({\r\n propName: \"MatchingFeature\",\r\n propValue: towelBar.activeFeature.getSplittedSku()\r\n });\r\n }\r\n return conditions\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {createParentPositions} from \"../../constants\";\r\n\r\nexport default class TowelTowelHook extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"towel_towel_hook\";\r\n this.partName = \"Towel\";\r\n this.translateId = \"visualizer.bathroom.accessories.towel\";\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const robeHook = this.getParent().robeHook;\r\n if (robeHook && robeHook.layerPositions && robeHook.activeFeature) {\r\n conditions.push({\r\n propName: \"MatchingFeature\",\r\n propValue: robeHook.activeFeature.getSplittedSku()\r\n });\r\n }\r\n return conditions\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {SIDE_POSITIONS} from \"../../constants\";\r\nimport {IS_LIXIL_SERVERS} from \"../../../../../config\";\r\n\r\nconst hardcodedSkus = [\"6438AM-FCOL.218\", \"6434AM-FCOL.218\", \"A8007D-FCO.020\", \"A8007D-FCO.020\", \"A8004L-CO.020\", \"4836SM-COL.218\"];\r\n\r\nexport default class ShowerPanCombo extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_pan_combo';\r\n this.partName = 'Shower Pan';\r\n this.translateId = \"visualizer.bathroom.shower.shower_pan_combo\";\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.layerPriority = 8;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.oneLayerPosition = true;\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n // dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n\r\n // Our Shower Doors only fit openings: 56\"-60\" (1422-1524mm) The skus below are too wide and would not be compatible.\r\n // If a user selects one of these shower bases please hide/do not display a shower door with it.\r\n if (IS_LIXIL_SERVERS && Array.isArray(dbFeature.metaData[\"ShowerPanHeight\"]) && hardcodedSkus.some(sku => dbFeature.sharedFeatureName === sku)) {\r\n dbFeature.metaData[\"ShowerPanHeight\"] = [\"99\"]; // do not show shower door for these sku's\r\n }\r\n dbFeature.metaData[\"CustomShowerPanSide\"] = (dbFeature.sharedFeatureName || \"\").includes(\"LHO\")\r\n ? \"LHO\"\r\n : (dbFeature.sharedFeatureName || \"\").includes(\"RHO\") ? \"RHO\" : \"\";\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] && dbFeature.metaData[\"Side\"][0] !== \"0\"\r\n ? dbFeature.metaData[\"Side\"][0]\r\n : (dbFeature.metaData[\"CustomShowerPanSide\"] === \"RHO\") ? \"R\" : SIDE_POSITIONS[0];\r\n dbFeature.metaData[\"CustomNameWithoutShowerPanSide\"] = (dbFeature.sharedFeatureName || \"\")\r\n .replace(/LHO/g, \"\").replace(/RHO/g, \"\");\r\n\r\n return super.load_(dbFeature, new ShowerPanCombo())\r\n }\r\n\r\n disabledClick() {\r\n const shower = this.getParent();\r\n shower.showerFloorIsActive = !this.disabled;\r\n if (shower.showerDoor) {\r\n shower.showerDoor.disabled = this.disabled;\r\n shower.showerDoor.disabledClick(); // accessories and shower door handle\r\n }\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n shower.showerFloorIsActive = false;\r\n if (shower.layout && shower.showerTubComboIsActive()) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n\r\n hideLayerCondition() {\r\n return this.getParent().showerTubComboIsActive()\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked); // set active item & not in visualizer item\r\n this.applyFeatureIfNotCompatible();\r\n }\r\n\r\n /**\r\n * @param navItems {[navItemInterface]}\r\n * @param forFeature {featureInterface}\r\n */\r\n filterNavigationItems = (navItems, forFeature = null) => {\r\n let finalNavItems = [];\r\n const forMeta = forFeature && forFeature.metaData && forFeature.metaData[\"CustomShowerPanSide\"] ? forFeature.metaData[\"CustomShowerPanSide\"] : \"LHO\";\r\n const leftNavItems = navItems.filter(navItem => {\r\n if (!navItem.part.metaData[\"CustomShowerPanSide\"] || (navItem.part.metaData[\"CustomShowerPanSide\"] === forMeta)) {\r\n finalNavItems.push(navItem);\r\n return false\r\n }\r\n return true\r\n })\r\n leftNavItems.forEach(navItem => {\r\n if (!finalNavItems.some(existingNavItem => {\r\n if (IS_LIXIL_SERVERS) {\r\n return existingNavItem.part.metaData[\"CustomNameWithoutShowerPanSide\"] &&\r\n navItem.part.metaData[\"CustomNameWithoutShowerPanSide\"] === existingNavItem.part.metaData[\"CustomNameWithoutShowerPanSide\"]\r\n }\r\n return existingNavItem.part.metaData[\"MatchingFeature\"] && navItem.part.metaData[\"MatchingFeature\"] &&\r\n navItem.part.metaData[\"MatchingFeature\"][0] === existingNavItem.part.metaData[\"MatchingFeature\"][0]\r\n })) {\r\n finalNavItems.push(navItem)\r\n }\r\n })\r\n return finalNavItems\r\n }\r\n\r\n // /**\r\n // * @param neededPosition {string} LHO|RHO\r\n // * @param lookActiveFeature {featureInterface}\r\n // */\r\n // getMatchingOutletFeature = (neededPosition = \"\", lookActiveFeature) => {\r\n // if (IS_LIXIL_SERVERS) {\r\n // const nameWithoutPos = lookActiveFeature.metaData[\"CustomNameWithoutShowerPanSide\"];\r\n // const allNavItems = this.navigationSubItemsSimple();\r\n // return allNavItems.find(navItem => {\r\n // return (navItem.part.dbFeature.metaData[\"CustomShowerPanSide\"] === neededPosition)\r\n // && (navItem.part.metaData[\"CustomNameWithoutShowerPanSide\"] === nameWithoutPos)\r\n // })\r\n // }\r\n // const nameWithoutPos = lookActiveFeature.metaData[\"MatchingFeature\"];\r\n // const allNavItems = this.navigationSubItemsSimple();\r\n // return allNavItems.find(navItem => {\r\n // return (navItem.part.dbFeature.metaData[\"CustomShowerPanSide\"] === neededPosition)\r\n // && (navItem.part.metaData[\"MatchingFeature\"][0] === nameWithoutPos)\r\n // })\r\n // }\r\n\r\n // navigationSubItems(filters, searchText) {\r\n // return this.navigationSubItemsWithSides(filters, searchText);\r\n // }\r\n\r\n setLayers(layout) {\r\n const showerParent = this.getParent();\r\n if (showerParent.showerTubComboIsActive() || showerParent.showerFloorIsActive) {\r\n super.hideLayers();\r\n return;\r\n }\r\n return super.setLayers(layout);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // let conditions = super.getArrayOfConditions(); //roomLayout\r\n // const showerParent = this.getParent();\r\n // conditions.push({\r\n // propName: \"ShowerSize\",\r\n // propValue: showerParent.showerSize()\r\n // });\r\n // return conditions\r\n // }\r\n\r\n canDisplayDemoPoint() {\r\n const shower = this.getParent();\r\n return !shower.showerTubComboIsActive()\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class ShowerDoorHandle extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_door_handle';\r\n this.partName = 'Handle';\r\n this.translateId = \"visualizer.bathroom.shower.shower_door_handle\";\r\n this.dbName = 'Shower Door Handle';\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.layerPriority = 9;\r\n if (isChild) {\r\n this.previouslySelectedFeatures = {\r\n Layout1: {},\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const handle = this.load_(dbFeature, new ShowerDoorHandle());\r\n if (handle) {\r\n ShowerDoorHandle.setAdditionalMetaData(handle);\r\n }\r\n }\r\n\r\n static setAdditionalMetaData(handle) {\r\n const compatible = handle.metaData[\"CompatibleTub\"];\r\n const showerSize = handle.metaData[\"ShowerSize\"];\r\n if (!compatible) {\r\n handle.metaData[\"CompatibleTub\"] = [\"None\"];\r\n }\r\n if (!showerSize) {\r\n handle.metaData[\"ShowerSize\"] = [\"60in\"];\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const showerDoor = this.getParent().showerDoor;\r\n if (showerDoor) {\r\n showerDoor.disabled = this.disabled || !showerDoor.canBeEnabled(); // true or check if it can be enabled;\r\n }\r\n }\r\n\r\n handleClick() {\r\n super.handleClick();\r\n // this.getParent().getParent().setShowerTubCombo();\r\n //\r\n // let doorWithLiner = false;\r\n // if(this.metaData && this.metaData.length) {\r\n // const activeDoorMetadata = this.metaData.find(metaDataObject => metaDataObject.isFor);\r\n // const showerPanValues = activeDoorMetadata.conditions.find(condition => condition.name === \"BathtubLiner\");\r\n // if (showerPanValues) {\r\n // doorWithLiner = true;\r\n // }\r\n // }\r\n //\r\n // this.getParent().getParent().setLinerActive(doorWithLiner);\r\n // this.featureClicked();\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent();\r\n\r\n if (!showerParent.showerDoor || !showerParent.showerDoor.activeFeature ||\r\n (showerParent.showerDoor.activeFeature.metaData && showerParent.showerDoor.activeFeature.metaData[\"ShowerHandle\"]\r\n && showerParent.showerDoor.activeFeature.metaData[\"ShowerHandle\"][0] === \"None\")) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const layout = this.getParent().layout;\r\n // const showerComboParent = layout.parts[ShowerTubCombo.id];\r\n // const showerParent = this.getParent();\r\n // const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n //\r\n // let showerSize = showerComboParent.showerTubComboIsActive\r\n // ? showerComboParent.showerSize()\r\n // : showerParent.showerSize();\r\n //\r\n // let compatibleValue = \"None\";\r\n // if (showerComboParent.showerTubComboIsActive) {\r\n // if (showerComboParent.bottomTub === ShowerComboTubType.bathtub_liner) {\r\n // compatibleValue = \"BathtubLiner\"\r\n // } else if (showerComboParent.bottomTub === ShowerComboTubType.replacement_tub) {\r\n // compatibleValue = \"ReplacementTub\"\r\n // } else if (showerComboParent.bottomTub === ShowerComboTubType.walk_in_tub) {\r\n // compatibleValue = \"WalkInTub\"\r\n // } else if (showerComboParent.bottomTub === ShowerComboTubType.jetted_tub) {\r\n // compatibleValue = \"JettedTub\"\r\n // }\r\n // }\r\n //\r\n // const conditions = [{\r\n // propName: 'ShowerSize',\r\n // propValue: showerSize\r\n // },{\r\n // propName: 'CompatibleTub',\r\n // propValue: compatibleValue\r\n // }];\r\n //\r\n // if (layoutAbr === LayoutAbbreviation.Large) {\r\n // let showerDimensions = showerComboParent.showerTubComboIsActive\r\n // ? showerComboParent.showerDimensions()\r\n // : showerParent.showerDimensions();\r\n //\r\n // showerDimensions = getMetadataByDimensions(showerDimensions);\r\n //\r\n // const vanity = layout.parts[Vanity.id];\r\n // let counterTopSize = vanity.counterTopSize(this);\r\n // if (counterTopSize === '72in' && layout.type === 1 && (showerDimensions !== \"Full\" || showerDimensions !== \"Pony\")) {\r\n // showerDimensions = \"Full\"\r\n // }\r\n //\r\n // conditions.push({\r\n // propName: \"EX L\",\r\n // propValue: showerDimensions\r\n // })\r\n // }\r\n //\r\n // if (showerParent.showerDoor && showerParent.showerDoor.activeFeature) { // add shower pan condition only if it is shower\r\n // const doorCondition = showerParent.showerDoor.activeFeature.metaData[\"ShowerDoor\"];\r\n // const handleCondition = showerParent.showerDoor.activeFeature.metaData[\"ShowerHandle\"];\r\n // // console.log('doorCondition', doorCondition);\r\n // if (doorCondition) {\r\n // conditions.push({\r\n // propName: 'ShowerDoor',\r\n // propValue: doorCondition\r\n // })\r\n // }\r\n // if (handleCondition) {\r\n // conditions.push({\r\n // propName: 'ShowerHandle',\r\n // propValue: handleCondition\r\n // })\r\n // }\r\n // }\r\n //\r\n // if (!showerParent.showerTubComboIsActive()) {\r\n // if (showerParent.showerFloorIsActive) {\r\n // conditions.push({\r\n // propName: \"ShowerPan\",\r\n // propValue: \"Threshold\"\r\n // })\r\n // } else if (showerParent.showerPanCombo && showerParent.showerPanCombo.activeFeature) {\r\n // conditions.push({\r\n // propName: \"ShowerPan\",\r\n // propValue: showerParent.showerPanCombo.activeFeature.metaData[\"ShowerPan\"]\r\n // })\r\n // }\r\n // }\r\n // // console.log('conditions', conditions);\r\n // return conditions\r\n // }\r\n\r\n setDefault() {\r\n const shower = this.getParent();\r\n const currentActiveFeature = this.activeFeature;\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n this.setDefaultAccordingToPreviousSelect(shower, filteredFeatures, \"Brantford\");\r\n }\r\n this.rememberPreviousSelection(shower, currentActiveFeature);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.ShowerDoorHandle;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {LayoutAbbreviation} from \"../../constants\";\r\n\r\nexport default class PonyWallCap extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'pony_wall_cap';\r\n this.isPonyWallPart = true;\r\n this.visible = true;\r\n this.partName = 'Pony Wall Cap';\r\n this.translateId = \"visualizer.bathroom.shower.pony_wall_cap\";\r\n this.isStoneFeature = true;\r\n this.disableOnHomeSections = true;\r\n this.layerPriority = 11;\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.PonyWallCap;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().getActiveShowerGroup();\r\n if (showerParent.showerDimensions() !== \"Pony\") {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n const matchesByBindings = this.activeFeature && this.activeFeature.dbFeature && this.activeFeature.s3Bindings && this.activeFeature.dbFeature.s3Bindings.some(binding => {\r\n return binding.layout === LayoutAbbreviation.All || binding.layout === layoutAbr\r\n });\r\n if (matchesByBindings && (this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const parent = this.getParent();\r\n // const layout = parent.layout;\r\n // const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n // if (layoutAbr === LayoutAbbreviation.Small){\r\n // const activeShower = parent.showerTubComboIsActive()\r\n // ? layout.parts[ShowerTubCombo.id]\r\n // : layout.parts[Shower.id];\r\n // const showerSize = activeShower.showerSize(); // 60in, 30in, ..\r\n // // const showerDimensions = activeShower.showerDimensions(); // 15x4, Pony, ...\r\n // return [{\r\n // propName: 'Shower',\r\n // propValue: 'Custom'\r\n // }, {\r\n // propName: 'Size',\r\n // propValue: showerSize\r\n // }];\r\n // }\r\n //\r\n // return []\r\n // }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, '', '', true)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName\r\n && feature.dbFeature.displayName.includesCI(\"Pony Wall Cap - Model[For=Shower=(Custom)=Size=(30in_60in)]\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\" - Placeholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class PonyWallGlass extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'pony_wall_glass';\r\n this.isPonyWallPart = true;\r\n this.visible = true;\r\n this.partName = 'Pony Wall Glass';\r\n this.translateId = \"visualizer.bathroom.shower.pony_wall_glass\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n this.layerPriority = 10;\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const showerParent = this.getParent();\r\n if (showerParent && showerParent.showerDoor && showerParent.showerDoor.activeFeature) {\r\n if (showerParent.showerDoor.activeFeature.metaData[\"ShowerPanHeight\"]) {\r\n conditions.push({\r\n propName: \"ShowerPanHeight\",\r\n propValue: showerParent.showerDoor.activeFeature.metaData[\"ShowerPanHeight\"]\r\n })\r\n }\r\n if (showerParent.showerDoor.activeFeature.metaData[\"DoorHeight\"]) {\r\n conditions.push({\r\n propName: \"DoorHeight\",\r\n propValue: showerParent.showerDoor.activeFeature.metaData[\"DoorHeight\"]\r\n })\r\n }\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {LOOK_OVERLAYS, ShowerBodyType} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport store from \"../../../../../store\";\r\nimport {setLookOverlayOpened} from \"../../../../../actions/lookFunctions\";\r\n\r\nexport default class ShowerFloor extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_floor';\r\n this.translateId = \"visualizer.bathroom.shower.shower_floor\";\r\n this.partName = 'Floor';\r\n this.homePageTitle = 'Shower Flooring';\r\n this.dbName = 'Shower Floor';\r\n this.isStoneFeature = true;\r\n this.selectedByUser = false;\r\n this.layerPriority = 6;\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n shower.showerFloorIsActive = true;\r\n if (shower.layout && shower.showerTubComboIsActive()) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked);\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n if ((!shower.showerFloorIsActive || shower.showerTubComboIsActive()) && !window.location.hash.includes(\"visualizer\")) {\r\n store.dispatch(setLookOverlayOpened(LOOK_OVERLAYS.notCompatiblePopup));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n\r\n this.getParent().selectedByUser = true;\r\n const threshold = shower.threshold;\r\n if (threshold && !threshold.selectedByUser) {\r\n const thresholdAvailableFeatures = threshold.navigationSubItems();\r\n const currentFloorName = this.getSplittedFeatureName();\r\n const sameThreshold = thresholdAvailableFeatures.find(tr => tr.part.getSplittedFeatureName() === currentFloorName);\r\n if (sameThreshold) {\r\n super.handleClick.call(sameThreshold.part);\r\n threshold.selectedByUser = false;\r\n }\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n if (this.getParent().showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.getParent().customBodyType === ShowerBodyType.Door) {\r\n const showerDoorParent = this.getParent().showerDoor;\r\n if (showerDoorParent && showerDoorParent.activeFeature) {\r\n const currentShowerPanCondition = showerDoorParent.activeFeature.metaData[\"ShowerPan\"];\r\n if (!currentShowerPanCondition || (currentShowerPanCondition && !currentShowerPanCondition.includes(\"Threshold\"))) {\r\n super.hideLayers();\r\n return;\r\n }\r\n }\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerParent = this.getParent();\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n return conditions\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {LOOK_OVERLAYS, ShowerBodyType} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport store from \"../../../../../store\";\r\nimport {setLookOverlayOpened} from \"../../../../../actions/lookFunctions\";\r\n\r\nexport default class Threshold extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'threshold';\r\n this.partName = 'Threshold';\r\n this.translateId = \"visualizer.bathroom.shower.threshold\";\r\n this.homePageTitle = 'Threshold';\r\n this.dbName = 'ShowerPan';\r\n this.isStoneFeature = true;\r\n this.selectedByUser = false;\r\n this.layerPriority = 7;\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n shower.showerFloorIsActive = true;\r\n if (shower.layout && shower.showerTubComboIsActive()) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked);\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n if ((!shower.showerFloorIsActive || shower.showerTubComboIsActive()) && !window.location.hash.includes(\"visualizer\")) {\r\n store.dispatch(setLookOverlayOpened(LOOK_OVERLAYS.notCompatiblePopup));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n\r\n this.getParent().selectedByUser = true;\r\n const showerFloor = shower.showerFloor;\r\n if (showerFloor && !showerFloor.selectedByUser) {\r\n const showerFloorAvailableFeatures = showerFloor.navigationSubItems();\r\n const currentThresholdName = this.getSplittedFeatureName();\r\n const sameShowerFloor = showerFloorAvailableFeatures.find(navItemFloor => {\r\n return navItemFloor.part.getSplittedFeatureName() === currentThresholdName\r\n });\r\n if (sameShowerFloor) {\r\n super.handleClick.call(sameShowerFloor.part);\r\n showerFloor.selectedByUser = false;\r\n }\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n if (this.getParent().showerTubComboIsActive() || !this.getParent().showerFloorIsActive) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.getParent().customBodyType === ShowerBodyType.Door) {\r\n const showerDoorParent = this.getParent().showerDoor;\r\n if (showerDoorParent && showerDoorParent.activeFeature) {\r\n const currentShowerPanCondition = showerDoorParent.activeFeature.metaData[\"ShowerPan\"];\r\n if (!currentShowerPanCondition || (currentShowerPanCondition && !currentShowerPanCondition.includes(\"Threshold\"))) {\r\n super.hideLayers();\r\n return;\r\n }\r\n }\r\n }\r\n const conditions = this.getArrayOfConditions();\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const layout = this.getParent().layout;\r\n // const showerSize = this.getParent().showerSize();\r\n // let showerDimensions = getMetadataByDimensions(this.getParent().showerDimensions());\r\n //\r\n // const vanity = layout.parts[Vanity.id];\r\n // let counterTopSize = vanity.counterTopSize(this);\r\n // if (counterTopSize === '72in' && layout.type === 1 && (showerDimensions !== \"Full\" || showerDimensions !== \"Pony\")) {\r\n // showerDimensions = \"Full\"\r\n // }\r\n //\r\n // return [{\r\n // propName: 'ShowerSize',\r\n // propValue: showerSize\r\n // }, {\r\n // propName: 'EX L',\r\n // propValue: showerDimensions\r\n // }];\r\n // }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerParent = this.getParent();\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (this.getParent().activeSubType() === Shower.Type.Custom) {\r\n const zIndex = zIndexes.Shower.Threshold;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class ShowerDrain extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_drain';\r\n this.partName = 'Shower Drain';\r\n this.translateId = \"visualizer.bathroom.shower.shower_drain\";\r\n this.homePageTitle = 'Shower Drain';\r\n this.visible = false;\r\n this.layerPriority = 14;\r\n }\r\n\r\n setLayers(layout) {\r\n const showerParent = this.getParent();\r\n if (!showerParent.showerFloorIsActive || showerParent.showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n })\r\n return conditions\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n this.activeFeature = filteredFeatures[0];\r\n this.placeholderFeature = filteredFeatures[0];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.ShowerDrain;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {createParentPositions, METADATA, ShowerHeadTypes} from \"../../constants\";\r\nimport ShowerCommon from \"../showerNew/showerCommon\";\r\nimport store from \"../../../../../store\";\r\nimport {IS_QKB_UI} from \"../../../../../config\";\r\n\r\nexport default class ShowerHead extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_head';\r\n this.partName = 'Shower Head';\r\n this.translateId = \"visualizer.bathroom.shower.shower_head\";\r\n this.layerPriority = 4;\r\n this.canBeDisabled = true;\r\n // this.useMatchingFeatureReplacement = \"MountPosition\";\r\n if (isChild) {\r\n this.previouslySelectedFeatures = {\r\n Layout1: {},\r\n Layout4: {},\r\n };\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n navigationSubItems(...props) {\r\n if (IS_QKB_UI) {\r\n return this.navigationSubItemsWithSides(...props)\r\n }\r\n return super.navigationSubItems(...props);\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Side\"] || (Array.isArray(dbFeature.metaData[\"Side\"]) && dbFeature.metaData[\"Side\"][0] === \"0\")) {\r\n dbFeature.metaData[\"Side\"] = [METADATA.LeftSide];\r\n }\r\n return super.load(dbFeature)\r\n }\r\n\r\n handleClick() {\r\n this.setArmHeadType();\r\n super.handleClick();\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const showerParent = this.getParent().getParent();\r\n if (showerParent.showerFixture) {\r\n showerParent.showerFixture.disabled = true;\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const showerArm = this.getParent().showerArm;\r\n if (showerArm) {\r\n showerArm.disabled = this.disabled || !showerArm.canBeEnabled(); // true or check if it can be enabled\r\n }\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_arm && this.activeFeature\r\n }\r\n\r\n setLayers(layout) {\r\n const showerParent = this.getParent();\r\n if (this.hideLayerCondition()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (showerParent.showerArm && showerParent.showerArm.layerPositions && this.layerPositions && this.activeFeature) {\r\n Object.keys(showerParent.showerArm.layerPositions).forEach(position => {\r\n if (!this.layerPositions[position] && showerParent.showerArm.layerPositions[position]) {\r\n this.layerPositions[position] = this.getMatchingPositionFeature(position)\r\n } else if (this.layerPositions[position] && !showerParent.showerArm.layerPositions[position]) {\r\n const {wizardActiveItem} = store.getState().wizardState;\r\n if (!wizardActiveItem || !wizardActiveItem.hideItems) {\r\n this.layerPositions[position] = null\r\n }\r\n }\r\n })\r\n }\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const showerParent = this.getParent();\r\n const showerSize = showerParent.showerSize();\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n if (showerParent.showerArm && showerParent.showerArm.activeFeature && showerParent.showerArm.activeFeature.metaData[\"MountType\"]) {\r\n conditions.push({\r\n propName: \"MountType\",\r\n propValue: showerParent.showerArm.activeFeature.metaData[\"MountType\"][0]\r\n })\r\n }\r\n if (showerParent.showerArm && showerParent.showerArm.activeFeature && showerParent.showerArm.activeFeature.metaData[\"MountPosition\"]) {\r\n conditions.push({\r\n propName: \"MountPosition\",\r\n propValue: showerParent.showerArm.activeFeature.metaData[\"MountPosition\"][0]\r\n })\r\n }\r\n return conditions;\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n return this.getParent().shower_head_type === ShowerHeadTypes.shower_arm\r\n }\r\n\r\n}\r\n","import ShowerCommon from \"../showerNew/showerCommon\";\r\nimport {createParentPositions, METADATA, ShowerHeadTypes} from \"../../constants\";\r\nimport store from \"../../../../../store\";\r\nimport {IS_QKB_UI} from \"../../../../../config\";\r\n\r\nexport default class ShowerArm extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_arm';\r\n this.partName = 'Shower Arm';\r\n this.translateId = \"visualizer.bathroom.accessories.shower_arm\";\r\n this.canBeDisabled = true;\r\n this.layerPriority = 8;\r\n // this.useMatchingFeatureReplacement = \"MountPosition\";\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n navigationSubItems(...props) {\r\n if (IS_QKB_UI) {\r\n return this.navigationSubItemsWithSides(...props)\r\n }\r\n return super.navigationSubItems(...props);\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Side\"] || (Array.isArray(dbFeature.metaData[\"Side\"]) && dbFeature.metaData[\"Side\"][0] === \"0\")) {\r\n dbFeature.metaData[\"Side\"] = [METADATA.LeftSide];\r\n }\r\n return super.load(dbFeature)\r\n }\r\n\r\n handleClick() {\r\n this.setArmHeadType();\r\n super.handleClick();\r\n }\r\n\r\n checkForSameMountPosition(newFeature) {\r\n if (newFeature.metaData[\"MountPosition\"] || newFeature.metaData[\"MountType\"]) {\r\n let conditions = [];\r\n if (newFeature.metaData[\"MountPosition\"]) {\r\n conditions.push({\r\n propName: \"MountPosition\",\r\n propValue: newFeature.metaData[\"MountPosition\"]\r\n });\r\n }\r\n if (newFeature.metaData[\"MountType\"]) {\r\n conditions.push({\r\n propName: \"MountType\",\r\n propValue: newFeature.metaData[\"MountType\"]\r\n });\r\n }\r\n Object.keys(this.layerPositions).forEach(position => {\r\n if ((position !== newFeature.metaData.layerPosition) && this.layerPositions[position]\r\n && !this.layerPositions[position].matchesMetaForArrayOfConditions(conditions)) {\r\n this.layerPositions[position] = null; // erase current position\r\n }\r\n })\r\n }\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const showerParent = this.getParent().getParent();\r\n if (showerParent.showerFixture) {\r\n showerParent.showerFixture.disabled = true;\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const showerHead = this.getParent().showerHead;\r\n if (showerHead) {\r\n showerHead.disabled = this.disabled || !showerHead.canBeEnabled(); // true or check if it can be enabled;\r\n }\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_arm && this.activeFeature\r\n }\r\n\r\n setLayers(layout) {\r\n const showerParent = this.getParent();\r\n if (this.hideLayerCondition()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (showerParent.showerHead && showerParent.showerHead.layerPositions && this.layerPositions && this.activeFeature) {\r\n Object.keys(showerParent.showerHead.layerPositions).forEach(position => {\r\n if (!this.layerPositions[position] && showerParent.showerHead.layerPositions[position]) {\r\n this.layerPositions[position] = this.getMatchingPositionFeature(position)\r\n } else if (this.layerPositions[position] && !showerParent.showerHead.layerPositions[position]) {\r\n const {wizardActiveItem} = store.getState().wizardState;\r\n if (!wizardActiveItem || !wizardActiveItem.hideItems) {\r\n this.layerPositions[position] = null\r\n }\r\n }\r\n })\r\n }\r\n return super.setLayers(layout);\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n return this.getParent().shower_head_type === ShowerHeadTypes.shower_arm\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerHeadTypes} from \"../../constants\";\r\n\r\nexport default class ShowerHeadBundle extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_head_bundle';\r\n this.partName = 'Shower Head Bundle';\r\n this.translateId = \"visualizer.bathroom.shower.shower_head_bundle\";\r\n this.canBeDisabled = true;\r\n this.layerPriority = 12;\r\n }\r\n\r\n handleClick() {\r\n const showerParent = this.getParent().getParent();\r\n showerParent.setShowerHeadType(ShowerHeadTypes.shower_head_bundle);\r\n if (showerParent.showerFixture && showerParent.showerFixture.activeFeature && showerParent.showerFixture.activeFeature.metaData[\"MountType\"]\r\n && !showerParent.showerFixture.activeFeature.metaData[\"MountType\"].includes(\"0\") && !showerParent.showerFixture.disabled) {\r\n // store.dispatch(setLookOverlayOpened(LOOK_OVERLAYS.notCompatiblePopup));\r\n // return;\r\n this.applyFeatureIfNotCompatible();\r\n }\r\n super.handleClick();\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const showerParent = this.getParent().getParent();\r\n if (showerParent.showerFixture) {\r\n showerParent.showerFixture.disabled = true;\r\n }\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_head_bundle && this.activeFeature\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const showerParent = this.getParent();\r\n const showerSize = showerParent.showerSize();\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n // if (showerParent.showerHead && showerParent.showerHead.activeFeature && showerParent.showerHead.activeFeature.metaData[\"MountType\"]) {\r\n // conditions.push({\r\n // propName: \"MountType\",\r\n // propValue: showerParent.showerHead.activeFeature.metaData[\"MountType\"][0]\r\n // })\r\n // }\r\n return conditions;\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n return this.getParent().shower_head_type === ShowerHeadTypes.shower_head_bundle\r\n }\r\n\r\n}\r\n","import {Shower} from \"../../parts/shower\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class TubSpout extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'tub_spout';\r\n this.partName = 'Tub Spout';\r\n this.translateId = \"visualizer.bathroom.shower.tub_spout\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n const showerComboParent = showerParent.layout.parts[ShowerTubCombo.id];\r\n if (!showerParent.showerTubComboIsActive() || showerComboParent.bottomTub !== \"replacement_tub\") {\r\n return true\r\n }\r\n if (showerParent.showerFixture && showerParent.showerFixture.activeFeature && showerParent.showerFixture.activeFeature.metaData[\"MountType\"]\r\n && showerParent.showerFixture.activeFeature.metaData[\"MountType\"].includes(\"T\")) { // S and 0 is ok\r\n return true;\r\n }\r\n return false\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerSize = showerParent.showerSize();\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerComboParent = layout.parts[ShowerTubCombo.id];\r\n return showerParent.showerTubComboIsActive() && showerComboParent.bottomTub === \"replacement_tub\";\r\n }\r\n\r\n}\r\n","import {ShowerHeadTypes, ShowerHandTypes} from \"../../constants\";\r\nimport ShowerCommon from \"../showerNew/showerCommon\";\r\n\r\nexport default class HandShowerKit extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'hand_shower_kit';\r\n this.partName = 'Hand Shower Kit';\r\n this.translateId = \"visualizer.bathroom.shower.hand_shower_kit\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (!Array.isArray(dbFeature.metaData[\"MountType\"])) {\r\n dbFeature.metaData[\"MountType\"] = [\"0\"]\r\n }\r\n return super.load_(dbFeature, new HandShowerKit());\r\n }\r\n\r\n handleClick() {\r\n const showerParent = this.getParent().getParent();\r\n showerParent.setShowerHeadType(ShowerHeadTypes.shower_arm);\r\n showerParent.setShowerHandType(ShowerHandTypes.hand_shower_kit);\r\n super.handleClick();\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_arm || showerParent.shower_hand_type !== ShowerHandTypes.hand_shower_kit\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n //Hand Shower Kit should be displayed with the fixtures that have MountType: 0\r\n if (showerParent.showerFixture && showerParent.showerFixture.activeFeature && showerParent.showerFixture.activeFeature.metaData[\"MountType\"]) {\r\n conditions.push({\r\n propName: \"MountType\",\r\n propValue: showerParent.showerFixture.activeFeature.metaData[\"MountType\"]\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n return this.getParent().shower_head_type !== ShowerHeadTypes.shower_head_bundle\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class ShowerCurb extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_curb';\r\n this.partName = 'Shower Curb';\r\n this.translateId = \"visualizer.bathroom.shower.shower_curb\";\r\n this.canBeDisabled = false;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerSize = showerParent.showerSize();\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import ShowerCommon from \"./showerCommon\";\r\nimport {CORNER_SHELVES_POSITIONS} from \"../../constants\";\r\n\r\nexport default class BodySpray extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'body_spray';\r\n this.partName = 'Body Spray';\r\n this.translateId = \"visualizer.bathroom.shower.body_spray\";\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {};\r\n CORNER_SHELVES_POSITIONS.forEach(pos => {\r\n this.layerPositions[pos] = null\r\n })\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = (dbFeature.metaData[\"Side\"] && dbFeature.metaData[\"MountPosition\"])\r\n ? dbFeature.metaData[\"Side\"][0] + dbFeature.metaData[\"MountPosition\"][0]\r\n : CORNER_SHELVES_POSITIONS[0] // should be \"\" here!!!\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === CORNER_SHELVES_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new this.constructor(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n handleClick() {\r\n this.setArmHeadType(); // body spray can be used with everything? not sure\r\n super.handleClick();\r\n }\r\n\r\n setLayers(layout) {\r\n // const showerParent = this.getParent();\r\n // if (showerParent.shower_head_type !== ShowerHeadTypes.shower_arm || !this.isActiveFeatureGroup(\"diverterTrim\")) {\r\n // super.hideLayers();\r\n // return;\r\n // }\r\n return super.setLayers(layout);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const showerParent = this.getParent();\r\n // let conditions = super.getArrayOfConditions(); //roomLayout\r\n // if (showerParent.handShowerHolder && showerParent.handShowerHolder.activeFeature) {\r\n // conditions.push({\r\n // propName: \"MountPosition\",\r\n // propValue: showerParent.handShowerHolder.activeFeature.metaData[\"MountPosition\"]\r\n // ? showerParent.handShowerHolder.activeFeature.metaData[\"MountPosition\"]\r\n // : [\"2\"]\r\n // })\r\n // }\r\n // return conditions\r\n // }\r\n\r\n}\r\n","import ShowerCommon from \"./showerCommon\";\r\nimport {createParentPositions, ShowerHeadTypes} from \"../../constants\";\r\n\r\nexport default class DiverterTrim extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'diverter_trim';\r\n this.partName = 'Diverter Trim';\r\n this.translateId = \"visualizer.bathroom.shower.diverter_trim\";\r\n this.canBeDisabled = true;\r\n this.disabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n handleClick() {\r\n this.setArmHeadType();\r\n super.handleClick();\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_arm\r\n }\r\n\r\n}\r\n","import ShowerCommon from \"./showerCommon\";\r\nimport {createParentPositions, ShowerHandTypes, ShowerHeadTypes} from \"../../constants\";\r\n\r\nexport default class HandShowerHolder extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'hand_shower_holder';\r\n this.partName = 'Hand Shower Holder';\r\n this.translateId = \"visualizer.bathroom.shower.hand_shower_holder\";\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n handleClick() {\r\n const showerParent = this.getParent().getParent();\r\n showerParent.setShowerHandType(ShowerHeadTypes.shower_arm);\r\n showerParent.setShowerHandType(ShowerHandTypes.hand_shower_holder);\r\n super.handleClick();\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_arm || showerParent.shower_hand_type !== ShowerHandTypes.hand_shower_holder\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const showerParent = this.getParent();\r\n // let conditions = super.getArrayOfConditions(); //roomLayout\r\n // //Hand Shower Kit should be displayed with the fixtures that have MountType: 0\r\n // if (showerParent.wallUnion && showerParent.wallUnion.activeFeature && showerParent.wallUnion.activeFeature.metaData[\"MountPosition\"]) {\r\n // conditions.push({\r\n // propName: \"MountPosition\",\r\n // propValue: showerParent.showerFixture.activeFeature.metaData[\"MountPosition\"]\r\n // })\r\n // }\r\n // return conditions\r\n // }\r\n\r\n}\r\n","import ShowerCommon from \"./showerCommon\";\r\nimport {createParentPositions, ShowerHandTypes, ShowerHeadTypes} from \"../../constants\";\r\n\r\nexport default class HandShowerOnly extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'hand_shower_only';\r\n this.partName = 'Hand Shower Only';\r\n this.translateId = \"visualizer.bathroom.shower.hand_shower_only\";\r\n this.canBeDisabled = true;\r\n this.useMatchingFeatureReplacement = \"MountPosition\";\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n handleClick() {\r\n const showerParent = this.getParent().getParent();\r\n showerParent.setShowerHeadType(ShowerHeadTypes.shower_arm);\r\n showerParent.setShowerHandType(ShowerHandTypes.hand_shower_holder);\r\n super.handleClick();\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_arm || showerParent.shower_hand_type !== ShowerHandTypes.hand_shower_holder\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n //Hand Shower Kit should be displayed with the fixtures that have MountType: 0\r\n if (showerParent.handShowerHolder && showerParent.handShowerHolder.activeFeature) {\r\n conditions.push({\r\n propName: \"MountPosition\",\r\n propValue: showerParent.handShowerHolder.activeFeature.metaData[\"MountPosition\"]\r\n ? showerParent.handShowerHolder.activeFeature.metaData[\"MountPosition\"]\r\n : [\"2\"]\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import ShowerCommon from \"./showerCommon\";\r\nimport {createParentPositions, ShowerHandTypes, ShowerHeadTypes} from \"../../constants\";\r\n\r\nexport default class ShowerHose extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_hose';\r\n this.partName = 'Shower Hose';\r\n this.translateId = \"visualizer.bathroom.shower.shower_hose\";\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n handleClick() {\r\n const showerParent = this.getParent().getParent();\r\n showerParent.setShowerHeadType(ShowerHeadTypes.shower_arm);\r\n showerParent.setShowerHandType(ShowerHandTypes.hand_shower_holder);\r\n super.handleClick();\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_arm || showerParent.shower_hand_type !== ShowerHandTypes.hand_shower_holder\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n if (showerParent.handShowerHolder && showerParent.handShowerHolder.activeFeature) {\r\n conditions.push({\r\n propName: \"MountPosition\",\r\n propValue: showerParent.handShowerHolder.activeFeature.metaData[\"MountPosition\"]\r\n ? showerParent.handShowerHolder.activeFeature.metaData[\"MountPosition\"]\r\n : [\"2\"]\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import ShowerCommon from \"./showerCommon\";\r\nimport {createParentPositions, ShowerHeadTypes} from \"../../constants\";\r\n\r\nexport default class ShowerSystem extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_system';\r\n this.partName = 'Shower System';\r\n this.translateId = \"visualizer.bathroom.shower.shower_system\";\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n handleClick() {\r\n const showerParent = this.getParent().getParent();\r\n showerParent.setShowerHeadType(ShowerHeadTypes.shower_system);\r\n super.handleClick();\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_system && this.activeFeature\r\n }\r\n}\r\n","import ShowerCommon from \"./showerCommon\";\r\nimport {createParentPositions, ShowerHeadTypes} from \"../../constants\";\r\n\r\nexport default class ShowerTrimKit extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_trim_kit';\r\n this.partName = 'Shower Trim Kit';\r\n this.translateId = \"visualizer.bathroom.shower.shower_trim_kit\";\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n handleClick() {\r\n const showerParent = this.getParent().getParent();\r\n showerParent.setShowerHeadType(ShowerHeadTypes.shower_trim_kit);\r\n super.handleClick();\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_trim_kit && this.activeFeature\r\n }\r\n}\r\n","import ShowerCommon from \"./showerCommon\";\r\nimport {createParentPositions, ShowerHeadTypes} from \"../../constants\";\r\n\r\nexport default class ValveTrim extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'valve_trim';\r\n this.partName = 'Valve Trim';\r\n this.translateId = \"visualizer.bathroom.shower.valve_trim\";\r\n this.canBeDisabled = true;\r\n this.conflictingPositions = [\"shower_seats\"];\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n handleClick() {\r\n this.setArmHeadType();\r\n super.handleClick();\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_arm\r\n }\r\n}\r\n","import ShowerCommon from \"./showerCommon\";\r\nimport {createParentPositions, ShowerHandTypes, ShowerHeadTypes} from \"../../constants\";\r\n\r\nexport default class WallUnion extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'wall_union';\r\n this.partName = 'Wall Union';\r\n this.translateId = \"visualizer.bathroom.shower.wall_union\";\r\n this.canBeDisabled = true;\r\n this.useMatchingFeatureReplacement = \"MountPosition\";\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n handleClick() {\r\n this.setArmHeadType();\r\n super.handleClick();\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_arm\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n if (showerParent.shower_hand_type === ShowerHandTypes.hand_shower_kit) {\r\n if (showerParent.handShowerKit && showerParent.handShowerKit.activeFeature && showerParent.handShowerKit.activeFeature.metaData[\"MountPosition\"]) {\r\n conditions.push({\r\n propName: \"MountPosition\",\r\n propValue: [\"3\"]\r\n })\r\n }\r\n } else if (showerParent.shower_hand_type === ShowerHandTypes.hand_shower_holder) {\r\n if (showerParent.handShowerHolder && showerParent.handShowerHolder.activeFeature) {\r\n conditions.push({\r\n propName: \"MountPosition\",\r\n propValue: showerParent.handShowerHolder.activeFeature.metaData[\"MountPosition\"]\r\n ? showerParent.handShowerHolder.activeFeature.metaData[\"MountPosition\"]\r\n : [\"2\"]\r\n })\r\n }\r\n }\r\n\r\n return conditions\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {windowThumbnail} from '../../../bvComponent/core/assets';\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport WindowKits from \"../subparts/window/windowKits\";\r\nimport WindowBody from \"../subparts/window/windowBody\";\r\n\r\nexport class WindowParent extends Part {\r\n static id = 'Window';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Window';\r\n this.homePageTitle = 'Windows';\r\n this.translateId = \"visualizer.bathroom.window\";\r\n this.partThumbnail = windowThumbnail;\r\n this.windowBody = null;\r\n this.relatedGroupNames = [\"Window Kit\", \"Window\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Window Kit\":\r\n case \"Window Kits\": {\r\n relatedItemName = \"windowKits\";\r\n RelatedItemClass = WindowKits;\r\n break;\r\n }\r\n case \"Window\": {\r\n relatedItemName = \"windowBody\";\r\n RelatedItemClass = WindowBody;\r\n break;\r\n }\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n return this.subParts()[0]\r\n }\r\n\r\n setDefault(layout) {\r\n this.relatedItems.forEach(_ => _.setDefault(layout));\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Shower} from \"../../parts/shower\";\r\n// import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {ShowerAccessories} from \"../../parts/showerAccessories\";\r\nimport {CORNER_SHELVES_POSITIONS} from \"../../constants\";\r\n\r\nexport default class WindowKits extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"window_kits\";\r\n this.dbName = window.location.href.includes(\"quotekandb\") ? \"Window Kits\" : \"Window Kit\";\r\n this.partName = \"Window Kits\";\r\n this.translateId = \"visualizer.bathroom.window.kits\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n // navigationSubItems(filters, searchText) {\r\n // const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n // const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n // const windowParent = this.getParent();\r\n // const accessoriesParent = windowParent.layout.parts[ShowerAccessories.id];\r\n // featuresToDisplay.forEach(feature => {\r\n // if (accessoriesParent && accessoriesParent.showerPod && !accessoriesParent.showerPod.disabled) {\r\n // feature.matchesMetaFailed = \"shower_pod\";\r\n // } else if (accessoriesParent.cornerShelf && !accessoriesParent.cornerShelf.disabled\r\n // && CORNER_SHELVES_POSITIONS.some(pos => accessoriesParent.cornerShelf.layerPositions[pos] && !pos.includes(\"3\"))) {\r\n // feature.matchesMetaFailed = \"corner_shelf\";\r\n // } else if (feature.matchesMetaFailed) {\r\n // feature.matchesMetaFailed = false;\r\n // }\r\n // });\r\n // return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n // }\r\n\r\n // handleChangeParent(nonCompatibleWith) {\r\n // if (nonCompatibleWith === \"Shower Pod\") {\r\n //\r\n // }\r\n // }\r\n handleChangeParent() {\r\n // this.removeInterferingParts();\r\n this.getParent().disabled = false;\r\n this.handleClick();\r\n }\r\n\r\n removeInterferingParts = () => {\r\n const kitsParent = this.getParent();\r\n const windowParent = kitsParent.getParent();\r\n const accessoriesParent = windowParent.layout.parts[ShowerAccessories.id];\r\n if (accessoriesParent) {\r\n if (accessoriesParent.showerPod) {\r\n accessoriesParent.showerPod.disabled = true;\r\n }\r\n if (accessoriesParent.cornerShelf) {\r\n CORNER_SHELVES_POSITIONS.forEach(pos => {\r\n if (accessoriesParent.cornerShelf.layerPositions[pos] && !pos.includes(\"3\")) {\r\n accessoriesParent.cornerShelf.layerPositions[pos] = null;\r\n }\r\n })\r\n }\r\n }\r\n }\r\n\r\n // disabledClick() {\r\n // if (!this.disabled) {\r\n // this.removeInterferingParts();\r\n // }\r\n // }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const windowParent = this.getParent();\r\n const layout = windowParent.layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n // if (windowBody && this.windowNeededLayouts.includes(layout.type)) {\r\n // conditions.push({\r\n // propName: \"Window\",\r\n // propValue: (windowBody && windowBody.activeFeature && windowBody.disabled) ? \"Off\" : \"On\"\r\n // })\r\n // }\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Window.WindowKits;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class WindowBody extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'window_body';\r\n this.partName = 'Window';\r\n this.translateId = \"visualizer.bathroom.window\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {floorThumbnail} from \"../../../kvComponent/core/assets\";\r\n\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\nimport {Shower} from \"./shower\";\r\nimport Walls from \"./walls\";\r\nimport {getCurrentRoomType} from \"../../../appLayout\";\r\nimport {LOOK_ROOM_TYPES} from \"../constants\";\r\n\r\nexport default class Floor extends Part {\r\n static id = 'Floor';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.partId = 'parent_floor';\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.bathroom.floor\";\r\n this.partThumbnail = floorThumbnail;\r\n this.relatedGroupNames = [\"Floor\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Flor\":\r\n case \"Floor\":\r\n relatedItemName = \"floorBody\";\r\n RelatedItemClass = FloorBody;\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n}\r\n\r\nclass FloorBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'bathroom_floor';\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.bathroom.floor\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent ? showerParent.showerSize() : null;\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n })\r\n }\r\n const wallParent = layout.parts[Walls.id];\r\n if ((getCurrentRoomType(layout) === LOOK_ROOM_TYPES.as) && wallParent && wallParent.splitWall) {\r\n conditions.push({\r\n propName: \"SplitWallType\",\r\n propValue: wallParent.getSplitWallType()\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Background.Floor;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n\r\n\r\n","import {Part} from \"../part\";\r\nimport {wallsThumbnail} from \"../../../bvComponent/core/assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\n\r\nimport Attachment from \"../subparts/globals/attachment\";\r\nimport Decor from \"../subparts/globals/decor\";\r\nimport ShowerWallMirror from \"../subparts/globals/showerWallMirror\";\r\nimport {DECORS_MAX} from \"../constants\";\r\n\r\nconst compareMountPosition = (checkFeature, dbFeatureLoading) => {\r\n return checkFeature.metaData[\"MountPosition\"] && checkFeature.matchesMetaForCondition(\"MountPosition\", dbFeatureLoading.metaData[\"MountPosition\"])\r\n}\r\n\r\nconst checkForExistingDecor = (currentDecorFeatureGroup, dbFeature) => {\r\n if (!currentDecorFeatureGroup) { // we skipped all decors, but didn't find the same\r\n return true\r\n }\r\n if (dbFeature.sharedFeatureName === currentDecorFeatureGroup.decorName) { // decors are matching by name\r\n return true\r\n }\r\n if (dbFeature.metaData[\"MountPosition\"]) {\r\n if (Array.isArray(dbFeature.metaData[\"RoomLayout\"])) {\r\n return dbFeature.metaData[\"RoomLayout\"].some(layoutName => {\r\n return currentDecorFeatureGroup.featuresList && Array.isArray(currentDecorFeatureGroup.featuresList[layoutName])\r\n && currentDecorFeatureGroup.featuresList[layoutName].some(feature => compareMountPosition(feature, dbFeature))\r\n })\r\n } else {\r\n return currentDecorFeatureGroup.some(feature => compareMountPosition(feature, dbFeature))\r\n }\r\n }\r\n return false\r\n}\r\n\r\nexport default class Globals extends Part {\r\n static id = \"Globals\";\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = \"Globals\";\r\n this.partThumbnail = wallsThumbnail;\r\n\r\n // related items\r\n this.toiletPaper = null;\r\n this.decor1 = null; // can be up to 10\r\n this.showerWallMirror = null; // mirror reflection\r\n this.lamp = null; // mirror reflection\r\n this.mirrors = null; // mirror reflection\r\n }\r\n\r\n load(dbFeature) {\r\n let\r\n relatedItemName = \"\",\r\n decorCount = 0,\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Decor\":\r\n case \"Decore\": {\r\n for (let i = 1; i <= DECORS_MAX; i++) {\r\n const currentDecorFeatureGroup = this[\"decor\" + i];\r\n if (checkForExistingDecor(currentDecorFeatureGroup, dbFeature)) {\r\n relatedItemName = \"decor\" + i;\r\n decorCount = i;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case \"Attachment\": {\r\n relatedItemName = \"attachment\";\r\n RelatedItemClass = Attachment;\r\n break;\r\n }\r\n case \"Shower Wall Mirror\": {\r\n relatedItemName = \"showerWallMirror\";\r\n RelatedItemClass = ShowerWallMirror;\r\n break;\r\n }\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n if (dbFeature.groupName === \"Decor\" || dbFeature.groupName === \"Decore\") {\r\n this[relatedItemName] = new Decor(true, decorCount);\r\n this[relatedItemName].decorName = dbFeature.sharedFeatureName;\r\n } else {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n }\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {}\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport isEqual from \"lodash/isEqual\";\r\nimport {METADATA} from \"../../constants\";\r\n\r\nexport default class Attachment extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"attachment\";\r\n this.partName = \"Attachment\";\r\n this.hasAdditionalParts = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Side\"] && dbFeature.sharedFeatureName.includes(\"ountertop\")) {\r\n dbFeature.metaData[\"Side\"] = [METADATA.LeftSide];\r\n }\r\n return super.load(dbFeature);\r\n }\r\n\r\n checkIfFeaturePartIsMatching() {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n\r\n setActiveFeatureParts() {\r\n const layout = this.getParent().layout;\r\n const activeFeatures = layout.getActiveFeatures(true, true);\r\n let matchingFeatures = [];\r\n const currentConditions = this.getArrayOfConditions();\r\n const selectFrom = this.features.filter(attFeature => attFeature.matchesMetaForArrayOfConditions(currentConditions));\r\n activeFeatures.forEach(cartItem => {\r\n if (!cartItem.cartFeature || cartItem.featureGroup.disabled || !cartItem.cartFeature.metaData[\"MatchingFeature\"]\r\n || (cartItem.partId === this.partId)) {\r\n return\r\n }\r\n selectFrom.forEach(attFeature => {\r\n if (attFeature.metaData[\"MatchingFeature\"] && attFeature.metaData[\"MatchingFeature\"].includes(\"Splitwall\")) {\r\n const splitWall = layout.parts.Walls.splitWall;\r\n if (splitWall && !splitWall.disabled && splitWall.activeFeature && splitWall.activeFeature.layer.src\r\n && !matchingFeatures.some(alreadyAddedFeature => alreadyAddedFeature.metaData[\"MatchingFeature\"]\r\n && alreadyAddedFeature.metaData[\"MatchingFeature\"].includes(\"Splitwall\"))) {\r\n matchingFeatures.push(attFeature);\r\n }\r\n } else if (isEqual(attFeature.metaData[\"MatchingFeature\"], cartItem.cartFeature.metaData[\"MatchingFeature\"])\r\n && isEqual(attFeature.metaData[\"Side\"], cartItem.cartFeature.metaData[\"Side\"])\r\n && !matchingFeatures.some(alreadyAddedFeature => {\r\n return isEqual(attFeature.metaData[\"MatchingFeature\"], alreadyAddedFeature.metaData[\"MatchingFeature\"])\r\n && isEqual(attFeature.metaData[\"Side\"], alreadyAddedFeature.metaData[\"Side\"])\r\n })) {\r\n matchingFeatures.push(attFeature)\r\n }\r\n })\r\n })\r\n return matchingFeatures;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Decor extends IntermediatePart {\r\n constructor(isChild, decorCount) {\r\n super(isChild);\r\n this.decorCount = decorCount;\r\n this.partId = \"decor_\" + decorCount;\r\n this.partName = \"Decor \" + decorCount;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData && dbFeature.metaData[\"ShowerSize\"]) {\r\n this.needShowerSizeMeta = true;\r\n }\r\n return super.load_(dbFeature, new Decor(false, this.decorCount));\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n if (this.needShowerSizeMeta) {\r\n const showerParent = this.getParent().layout.parts[\"Shower\"];\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import {Shower} from \"../../parts/shower\";\r\nimport Walls from \"../../parts/walls\";\r\nimport {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class ShowerWallMirror extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"shower_wall_mirror\";\r\n this.partName = \"Shower Wall Mirror\";\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"MatchingWallName\"] = dbFeature.metaData[\"ActualDisplayedName\"];\r\n return super.load_(dbFeature, new ShowerWallMirror());\r\n }\r\n\r\n setLayers(layout) {\r\n const showerParent = layout.parts[Shower.id];\r\n if (!showerParent || !showerParent.showerWall || !showerParent.showerWall.activeFeature || showerParent.showerWall.disabled) {\r\n super.hideLayers();\r\n return;\r\n }\r\n super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const wallParent = layout.parts[Walls.id];\r\n\r\n const showerSize = showerParent ? showerParent.showerSize() : null;\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n })\r\n }\r\n if (wallParent && wallParent.splitWall) {\r\n conditions.push({\r\n propName: \"SplitWallType\",\r\n propValue: wallParent.getSplitWallType()\r\n })\r\n }\r\n if (showerParent && showerParent.showerWall && showerParent.showerWall.activeFeature) {\r\n conditions.push({\r\n propName: \"MatchingWallName\",\r\n propValue: showerParent.showerWall.activeFeature.dbFeature.sharedFeatureName\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\n// import {BathTubType, LayoutType} from \"../constants\";\r\nimport {bathTubThumbnail} from \"../../../bvComponent/core/assets\";\r\n\r\nimport BathTubBody from \"../subparts/bathTub/bathTubBody\";\r\nimport BathTubFixture from \"../subparts/bathTub/bathTubFixture\";\r\nimport EnclosureTop from \"../subparts/bathTub/enclosureTop\";\r\nimport EnclosureBottom from \"../subparts/bathTub/enclosureBottom\";\r\nimport SkirtingBoard from \"../subparts/bathTub/skirtingBoard\";\r\n\r\nexport class Bathtub extends Part {\r\n static id = 'Bathtub';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Bathtub';\r\n this.translateId = \"visualizer.bathroom.bathtub\";\r\n this.partThumbnail = bathTubThumbnail;\r\n this.bathTubBody = null;\r\n this.bathTubFixture = null;\r\n this.enclosureTop = null;\r\n this.enclosureBottom = null;\r\n this.skirtingBoard = null;\r\n this.relatedItems = [];\r\n this.relatedGroupNames = [\"Bathtub\", \"Bathtub Fixture\", \"Enclosure Top\", \"Enclosure Bottom\", \"Skirting Board\"];\r\n\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Bathtub\":\r\n relatedItemName = \"bathTubBody\";\r\n RelatedItemClass = BathTubBody;\r\n break;\r\n case \"Bathtub Fixture\":\r\n relatedItemName = \"bathTubFixture\";\r\n RelatedItemClass = BathTubFixture;\r\n break;\r\n case \"Enclosure Top\":\r\n case \"EnclosureTop\":\r\n relatedItemName = \"enclosureTop\";\r\n RelatedItemClass = EnclosureTop;\r\n break;\r\n case \"Enclosure Bottom\":\r\n case \"EnclosureBottom\":\r\n relatedItemName = \"enclosureBottom\";\r\n RelatedItemClass = EnclosureBottom;\r\n break;\r\n case \"Skirting Board\":\r\n relatedItemName = \"skirtingBoard\";\r\n RelatedItemClass = SkirtingBoard;\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n changeLayout() {\r\n // changeLayout(layoutType) {\r\n // if (layoutType === LayoutType.Layout1 && this.bathTubBody) {\r\n // // this.activeSubType_ = BathTubType.Custom60in;\r\n // // this.bathTubType_ = BathTubType.Custom60in;\r\n // if (!this.layout.parts.Shower.showerBody.disabled) { // disable bathtub if shower is active\r\n // if (this.bathTubBody) {\r\n // this.bathTubBody.disabled = true;\r\n // }\r\n // }\r\n // } else {\r\n // if (this.bathTubBody) {\r\n // this.bathTubBody.disabled = false;\r\n // }\r\n // }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {METADATA} from \"../../constants\";\r\n\r\nexport default class BathTubBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"bathtub_body\";\r\n this.partName = 'Bathtub';\r\n this.translateId = \"visualizer.bathroom.bathtub.bathtub\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"BathType\"]) {\r\n dbFeature.metaData[\"BathType\"] = [METADATA.BathtubWithoutEnclosures]; // remove enclosure top and bottom\r\n }\r\n return super.load(dbFeature);\r\n }\r\n\r\n disabledClick() {\r\n const bathParent = this.getParent();\r\n [\"bathTubFixture\", \"enclosureTop\", \"enclosureBottom\"].forEach(relName => {\r\n if (bathParent[relName]) {\r\n bathParent[relName].disabled = this.disabled;\r\n }\r\n })\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {LOOK_ROOM_TYPES} from \"../../constants\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\n\r\nexport default class BathTubFixture extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"bathtub_fixture\";\r\n this.partName = \"Fixture\";\r\n this.translateId = \"visualizer.bathroom.bathtub.bathtub_fixture\";\r\n this.dbName = \"Bathtub Fixture\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n disabledClick() {\r\n const bathTubBody = this.getParent().bathTubBody;\r\n if (bathTubBody) {\r\n bathTubBody.disabled = this.disabled || !bathTubBody.canBeEnabled(); // true or check if it can be enabled;\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n const bathtubParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n if (bathtubParent.bathTubBody && bathtubParent.bathTubBody.activeFeature && bathtubParent.bathTubBody.activeFeature.metaData[\"MountType\"]) {\r\n conditions.push({\r\n propName: \"MountType\",\r\n propValue: bathtubParent.bathTubBody.activeFeature.metaData[\"MountType\"]\r\n })\r\n }\r\n return conditions\r\n }\r\n return super.getArrayOfConditions()\r\n }\r\n\r\n}\r\n","import EnclosureCommon from \"./enclosureCommon\";\r\n\r\nexport default class EnclosureTop extends EnclosureCommon {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'enclosure_top';\r\n this.dbName = 'EnclosureTop';\r\n this.partName = 'Enclosure Top';\r\n this.translateId = \"visualizer.bathroom.shower.enclosure_top\";\r\n this.canBeDisabled = false;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n}\r\n","import EnclosureCommon from \"./enclosureCommon\";\r\n\r\nexport default class EnclosureBottom extends EnclosureCommon {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'enclosure_bottom';\r\n this.dbName = 'EnclosureBottom';\r\n this.partName = 'Enclosure Bottom';\r\n this.translateId = \"visualizer.bathroom.shower.enclosure_bottom\";\r\n this.canBeDisabled = false;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n}\r\n","import EnclosureCommon from \"./enclosureCommon\";\r\nimport {METADATA} from \"../../constants\";\r\n\r\nexport default class SkirtingBoard extends EnclosureCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'skirting_board';\r\n this.partName = 'Skirting Board';\r\n this.translateId = \"visualizer.bathroom.accessories.skirting_board\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"BathType\"]) {\r\n dbFeature.metaData[\"BathType\"] = [METADATA.BathtubWithoutEnclosures]; // for free standing bath\r\n }\r\n return super.load(dbFeature);\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport { showerAccessoriesThumbnail } from '../../../bvComponent/core/assets';\r\n\r\nimport Table from \"../subparts/accessories/table\";\r\nimport Chair from \"../subparts/accessories/chair\";\r\nimport Carpet from \"../subparts/accessories/carpet\";\r\nimport Lamp from \"../subparts/accessories/lamp\";\r\nimport Basket from \"../subparts/accessories/basket\";\r\nimport Frame from \"../subparts/accessories/frame\";\r\nimport Plant from \"../subparts/accessories/plant\";\r\n\r\nexport class Accessories extends Part {\r\n static id = 'Accessories';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partThumbnail = showerAccessoriesThumbnail;\r\n this.partName = 'Accessories';\r\n this.translateId = \"visualizer.bathroom.accessories2\";\r\n this.relatedItems = [];\r\n\r\n // related items\r\n this.table = null;\r\n this.chair = null;\r\n this.lamp = null;\r\n this.carpet = null;\r\n this.basket = null;\r\n this.frame = null;\r\n this.plant = null;\r\n\r\n //current active caddie type\r\n this.relatedGroupNames = [\"Table\", \"Chair\", \"Lamp\", \"Carpet\", \"Basket\", \"Frame\", \"Plant\"];\r\n }\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Table\": {\r\n relatedItemName = \"table\";\r\n RelatedItemClass = Table;\r\n break;\r\n }\r\n case \"Chair\": {\r\n relatedItemName = \"chair\";\r\n RelatedItemClass = Chair;\r\n break;\r\n }\r\n case \"Lamp\":\r\n case \"Lamps\": {\r\n relatedItemName = \"lamp\";\r\n RelatedItemClass = Lamp;\r\n break;\r\n }\r\n case \"Carpet\":\r\n case \"Carpets\": {\r\n relatedItemName = \"carpet\";\r\n RelatedItemClass = Carpet;\r\n break;\r\n }\r\n case \"Basket\": {\r\n relatedItemName = \"basket\";\r\n RelatedItemClass = Basket;\r\n break;\r\n }\r\n case \"Frame\": {\r\n relatedItemName = \"frame\";\r\n RelatedItemClass = Frame;\r\n break;\r\n }\r\n case \"Plant\": {\r\n relatedItemName = \"plant\";\r\n RelatedItemClass = Plant;\r\n break;\r\n }\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n}\r\n\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Table extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'table';\r\n this.partName = 'Table';\r\n this.translateId = \"visualizer.bathroom.shower.table\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Chair extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'chair';\r\n this.partName = 'Chair';\r\n this.translateId = \"visualizer.bathroom.shower.chair\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Carpet extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'carpet';\r\n this.partName = 'Carpet';\r\n this.translateId = \"visualizer.bathroom.shower.carpet\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Lamp extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'lamp';\r\n this.partName = 'Lamp';\r\n this.translateId = \"visualizer.bathroom.shower.lamp\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Basket extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'basket';\r\n this.partName = 'Basket';\r\n this.translateId = \"visualizer.bathroom.basket\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Frame extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'frame';\r\n this.partName = 'Frame';\r\n this.translateId = \"visualizer.bathroom.frame\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Plant extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'plant';\r\n this.partName = 'Plant';\r\n this.translateId = \"visualizer.bathroom.plant\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {Vanity} from \"../../parts/vanity\";\r\nimport {createParentPositions, METADATA, LOOK_ROOM_TYPES, LayoutAbbreviations} from \"../../constants\";\r\nimport VanityCommon from \"./vanityCommon\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\n\r\nexport default class VanityCountertop extends VanityCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_countertop';\r\n this.partName = 'Countertop';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_countertop\";\r\n this.homePageTitle = 'Countertops';\r\n this.visible = [Vanity.Types.Custom];\r\n this.isStoneFeature = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n this.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n this.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"MatchingFeature\"]) {\r\n dbFeature.metaData[\"MatchingFeature\"] = [METADATA.NO];\r\n }\r\n if (!dbFeature.metaData[\"Side\"]) {\r\n dbFeature.metaData[\"Side\"] = [METADATA.LeftSide];\r\n }\r\n return super.load(dbFeature);\r\n }\r\n\r\n disabledClick() {\r\n // this.getParent().toggleVanityParts(this.disabled); // temporary removed for demo\r\n }\r\n\r\n getArrayOfConditions() {\r\n const vanityParent = this.getParent();\r\n let conditions = super.getArrayOfConditions();\r\n if (getCurrentRoomType(vanityParent.layout) === LOOK_ROOM_TYPES.as) {\r\n const activeMatchingSink = vanityParent.getActiveMatchingMetaFromRelatedItem(\"vanity_sink\");\r\n const activeMatchingSinkSku = vanityParent.getActiveSkuFromRelatedItem(\"vanity_sink\");\r\n if ((activeMatchingSink && activeMatchingSink.includes(METADATA.NO)) || activeMatchingSinkSku) {\r\n const propValue = !activeMatchingSink.includes(METADATA.NO) && activeMatchingSinkSku ? activeMatchingSinkSku : activeMatchingSink;\r\n conditions.push({\r\n propName: \"MatchingFeature\",\r\n propValue,\r\n });\r\n if (!(Array.isArray(propValue) && propValue[0] === METADATA.NO)) { // remove since we need to use Lixil matchingfeature logic\r\n conditions = conditions.filter(condition => condition.propName !== \"VanitySize\");\r\n }\r\n }\r\n const activeSideMeta = vanityParent.getActiveMatchingMetaFromRelatedItem(vanityParent.vanity_type, \"Side\");\r\n if (activeSideMeta && activeSideMeta.includes(\"C\")) {\r\n conditions.push({\r\n propName: \"Side\",\r\n propValue: activeSideMeta\r\n });\r\n }\r\n }\r\n return conditions\r\n }\r\n}\r\n","import {Vanity} from \"../../parts/vanity\";\r\nimport VanityCommon from \"./vanityCommon\";\r\nimport {createParentPositions, LayoutAbbreviations, METADATA, VANITY_TYPES} from \"../../constants\";\r\n\r\nexport default class VanityBacksplash extends VanityCommon {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'vanity_backsplash';\r\n this.partName = 'Backsplash';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_backsplash\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n this.isStoneFeature = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n this.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n this.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n }\r\n }\r\n\r\n hideLayerCondition() {\r\n const vanityParent = this.getParent();\r\n return !vanityParent.vanityCabinet\r\n || !vanityParent.vanityCabinet.activeFeature\r\n || vanityParent.vanity_type !== VANITY_TYPES.vanity_cabinet\r\n || !vanityParent.vanityCabinet.activeFeature.metaData[\"MatchingFeature\"].includes(METADATA.NO)\r\n }\r\n\r\n}\r\n","import {Vanity} from \"../../parts/vanity\";\r\nimport VanityCommon from \"./vanityCommon\";\r\nimport {createParentPositions, METADATA} from \"../../constants\";\r\n\r\nexport default class Mirror extends VanityCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'vanity_mirror';\r\n this.partName = 'Mirror';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_mirror\";\r\n this.homePageTitle = 'Mirrors';\r\n this.visible = [Vanity.Types.Complete, Vanity.Types.Custom];\r\n this.canBeDisabled = false;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n load(dbFeature) {\r\n if (Array.isArray(dbFeature.metaData[\"VanitySize\"]) && dbFeature.metaData[\"VanitySize\"][0] === \"0\") {\r\n dbFeature.metaData[\"VanitySize\"] = [METADATA.ALL];\r\n }\r\n if (Array.isArray(dbFeature.metaData[\"MirrorShape\"]) && dbFeature.metaData[\"MirrorShape\"][0] === \"00\") {\r\n dbFeature.metaData[\"MirrorShape\"] = [METADATA.ALL];\r\n }\r\n return super.load(dbFeature);\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport { Vanity } from \"../../parts/vanity\";\r\nimport {createParentPositions, METADATA, SIDE_POSITIONS, VANITY_TYPES, LOOK_ROOM_TYPES} from \"../../constants\";\r\nimport {getSkuWithoutDot, removeLookPointFor} from \"../../../lookNavigation/lookFunctions2\";\r\nimport {navFeatureCLick} from \"../../../lookNavigation/lookFunctions\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\nimport {findNextVanityTypeFeature} from \"../../../lookNavigation/lookNavigationFunctions\";\r\nimport {IS_QKB_UI} from \"../../../../../config\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class Sink extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'vanity_sink';\r\n this.partName = 'Sink';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_sink\";\r\n this.homePageTitle = 'Sinks';\r\n this.visible = [Vanity.Types.Custom];\r\n // this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"MountType\"]) {\r\n dbFeature.metaData[\"MountType\"] = [METADATA.Inner]\r\n }\r\n if (!dbFeature.metaData[\"MatchingFeature\"] || dbFeature.metaData[\"MountLevel\"]) {\r\n // added MountLevel for new sinks that can be applied for vanities with countertops\r\n dbFeature.metaData[\"MatchingFeature\"] = [METADATA.NO];\r\n dbFeature.metaData[\"CustomVanityType\"] = VANITY_TYPES.vanity_cabinet;\r\n }\r\n if (dbFeature.metaData[\"MountHoles\"] && dbFeature.metaData[\"MountHoles\"].includes(\"0\")) {\r\n dbFeature.metaData[\"MountHoles\"] = [\"0\", \"1\", \"4\", \"8\"]; // UnderMount Sinks - they can be used with all faucet types\r\n }\r\n // if (!dbFeature.metaData[\"SingleHole\"]) {\r\n // dbFeature.metaData[\"SingleHole\"] = dbFeature.lixilProductSubCategory === METADATA.WallHungSinks // todo change to filters\r\n // ? [METADATA.WallHungSinks]\r\n // : [METADATA.ALL];\r\n // }\r\n if (Array.isArray(dbFeature.metaData[\"SinkWidth\"]) && dbFeature.metaData[\"SinkWidth\"][0]) {\r\n dbFeature.metaData[\"SinkWidth\"] = +dbFeature.metaData[\"SinkWidth\"][0] + 5; // convert to number\r\n // for example, width is 23, 23 + 5 = 28, vanities with VanitySize 24 will be hidden\r\n }\r\n if (Array.isArray(dbFeature.metaData[\"WaterLevel\"]) && dbFeature.metaData[\"WaterLevel\"][0]) {\r\n dbFeature.metaData[\"WaterLevel\"] = +dbFeature.metaData[\"WaterLevel\"][0] + 3; // convert to number and add 3! they should be higher + 3\r\n }\r\n dbFeature.metaData[\"layerPosition\"] = !dbFeature.metaData[\"Side\"]\r\n ? SIDE_POSITIONS[0]\r\n : dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === SIDE_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new Sink(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n // eslint-disable-next-line no-unused-vars\r\n navigationSubItems(filters, searchText, forFeature, filterGroups, restOptions = {}) {\r\n const {firstOpenedConditions, returnAllFeatures} = restOptions;\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as && !IS_QKB_UI) {\r\n const featuresList = this.getFeaturesForNavigationFrom(returnAllFeatures);\r\n const filteredAvailableFeatures = this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters, featuresList), searchText);\r\n let featuresToDisplay = this.navigationSubItemsWithFilterMultipleConditions(firstOpenedConditions || this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n filteredAvailableFeatures.forEach(feature => {\r\n if (!feature.metaData[\"CustomVanityType\"] || !feature.metaData[\"CustomVanityType\"].length\r\n && featuresToDisplay.every(shownFeature => shownFeature.dbFeature.id !== feature.dbFeature.id)) {\r\n featuresToDisplay.push(feature);\r\n }\r\n });\r\n let sinkFeatures = [];\r\n if (this.activeFeature && this.activeFeature.metaData.layerPosition && Array.isArray(this.activeFeature.metaData.MountType)) {\r\n for (let sinkFeature of featuresToDisplay) {\r\n const alreadyExistingIndex = sinkFeatures.findIndex(feature => {\r\n return feature.dbFeature.sharedFeatureName === sinkFeature.dbFeature.sharedFeatureName\r\n });\r\n if (alreadyExistingIndex > -1) {\r\n if (sinkFeature.metaData.layerPosition && (this.activeFeature.metaData.layerPosition === sinkFeature.metaData.layerPosition)\r\n && sinkFeature.metaData.MountType && (this.activeFeature.metaData.MountType[0] === sinkFeature.metaData.MountType[0])) {\r\n sinkFeatures.splice(alreadyExistingIndex, 1, sinkFeature)\r\n }\r\n } else {\r\n sinkFeatures.push(sinkFeature);\r\n }\r\n }\r\n } else {\r\n sinkFeatures = featuresToDisplay;\r\n }\r\n return this.navigationItemsWithOptions(filters, forFeature, filterGroups, sinkFeatures)\r\n }\r\n return super.navigationSubItems(filters, searchText, forFeature, filterGroups, restOptions)\r\n }\r\n\r\n getNextVanityTypeFeature(shouldCheckSize = false) {\r\n const vanityParent = this.getParent().getParent();\r\n const currentActiveMatchingFeatureSku = vanityParent.getActiveSkuFromRelatedItem(vanityParent.vanity_type);\r\n const currentActiveMatchingFeatureMeta = vanityParent.getActiveMatchingMetaFromRelatedItem(vanityParent.vanity_type);\r\n const sinkSku = getSkuWithoutDot(this.dbFeature.sharedFeatureName);\r\n\r\n const currentMatchingMatchingFeature = this.metaData[\"MatchingFeature\"] && (!currentActiveMatchingFeatureSku || !this.metaData[\"MatchingFeature\"].includes(currentActiveMatchingFeatureSku));\r\n const currentMatchingMatchingSku = currentActiveMatchingFeatureMeta && !currentActiveMatchingFeatureMeta.includes(sinkSku);\r\n if (currentMatchingMatchingFeature || currentMatchingMatchingSku) {\r\n const relatedItem = vanityParent.relatedItems.find(relItem => relItem.partId === vanityParent.vanity_type);\r\n if (relatedItem) {\r\n return findNextVanityTypeFeature(this, relatedItem, shouldCheckSize)\r\n }\r\n }\r\n return null\r\n }\r\n\r\n handleClick(forceClick = false, setVanityOnly = false) {\r\n const asBathroom = getCurrentRoomType() === LOOK_ROOM_TYPES.as;\r\n const featureIsLocked = getFeatureIsLocked(this, forceClick);\r\n if (asBathroom && !featureIsLocked) {\r\n const vanityParent = this.getParent().getParent();\r\n if (!this.metaData[\"CustomVanityType\"] || !this.metaData[\"CustomVanityType\"].length) {\r\n vanityParent.vanity_type = null;\r\n // } else if (!vanityParent.vanity_type || !this.metaData[\"CustomVanityType\"].includes(vanityParent.vanity_type)) {\r\n } else if (!this.metaData[\"CustomVanityType\"].includes(vanityParent.vanity_type)) {\r\n vanityParent.vanity_type = this.metaData[\"CustomVanityType\"][0];\r\n }\r\n if (setVanityOnly) {\r\n return // vanity should be set after the sink updates it's layer positions\r\n }\r\n const matchFeature = this.getNextVanityTypeFeature();\r\n console.log(\"matchFeature\", matchFeature);\r\n // console.log(\"forceClick\", forceClick);\r\n if (matchFeature) {\r\n navFeatureCLick(matchFeature, false, forceClick, false)\r\n }\r\n // if (vanityParent.sink_type && vanityParent.sink_type.includes(SINK_TYPES.standAlone)) {\r\n // // vanityParent.vanityCabinet.disabled = true;\r\n // if (vanityParent.vanityCabinet.layerPositions) {\r\n // Object.keys(vanityParent.vanityCabinet.layerPositions).forEach(position => {\r\n // vanityParent.vanityCabinet.layerPositions[position] = null;\r\n // })\r\n // }\r\n // } else {\r\n // // vanityParent.vanityCabinet.disabled = false;\r\n // if (vanityParent.vanityCabinet.layerPositions) {\r\n // Object.keys(vanityParent.vanityCabinet.layerPositions).forEach(position => {\r\n // vanityParent.vanityCabinet.layerPositions[position] = vanityParent.vanityCabinet.getMatchingPositionFeature(position, vanityParent.vanityCabinet.activeFeature);\r\n // })\r\n // }\r\n // }\r\n }\r\n super.handleClick(forceClick);\r\n if (asBathroom && !featureIsLocked) {\r\n const vanityParent = this.getParent().getParent();\r\n vanityParent.updateVanityParts();\r\n }\r\n }\r\n\r\n handleChangeParent(nonCompatibleWith) {\r\n if (nonCompatibleWith === \"faucet\") {\r\n // some additional logic if needed\r\n } else {\r\n this.getParent().getParent().vanityCabinet.setActiveFeatureByFilter(\"Size\", this.metaData[\"VanitySize\"] ? this.metaData[\"VanitySize\"][0] : null); // \"60in\", etc.\r\n }\r\n }\r\n\r\n setActiveFeatureByFilter(filterName, filterValue) {\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions());\r\n const filteredFeatures = featuresToDisplay.filter((feature) => {\r\n return feature.metaData[filterName] && feature.metaData[filterName].includes(filterValue);\r\n });\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n this.activeFeature = filteredFeatures.find(feature => !feature.dbFeature.displayName.includes(\"laceholder\")) || filteredFeatures[0];\r\n const placeholderAvailableFeatures = filteredFeatures.filter(feature => {\r\n return feature.dbFeature.displayName.includes(\"laceholder\")\r\n });\r\n this.placeholderFeature = placeholderAvailableFeatures[0];\r\n }\r\n }\r\n\r\n getCurrentFaucetMetaData() {\r\n const faucetParent = this.getParent().faucet;\r\n let metaObject = {};\r\n if (faucetParent && faucetParent.activeFeature) {\r\n const singleHoleMeta = faucetParent.activeFeature.dbFeature.lixilProductSubCategory === METADATA.SingleHole\r\n || faucetParent.activeFeature.dbFeature.lixilProductSubCategory === METADATA.WidespreadFaucets // todo change to filters\r\n ? METADATA.WallHungSinks\r\n : METADATA.ALL\r\n if (singleHoleMeta) {\r\n metaObject[\"SingleHole\"] = singleHoleMeta\r\n }\r\n }\r\n return metaObject\r\n }\r\n\r\n // getArrayOfConditions(forNavigation = false) {\r\n getArrayOfConditions(forNavigation = false) {\r\n const conditions = super.getArrayOfConditions();\r\n // const currentFaucetMetaData = this.getCurrentFaucetMetaData();\r\n // if (currentFaucetMetaData[\"SingleHole\"]) {\r\n // conditions.push({\r\n // propName: 'SingleHole',\r\n // propValue: currentFaucetMetaData[\"SingleHole\"]\r\n // })\r\n // }\r\n const vanityParent = this.getParent();\r\n if (getCurrentRoomType(vanityParent.layout) === LOOK_ROOM_TYPES.as) {\r\n if (vanityParent.vanity_type && !forNavigation) {\r\n conditions.push({\r\n propName: \"CustomVanityType\",\r\n propValue: vanityParent.vanity_type\r\n });\r\n const activeMatchingVanity = vanityParent.getActiveSkuFromRelatedItem(vanityParent.vanity_type);\r\n const activeMatchingFeatures = vanityParent.getActiveMatchingMetaFromRelatedItem(vanityParent.vanity_type);\r\n const activeSideMeta = vanityParent.getActiveMatchingMetaFromRelatedItem(vanityParent.vanity_type, \"Side\");\r\n if (activeMatchingVanity) {\r\n conditions.push({\r\n propName: \"MatchingFeature\",\r\n propValue: activeMatchingFeatures.includes(METADATA.NO) ? METADATA.NO : activeMatchingVanity\r\n });\r\n }\r\n if (activeMatchingFeatures) {\r\n conditions.push({\r\n propName: \"FeatureSku\",\r\n propValue: activeMatchingFeatures\r\n });\r\n }\r\n if (activeSideMeta && activeSideMeta.includes(\"C\") && !vanityParent.isDoubleVanity()) {\r\n conditions.push({\r\n propName: \"Side\",\r\n propValue: activeSideMeta\r\n });\r\n }\r\n }\r\n }\r\n return conditions;\r\n }\r\n\r\n getActiveFeatureConditions(fromFeature = this.activeFeature) {\r\n let arrayOfConditions = super.getArrayOfConditions();\r\n ['MountType', 'MountHoles'].forEach((propName) => {\r\n if (fromFeature.metaData[propName]) {\r\n arrayOfConditions.push({\r\n propName,\r\n propValue: fromFeature.metaData[propName]\r\n })\r\n }\r\n })\r\n return arrayOfConditions\r\n }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n const vanityParent = this.getParent();\r\n return !vanityParent.vanity_type // pedestal sink only\r\n }\r\n return removeLookPointFor(parentObject, 3, \"2\", SIDE_POSITIONS[1])\r\n && removeLookPointFor(parentObject, 1, \"1\", SIDE_POSITIONS[1])\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport { Vanity } from \"../../parts/vanity\";\r\nimport {createParentPositions, METADATA, SIDE_POSITIONS, LOOK_ROOM_TYPES} from \"../../constants\";\r\nimport {getSkuWithoutDot, removeLookPointFor} from \"../../../lookNavigation/lookFunctions2\";\r\nimport {navFeatureCLick} from \"../../../lookNavigation/lookFunctions\";\r\nimport store from \"../../../../../store\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\n\r\nexport default class VanityFaucet extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'vanity_faucet';\r\n this.partName = 'Faucet';\r\n this.homePageTitle = 'Faucets';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_faucet\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.useMatchesFailedNavigation = true;\r\n // this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.filterValueIDs && Array.isArray(dbFeature.filterValueIDs[\"27\"])) { // Collection\r\n const concettoTMIndex = dbFeature.filterValueIDs[\"27\"].findIndex(filterValueId => filterValueId === 10410);\r\n if (concettoTMIndex > -1) { // here we remove Concetto™ filter as it comes from the feed, we can't remove if rome dashboard\r\n // we replace it to \"Concetto\"\r\n dbFeature.filterValueIDs[\"27\"].includes(9755)\r\n ? dbFeature.filterValueIDs[\"27\"].splice(concettoTMIndex, 1)\r\n : dbFeature.filterValueIDs[\"27\"].splice(concettoTMIndex, 1, 9755)\r\n }\r\n }\r\n if (!dbFeature.metaData[\"MountType\"]) {\r\n dbFeature.metaData[\"MountType\"] = [METADATA.Inner]\r\n // } else if(dbFeature.metaData[\"MountType\"].includes(METADATA.Outer) && !dbFeature.metaData[\"MountType\"].includes(METADATA.Inner)) {\r\n // dbFeature.metaData[\"MountType\"].push(METADATA.Inner)\r\n // }\r\n }\r\n if (!dbFeature.metaData[\"MountHoles\"]) {\r\n if (dbFeature.customDisplayName.includes(\"8 inch\")) {\r\n dbFeature.metaData[\"MountHoles\"] = [\"8\"]\r\n } else if (dbFeature.customDisplayName.includes(\"Single Hole\")) {\r\n dbFeature.metaData[\"MountHoles\"] = [\"1\"]\r\n } else if (dbFeature.customDisplayName.includes(\"Centerset\")) {\r\n dbFeature.metaData[\"MountHoles\"] = [\"4\"]\r\n } else {\r\n console.log(\"NO FAUCET DBFEATURE META MountHoles!\", dbFeature.customDisplayName);\r\n }\r\n // } else if(dbFeature.metaData[\"MountType\"].includes(METADATA.Outer) && !dbFeature.metaData[\"MountType\"].includes(METADATA.Inner)) {\r\n // dbFeature.metaData[\"MountType\"].push(METADATA.Inner)\r\n // }\r\n } else if (dbFeature.metaData[\"MountHoles\"].includes(\"0\")) {\r\n dbFeature.metaData[\"MountHoles\"] = [\"0\", \"1\", \"4\", \"8\"]\r\n }\r\n if (Array.isArray(dbFeature.metaData[\"Height\"]) && dbFeature.metaData[\"Height\"][0]) {\r\n dbFeature.metaData[\"Height\"] = +dbFeature.metaData[\"Height\"][0]; // convert to number\r\n }\r\n if (dbFeature.isFromAsRoom) {\r\n\r\n if (!dbFeature.metaData[\"MountLevel\"]) {\r\n if (Array.isArray(dbFeature.metaData[\"MountType\"]) && dbFeature.metaData[\"MountType\"][0]) {\r\n if (dbFeature.metaData[\"MountType\"][0] === \"U\") {\r\n dbFeature.metaData[\"MountLevel\"] = [\"0\"]\r\n } else if (dbFeature.metaData[\"MountType\"][0] === \"S\") {\r\n dbFeature.metaData[\"MountLevel\"] = [\"2\"]\r\n }\r\n } else {\r\n dbFeature.metaData[\"MountLevel\"] = [\"2\"]\r\n }\r\n }\r\n\r\n if (dbFeature.metaData[\"MountType\"].includes(METADATA.Outer)) {\r\n [\"ST\", \"T\", \"W\", \"S\", \"A\"].forEach(metaValue => {\r\n if (!dbFeature.metaData[\"MountType\"].includes(metaValue)) {\r\n dbFeature.metaData[\"MountType\"].push(metaValue);\r\n }\r\n })\r\n }\r\n if (dbFeature.metaData[\"MountType\"].includes(METADATA.StandAlone) && !dbFeature.metaData[\"MountType\"].includes(METADATA.Outer)) {\r\n dbFeature.metaData[\"MountType\"].push(METADATA.Outer);\r\n }\r\n }\r\n // if (!dbFeature.metaData[\"SingleHole\"]) {\r\n // dbFeature.metaData[\"SingleHole\"] = [dbFeature.lixilProductSubCategory]; // todo change to filters\r\n // }\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === SIDE_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new VanityFaucet(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n getMatchingSinks() { // method is used for feature, to find the same sink as the current one\r\n const faucetParent = this.getParent();\r\n const vanityParent = faucetParent.getParent();\r\n const sinkParent = vanityParent.sink;\r\n const layout = vanityParent.layout;\r\n const currentSinkNavItems = layout.designNavigationItems({part: sinkParent});\r\n const matchingByCabinetType = currentSinkNavItems.filter(navItem => {\r\n return faucetParent.getActiveFeatureConditions(this).every(condition => navItem.part.matchesMetaForCondition(condition.propName, condition.propValue))\r\n });\r\n const withCurrentVanityType = matchingByCabinetType.filter(navItem => {\r\n if (!vanityParent.vanity_type) {\r\n return navItem.part.metaData[\"MountType\"] && navItem.part.metaData[\"MountType\"].includes(\"ST\")\r\n }\r\n return navItem.part.matchesMetaForCondition(\"CustomVanityType\", vanityParent.vanity_type)\r\n });\r\n const {filterGroups} = store.getState().filterState;\r\n const sinkCollectionName = vanityParent.sink && vanityParent.sink.activeFeature\r\n ? vanityParent.sink.activeFeature.getCollectionName(filterGroups)\r\n : \"\";\r\n const sinkCustomFullDisplayName = vanityParent.sink && vanityParent.sink.activeFeature\r\n ? vanityParent.sink.activeFeature.getCustomFullDisplayName()\r\n : \"\";\r\n const sameCollectionName = !sinkCollectionName ? withCurrentVanityType : withCurrentVanityType.filter(navItem => {\r\n return navItem.part.getCollectionName(filterGroups) === sinkCollectionName\r\n });\r\n const sameCustomName = !sinkCustomFullDisplayName ? sameCollectionName : sameCollectionName.filter(navItem => {\r\n return navItem.part.getCustomFullDisplayName() === sinkCustomFullDisplayName\r\n });\r\n return {\r\n matchingByCabinetType,\r\n withCurrentVanityType,\r\n sameCollectionName,\r\n sameCustomName,\r\n }\r\n }\r\n\r\n getSinkToClickFromMatchingSinks = (sinkActiveFeature) => {\r\n const {\r\n matchingByCabinetType,\r\n withCurrentVanityType,\r\n sameCollectionName,\r\n sameCustomName,\r\n } = this.getMatchingSinks();\r\n // console.log(\"matchingByCabinetType\", matchingByCabinetType);\r\n // console.log(\"withCurrentVanityType\", withCurrentVanityType);\r\n // console.log(\"sameCollectionName\", sameCollectionName);\r\n // console.log(\"sameCustomName\", sameCustomName);\r\n const fromWhereToPick = sameCustomName.length\r\n ? sameCustomName\r\n : sameCollectionName.length\r\n ? sameCollectionName\r\n : withCurrentVanityType.length\r\n ? withCurrentVanityType\r\n : matchingByCabinetType;\r\n let featureToCLick = null;\r\n if (sinkActiveFeature) {\r\n const faucetParent = this.getParent();\r\n const vanityParent = faucetParent.getParent();\r\n const relatedItem = vanityParent.relatedItems.find(relItem => relItem.partId === vanityParent.vanity_type);\r\n if (relatedItem && relatedItem.activeFeature && sinkActiveFeature.metaData[\"MatchingFeature\"]) {\r\n featureToCLick = fromWhereToPick.find(navItem => {\r\n return navItem.part.metaData[\"MatchingFeature\"].includes(getSkuWithoutDot(relatedItem.activeFeature.dbFeature.sharedFeatureName))\r\n })\r\n }\r\n if (!featureToCLick) {\r\n featureToCLick = fromWhereToPick.find(navItem => navItem.part.getColorName() === sinkActiveFeature.getColorName())\r\n }\r\n }\r\n if (!featureToCLick) {\r\n featureToCLick = fromWhereToPick[0];\r\n }\r\n console.log(\"featureToCLick\", featureToCLick);\r\n return featureToCLick ? featureToCLick.part : null;\r\n }\r\n\r\n handleClick(ignoreLocked = false) {\r\n const faucetParent = this.getParent();\r\n const vanityParent = faucetParent.getParent();\r\n const sinkParent = vanityParent.sink;\r\n\r\n if (!sinkParent.activeFeature || !sinkParent.activeFeature.matchesMetaForArrayOfConditions(faucetParent.getActiveFeatureConditions(this))) {\r\n const featureToCLick = this.getSinkToClickFromMatchingSinks(sinkParent.activeFeature)\r\n if (featureToCLick) {\r\n console.log(\"sink featureToCLick\", featureToCLick);\r\n navFeatureCLick(featureToCLick, false, ignoreLocked, false);\r\n }\r\n }\r\n\r\n super.handleClick(ignoreLocked);\r\n }\r\n\r\n getCurrentSinkMetaData() {\r\n const sinkParent = this.getParent().sink;\r\n let metaObject = {};\r\n if (sinkParent && sinkParent.activeFeature) {\r\n const sinkMeta = sinkParent.activeFeature.metaData[\"MountType\"];\r\n if (sinkMeta) {\r\n metaObject[\"MountType\"] = Array.isArray(sinkMeta) ? sinkMeta[0] : sinkMeta\r\n }\r\n // const singleHoleMeta = sinkParent.activeFeature.dbFeature.lixilProductSubCategory === \"Wall Hung Sinks\" //\r\n // if (singleHoleMeta) {\r\n // metaObject[\"SingleHole\"] = METADATA.SingleHole\r\n // }\r\n const mountHolesMeta = sinkParent.activeFeature.metaData[\"MountHoles\"] // American Standard\r\n if (mountHolesMeta && !(getCurrentRoomType() === LOOK_ROOM_TYPES.grohe && mountHolesMeta.includes(\"0\"))) {\r\n metaObject[\"MountHoles\"] = mountHolesMeta\r\n }\r\n }\r\n return metaObject\r\n }\r\n\r\n getArrayOfConditions(forNavigation = false) {\r\n // const counterTopSize = this.getParent().counterTopSize(this);\r\n // const conditions = [{\r\n // propName: 'VanitySize',\r\n // propValue: counterTopSize\r\n // }];\r\n const conditions = super.getArrayOfConditions();\r\n const currentSinkMetaData = this.getCurrentSinkMetaData();\r\n [\"MountType\", \"MountHoles\"].forEach(propName => {\r\n if ((!forNavigation || ((getCurrentRoomType() === LOOK_ROOM_TYPES.grohe) && propName === \"MountType\")) && currentSinkMetaData[propName]\r\n && !(propName === \"MountHoles\" && currentSinkMetaData[propName].includes(\"0\") && currentSinkMetaData[\"MountType\"] && currentSinkMetaData[\"MountType\"].includes(\"U\"))) {\r\n if (propName === \"MountType\" && (currentSinkMetaData[propName] === \"V\")) { // do not check V sinks\r\n return\r\n }\r\n conditions.push({\r\n propName,\r\n propValue: currentSinkMetaData[propName]\r\n })\r\n }\r\n })\r\n // if (currentSinkMetaData[\"SingleHole\"]) {\r\n // conditions.push({\r\n // propName: 'SingleHole',\r\n // propValue: currentSinkMetaData[\"SingleHole\"]\r\n // })\r\n // }\r\n const vanityParent = this.getParent();\r\n const activeSideMeta = vanityParent.getActiveMatchingMetaFromRelatedItem(vanityParent.vanity_type, \"Side\");\r\n if (activeSideMeta && activeSideMeta.includes(\"C\") && !vanityParent.isDoubleVanity()) {\r\n conditions.push({\r\n propName: \"Side\",\r\n propValue: activeSideMeta\r\n });\r\n }\r\n // const countertopSize = vanityParent.counterTopSize(this);\r\n // if (countertopSize) {\r\n // conditions.push({\r\n // propName: \"VanitySize\",\r\n // propValue: countertopSize && countertopSize[0] && (countertopSize[0] === \"32\") ? \"48\" : countertopSize\r\n // })\r\n // }\r\n if (vanityParent.sink && vanityParent.sink.activeFeature) {\r\n const sinkType = vanityParent.sink.activeFeature.metaData[\"SinkType\"]\r\n if (sinkType) {\r\n conditions.push({\r\n propName: \"SinkType\",\r\n propValue: vanityParent.sink.activeFeature.metaData[\"SinkType\"]\r\n })\r\n }\r\n const mountLevel = vanityParent.sink.activeFeature.metaData[\"MountLevel\"]\r\n if (mountLevel) {\r\n conditions.push({\r\n propName: \"MountLevel\",\r\n propValue: vanityParent.sink.activeFeature.metaData[\"MountLevel\"]\r\n });\r\n if ((Array.isArray(mountLevel) && mountLevel[0] === \"0\") || mountLevel === \"0\") {\r\n const waterLevel = vanityParent.sink.activeFeature.metaData[\"WaterLevel\"]\r\n if (waterLevel) {\r\n conditions.push({\r\n propName: \"WaterLevel\", // sink WaterLevel - is faucet Height, all logic is in the matchesMetaForCondition func\r\n propValue: vanityParent.sink.activeFeature.metaData[\"WaterLevel\"]\r\n })\r\n }\r\n }\r\n }\r\n }\r\n // console.log(\"conditions\", conditions);\r\n return conditions;\r\n }\r\n\r\n getActiveFeatureConditions(fromFeature = this.activeFeature) {\r\n let arrayOfConditions = this.getArrayOfConditions();\r\n arrayOfConditions = arrayOfConditions.map(condition => {\r\n if ((condition.propName === 'MountType' || condition.propName === 'MountHoles') && fromFeature.metaData[condition.propName]) {\r\n return {\r\n propName: condition.propName,\r\n propValue: fromFeature.metaData[condition.propName]\r\n }\r\n }\r\n return condition\r\n });\r\n if (fromFeature.metaData[\"MountLevel\"]) {\r\n arrayOfConditions.push({\r\n propName: \"MountLevel\",\r\n propValue: fromFeature.metaData[\"MountLevel\"]\r\n })\r\n }\r\n return arrayOfConditions\r\n }\r\n\r\n getAvailableFeatures() {\r\n return this.features.filter(f => f.matchesMetaForCondition('VanitySize', this.getParent().counterTopSize(this)));\r\n }\r\n\r\n handleChangeParent(nonCompatibleWith) {\r\n if (nonCompatibleWith === \"sink\") {\r\n this.getParent().getParent().sink.setActiveFeatureByFilter(\"MountType\", METADATA.Inner)\r\n } else {\r\n this.getParent().getParent().vanityCabinet.setActiveFeatureByFilter(\"Size\", this.metaData[\"VanitySize\"] ? this.metaData[\"VanitySize\"][0] : null); // \"60in\", etc.\r\n }\r\n }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n return removeLookPointFor(parentObject, 6, \"1\", SIDE_POSITIONS[1])\r\n }\r\n return removeLookPointFor(parentObject, 3, \"2\", SIDE_POSITIONS[1])\r\n && removeLookPointFor(parentObject, 1, \"1\", SIDE_POSITIONS[1])\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {createParentPositions, SIDE_POSITIONS, VANITY_TYPES} from \"../../constants\";\r\n\r\nexport default class Ptrap extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_ptrap';\r\n this.partName = 'Ptrap';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_ptrap\";\r\n this.visible = [Vanity.Types.Custom];\r\n // this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.toggleLayerPositions();\r\n }\r\n\r\n // handleClick(ignoreLocked) {\r\n // const vanityParent = this.getParent().getParent();\r\n // if ((vanityParent.vanity_type !== VANITY_TYPES.vanity_washstand && vanityParent.vanity_type !== VANITY_TYPES.vanity_console)) {\r\n // if (vanityParent.vanityConsole && vanityParent.vanityConsole.activeFeature) {\r\n // vanityParent.vanityConsole.disabled = false;\r\n // vanityParent.vanity_type = VANITY_TYPES.vanity_console;\r\n // } else if (vanityParent.vanityWashstand && vanityParent.vanityWashstand.activeFeature) {\r\n // vanityParent.vanityWashstand.disabled = false;\r\n // vanityParent.vanity_type = VANITY_TYPES.vanity_washstand;\r\n // }\r\n // }\r\n // super.handleClick(ignoreLocked);\r\n // vanityParent.updateVanityParts();\r\n // }\r\n\r\n hideLayerCondition() {\r\n const vanityParent = this.getParent();\r\n return (vanityParent.vanity_type === VANITY_TYPES.vanity_cabinet && (!vanityParent.vanityCabinet || !vanityParent.vanityCabinet.activeFeature))\r\n || (vanityParent.vanity_type === VANITY_TYPES.vanity_washstand && (!vanityParent.vanityWashstand || !vanityParent.vanityWashstand.activeFeature))\r\n || (vanityParent.vanity_type === VANITY_TYPES.vanity_console && (!vanityParent.vanityConsole || !vanityParent.vanityConsole.activeFeature))\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const conditions = super.getArrayOfConditions();\r\n // const activeMatchingSink = this.getParent().getActiveSkuFromRelatedItem(\"vanity_sink\");\r\n // if (activeMatchingSink) {\r\n // conditions.push({\r\n // propName: \"MatchingFeature\",\r\n // propValue: activeMatchingSink\r\n // });\r\n // }\r\n // console.log(\"conditions\", conditions);\r\n // console.log(\"this\", this.activeFeature ? this.activeFeature.metaData : \"\");\r\n // return conditions\r\n // }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const vanityParent = this.getParent();\r\n const activeSideMeta = vanityParent.getActiveMatchingMetaFromRelatedItem(vanityParent.vanity_type, \"Side\");\r\n if (activeSideMeta && activeSideMeta.includes(\"C\")) {\r\n conditions.push({\r\n propName: \"Side\",\r\n propValue: activeSideMeta\r\n });\r\n }\r\n // console.log(\"conditions\", conditions);\r\n return conditions;\r\n }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n const vanityParent = this.getParent();\r\n return vanityParent.vanity_type && (vanityParent.vanity_type !== VANITY_TYPES.vanity_cabinet) && (parentObject.layerPosition !== SIDE_POSITIONS[0])\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {createParentPositions, SIDE_POSITIONS, VANITY_TYPES} from \"../../constants\";\r\nimport {updateSinkWithNewFeature} from \"../../../lookNavigation/lookNavigationFunctions\";\r\n\r\nexport default class VanityWashstand extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_washstand';\r\n this.partName = 'Washstand';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_washstand\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.toggleLayerPositions();\r\n const vanityParent = this.getParent();\r\n if (vanityParent && vanityParent.wsTowelBar) {\r\n vanityParent.wsTowelBar.disabled = this.disabled || !vanityParent.wsTowelBar.canBeEnabled(); // true or check if it can be enabled;;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const vanityParent = this.getParent().getParent();\r\n vanityParent.vanity_type = VANITY_TYPES.vanity_washstand;\r\n super.handleClick(ignoreLocked);\r\n updateSinkWithNewFeature(this);\r\n vanityParent.updateVanityParts();\r\n }\r\n\r\n hideLayerCondition() {\r\n const vanityParent = this.getParent();\r\n return vanityParent.vanity_type !== VANITY_TYPES.vanity_washstand && !!this.activeFeature\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const conditions = super.getArrayOfConditions();\r\n // const activeMatchingSink = this.getParent().getActiveSkuFromRelatedItem(\"vanity_sink\");\r\n // if (activeMatchingSink) {\r\n // conditions.push({\r\n // propName: \"MatchingFeature\",\r\n // propValue: activeMatchingSink\r\n // });\r\n // }\r\n // return conditions\r\n // }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n return this.getParent().vanity_type === VANITY_TYPES.vanity_washstand && (parentObject.layerPosition !== SIDE_POSITIONS[0])\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {VANITY_TYPES} from \"../../constants\";\r\n\r\nexport default class VanityMiddle extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_middle';\r\n this.partName = 'Vanity Middle';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_middle\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n hideLayerCondition() {\r\n const vanityParent = this.getParent();\r\n return !vanityParent.vanityCabinet\r\n || !vanityParent.vanityCabinet.activeFeature\r\n || vanityParent.vanity_type !== VANITY_TYPES.vanity_cabinet\r\n || (vanityParent.vanityCabinet.layerPositions && vanityParent.vanityCabinet.layerPositions[\"C\"])\r\n || (this.activeFeature && !this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const activeMatchingVanity = this.getParent().getActiveSkuFromRelatedItem(\"vanity_cabinet\");\r\n if (activeMatchingVanity) {\r\n conditions.push({\r\n propName: \"MatchingFeature\",\r\n propValue: activeMatchingVanity\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n return this.getParent().vanity_type === VANITY_TYPES.vanity_cabinet\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {createParentPositions, VANITY_TYPES} from \"../../constants\";\r\n\r\nexport default class DrawerPull extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_drawer_pull';\r\n this.partName = 'Drawer Pull';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_drawer_pull\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.toggleLayerPositions();\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const vanityParent = this.getParent().getParent();\r\n vanityParent.vanity_type = VANITY_TYPES.vanity_cabinet;\r\n super.handleClick(ignoreLocked);\r\n vanityParent.updateVanityParts();\r\n }\r\n\r\n hideLayerCondition() {\r\n const vanityParent = this.getParent();\r\n return !vanityParent.vanityCabinet || !vanityParent.vanityCabinet.activeFeature || vanityParent.vanity_type !== VANITY_TYPES.vanity_cabinet\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const activeMatchingVanity = this.getParent().getActiveSkuFromRelatedItem(VANITY_TYPES.vanity_cabinet);\r\n if (activeMatchingVanity) {\r\n conditions.push({\r\n propName: \"MatchingFeature\",\r\n propValue: activeMatchingVanity\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n return this.getParent().vanity_type === VANITY_TYPES.vanity_cabinet\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {createParentPositions, VANITY_TYPES} from \"../../constants\";\r\n\r\nexport default class WSTowelBar extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_ws_towel_bar';\r\n this.partName = 'WS Towel Bar';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_ws_towel_bar\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.toggleLayerPositions();\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const vanityParent = this.getParent().getParent();\r\n vanityParent.vanity_type = VANITY_TYPES.vanity_washstand;\r\n super.handleClick(ignoreLocked);\r\n vanityParent.updateVanityParts();\r\n }\r\n\r\n hideLayerCondition() {\r\n const vanityParent = this.getParent();\r\n return !vanityParent.vanityWashstand || !vanityParent.vanityWashstand.activeFeature || vanityParent.vanity_type !== VANITY_TYPES.vanity_washstand\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const activeMatchingSink = this.getParent().getActiveSkuFromRelatedItem(\"vanity_washstand\");\r\n if (activeMatchingSink) {\r\n conditions.push({\r\n propName: \"MatchingFeature\",\r\n propValue: activeMatchingSink\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n return this.getParent().vanity_type === VANITY_TYPES.vanity_washstand\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {createParentPositions, SIDE_POSITIONS, VANITY_TYPES, LOOK_ROOM_TYPES} from \"../../constants\";\r\nimport {removeLookPointFor} from \"../../../lookNavigation/lookFunctions2\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\n\r\nexport default class VanityLegs extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_legs';\r\n this.partName = 'Vanity Legs';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_legs\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.toggleLayerPositions();\r\n }\r\n\r\n hideLayerCondition() {\r\n const vanityParent = this.getParent();\r\n return !vanityParent.vanityCabinet || !vanityParent.vanityCabinet.activeFeature || vanityParent.vanity_type !== VANITY_TYPES.vanity_cabinet\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const vanityParent = this.getParent();\r\n const activeMatchingVanity = vanityParent.getActiveSkuFromRelatedItem(\"vanity_cabinet\");\r\n if (activeMatchingVanity) {\r\n conditions.push({\r\n propName: \"MatchingFeature\",\r\n propValue: activeMatchingVanity\r\n });\r\n }\r\n const activeSideMeta = vanityParent.getActiveMatchingMetaFromRelatedItem(\"vanity_cabinet\", \"Side\");\r\n if (activeSideMeta && activeSideMeta.includes(\"C\")) {\r\n conditions.push({\r\n propName: \"Side\",\r\n propValue: activeSideMeta\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n return parentObject.layerPosition !== SIDE_POSITIONS[0] && removeLookPointFor(parentObject, 6, \"1\")\r\n }\r\n return this.getParent().vanity_type === VANITY_TYPES.vanity_cabinet\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {createParentPositions, SIDE_POSITIONS, VANITY_TYPES} from \"../../constants\";\r\nimport {updateSinkWithNewFeature} from \"../../../lookNavigation/lookNavigationFunctions\";\r\n\r\nexport default class VanityConsole extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_console';\r\n this.partName = 'Console';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_console\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.toggleLayerPositions();\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const vanityParent = this.getParent().getParent();\r\n vanityParent.vanity_type = VANITY_TYPES.vanity_console;\r\n super.handleClick(ignoreLocked);\r\n updateSinkWithNewFeature(this);\r\n vanityParent.updateVanityParts();\r\n }\r\n\r\n hideLayerCondition() {\r\n const vanityParent = this.getParent();\r\n return vanityParent.vanity_type !== VANITY_TYPES.vanity_console && !!this.activeFeature\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const conditions = super.getArrayOfConditions();\r\n // const activeMatchingSink = this.getParent().getActiveSkuFromRelatedItem(\"vanity_sink\");\r\n // if (activeMatchingSink) {\r\n // conditions.push({\r\n // propName: \"MatchingFeature\",\r\n // propValue: activeMatchingSink\r\n // });\r\n // }\r\n // return conditions\r\n // }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n return this.getParent().vanity_type === VANITY_TYPES.vanity_console && (parentObject.layerPosition !== SIDE_POSITIONS[0])\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {createParentPositions} from \"../../constants\";\r\n\r\nexport default class DoorHandle extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'door_handle';\r\n this.partName = 'Door Handle';\r\n this.translateId = \"visualizer.kitchen.cabinet.door_handle\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = false;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const vanityParent = this.getParent();\r\n conditions.push({\r\n propName: \"VanitySize\",\r\n propValue: vanityParent.counterTopSize(this)\r\n })\r\n return conditions\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {createParentPositions} from \"../../constants\";\r\n\r\nexport default class DrawerHandle extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'drawer_handle';\r\n this.partName = 'Drawer Handle';\r\n this.translateId = \"visualizer.kitchen.cabinet.drawer_handle\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = false;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const vanityParent = this.getParent();\r\n conditions.push({\r\n propName: \"VanitySize\",\r\n propValue: vanityParent.counterTopSize(this)\r\n })\r\n return conditions\r\n }\r\n}\r\n","import EventManager from \"../../../store/sqftEventManager\";\r\nimport workspace from \"../../workspace\";\r\nimport config from \"../../../store/sqftConfig\";\r\nimport {getPointField} from \"../../../../../helpers/sqftHelper\";\r\nimport Movable from \"./../mixin/movable\";\r\nimport COLOR_THEMES from \"../../../store/colorThemes\";\r\nimport PointV2, {CORE_POINT_LAYOUTS} from \"../../shapes/pointV2\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\n\r\nexport default class Box {\r\n\r\n design = {\r\n fillStyle: '#6A6A6A',\r\n fillStyleDelete: 'rgba(208,1,27,0.3)', //'rgba(253,2,33, 0.5)',\r\n strokeStyle: COLOR_THEMES[config.activeTheme].primary,\r\n lineWidth: 1,\r\n borderRadius: 10,\r\n shadowColor: '#eeeeee',\r\n shadowBlur: 15,\r\n minimumHeight: 4,\r\n minimumWidth: 15,\r\n width: 50,\r\n height: 10\r\n };\r\n params = {\r\n isCenteredByY: false\r\n };\r\n points = {};\r\n children = [];\r\n _mixin = {\r\n movable: null\r\n };\r\n\r\n constructor(pos, design) {\r\n this.design = Object.assign(this.design, design);\r\n\r\n this.mixin.movable = new Movable(pos.x, pos.y, this.design.width, this.design.height, EventManager.priorities.SEGMENT, this);\r\n this.initPoints();\r\n this.initEvents();\r\n }\r\n\r\n initEvents() {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render.bind(this),\r\n this,\r\n EventManager.priorities.BOX\r\n );\r\n\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n this.onMouseUp.bind(this),\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n }\r\n\r\n delete() {\r\n this.deleteEvents();\r\n workspace.textBoxManager.removeBox(this);\r\n }\r\n\r\n deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n if (this.mixin.movable) {\r\n this.mixin.movable.deregisterEvents();\r\n }\r\n for (const point in this.points) {\r\n if (this.points.hasOwnProperty(point)) {\r\n this.points[point].deregisterEvents();\r\n }\r\n }\r\n this.isHidden = true;\r\n }\r\n\r\n reInitEvents = () => {\r\n this.initEvents();\r\n if (this.mixin.movable) {\r\n this.mixin.movable.reInitEvents();\r\n }\r\n for (const point in this.points) {\r\n if (this.points.hasOwnProperty(point)) {\r\n this.points[point].reInitEvents();\r\n }\r\n }\r\n this.isHidden = true;\r\n }\r\n\r\n deleteEvents() {\r\n EventManager.resetCursor(this);\r\n EventManager.removeEvent(this);\r\n EventManager.removeEvent(this.mixin.movable);\r\n\r\n for(let child of this.children) {\r\n child.delete();\r\n }\r\n\r\n for (const point in this.points) {\r\n if (this.points.hasOwnProperty(point)) {\r\n this.points[point].delete();\r\n }\r\n }\r\n }\r\n\r\n get width() {\r\n return this.design.width;\r\n }\r\n\r\n set width(value) {\r\n this.design.width = value;\r\n }\r\n\r\n get height() {\r\n return this.design.height;\r\n }\r\n\r\n set height(value) {\r\n this.design.height = value;\r\n }\r\n\r\n get mixin() {\r\n return this._mixin;\r\n }\r\n\r\n set mixin(value) {\r\n this._mixin = value;\r\n }\r\n\r\n get posX() {\r\n return this.mixin.movable.posX;\r\n }\r\n\r\n get posY() {\r\n return this.mixin.movable.posY;\r\n }\r\n\r\n set posX(value) {\r\n this.mixin.movable.posX = value;\r\n }\r\n\r\n set posY(value) {\r\n this.mixin.movable.posY = value;\r\n }\r\n\r\n initPoints() {\r\n let point;\r\n\r\n // 0 1 2\r\n // 3 4\r\n // 5 6 7\r\n\r\n let pointsParams = [\r\n // {x: 0, y: 0}, // {x: this.posX, y: this.posY},\r\n // {x: this.design.width / 2, y: 0},\r\n // {x: this.design.width, y: 0},\r\n // {x: 0, y: this.design.height / 2},\r\n {id: 'p4', x: this.design.width, y: this.design.height / 2, isCenteredByY: true, isResizedByPoint: true, isScaledByPoint: false, radius: 10, layout: CORE_POINT_LAYOUTS.ear},\r\n // {x: 0, y: this.design.height},\r\n // {x: this.design.width / 2, y: this.design.height},\r\n {id: 'p7', x: this.design.width, y: this.design.height, isCenteredByY: true, isResizedByPoint: false, isScaledByPoint: true, radius: 10, layout: CORE_POINT_LAYOUTS.resize}\r\n ];\r\n for (let [i, pointParams] of pointsParams.entries()) {\r\n void i;\r\n let pointState = {\r\n priority: EventManager.priorities.BOX_POINT,\r\n movable: true,\r\n isCenteredByY: pointParams.isCenteredByY,\r\n isResizedByPoint: pointParams.isResizedByPoint,\r\n isScaledByPoint: pointParams.isScaledByPoint,\r\n isVisibleOnHover: true\r\n };\r\n let pointDesign = {\r\n radius: pointParams.radius,\r\n lineWidth: 1,\r\n layout: pointParams.layout\r\n };\r\n point = new PointV2(pointParams.x, pointParams.y, this, pointState, pointDesign);\r\n point.isResizedByPoint = true;\r\n\r\n this.points[pointParams.id] = point;\r\n }\r\n }\r\n\r\n getOffset = function() {\r\n let self = this;\r\n\r\n return getPointField(self.posX, self.posY);\r\n };\r\n\r\n getPosition = function() {\r\n let self = this;\r\n\r\n return {x: self.posX, y: self.posY};\r\n };\r\n\r\n getPointField = function(posX, posY) {\r\n let fieldWidth = config.fieldWidth,\r\n center = fieldWidth / 2;\r\n\r\n let scale = workspace.getScale(),\r\n offset = workspace.getOffset();\r\n\r\n return {\r\n x: (posX * scale) + offset.x - center,\r\n y: (posY * scale) + offset.y - center\r\n };\r\n };\r\n\r\n onMouseUp = () => {\r\n if (EventManager.getCursor().indexOf(\"delete\") >= 0 && this.mixin.movable.state.hovering) {\r\n this.delete();\r\n }\r\n };\r\n\r\n render = (ctx) => {\r\n let pointField = getPointField(this.posX, this.posY);\r\n let scale = config.scale;\r\n let width = this.mixin.movable.width * scale;\r\n let height = this.mixin.movable.height * scale;\r\n let radius = this.design.borderRadius;\r\n let fill = this.design.fillStyle;\r\n\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.fillStyle = this.design.fillStyle;\r\n ctx.strokeStyle = this.design.strokeStyle;\r\n ctx.lineWidth = this.design.lineWidth;\r\n //ctx.shadowColor = this.design.shadowColor;\r\n //ctx.shadowBlur = this.design.shadowBlur;\r\n\r\n if(EventManager.getCursor().indexOf(\"delete\") >= 0 && this.mixin.movable.state.hovering) {\r\n ctx.fillStyle = this.design.fillStyleDelete;\r\n }\r\n\r\n //ctx.rect(pointField.x, pointField.y, this.design.width * scale, this.design.height * scale);\r\n //ctx.rect(pointField.x, pointField.y, this.mixin.movable.width * scale, this.mixin.movable.height * scale);\r\n RenderFigures.roundedRect(ctx, pointField.x, pointField.y, width, height, radius, fill, true);\r\n\r\n ctx.stroke();\r\n ctx.fill();\r\n ctx.closePath();\r\n ctx.restore();\r\n };\r\n}\r\n","import EventManager from \"../../../store/sqftEventManager\";\r\nimport workspace from \"../../workspace\";\r\nimport config from \"../../../store/sqftConfig\";\r\nimport ModelText from \"./model/modelText\";\r\nimport {getPointField} from \"../../../../../helpers/sqftHelper\";\r\nimport $ from \"jquery\";\r\nimport {setIsItextEditing} from \"../../../../../../../actions/sqftMenuFunctions\";\r\nimport store from \"../../../../../../../store\";\r\n\r\nexport default class IText {\r\n\r\n _modelText;\r\n _fontHeight = 1;\r\n _hMargin = 11;\r\n wMargin = 14;\r\n fillStyle = '#999999'; // fontColor\r\n fillStyleGray = '#999999';\r\n fillStyleTransparent = \"rgba(255, 255, 255, 0.5)\";\r\n lineHeight = 1.2; //1.286;\r\n placeholder = 'Add text by dbl click';\r\n state = {\r\n active: false\r\n };\r\n\r\n constructor(txt, font, posX, posY, width, height, angle, parent = workspace) {\r\n if(txt === ''){\r\n txt = this.placeholder;\r\n }\r\n this.modelText = new ModelText(txt, font, posX, posY, width, height, angle, parent);\r\n this.initEvents();\r\n if(parent.children) {\r\n parent.children.push(this);\r\n }\r\n }\r\n\r\n get modelText() {\r\n return this._modelText;\r\n }\r\n\r\n set modelText(value) {\r\n this._modelText = value;\r\n }\r\n\r\n get fontHeight() {\r\n return this._fontHeight * config.scale / config.defaultScale + (this.getHeight() / 5); // todo wtf /5 ?\r\n }\r\n\r\n set fontHeight(value) {\r\n this._fontHeight = value;\r\n }\r\n\r\n get hMargin() {\r\n // todo perhaps make borders smaller\r\n // return this._hMargin * config.scale / config.defaultScale;\r\n return this._hMargin;\r\n }\r\n\r\n set hMargin(value) {\r\n this._hMargin = value;\r\n }\r\n\r\n initEvents() {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render.bind(this),\r\n this,\r\n EventManager.priorities.BOX\r\n );\r\n\r\n EventManager.addEvent(\r\n EventManager.events.DBLCLICK,\r\n this.onDblClick.bind(this),\r\n this,\r\n EventManager.priorities.IMAGE\r\n );\r\n\r\n //todo remove deleting from menu here\r\n // EventManager.addEvent(\r\n // EventManager.events.MOUSE_UP,\r\n // this.onMouseUp.bind(this),\r\n // this,\r\n // EventManager.priorities.BOX\r\n // );\r\n }\r\n\r\n delete() {\r\n this.deleteEvents();\r\n }\r\n\r\n deleteEvents() {\r\n EventManager.removeEvent(this);\r\n }\r\n\r\n deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n this.isHidden = true;\r\n }\r\n\r\n reInitEvents = () => {\r\n this.initEvents();\r\n this.isHidden = false;\r\n }\r\n\r\n getWidth() {\r\n let scale = config.scale;\r\n let parentWidth = this.modelText.parent.width * scale;\r\n\r\n return parentWidth ? parentWidth: this.modelText.width * scale ;\r\n }\r\n\r\n getHeight() {\r\n let scale = config.scale;\r\n let parentHeight = this.modelText.parent.height * scale;\r\n\r\n return parentHeight ? parentHeight : this.modelText.height * scale ;\r\n }\r\n\r\n getPosX() {\r\n return this.modelText.parent.posX ? this.modelText.parent.posX : this.modelText.posX;\r\n }\r\n\r\n getPosY() {\r\n return this.modelText.parent.posY ? this.modelText.parent.posY : this.modelText.posY;\r\n }\r\n\r\n onDblClick(mousePos) {\r\n void mousePos;\r\n let self = this;\r\n let state = this.modelText.parent\r\n ? this.modelText.parent.mixin.movable.state\r\n : this.modelText.state; //todo\r\n\r\n if (state.hovering && !document.querySelector(\".i-text\")) {\r\n window.lineInputFocused = true;\r\n EventManager.stealCursor();\r\n const ENTER_KEY = 13;\r\n const textarea = this.createTextArea();\r\n\r\n document.querySelector(\".sqft-main-grid\").appendChild(textarea);\r\n\r\n textarea.focus();\r\n textarea.onkeydown = function(e) {\r\n if (e.keyCode === ENTER_KEY) {\r\n e.target.blur();\r\n }\r\n };\r\n\r\n const blur = function (e) {\r\n if (!e.target.closest('.i-text')) {\r\n textarea.blur();\r\n }\r\n };\r\n\r\n textarea.oninput = function() {\r\n this.style.height = \"5px\";\r\n this.style.height = (this.scrollHeight)+\"px\";\r\n };\r\n\r\n textarea.onblur = function () {\r\n window.lineInputFocused = false;\r\n self.modelText.txt = textarea.value;\r\n // restore placeholder\r\n if (textarea.value === '') {\r\n self.modelText.txt = self.placeholder;\r\n }\r\n self.fillStyle = self.fillStyleGray; // return color back to gray\r\n textarea.parentNode.removeChild(textarea);\r\n document.removeEventListener(\"click\", blur);\r\n store.dispatch(setIsItextEditing(false));\r\n };\r\n\r\n this.fillStyle = this.fillStyleTransparent; // make color transparent\r\n\r\n $(textarea).on(\"change keyup paste\", function() {\r\n self.modelText.txt = $(this).val();\r\n });\r\n textarea.onchange = function (event) {\r\n void event;\r\n self.modelText.txt = textarea.value;\r\n }.bind({ hoveredText: state.hoveredText});\r\n\r\n setTimeout(() => {\r\n document.addEventListener(\"click\", blur);\r\n }, 500);\r\n store.dispatch(setIsItextEditing(true));\r\n return false;\r\n }\r\n }\r\n\r\n wrapText(ctx, text, x, y, maxWidth, fontSize, fontFace) {\r\n let firstY = y;\r\n let lineHeight = fontSize * this.lineHeight;\r\n\r\n ctx.font = fontSize + \"px \" + fontFace; // Set the font for the context\r\n\r\n // Split the text into lines using wrapWord (handles word wrapping and ellipsis)\r\n let lines = this.wrapWords(ctx, text, maxWidth, 1);\r\n\r\n // Loop through each line and draw it on the canvas\r\n for (let line of lines) {\r\n ctx.fillText(line, x, y);\r\n y += lineHeight;\r\n }\r\n\r\n let scale = workspace.getScale();\r\n\r\n // Adjust the parent box height based on the new text block height\r\n this.modelText.parent.mixin.movable.height = (y - firstY) / scale + (lineHeight + this.hMargin * 2) / scale;\r\n\r\n // Adjust point positions based on the new height\r\n this.modelText.parent.points.p4.modelCorePoint.mixins.movable.posY = this.modelText.parent.mixin.movable.height / 2;\r\n this.modelText.parent.points.p7.modelCorePoint.mixins.movable.posY = this.modelText.parent.mixin.movable.height;\r\n }\r\n\r\n\r\n // onMouseUp = () => {\r\n // if (EventManager.getCursor().indexOf(\"delete\") >= 0 && this.modelText.parent.mixin.movable.state.hovering) {\r\n // this.delete();\r\n // }\r\n // };\r\n\r\n render(ctx) {\r\n //let angle = this.modelText.angle || 0;\r\n\r\n let fontHeight = this.fontHeight;\r\n let pointField = getPointField(this.modelText.posX, this.modelText.posY, this.modelText.parent);\r\n // let pointField = getPointField(this.getPosX(), this.getPosY(), this.modelText.parent);\r\n\r\n //let txtWidth = ctx.measureText(this.modelText.txt).width + 2 * this.hMargin;\r\n //let scale = config.scale;\r\n let width = this.getWidth();\r\n //let height = this.getHeight();\r\n\r\n ctx.save();\r\n ctx.font = fontHeight + 'px ' + this.modelText.font;\r\n ctx.textAlign = 'left';\r\n ctx.textBaseline = 'top';\r\n ctx.fillStyle = this.fillStyle;\r\n\r\n //TODO remove\r\n //ctx.translate(pointField.x, pointField.y);\r\n //ctx.translate(pointField.x + width / 2, pointField.y); //centering for scale\r\n //ctx.rotate(angle); // text rotation\r\n //ctx.lineWidth = 1;\r\n //ctx.strokeRect(-width / 2, 0, width, height); //rect around text\r\n //ctx.scale(width / txtWidth, height / fontHeight); // text scale\r\n //ctx.translate(this.hMargin, 0);\r\n //ctx.fillText(this.modelText.txt, -txtWidth/2, 0, width / 2);\r\n // this.wrapText(ctx, this.modelText.txt, -txtWidth/2, 0, width, this.fontHeight, this.modelText.font);\r\n //ctx.fillText(this.modelText.txt, pointField.x, pointField.y);\r\n this.wrapText(\r\n ctx,\r\n this.modelText.txt,\r\n pointField.x + this.wMargin,\r\n pointField.y + this.hMargin,\r\n width - this.wMargin,\r\n this.fontHeight,\r\n this.modelText.font\r\n );\r\n\r\n ctx.restore();\r\n }\r\n\r\n createTextArea() {\r\n let textarea = document.createElement(\"textarea\");\r\n let pointField = getPointField(this.modelText.posX, this.modelText.posY, this.modelText.parent);\r\n let scale = workspace.getScale();\r\n\r\n textarea.className = \"i-text\";\r\n textarea.style.left = pointField.x + this.wMargin + \"px\";\r\n textarea.style.top = pointField.y + this.hMargin + \"px\"; // todo -2 hook for first line\r\n textarea.style.width = this.getWidth() - this.wMargin + \"px\";\r\n // textarea.style.height = this.getHeight() + \"px\";\r\n textarea.style.height = this.modelText.parent.mixin.movable.height * scale + \"px\";\r\n textarea.style.fontSize = this.fontHeight + \"px\";\r\n textarea.style.lineHeight = this.fontHeight * this.lineHeight + 0.8 + \"px\"; // 2 hook for first line\r\n textarea.style.fontFamily = this.modelText.font;\r\n textarea.style.color = this.fillStyle;\r\n if (this.modelText.txt === this.placeholder) {\r\n textarea.value = '';\r\n } else {\r\n textarea.value = this.modelText.txt;\r\n }\r\n return textarea\r\n }\r\n\r\n /**\r\n * Split the text into lines using wrapWord (handles word wrapping and ellipsis)\r\n * @param ctx\r\n * @param testLine\r\n * @param maxWidth\r\n * @param spaces\r\n * @return {[]}\r\n */\r\n wrapWords(ctx, testLine, maxWidth, spaces) {\r\n let i = 0;\r\n let lines = [];\r\n let currentLine = '';\r\n const ellipsis = '...';\r\n\r\n // Split the text into individual words\r\n const words = testLine.split(' ');\r\n\r\n // Iterate through the words and add them to lines while checking for width\r\n for (let word of words) {\r\n let testLine = currentLine + word + ' ';\r\n let testWidth = ctx.measureText(testLine).width;\r\n\r\n // If adding the word exceeds maxWidth, move it to the next line\r\n if (testWidth > maxWidth) {\r\n // If the word itself is too long, truncate it and add ellipsis\r\n if (ctx.measureText(word).width > maxWidth) {\r\n while (ctx.measureText(word).width > maxWidth && i < word.length) {\r\n if (ctx.measureText(word.slice(0, i + spaces) + ellipsis).width >= maxWidth) {\r\n lines.push(word.slice(0, i) + ellipsis);\r\n return lines;\r\n }\r\n i++;\r\n }\r\n }\r\n // Push the current line and start a new line with the current word\r\n lines.push(currentLine.trim());\r\n currentLine = word + ' ';\r\n } else {\r\n currentLine = testLine; // Add the word to the current line\r\n }\r\n }\r\n\r\n // Add the last line to the lines array\r\n if (currentLine.length > 0) {\r\n lines.push(currentLine.trim());\r\n }\r\n\r\n return lines;\r\n }\r\n}\r\n","export default class ModelText {\r\n _txt;\r\n _font;\r\n _posX;\r\n _posY;\r\n _width;\r\n _height;\r\n _angle;\r\n _parent;\r\n\r\n constructor(txt, font, posX, posY, width, height, angle, parent) {\r\n this._txt = txt;\r\n this._font = font;\r\n this._posX = posX;\r\n this._posY = posY;\r\n this._width = width;\r\n this._height = height;\r\n this._angle = angle;\r\n this._parent = parent;\r\n }\r\n\r\n get txt() {\r\n return this._txt;\r\n }\r\n\r\n set txt(value) {\r\n this._txt = value;\r\n }\r\n\r\n get font() {\r\n return this._font;\r\n }\r\n\r\n set font(value) {\r\n this._font = value;\r\n }\r\n\r\n get posX() {\r\n return this._posX;\r\n }\r\n\r\n set posX(value) {\r\n this._posX = value;\r\n }\r\n\r\n get posY() {\r\n return this._posY;\r\n }\r\n\r\n set posY(value) {\r\n this._posY = value;\r\n }\r\n\r\n get width() {\r\n return this._width;\r\n }\r\n\r\n set width(value) {\r\n this._width = value;\r\n }\r\n\r\n get height() {\r\n return this._height;\r\n }\r\n\r\n set height(value) {\r\n this._height = value;\r\n }\r\n\r\n get angle() {\r\n return this._angle;\r\n }\r\n\r\n set angle(value) {\r\n this._angle = value;\r\n }\r\n\r\n get parent() {\r\n return this._parent;\r\n }\r\n\r\n set parent(value) {\r\n this._parent = value;\r\n }\r\n\r\n}\r\n","/**\r\n * @param e KeyboardEvent\r\n */\r\nexport const isBackspaceKeyCode = (e) => {\r\n return e.keyCode === 8\r\n}\r\n\r\n/**\r\n * @param e KeyboardEvent\r\n */\r\nexport const isDeleteKeyCode = (e) => {\r\n return e.keyCode === 46\r\n}\r\n\r\n/**\r\n * @param e KeyboardEvent\r\n */\r\nexport const isLengthKeyCode = (e) => {\r\n return isNumericKey(e) || isCommaKey(e) || isPeriodKey(e) || isSpace(e) || isSlash(e) || e.key === \"'\" || e.key === \"\\\"\"\r\n}\r\n\r\n/**\r\n * @param e KeyboardEvent\r\n */\r\nexport const isNumericKey = (e) => {\r\n return (e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode >= 96 && e.keyCode <= 105)\r\n}\r\n\r\n/**\r\n * is \",\"\r\n * @param e KeyboardEvent\r\n */\r\nexport const isCommaKey = (e) => {\r\n return e.keyCode === 188\r\n}\r\n\r\n/**\r\n * is \".\"\r\n * @param e KeyboardEvent\r\n */\r\nexport const isPeriodKey = (e) => {\r\n return e.keyCode === 190\r\n}\r\n\r\n/**\r\n * is \" \"\r\n * @param e KeyboardEvent\r\n */\r\nexport const isSpace = (e) => {\r\n return e.keyCode === 32\r\n}\r\n\r\n/**\r\n * is \"/\"\r\n * @param e KeyboardEvent\r\n */\r\nexport const isSlash = (e) => {\r\n return e.keyCode === 191\r\n}\r\n","import uuid from \"uuid\";\r\nimport workspace from \"../workspace\";\r\nimport {attachResource} from \"./resourseCanas\";\r\nimport store from \"../../../../../../store\";\r\nimport {addSqftCroppedSlabImage} from \"../../../../../../actions/sqftSlabFunctions\";\r\nimport {MOVABLE_IMAGE_TYPES, SHAPE_PART_ID} from \"../../../../constants\";\r\nimport {initTitle} from \"./labels/labelsHelper\";\r\nimport {SLAB_IMAGE_TYPES} from \"../../../../../../reducers/sqftSlabReducer\";\r\n\r\nconst Duplicate = function () {\r\n this.cloneShape = (shape) => {\r\n let shapeData = shape.export();\r\n const workspaceIds = workspace.getObjIds();\r\n const newId = workspaceIds + 1;\r\n const currentShapePosition = shape.getPosition();\r\n\r\n const newShape = workspace.importShape(shapeData);\r\n newShape.setPosition({\r\n x: currentShapePosition.x + 10,\r\n y: currentShapePosition.y + 10,\r\n });\r\n newShape.shapeSlab.__absolutePos = null;\r\n newShape.shapePieces = [];\r\n newShape.setId(newId);\r\n workspace.setObjIds(newId);\r\n this.cloneShapeLines(newShape);\r\n if (newShape.partId === SHAPE_PART_ID.slabPlaceHolder) {\r\n newShape.init({\r\n x: currentShapePosition.x + 10,\r\n y: currentShapePosition.y + 10,\r\n });\r\n initTitle('PLACEHOLDER', SLAB_IMAGE_TYPES.placeholder, newShape);\r\n }\r\n }\r\n this.cloneShapeLines = (shape) => {\r\n const lines = shape.getLines();\r\n for (const line of lines) {\r\n this.cloneShapeLine(line);\r\n }\r\n }\r\n this.cloneShapeLine = (line) => {\r\n const attachedResource = workspace.getAttachedTo(line);\r\n line.id = uuid();\r\n line.from.id = uuid();\r\n if (attachedResource) {\r\n line.isDisabledInPopup = attachedResource.isDisabledInPopup;\r\n attachResource(line, null, attachedResource.type, attachedResource.featureId, null, attachedResource.name, attachedResource.height, uuid());\r\n }\r\n }\r\n\r\n this.cloneMovableImage = (shape) => {\r\n let imageData = shape.export();\r\n const workspaceIds = workspace.getObjIds();\r\n const newId = workspaceIds + 1;\r\n const currentMovableImagePosition = shape.getPosition();\r\n const movableImage = workspace.importImage(imageData);\r\n movableImage.setPosition({\r\n x: currentMovableImagePosition.x + 10,\r\n y: currentMovableImagePosition.y + 10,\r\n });\r\n movableImage.setId(newId);\r\n workspace.setObjIds(newId);\r\n\r\n if (movableImage.type === MOVABLE_IMAGE_TYPES.slabImage) {\r\n store.dispatch(addSqftCroppedSlabImage(movableImage));\r\n }\r\n }\r\n}\r\n\r\nexport default new Duplicate()\r\n","import EventManager from \"../../store/sqftEventManager\";\r\nimport workspace from \"../workspace\";\r\nimport config from \"../../store/sqftConfig\";\r\n\r\nexport default new function() {\r\n var self = this;\r\n const fontColor = \"#999999\";\r\n\r\n this.init = function() {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n self.render,\r\n self,\r\n EventManager.priorities.OVERLAY - 1\r\n );\r\n };\r\n this.render = function(ctx) {\r\n let i, text, width, posText,\r\n canvas = workspace.getCanvas(),\r\n canvasWidth = canvas.width,\r\n canvasHeight = canvas.height,\r\n scale = config.scale,\r\n gridSize = config.workspace.gridSize * scale,\r\n adjustedSize = (gridSize / 3),\r\n rulerSize = adjustedSize + 6,\r\n pos = workspace.getPosition(),\r\n start = {\r\n x: (pos.x % gridSize) * -1,\r\n y: (pos.y % gridSize) * -1\r\n };\r\n while(start.y < rulerSize || start.y < 0) {\r\n start.y += gridSize;\r\n }\r\n while(start.x < rulerSize || start.x < 0) {\r\n start.x += gridSize;\r\n }\r\n //render ruler\r\n ctx.clearRect(0, 0, canvasWidth, rulerSize);\r\n ctx.clearRect(0, 0, rulerSize, canvasHeight);\r\n //horizontal ruler\r\n ctx.font = adjustedSize.toString() + \"px sans-serif\";\r\n ctx.fillStyle = fontColor;\r\n for(i = start.x; i < canvasWidth; i+=gridSize) {\r\n text = getText(pos.x + i);\r\n width = ctx.measureText(text).width;\r\n posText = {\r\n x: i - (width / 2),\r\n y: adjustedSize,\r\n width: width,\r\n height: adjustedSize,\r\n text: text\r\n };\r\n ctx.fillText(posText.text, posText.x, posText.y);\r\n }\r\n //vertical ruler\r\n for(i = start.y; i < canvasHeight; i+=gridSize) {\r\n text = Math.round((pos.y + i) / scale).toString();\r\n width = ctx.measureText(text).width;\r\n posText = {\r\n x: adjustedSize,\r\n y: i,\r\n width: width,\r\n height: adjustedSize,\r\n text: text\r\n };\r\n ctx.save();\r\n ctx.translate(posText.x, posText.y);\r\n ctx.rotate(-Math.PI/2);\r\n ctx.textAlign = \"center\";\r\n ctx.fillText(posText.text, 0, 0);\r\n ctx.restore();\r\n }\r\n\r\n ctx.beginPath();\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = fontColor;\r\n ctx.moveTo(0,rulerSize);\r\n ctx.lineTo(canvasWidth, rulerSize);\r\n ctx.stroke();\r\n\r\n ctx.beginPath();\r\n ctx.lineWidth = 1;\r\n ctx.moveTo(rulerSize, 0);\r\n ctx.lineTo(rulerSize, canvasHeight);\r\n ctx.stroke();\r\n\r\n };\r\n function getText(pos) {\r\n let text = Math.round((pos) / config.scale * config.getMeasureMultiplier());\r\n if(config.measureUnit === \"Metric\") {\r\n text = Math.round(text / 100) * 100;\r\n }\r\n\r\n return text.toString();\r\n }\r\n};\r\n","import config from \"../../store/sqftConfig\";\r\nimport {enableRegularMode, enableSlabMode} from \"../../store/canvasHelper\";\r\nimport store from \"../../../../../../store\";\r\nimport SqftStore from \"../../store/sqftStore\";\r\nimport {showSlabTool} from \"../../../../../../actions/sqftSlabFunctions\";\r\nimport SlabWorkspace from \"../slab/slabWorkspace\";\r\nimport {renderSlabRightPart} from \"../slab/sqftSlabDraw\";\r\nimport sqftEventManager from \"../../store/sqftEventManager\";\r\nimport sqftImageManager from \"../../store/sqftImageManager\";\r\nimport sqftShapeManager from \"../../store/sqftShapeManager\";\r\nimport workspace from \"../workspace\";\r\nimport {MOVABLE_IMAGE_TYPES, SHAPE_PART_ID} from \"../../../../constants\";\r\n\r\nexport default class ResultImages {\r\n workspace;\r\n dimensionsMultiplier = 3;\r\n\r\n constructor(workspace) {\r\n this.workspace = workspace;\r\n }\r\n\r\n getCanvasImageScaled = () => {\r\n const isSlabMode = SqftStore.isSlabMode();\r\n let shouldReturnToSlabMode = false;\r\n if (isSlabMode) {\r\n enableRegularMode();\r\n store.dispatch(showSlabTool(false));\r\n shouldReturnToSlabMode = true;\r\n }\r\n\r\n const pointsMinMax = sqftShapeManager.getMinMaxShapesPointsOnWorkspace(this.workspace.getShapes());\r\n\r\n if (pointsMinMax.length > 0) {\r\n const minX = pointsMinMax[0].x;\r\n const minY = pointsMinMax[0].y;\r\n const maxX = pointsMinMax[2].x;\r\n const maxY = pointsMinMax[2].y;\r\n\r\n const offset = 200;\r\n const startPoint = {\r\n x: minX * config.defaultScaleExport - offset,\r\n y: minY * config.defaultScaleExport - offset\r\n }\r\n const clippingWidth = (maxX - minX) * config.defaultScaleExport + offset * 2;\r\n const clippingHeight = (maxY - minY) * config.defaultScaleExport + offset * 2;\r\n\r\n const resultImage = this.getCanvasScreen(\r\n config.defaultScaleExport,\r\n 0,\r\n 0,\r\n clippingWidth,\r\n clippingHeight,\r\n startPoint,\r\n this.updateCanvasAtStartPoint\r\n );\r\n\r\n //todo not needed to change back\r\n void shouldReturnToSlabMode\r\n // if (shouldReturnToSlabMode) {\r\n // enableSlabMode();\r\n // store.dispatch(showSlabTool(true));\r\n // }\r\n\r\n return resultImage;\r\n }\r\n\r\n return \"\"\r\n };\r\n\r\n getSlabResultImage = () => {\r\n const isSlabMode = SqftStore.isSlabMode();\r\n let shouldReturnToRegularMode = false;\r\n if (!isSlabMode) {\r\n enableSlabMode();\r\n store.dispatch(showSlabTool(true));\r\n shouldReturnToRegularMode = true\r\n }\r\n\r\n //1. Lets get only countertop shapes\r\n const shapesWithoutSlabImages = this.workspace.getShapesWithoutAttachedResources().filter(shp => {\r\n return shp.partId !== SHAPE_PART_ID.slabPlaceHolder\r\n && shp.type !== MOVABLE_IMAGE_TYPES.slabImage\r\n });\r\n\r\n //2. Now get minimum point\r\n const pointsMinMaxRegular = sqftShapeManager.getMinMaxShapesPointsOnWorkspace(shapesWithoutSlabImages, true);\r\n\r\n if (pointsMinMaxRegular.length > 0) {\r\n const minX = pointsMinMaxRegular[0].x;\r\n const minY = pointsMinMaxRegular[0].y;\r\n const maxX = pointsMinMaxRegular[2].x;\r\n const maxY = pointsMinMaxRegular[2].y;\r\n\r\n const workspacePos = workspace.getPosition();\r\n const offset = 200;\r\n\r\n //3. This is minimum point on field\r\n let startPoint = {\r\n x: (minX) * config.defaultScaleExport - offset - workspacePos.x,\r\n y: (minY) * config.defaultScaleExport - offset - workspacePos.y\r\n }\r\n\r\n //4.Canvas width\r\n const clippingWidth = (maxX - minX) * config.defaultScaleExport + offset * 2;\r\n const clippingHeight = (maxY - minY) * config.defaultScaleExport + offset * 2;\r\n\r\n //5.Lets distract canvas width (see renderSlabRightPart staticOffset)\r\n startPoint = {\r\n x: startPoint.x + clippingWidth / 2,\r\n y: startPoint.y\r\n }\r\n\r\n const resultImage = this.getCanvasScreen(\r\n config.defaultScaleExport,\r\n 0,\r\n 0,\r\n clippingWidth,\r\n clippingHeight,\r\n startPoint,\r\n this.updateCanvasSlab\r\n );\r\n\r\n if (shouldReturnToRegularMode) {\r\n enableRegularMode();\r\n store.dispatch(showSlabTool(false));\r\n }\r\n\r\n return resultImage\r\n }\r\n\r\n return \"\"\r\n };\r\n\r\n getSlabCalcImage = () => {\r\n const isSlabMode = SqftStore.isSlabMode();\r\n let shouldReturnToRegularMode = false;\r\n if (!isSlabMode) {\r\n enableSlabMode();\r\n store.dispatch(showSlabTool(true));\r\n shouldReturnToRegularMode = true\r\n }\r\n SlabWorkspace.disableSlabImages();\r\n\r\n const pointsMinMax = sqftShapeManager.getMinMaxShapesPointsOnWorkspace(this.workspace.getShapes());\r\n\r\n if (pointsMinMax.length > 0) {\r\n const minX = pointsMinMax[0].x;\r\n const minY = pointsMinMax[0].y;\r\n const maxX = pointsMinMax[2].x;\r\n const maxY = pointsMinMax[2].y;\r\n\r\n const offset = 200;\r\n const startPoint = {\r\n x: (minX) * config.defaultScaleExport - offset,\r\n y: (minY) * config.defaultScaleExport - offset\r\n }\r\n const clippingWidth = (maxX - minX) * config.defaultScaleExport + offset * 2;\r\n const clippingHeight = (maxY - minY) * config.defaultScaleExport + offset * 2;\r\n\r\n const resultImage = this.getCanvasScreen(\r\n config.defaultScaleExport,\r\n 0,\r\n 0,\r\n clippingWidth,\r\n clippingHeight,\r\n startPoint,\r\n this.updateCanvasAtStartPoint\r\n );\r\n\r\n if (shouldReturnToRegularMode) {\r\n enableRegularMode();\r\n store.dispatch(showSlabTool(false));\r\n }\r\n // else {\r\n // SlabWorkspace.init();\r\n // }\r\n\r\n return resultImage\r\n }\r\n\r\n return \"\"\r\n }\r\n\r\n /**\r\n * Will return array of zoomed shape + AppliancesThatShouldRenderMeasurementsInsideTheShape images. One image per shape\r\n * @return {*}\r\n */\r\n getCanvasApplianceImages = () => {\r\n const applianceImages = sqftImageManager.getAppliancesThatShouldRenderMeasurementsInsideTheShape();\r\n const createdImagesForShapes = new Set();\r\n\r\n return applianceImages.reduce((result, applianceImage) => {\r\n const outerShape = applianceImage.getOuterShape();\r\n if (outerShape) {\r\n\r\n if (createdImagesForShapes.has(outerShape.id)) {\r\n return result;\r\n }\r\n\r\n createdImagesForShapes.add(outerShape.id);\r\n\r\n const outerShapePosition = outerShape.getPosition();\r\n let shapesPoints = outerShape.getPoints();\r\n let pointsMinMax = sqftShapeManager.getMinMaxPoints(shapesPoints, false);\r\n\r\n const offset = 200;\r\n const startPoint = {\r\n x: (outerShapePosition.x + pointsMinMax.minX) * config.defaultScaleExport - offset,\r\n y: (outerShapePosition.y + pointsMinMax.minY) * config.defaultScaleExport - offset\r\n };\r\n const clippingWidth = (pointsMinMax.maxX - pointsMinMax.minX) * config.defaultScaleExport + offset * 2;\r\n const clippingHeight = (pointsMinMax.maxY - pointsMinMax.minY) * config.defaultScaleExport + offset * 2;\r\n\r\n const canvasImage = this.getCanvasImage(config.defaultScaleExport,\r\n startPoint,\r\n clippingWidth,\r\n clippingHeight\r\n );\r\n result.push(canvasImage);\r\n }\r\n return result;\r\n }, []);\r\n };\r\n\r\n getCanvasImage = (newScale = config.defaultScaleExport, startPoint, imageWidth, imageHeight) => {\r\n const isSlabMode = SqftStore.isSlabMode();\r\n if (isSlabMode) {\r\n enableRegularMode();\r\n store.dispatch(showSlabTool(false));\r\n }\r\n\r\n return this.getCanvasScreen(\r\n newScale,\r\n 0,\r\n 0,\r\n imageWidth,\r\n imageHeight,\r\n startPoint,\r\n this.updateCanvasAtStartPoint\r\n );\r\n };\r\n\r\n getCanvasScreen = (newScale, startClippingX, startClippingY, clippingWidth, clippingHeight, centerPoint, updateCallback) => {\r\n // fix transparent background by drawing canvas onto another canvas with a white background\r\n // https://stackoverflow.com/questions/18609715/html5-canvas-todataurl-image-has-no-background-color\r\n\r\n const srcCanvas = this.workspace.getCanvas();\r\n const temp = {\r\n scale: config.scale,\r\n width: srcCanvas.width,\r\n height: srcCanvas.height,\r\n };\r\n updateCallback(srcCanvas, newScale, clippingWidth, clippingHeight, centerPoint);\r\n\r\n //create a dummy CANVAS\r\n const destinationCanvas = document.createElement(\"canvas\");\r\n const destCtx = destinationCanvas.getContext('2d');\r\n destinationCanvas.width = srcCanvas.width ;\r\n destinationCanvas.height = srcCanvas.height ;\r\n\r\n //create a rectangle with the desired color\r\n destCtx.fillStyle = \"#FFFFFF\";\r\n destCtx.fillRect(0,0, destinationCanvas.width, destinationCanvas.height);\r\n\r\n //draw the original canvas onto the destination canvas\r\n if (clippingWidth > srcCanvas.width) clippingWidth = srcCanvas.width;\r\n if (clippingHeight > srcCanvas.height) clippingHeight = srcCanvas.height;\r\n\r\n destCtx.drawImage(\r\n srcCanvas,\r\n startClippingX,\r\n startClippingY,\r\n clippingWidth,\r\n clippingHeight,\r\n 0,\r\n 0,\r\n srcCanvas.width,\r\n srcCanvas.height\r\n );\r\n\r\n //restore canvas\r\n updateCallback(srcCanvas, temp.scale, temp.width, temp.height, centerPoint);\r\n\r\n return destinationCanvas.toDataURL();\r\n }\r\n\r\n updateCanvas = (srcCanvas, scale, width, height, centerPoint) => {\r\n srcCanvas.width = width;\r\n srcCanvas.height = height;\r\n config.scale = scale;\r\n this.workspace.setCenter(centerPoint.width, centerPoint.height); // return canvas to default position\r\n sqftEventManager.trigger(sqftEventManager.events.RENDER);\r\n sqftEventManager.trigger(sqftEventManager.events.RENDER);\r\n }\r\n\r\n updateCanvasAtStartPoint = (srcCanvas, scale, width, height, startPoint) => {\r\n srcCanvas.width = width;\r\n srcCanvas.height = height;\r\n config.scale = scale;\r\n this.workspace.setPosition(startPoint); // return canvas to default position\r\n\r\n sqftEventManager.trigger(sqftEventManager.events.RENDER);\r\n sqftEventManager.trigger(sqftEventManager.events.RENDER);\r\n }\r\n\r\n updateCanvasSlab = (srcCanvas, scale, width, height, centerPoint) => {\r\n srcCanvas.width = width;\r\n srcCanvas.height = height;\r\n config.scale = scale;\r\n //this.workspace.setCenter(centerPoint.width, centerPoint.height); // return canvas to default position\r\n //this.workspace.setPosition({x: 0, y: 0}); // return canvas to default position NOTE setPosition will also update SlabWorkspace position\r\n SlabWorkspace.setPos(centerPoint); // return canvas to default position\r\n renderSlabRightPart(sqftEventManager.getCtx(), true);\r\n }\r\n}\r\n","import store from \"../../../../../../store\";\r\nimport {getCurrentLayout} from \"../../../../../appLayout\";\r\nimport {ALLOWED_LABEL_NAV_ITEMS, BACKSPLASH_LABELS, COUNTERTOP_LABELS, EDGE_LABELS} from \"../../../../constants\";\r\nimport {IS_LIXIL_UI} from \"../../../../../../config\";\r\nimport {SHAPE_HARDCODED_PART_IDS} from \"../../../../constantsFeature\";\r\n\r\n/**\r\n * is used for category switching available partIds\r\n * @param {string} partId default part id used for shape type\r\n * @return {string} final partId\r\n */\r\nexport const checkShapeForAvailablePartId = (partId) => {\r\n const {fabricatorState, qtState, sqftState, wizardState} = store.getState();\r\n const layout = getCurrentLayout();\r\n const wizardIsActive = wizardState.wizardIsActive;\r\n\r\n if (SHAPE_HARDCODED_PART_IDS.includes(partId)) {\r\n return partId\r\n }\r\n\r\n if (IS_LIXIL_UI || !layout.qtCategories && document.kvConfig.visualizerType === \"Fireplace\") {\r\n // lixil-1) if we opened feature from QuotingTool - try to assign this partId\r\n if (sqftState.sqftFromFeature && sqftState.sqftFromFeature.cartFeature\r\n && !Object.keys(BACKSPLASH_LABELS).includes(sqftState.sqftFromFeature.cartFeature.partId)\r\n && !Object.keys(EDGE_LABELS).includes(sqftState.sqftFromFeature.cartFeature.partId)\r\n && Object.keys(ALLOWED_LABEL_NAV_ITEMS).includes(sqftState.sqftFromFeature.cartFeature.partId)\r\n ) {\r\n return sqftState.sqftFromFeature.cartFeature.partId\r\n }\r\n }\r\n\r\n if (wizardIsActive) {\r\n if (sqftState.sqftFromFeature && sqftState.sqftFromFeature.cartFeature\r\n && Object.keys(COUNTERTOP_LABELS).includes(sqftState.sqftFromFeature.cartFeature.partId)\r\n ) {\r\n return sqftState.sqftFromFeature.cartFeature.partId\r\n }\r\n return partId\r\n }\r\n\r\n if ((!fabricatorState.settings.useCategorySwitching || !layout.qtCategories || !qtState.qtActiveCategory)) {\r\n return partId\r\n }\r\n\r\n const currentCategory = layout.qtCategories.find(qtCat => qtCat.name === qtState.qtActiveCategory);\r\n if (!currentCategory || !currentCategory.subParts) {\r\n return partId\r\n }\r\n\r\n // 1) if we opened feature from QuotingTool - try to assign this partId\r\n if (sqftState.sqftFromFeature && sqftState.sqftFromFeature.cartFeature\r\n && currentCategory.subParts.some(subPart => subPart.part.partId === sqftState.sqftFromFeature.cartFeature.partId)\r\n && !Object.keys(BACKSPLASH_LABELS).includes(sqftState.sqftFromFeature.cartFeature.partId)\r\n && !Object.keys(EDGE_LABELS).includes(sqftState.sqftFromFeature.cartFeature.partId)\r\n && Object.keys(ALLOWED_LABEL_NAV_ITEMS).includes(sqftState.sqftFromFeature.cartFeature.partId)\r\n ) {\r\n return sqftState.sqftFromFeature.cartFeature.partId\r\n }\r\n\r\n // 2) check for center island feature group\r\n const isCountertop = partId === \"countertop\" || partId === \"center_island_countertop\";\r\n if (isCountertop) {\r\n const countertopNavItem = currentCategory.subParts.find(subPart => {\r\n return subPart.part.partId.includes(partId)\r\n });\r\n\r\n if (countertopNavItem) {\r\n return countertopNavItem.part.partId\r\n }\r\n }\r\n\r\n // 3) check for existing navItem\r\n const existingPartId = currentCategory.subParts.some(subPart => {\r\n return subPart.part.partId === partId\r\n });\r\n if (existingPartId) {\r\n return partId\r\n }\r\n\r\n // 4) here we replace default partId with existing in category partId\r\n for (let i = 0; i < currentCategory.subParts.length; i++) {\r\n if (ALLOWED_LABEL_NAV_ITEMS[currentCategory.subParts[i].part.partId]) {\r\n return currentCategory.subParts[i].part.partId\r\n }\r\n }\r\n\r\n // 5) if nothing found - let it be at least default shape's partId\r\n return partId\r\n}\r\n","import {getCurrentLayout} from \"../../../../../appLayout\";\r\nimport cabinetWorkspace from \"./cabinetWorkspace\";\r\nimport {SHAPE_PART_ID} from \"../../../../constants\";\r\n\r\nclass CabinetShapesLayout {\r\n\r\n /**\r\n * Create cabinets from cabinets data\r\n * @param data\r\n */\r\n createShapesFromCabinetSet = (data) => {\r\n data.positions.forEach((cabinetData) => {\r\n if ([SHAPE_PART_ID.lower_cabinet_boxes, SHAPE_PART_ID.upper_cabinet_boxes].includes(cabinetData.partId)) {\r\n const layout = getCurrentLayout();\r\n const feature = layout.getFeatureById(cabinetData.featureId, true);\r\n const parentFeature = layout.getFeatureById(cabinetData.parentFeatureId);\r\n const position = {x: cabinetData.x, y: cabinetData.z};\r\n cabinetWorkspace.cabinetShapes.addShape(feature, parentFeature, position)\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport default CabinetShapesLayout;\r\n","// textBoxManager.js\r\nimport TextBox from \"./textBox\";\r\nimport workspace from \"../workspace\";\r\n\r\nclass TextBoxManager {\r\n constructor() {\r\n this.textBoxes = [];\r\n }\r\n\r\n getExportedTextBoxes = () => {\r\n return this.textBoxes.map(box => box.export());\r\n };\r\n\r\n setImportedTextBoxes = (_textBoxes) => {\r\n if (_textBoxes === undefined) {\r\n return []\r\n }\r\n for (let i = 0; i < _textBoxes.length; i++) {\r\n let textBox = new TextBox(_textBoxes[i].posOnField, _textBoxes[i].placeholder, _textBoxes[i].design);\r\n textBox.init();\r\n }\r\n\r\n return this.textBoxes;\r\n };\r\n\r\n getTextBoxes = () => {\r\n return this.textBoxes;\r\n };\r\n\r\n getHoveredTextBox = () => {\r\n\r\n }\r\n\r\n addTextBox = (box) => {\r\n this.textBoxes.push(box);\r\n\r\n return this.textBoxes;\r\n };\r\n\r\n removeBox = (box) => {\r\n let boxes = this.textBoxes.map((textBox => textBox.box));\r\n const index = boxes.indexOf(box);\r\n if (index > -1) {\r\n this.textBoxes.splice(index, 1);\r\n }\r\n\r\n return this.textBoxes;\r\n };\r\n\r\n removeAllTextBoxes = () => {\r\n for (let i = this.textBoxes.length - 1; i >= 0; i--) {\r\n this.textBoxes[i].box.delete();\r\n //textBoxes[i].text.delete();\r\n }\r\n this.textBoxes = [];\r\n\r\n return this.textBoxes;\r\n };\r\n\r\n isBoxActive() {\r\n const boxes = workspace.textBoxManager.getTextBoxes();\r\n\r\n if (boxes.length > 0) {\r\n for (let textBox of boxes) {\r\n if (textBox.box.mixin.movable.state.hovering) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n getHoveredTexBox() {\r\n const boxes = workspace.textBoxManager.getTextBoxes();\r\n\r\n if (boxes.length > 0) {\r\n for (let textBox of boxes) {\r\n if (textBox.box.mixin.movable.state.hovering) {\r\n return textBox;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n}\r\n\r\nexport default TextBoxManager;\r\n","import {getQtCatName} from \"../helpers/sqftQuotesHelper\";\r\n\r\nexport class FeatureObjectDTO {\r\n constructor(id, partId, featureId, quantity = 1) {\r\n this.id = id;\r\n this.qtCatName = getQtCatName();\r\n this.partId = partId;\r\n this.featureId = featureId;\r\n this.quantity = quantity;\r\n }\r\n\r\n addBumpoutArea(area) {\r\n this.area = area;\r\n }\r\n}\r\n","import JsonApi from \"./jsonApi\";\r\n\r\nexport const getMarkUpForFeatures = (featuresArray = []) => {\r\n const arrayIds = featuresArray.map(dbFeature => dbFeature.id);\r\n return JsonApi.getMarkUpForFeatures(arrayIds)\r\n .then(response => response.data)\r\n .catch(error => {\r\n console.log(\"Server error getMarkUpForFeatures \"+new Error(error));\r\n })\r\n};\r\n","import {getPercentage} from \"./misc2\";\r\nimport Config from \"../config\";\r\n\r\nexport const MARK_UP_APPLY_TO_TYPES = { // QKB\r\n retailPrice: \"retailPrice\",\r\n cost: \"cost\",\r\n retailPriceAndCost: \"retailPriceAndCost\",\r\n shippingCost: \"shippingCost\",\r\n discount: \"discount\",\r\n}\r\n\r\nconst MARK_UP_PROPS_MATCH = { // CAES\r\n Retail: \"cost\",\r\n Cost: \"price\",\r\n Discount: \"fabricatorCost\",\r\n};\r\n\r\n/**\r\n * @param dbFeaturesArray {[dbFeatureInterface]}\r\n * @param markUpResponse {object}\r\n * @return {[dbFeatureInterface]}\r\n */\r\nexport const setResponseFeaturesMarkUp = (dbFeaturesArray, markUpResponse) => {\r\n if (Config.isDevMode()) {\r\n console.log(\"markUpResponse\", markUpResponse);\r\n }\r\n if (!Array.isArray(dbFeaturesArray) || (typeof markUpResponse !== \"object\") || (markUpResponse === null)\r\n || !Object.keys(markUpResponse).length) {\r\n return dbFeaturesArray\r\n }\r\n Object.keys(markUpResponse).forEach(dbFeatureIdString => {\r\n const dbFeatureId = +dbFeatureIdString;\r\n let dbFeature = dbFeaturesArray.find(feature => feature.id === dbFeatureId);\r\n if (dbFeature && !dbFeature.markUpString) {\r\n // if (Config.isDevMode()) {\r\n // console.log(\"featureWithMarkUp\", dbFeature.customDisplayName, dbFeature);\r\n // }\r\n // here we update dbFeature with new mark up price!\r\n dbFeature = setFeaturePriceFromMarkItem(markUpResponse[dbFeatureIdString], dbFeature);\r\n }\r\n })\r\n return dbFeaturesArray\r\n}\r\n\r\nconst getUpdatedFeaturePriceFromMarkItem = (markUpListItem, originalValue, isCaes = false) => {\r\n const type = isCaes ? markUpListItem.Type : markUpListItem.type;\r\n const priceType = isCaes ? markUpListItem.PriceType : markUpListItem.priceType;\r\n const value = isCaes ? markUpListItem.Value : markUpListItem.value;\r\n\r\n const changeValue = (priceType === \"currency\")\r\n ? +value\r\n : getPercentage(+originalValue, +value);\r\n let newValue = (type === \"mark_up\" || type === \"MarkUp\")\r\n ? +originalValue + changeValue\r\n : +originalValue - changeValue;\r\n return newValue < 0 ? 0 : +(newValue.toFixed(2));\r\n}\r\n\r\n/**\r\n * QKB set\r\n * @param markUpItem {object}\r\n * @param dbFeature {dbFeatureInterface}\r\n * @return {dbFeatureInterface}\r\n */\r\nexport const setFeaturePriceFromMarkItemQKB = (markUpItem, dbFeature) => {\r\n // console.log(\"markUpItem\", markUpItem, newDbFeature);\r\n const {price, cost, shippingCost, discount} = markUpItem.originalValues;\r\n switch (markUpItem.applyTo) {\r\n case MARK_UP_APPLY_TO_TYPES.retailPrice: {\r\n dbFeature.price = getUpdatedFeaturePriceFromMarkItem(markUpItem, price);\r\n break;\r\n }\r\n case MARK_UP_APPLY_TO_TYPES.cost: {\r\n dbFeature.cost = getUpdatedFeaturePriceFromMarkItem(markUpItem, cost);\r\n break;\r\n }\r\n case MARK_UP_APPLY_TO_TYPES.retailPriceAndCost: {\r\n dbFeature.cost = getUpdatedFeaturePriceFromMarkItem(markUpItem, cost);\r\n dbFeature.price = getUpdatedFeaturePriceFromMarkItem(markUpItem, price);\r\n break;\r\n }\r\n case MARK_UP_APPLY_TO_TYPES.shippingCost: {\r\n dbFeature.shippingCost = getUpdatedFeaturePriceFromMarkItem(markUpItem, shippingCost);\r\n break;\r\n }\r\n case MARK_UP_APPLY_TO_TYPES.discount: {\r\n dbFeature.fabricatorCost = getUpdatedFeaturePriceFromMarkItem(markUpItem, discount);\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n // console.log(\"newDbFeature\", newDbFeature);\r\n return dbFeature\r\n}\r\n\r\n/**\r\n * @param markUpString {string}\r\n * @param dbFeature {dbFeatureInterface}\r\n * @return {dbFeatureInterface}\r\n */\r\nconst setFeaturePriceFromMarkItem = (markUpString = \"\", dbFeature) => {\r\n if (!dbFeature || !markUpString) {\r\n return dbFeature\r\n }\r\n // console.log(\"markUpObject\", markUpObject, newDbFeature);\r\n const markUpObject = JSON.parse(markUpString); // {Retail: {Type: \"MarkUp\", Value: 10}, Cost, Discount}\r\n\r\n if (Array.isArray(markUpObject)) { // QKB format\r\n markUpObject.forEach(markUpListItem => {\r\n // console.log(\"dbFeature price cost\", dbFeature.price, dbFeature.cost);\r\n dbFeature = setFeaturePriceFromMarkItemQKB(markUpListItem, dbFeature);\r\n // console.log(\"dbFeature price cost\", dbFeature.price, dbFeature.cost);\r\n })\r\n } else if (typeof markUpObject === \"object\" && (markUpObject !== null)) { // CAES format!!\r\n // console.log(\"\", markUpObject);\r\n // {\r\n // Cost: {Type: 'MarkDown', Value: 10}\r\n // Discount : {Type: 'MarkDown', Value: 0}\r\n // Retail : {Type: 'MarkDown', Value: 10}\r\n // }\r\n Object.keys(markUpObject).forEach(key => {\r\n if (!markUpObject[key].Value || !MARK_UP_PROPS_MATCH[key]) {\r\n return\r\n }\r\n dbFeature[MARK_UP_PROPS_MATCH[key]] = getUpdatedFeaturePriceFromMarkItem(markUpObject[key], dbFeature[MARK_UP_PROPS_MATCH[key]], true);\r\n })\r\n }\r\n dbFeature.markUpString = markUpString; // just to be able to find it after job is saved on restore\r\n // console.log(\"newDbFeature\", newDbFeature);\r\n return dbFeature\r\n}\r\n","/**\r\n * // Example usage\r\n * const rate = 0.05 / 12; // Monthly interest rate (5% annual)\r\n * const nper = 60; // Number of payments (5 years)\r\n * const pv = 30000; // Loan amount (present value)\r\n * */\r\nexport function PMT(rate, nper, pv, fv = 0, type = 0) {\r\n if (rate === 0) {\r\n return -(pv + fv) / nper;\r\n }\r\n\r\n const pvif = Math.pow(1 + rate, nper);\r\n let pmt = (rate * (pv * pvif + fv)) / (pvif - 1);\r\n\r\n // Adjust for payments at the beginning of the period\r\n if (type === 1) {\r\n pmt /= (1 + rate);\r\n }\r\n\r\n return -pmt; // Return negative for outflow\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Appliance from \"../../parts/appliance\";\r\n\r\nexport default class Handle extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'handle';\r\n this.partName = 'Handle';\r\n this.translateId = \"visualizer.kitchen.cabinet.handle\";\r\n this.hasAdditionalParts = true;\r\n this.layerPriority = 8;\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = (dbFeature.metaData[\"Part\"] && +dbFeature.metaData[\"Part\"][0]) === 0 ? 1 : 2;\r\n return super.load_(dbFeature, new Handle(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n\r\n const cabinetParent = this.getParent();\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n\r\n // part 0 - показываем всегда\r\n // part 1 - только если выключен холодильник\r\n // part 2 - показываем всегда, но зависит от MountType part 2 нижних кабинетов (S, U или ST, FM, SM)\r\n // part 3 - если включен part 3 нижних кабинетов (это срабатывает при выключенной посудомойке)\r\n // part 4 - если включен part 4 нижних кабинетов (это срабатывает при выключенной плите)\r\n // part 5 - если включен part 2 верхних кабинетов (это срабатывает при выключенной вытяжке)\r\n // part 6 - если включен fridge и матчим по его метадате Width и Height, так же как и кабинеты\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"1\")\r\n && (!applianceParent || !applianceParent.fridge || !applianceParent.fridge.activeFeature && applianceParent.fridge.disabled)) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")) {\r\n if (cabinetParent && cabinetParent.bottomCabinet && cabinetParent.bottomCabinet.activeFeatureParts) {\r\n const part2 = cabinetParent.bottomCabinet.activeFeatureParts.find(featuresPart => featuresPart.metaData[\"Part\"].includes(\"2\"));\r\n if (part2) {\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions([\r\n ...arrayOfConditions,\r\n {propName: \"MountType\", propValue: part2.metaData[\"MountType\"]}\r\n ])\r\n }\r\n }\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")\r\n && applianceParent && applianceParent.dishwasher && !applianceParent.dishwasher.disabled && applianceParent.dishwasher.activeFeature) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"4\")\r\n && applianceParent && applianceParent.stove && !applianceParent.stove.disabled && applianceParent.stove.activeFeature) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"5\")\r\n && applianceParent && applianceParent.hood && !applianceParent.hood.disabled && applianceParent.hood.activeFeature) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"6\")) { // 6 is fridge related\r\n if (!applianceParent || !applianceParent.fridge || applianceParent.fridge.disabled || !applianceParent.fridge.activeFeature) {\r\n return false\r\n }\r\n const fridgeConditions = applianceParent.fridge.getFridgeWidthAndHeightConditions();\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions([...arrayOfConditions, ...fridgeConditions])\r\n }\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Dishwasher extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'dishwasher';\r\n this.partName = 'Dishwasher';\r\n this.translateId = \"visualizer.kitchen.appliance.dishwasher\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Dishwasher());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nconst widthAndHeightArray = [\"Width\", \"Height\"];\r\n\r\nexport default class Fridge extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'fridge';\r\n this.partName = 'Fridge';\r\n this.translateId = \"visualizer.kitchen.appliance.fridge\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Fridge());\r\n }\r\n\r\n getFridgeWidthAndHeightConditions = () => {\r\n let widthHeightConditions = []\r\n if (!this.activeFeature || !this.activeFeature.metaData) {\r\n return widthHeightConditions\r\n }\r\n widthAndHeightArray.forEach(metaName => {\r\n if (this.activeFeature.metaData[metaName]) {\r\n widthHeightConditions.push({\r\n propName: metaName,\r\n propValue: Array.isArray(this.activeFeature.metaData[metaName])\r\n ? this.activeFeature.metaData[metaName][0]\r\n : this.activeFeature.metaData[metaName],\r\n })\r\n }\r\n });\r\n return widthHeightConditions\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport store from \"../../../../../store\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class Hood extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'hood';\r\n this.partName = 'Hood';\r\n this.translateId = \"visualizer.kitchen.appliance.hood\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Hood());\r\n }\r\n\r\n handleClick(ignoreLocked = false, clickFrom = \"\") {\r\n const {isEncore} = store.getState().fabricatorState;\r\n if (isEncore) {\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (ignoreLocked || !featureIsLocked) {\r\n const applianceParent = this.getParent().getParent();\r\n if (applianceParent.layout.type === 6) {\r\n if (applianceParent.range && !applianceParent.range.disabled) {\r\n applianceParent.range.disabled = true;\r\n }\r\n if (applianceParent.stovetop && applianceParent.stovetop.disabled) {\r\n applianceParent.stovetop.disabled = false;\r\n }\r\n }\r\n }\r\n }\r\n return super.handleClick(ignoreLocked, clickFrom);\r\n }\r\n\r\n // add dependency on stove width, if width is 24 - we need width 30, if stove is 60 - we need 48\r\n\r\n disabledClick() {\r\n const applianceParent = this.getParent();\r\n const stove = applianceParent.stove;\r\n if (stove && !this.disabled && stove.disabled) {\r\n stove.disabled = false;\r\n }\r\n if ((applianceParent.layout.type === 6) && !this.disabled && applianceParent.microwave\r\n && !applianceParent.microwave.disabled) {\r\n applianceParent.microwave.disabled = true;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport store from \"../../../../../store\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class Microwave extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'microwave';\r\n this.partName = 'Microwave';\r\n this.translateId = \"visualizer.kitchen.appliance.microwave\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Microwave());\r\n }\r\n\r\n handleClick(ignoreLocked = false, clickFrom = \"\") {\r\n const {isEncore} = store.getState().fabricatorState;\r\n if (isEncore) {\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (ignoreLocked || !featureIsLocked) {\r\n const applianceParent = this.getParent().getParent();\r\n if (applianceParent.layout.type === 6) {\r\n if (applianceParent.stovetop && !applianceParent.stovetop.disabled) {\r\n applianceParent.stovetop.disabled = true;\r\n }\r\n if (applianceParent.oven && !applianceParent.oven.disabled) {\r\n applianceParent.oven.disabled = true;\r\n }\r\n if (applianceParent.range && applianceParent.range.disabled) {\r\n applianceParent.range.disabled = false;\r\n }\r\n }\r\n }\r\n }\r\n return super.handleClick(ignoreLocked, clickFrom);\r\n }\r\n\r\n disabledClick() {\r\n const applianceParent = this.getParent();\r\n if ((applianceParent.layout.type === 6) && !this.disabled && applianceParent.hood\r\n && !applianceParent.hood.disabled) {\r\n applianceParent.hood.disabled = true;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport store from \"../../../../../store\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class Range extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'range';\r\n this.partName = 'Range';\r\n this.translateId = \"visualizer.kitchen.appliance.range\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Range());\r\n // const rangeType = dbFeature.metaData && dbFeature.metaData[\"RangeType\"];\r\n // if (!rangeType) {\r\n // dbFeature.metaData[\"RangeType\"] = [\"ALL\"];\r\n // }\r\n }\r\n\r\n handleClick(ignoreLocked = false, clickFrom = \"\") {\r\n const {isEncore} = store.getState().fabricatorState;\r\n const applianceParent = this.getParent().getParent();\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n\r\n if (isEncore) {\r\n if (ignoreLocked || !featureIsLocked) {\r\n if (applianceParent.layout.type === 6) {\r\n if (applianceParent.hood && !applianceParent.hood.disabled) {\r\n applianceParent.hood.disabled = true;\r\n }\r\n if (applianceParent.oven && !applianceParent.oven.disabled) {\r\n applianceParent.oven.disabled = true;\r\n }\r\n if (applianceParent.microwave && applianceParent.microwave.disabled) {\r\n applianceParent.microwave.disabled = false;\r\n }\r\n }\r\n }\r\n }\r\n if (ignoreLocked || !featureIsLocked) {\r\n const currentHoodWidth = applianceParent.hood.activeFeature.metaData[\"Width\"];\r\n const newWidth = this.metaData[\"Width\"];\r\n if (newWidth && (!currentHoodWidth || (newWidth[0] !== currentHoodWidth[0]))) {\r\n const currentHoodNavItems = applianceParent.hood.navigationSubItems();\r\n const sameWidth = currentHoodNavItems.filter(navItem => {\r\n if (!navItem.part.metaData[\"Width\"]) {\r\n return false\r\n }\r\n if (newWidth[0] === \"24\") {\r\n return navItem.part.metaData[\"Width\"][0] === newWidth[0] || navItem.part.metaData[\"Width\"][0] === \"30\"\r\n }\r\n return navItem.part.metaData[\"Width\"][0] === newWidth[0]\r\n });\r\n console.log(\"newWidth\", newWidth[0]);\r\n console.log(\"sameWidth\", sameWidth);\r\n if (sameWidth.length) { // here we can filter by the same name, color etc.\r\n applianceParent.hood.activeFeature = sameWidth[0].part;\r\n }\r\n }\r\n if (applianceParent && applianceParent.stove && !applianceParent.stove.disabled) {\r\n applianceParent.stove.disabled = true;\r\n }\r\n }\r\n return super.handleClick(ignoreLocked, clickFrom);\r\n }\r\n\r\n disabledClick() {\r\n const applianceParent = this.getParent();\r\n if ((applianceParent.layout.type === 6) && !this.disabled && applianceParent.stovetop\r\n && !applianceParent.stovetop.disabled) {\r\n applianceParent.stovetop.disabled = true;\r\n }\r\n if (applianceParent.hood) {\r\n applianceParent.hood.disabled = this.disabled;\r\n }\r\n if (!this.disabled && applianceParent.stove && !applianceParent.stove.disabled) {\r\n applianceParent.stove.disabled = true;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport store from \"../../../../../store\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class Oven extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'oven';\r\n this.partName = 'Oven';\r\n this.translateId = \"visualizer.kitchen.appliance.oven\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Oven());\r\n }\r\n\r\n handleClick(ignoreLocked = false, clickFrom = \"\") {\r\n const {isEncore} = store.getState().fabricatorState;\r\n if (isEncore) {\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (ignoreLocked || !featureIsLocked) {\r\n const applianceParent = this.getParent().getParent();\r\n if (applianceParent.layout.type === 6) {\r\n if (applianceParent.stovetop && applianceParent.stovetop.disabled) {\r\n applianceParent.stovetop.disabled = false;\r\n }\r\n if (applianceParent.hood && applianceParent.hood.disabled) {\r\n applianceParent.hood.disabled = false;\r\n }\r\n if (applianceParent.range && !applianceParent.range.disabled) {\r\n applianceParent.range.disabled = true;\r\n }\r\n if (applianceParent.microwave && !applianceParent.microwave.disabled) {\r\n applianceParent.microwave.disabled = true;\r\n }\r\n }\r\n }\r\n }\r\n return super.handleClick(ignoreLocked, clickFrom);\r\n }\r\n\r\n hideLayerCondition() {\r\n const applianceParent = this.getParent();\r\n // on the second layout we should show Oven only if stove has Metadata \"T\" (top)\r\n return (applianceParent.layout.type === 2) && applianceParent && applianceParent.stove && applianceParent.stove.activeFeature\r\n && applianceParent.stove.activeFeature && (!applianceParent.stove.activeFeature.metaData[\"Stove Type\"]\r\n || (applianceParent.stove.activeFeature.metaData[\"Stove Type\"][0] !== \"T\"))\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n if (this.hideLayerCondition()) {\r\n conditions.push({\r\n propName: \"Stove Type\",\r\n propValue: \"F\"\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class Stove extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'stove';\r\n this.partName = 'Stove';\r\n this.translateId = \"visualizer.kitchen.appliance.stove\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Stove());\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom = \"\") {\r\n const applianceParent = this.getParent().getParent();\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (ignoreLocked || !featureIsLocked) {\r\n if (applianceParent && applianceParent.hood && applianceParent.hood.activeFeature) {\r\n const currentHoodWidth = applianceParent.hood.activeFeature.metaData[\"Width\"];\r\n const newWidth = this.metaData[\"Width\"];\r\n if (newWidth && (!currentHoodWidth || (newWidth[0] !== currentHoodWidth[0]))) {\r\n const currentHoodNavItems = applianceParent.hood.navigationSubItems();\r\n const sameWidth = currentHoodNavItems.filter(navItem => {\r\n if (!navItem.part.metaData[\"Width\"]) {\r\n return false\r\n }\r\n if (newWidth[0] === \"24\") {\r\n return navItem.part.metaData[\"Width\"][0] === newWidth[0] || navItem.part.metaData[\"Width\"][0] === \"30\"\r\n }\r\n return navItem.part.metaData[\"Width\"][0] === newWidth[0]\r\n });\r\n console.log(\"newWidth\", newWidth[0]);\r\n console.log(\"sameWidth\", sameWidth);\r\n if (sameWidth.length) { // here we can filter by the same name, color etc.\r\n applianceParent.hood.activeFeature = sameWidth[0].part;\r\n }\r\n }\r\n }\r\n if (applianceParent && applianceParent.range && applianceParent.range.activeFeature && !applianceParent.range.disabled) {\r\n applianceParent.range.disabled = true\r\n }\r\n }\r\n super.handleClick(ignoreLocked, clickFrom);\r\n }\r\n\r\n hideLayerCondition() {\r\n const applianceParent = this.getParent();\r\n const hideLayer = applianceParent && applianceParent.range && applianceParent.range.activeFeature\r\n && !applianceParent.range.disabled;\r\n if (hideLayer && !this.disabled) {\r\n this.disabled = true;\r\n }\r\n return hideLayer\r\n }\r\n\r\n disabledClick() {\r\n const applianceParent = this.getParent();\r\n if (applianceParent.hood) {\r\n applianceParent.hood.disabled = this.disabled;\r\n }\r\n if (!this.disabled && applianceParent.range && !applianceParent.range.disabled) {\r\n applianceParent.range.disabled = true;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {useOldCabinetLogic} from \"../../constants\";\r\n\r\nexport default class FridgeEnclosure extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'fridge_enclosure';\r\n this.partName = 'Fridge Enclosure';\r\n this.dbName = \"Fridge Enclosure\";\r\n this.visible = true;\r\n this.translateId = \"visualizer.kitchen.appliance.fridge_enclosure\";\r\n this.hasAdditionalParts = true;\r\n this.allWallsCanBeApplied = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].includes(\"Layout4\")) {\r\n dbFeature.metaData[\"Part\"] = [\"0\"]; // we don't have part 0 on Layout4\r\n }\r\n if (useOldCabinetLogic) {\r\n const partNumber = dbFeature.metaData[\"Part\"] ? +dbFeature.metaData[\"Part\"][0] : 0;\r\n return super.load_(dbFeature, new FridgeEnclosure(false, partNumber), true, partNumber === 0 ? 'features' : 'featuresParts');\r\n }\r\n const partNumber = dbFeature.metaData[\"Part\"] ? dbFeature.metaData[\"Part\"][0] : \"1\";\r\n return super.load_(dbFeature, new FridgeEnclosure(false, partNumber), true, partNumber === \"1\" ? 'features' : 'featuresParts');\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n if (layout.type === 4) {\r\n const fridge = this.getParent().fridge;\r\n // show layers only if fridge is disabled\r\n if (!(!fridge || fridge.disabled || !fridge.activeFeature || !fridge.activeFeature.layer || !fridge.activeFeature.layer.src)) {\r\n super.hideLayers();\r\n return\r\n }\r\n }\r\n\r\n return super.setLayers(layout);\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n const parent = this.getParent();\r\n //show second part only if fridge is disabled\r\n if (!parent.fridge || parent.fridge.disabled || !parent.fridge.activeFeature || !parent.fridge.activeFeature.layer || !parent.fridge.activeFeature.layer.src) {\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions, true);\r\n }\r\n return []\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const applianceParent = this.getParent();\r\n if (applianceParent && applianceParent.fridge && !applianceParent.fridge.disabled && applianceParent.fridge.activeFeature) {\r\n const fridgeConditions = applianceParent.fridge.getFridgeWidthAndHeightConditions();\r\n if (!fridgeConditions.some(condition => condition.propName === \"Width\")) {\r\n conditions.push({\r\n propName: \"Width\",\r\n propValue: \"36\"\r\n });\r\n }\r\n return [...conditions, ...fridgeConditions]\r\n }\r\n return conditions\r\n }\r\n\r\n getFridgeEnclosureSplittedFeatureName = () => {\r\n if (this._fridgeEnclosureSplittedFeatureName == null) {\r\n this._fridgeEnclosureSplittedFeatureName = this.getSplittedFeatureName().split(/.{5}$/)[0]; // \"Benton Maple Stone-NC-Aspen-00 1 21\" -> \"Benton Maple Stone-NC-Aspen-00\"\r\n }\r\n return this._fridgeEnclosureSplittedFeatureName\r\n };\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && Number.isInteger(fromFeature.partNumber)) {\r\n let activeFeaturePart;\r\n const name1 = fromFeature.getFridgeEnclosureSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n // if (this.partId === \"right_wall\") {\r\n // arrayOfConditions = arrayOfConditions.filter(condition => condition.propName !== \"MirrorSize\");\r\n // }\r\n activeFeatureParts = this.featuresParts.filter((feature) => name1 === feature.getFridgeEnclosureSplittedFeatureName());\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n if (activeFeatureParts.length) {\r\n activeFeaturePart = activeFeatureParts.find((feature) => {\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n if (!activeFeaturePart) {\r\n activeFeaturePart = activeFeatureParts[0];\r\n }\r\n }\r\n activeFeatureParts = activeFeaturePart ? [activeFeaturePart] : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class FridgeEnclosureHandle extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'fridge_enclosure_handle';\r\n this.partName = \"Fridge Enclosure Handle\";\r\n this.visible = true;\r\n this.translateId = \"visualizer.kitchen.appliance.fridge_enclosure_handle\";\r\n this.hasAdditionalParts = true;\r\n this.allWallsCanBeApplied = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].includes(\"Layout4\")) {\r\n dbFeature.metaData[\"Part\"] = [\"0\"]; // we don't have part 0 on Layout4\r\n }\r\n const partNumber = dbFeature.metaData[\"Part\"] ? dbFeature.metaData[\"Part\"][0] : \"1\";\r\n return super.load_(dbFeature, new FridgeEnclosureHandle(false, partNumber), true, partNumber === \"1\" ? 'features' : 'featuresParts');\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const applianceParent = this.getParent();\r\n if (applianceParent && applianceParent.fridge && !applianceParent.fridge.disabled && applianceParent.fridge.activeFeature) {\r\n const fridgeConditions = applianceParent.fridge.getFridgeWidthAndHeightConditions();\r\n if (!fridgeConditions.some(condition => condition.propName === \"Width\")) {\r\n conditions.push({\r\n propName: \"Width\",\r\n propValue: \"36\"\r\n });\r\n }\r\n return [...conditions, ...fridgeConditions]\r\n }\r\n return conditions\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n if (layout.type === 4) {\r\n const fridge = this.getParent().fridge;\r\n // show layers only if fridge is disabled\r\n if (!(!fridge || fridge.disabled || !fridge.activeFeature || !fridge.activeFeature.layer || !fridge.activeFeature.layer.src)) {\r\n super.hideLayers();\r\n return\r\n }\r\n }\r\n\r\n return super.setLayers(layout);\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n const parent = this.getParent();\r\n //show second part only if fridge is disabled\r\n if (!parent.fridge || parent.fridge.disabled || !parent.fridge.activeFeature || !parent.fridge.activeFeature.layer || !parent.fridge.activeFeature.layer.src) {\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions, true);\r\n }\r\n return []\r\n }\r\n\r\n getFridgeEnclosureSplittedFeatureName = () => {\r\n if (this._fridgeEnclosureSplittedFeatureName == null) {\r\n this._fridgeEnclosureSplittedFeatureName = this.getSplittedFeatureName().split(/.{5}$/)[0]; // \"Benton Maple Stone-NC-Aspen-00 1 21\" -> \"Benton Maple Stone-NC-Aspen-00\"\r\n }\r\n return this._fridgeEnclosureSplittedFeatureName\r\n };\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && Number.isInteger(fromFeature.partNumber)) {\r\n let activeFeaturePart;\r\n const name1 = fromFeature.getFridgeEnclosureSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n // if (this.partId === \"right_wall\") {\r\n // arrayOfConditions = arrayOfConditions.filter(condition => condition.propName !== \"MirrorSize\");\r\n // }\r\n activeFeatureParts = this.featuresParts.filter((feature) => name1 === feature.getFridgeEnclosureSplittedFeatureName());\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n if (activeFeatureParts.length) {\r\n activeFeaturePart = activeFeatureParts.find((feature) => {\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n if (!activeFeaturePart) {\r\n activeFeaturePart = activeFeatureParts[0];\r\n }\r\n }\r\n activeFeatureParts = activeFeaturePart ? [activeFeaturePart] : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport store from \"../../../../../store\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class Stovetop extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'stovetop';\r\n this.partName = 'Stovetop';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_stovetop\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Stovetop());\r\n }\r\n\r\n handleClick(ignoreLocked = false, clickFrom = \"\") {\r\n const {isEncore} = store.getState().fabricatorState;\r\n if (isEncore) {\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (ignoreLocked || !featureIsLocked) {\r\n const applianceParent = this.getParent().getParent();\r\n if (applianceParent.layout.type === 6) {\r\n if (applianceParent.microwave && !applianceParent.microwave.disabled) {\r\n applianceParent.microwave.disabled = true;\r\n }\r\n if (applianceParent.hood && applianceParent.hood.disabled) {\r\n applianceParent.hood.disabled = false;\r\n }\r\n }\r\n }\r\n }\r\n return super.handleClick(ignoreLocked, clickFrom);\r\n }\r\n\r\n disabledClick() {\r\n const applianceParent = this.getParent();\r\n // if (!this.disabled) {\r\n // // centerIslandParent.cabinet.disabled = false;\r\n // // centerIslandParent.cabinet.disabledClick();\r\n // } else {\r\n // if (applianceParent.hood) {\r\n // applianceParent.hood.disabled = this.disabled;\r\n // }\r\n // }\r\n if ((applianceParent.layout.type === 6) && !this.disabled && applianceParent.range\r\n && !applianceParent.range.disabled) {\r\n applianceParent.range.disabled = true;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Appliance from \"../../parts/appliance\";\r\nimport {LayoutAbbreviations, useOldCabinetLogic} from \"../../constants\";\r\n\r\nexport default class TopCabinet extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'top_cabinet';\r\n this.partName = 'Top Cabinet';\r\n this.translateId = \"visualizer.kitchen.cabinet.top_cabinet\";\r\n this.canBeDisabled = false;\r\n this.hasAdditionalParts = true;\r\n this.layerPriority = 1;\r\n this.allWallsCanBeApplied = true;\r\n if (isChild) {\r\n this.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n this.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = (dbFeature.metaData[\"Part\"] && +dbFeature.metaData[\"Part\"][0]) === 1 ? 1 : 2;\r\n return super.load_(dbFeature, new TopCabinet(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n disabledClick() {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const topHandle = this.getParent().topHandle;\r\n if (topHandle) {\r\n topHandle.disabled = this.disabled;\r\n }\r\n const crownMolding = this.getParent().crownMolding;\r\n if (crownMolding) {\r\n crownMolding.disabled = this.disabled;\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n if (useOldCabinetLogic) {\r\n return conditions\r\n }\r\n const cabinetParent = this.getParent();\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n const hoodIsVisible = applianceParent && applianceParent.hood && applianceParent.hood.activeFeature && !applianceParent.hood.disabled;\r\n const microwaveIsVisible = applianceParent && applianceParent.microwave && applianceParent.microwave.activeFeature && !applianceParent.microwave.disabled;\r\n conditions.push({\r\n propName: \"Hood\",\r\n propValue: hoodIsVisible || ((cabinetParent.layout.type === 6) && microwaveIsVisible) ? \"H\" : \"C\"\r\n });\r\n if (hoodIsVisible && applianceParent.hood.activeFeature.metaData[\"Width\"]) {\r\n conditions.push({\r\n propName: \"Width\",\r\n propValue: applianceParent.hood.activeFeature.metaData[\"Width\"]\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions().filter(metaObject => {\r\n return metaObject.propName !== \"Hood\" && metaObject.propName !== \"Width\"\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n\r\n const cabinetParent = this.getParent();\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n\r\n // part1 - depends on hood - H hood enabled, С - disabled\r\n // part1 - depends on hood \"Width\"\r\n // part2 - depends on Fridge\r\n // part3 - was part 6\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n if (useOldCabinetLogic) {\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")\r\n && (!applianceParent || !applianceParent.hood || applianceParent.hood.disabled || !applianceParent.hood.activeFeature)) {\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n }\r\n if (cabinetParent.layout.type === 4 && feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")\r\n && applianceParent && applianceParent.fridge && (applianceParent.fridge.disabled || !applianceParent.fridge.activeFeature)) {\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"6\")) { // 6 is fridge related\r\n if (!applianceParent || !applianceParent.fridge || applianceParent.fridge.disabled || !applianceParent.fridge.activeFeature) {\r\n return false\r\n }\r\n const fridgeConditions = applianceParent.fridge.getFridgeWidthAndHeightConditions();\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions([...arrayOfConditions, ...fridgeConditions])\r\n }\r\n } else {\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")) {\r\n const fridgeIsVisible = applianceParent && applianceParent.fridge && !applianceParent.fridge.disabled\r\n && applianceParent.fridge.activeFeature;\r\n const fridgeConditions = applianceParent && applianceParent.fridge\r\n ? applianceParent.fridge.getFridgeWidthAndHeightConditions()\r\n : [];\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions([\r\n ...arrayOfConditions, {\r\n propName: \"Fridge\",\r\n propValue: fridgeIsVisible ? \"F\" : \"C\"\r\n }, ...fridgeConditions\r\n ])\r\n } else if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")) {\r\n if (!applianceParent || !applianceParent.oven || applianceParent.oven.disabled || !applianceParent.oven.activeFeature) {\r\n return false\r\n }\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n }\r\n }\r\n return false\r\n });\r\n\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n}\r\n\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {LayoutAbbreviations} from \"../../constants\";\r\n\r\nexport default class TallCabinet extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'tall_cabinet';\r\n this.partName = 'Tall Cabinet';\r\n this.translateId = \"visualizer.kitchen.cabinet.tall_cabinet\";\r\n this.canBeDisabled = false;\r\n this.hasAdditionalParts = true;\r\n this.layerPriority = 1;\r\n this.allWallsCanBeApplied = true;\r\n if (isChild) {\r\n this.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n this.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n }\r\n }\r\n}\r\n\r\n","import orderBy from \"lodash/orderBy\";\r\n\r\nimport {IntermediatePart} from \"../../intermediatePart\";\r\nimport store from \"../../../../../store\";\r\nimport {getColorFilterValue} from \"../../../../../misc/filtersFunctions\";\r\nimport Appliance from \"../../parts/appliance\";\r\n\r\n\r\nexport default class CrownMolding extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'crown_molding';\r\n this.partName = 'Crown Molding';\r\n this.canBeDisabled = true;\r\n this.layerPriority = 3;\r\n this.translateId = \"visualizer.kitchen.cabinet.crown_molding\";\r\n this.hasAdditionalParts = true;\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = (dbFeature.metaData[\"Part\"] && dbFeature.metaData[\"Part\"][0]) === \"1\" ? 1 : 2;\r\n return super.load_(dbFeature, new CrownMolding(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n sortNavigationItems(navItems) {\r\n\r\n const cabinetParent = this.getParent();\r\n if (!cabinetParent.topCabinet || !cabinetParent.topCabinet.activeFeature) {\r\n return navItems\r\n }\r\n\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const colorFilterGroup = filterGroups.find(group => group.name === \"Color\");\r\n if (!colorFilterGroup) {\r\n return navItems\r\n }\r\n\r\n const currentTopCabinetColor = getColorFilterValue(cabinetParent.topCabinet.activeFeature, filterGroups, colorFilterGroup);\r\n if (!currentTopCabinetColor) {\r\n return navItems\r\n }\r\n\r\n navItems = orderBy(navItems, (navItem) => {\r\n const colorFilterValue = getColorFilterValue(navItem.part, filterGroups, colorFilterGroup);\r\n if (!colorFilterValue) {\r\n return false\r\n }\r\n return colorFilterValue.id === currentTopCabinetColor.id\r\n }, ['desc'])\r\n return navItems\r\n }\r\n\r\n disabledClick() {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const topCabinet = this.getParent().topCabinet;\r\n if (topCabinet && topCabinet.disabled && !this.disabled) {\r\n topCabinet.disabled = this.disabled;\r\n topCabinet.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const topHandle = this.getParent().topHandle;\r\n if (topHandle) {\r\n topHandle.disabled = this.disabled;\r\n }\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick(ignoreLocked);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.crownMolding.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n availableFeatures(cabinetFeatures) {\r\n return cabinetFeatures.filter(cabinetFeature => cabinetFeature.partNumber === 1)\r\n }\r\n\r\n setLayers(layout) {\r\n const topCabinet = this.getParent().topCabinet;\r\n if (topCabinet && (topCabinet.disabled || !topCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions();\r\n const cabinetParent = this.getParent();\r\n if (cabinetParent.topCabinet && cabinetParent.topCabinet.activeFeature\r\n && cabinetParent.topCabinet.activeFeature.metaData[\"MatchingFeature\"]) {\r\n conditions.push({\r\n propName: 'MatchingFeature',\r\n propValue: cabinetParent.topCabinet.activeFeature.metaData[\"MatchingFeature\"]\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n\r\n const cabinetParent = this.getParent();\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")) {\r\n if (!applianceParent || !applianceParent.oven || applianceParent.oven.disabled || !applianceParent.oven.activeFeature) {\r\n return false\r\n }\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n }\r\n return false\r\n });\r\n\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Appliance from \"../../parts/appliance\";\r\nimport CountertopGroup from \"../../parts/countertopGroup\";\r\nimport {LayoutAbbreviations, METADATA, useOldCabinetLogic} from \"../../constants\";\r\n\r\nexport default class BottomCabinet extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'bottom_cabinet';\r\n this.partName = 'Bottom Cabinet';\r\n this.translateId = \"visualizer.kitchen.cabinet.bottom_cabinet\";\r\n this.hasAdditionalParts = true;\r\n this.layerPriority = 4;\r\n this.allWallsCanBeApplied = true;\r\n if (isChild) {\r\n this.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n this.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = (dbFeature.metaData[\"Part\"] && +dbFeature.metaData[\"Part\"][0]) === 1 ? 1 : 2;\r\n if (Array.isArray(dbFeature.metaData[\"MountType\"]) && dbFeature.metaData[\"MountType\"][0] === \"0\") {\r\n if (!dbFeature.metaData[\"MountType\"].includes(\"FM\")) {\r\n dbFeature.metaData[\"MountType\"].push(\"FM\")\r\n }\r\n if (!dbFeature.metaData[\"MountType\"].includes(\"ST\")) {\r\n dbFeature.metaData[\"MountType\"].push(\"ST\")\r\n }\r\n }\r\n if (dbFeature.metaData[\"RoomLayout\"]\r\n && (dbFeature.metaData[\"RoomLayout\"].includes(\"Layout3\") || dbFeature.metaData[\"RoomLayout\"].includes(\"3\"))) {\r\n // на этом лаяуте синки с разным маунтайпом, а у bottom есть только один парт с маунтайпом S, U\r\n // т.е. тут можно вообще игнорить маунттайп и матчить все синки с боттом кабинетами\r\n dbFeature.metaData[\"MountType\"] = METADATA.ALL\r\n }\r\n if (!dbFeature.metaData[\"Stovetop\"]) {\r\n dbFeature.metaData[\"Stovetop\"] = METADATA.NO\r\n }\r\n return super.load_(dbFeature, new BottomCabinet(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n disabledClick() {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const applianceParent = this.getParent().layout.parts[Appliance.id];\r\n if (applianceParent && applianceParent.stovetop) {\r\n applianceParent.stovetop.disabled = this.disabled\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom = \"\") {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick(ignoreLocked, clickFrom);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.bottomCabinet.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n if (useOldCabinetLogic) {\r\n return conditions\r\n }\r\n const cabinetParent = this.getParent();\r\n const countertopParent = cabinetParent.layout.parts[CountertopGroup.id];\r\n // const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n conditions.push({\r\n propName: \"MountType\",\r\n propValue: countertopParent && countertopParent.sink && countertopParent.sink.activeFeature\r\n && !countertopParent.sink.disabled && countertopParent.sink.featureGroupEnabled\r\n ? countertopParent.sink.activeFeature.metaData[\"MountType\"]\r\n : [\"U\"]\r\n });\r\n return conditions\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions().filter(metaObject => {\r\n return metaObject.propName !== \"MountType\"\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n\r\n const cabinetParent = this.getParent();\r\n const countertopParent = cabinetParent.layout.parts[CountertopGroup.id];\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n const sink = countertopParent.sink;\r\n\r\n //part 1 will be with MountType\r\n // part 2 dishwasher - depends on dishwasher metaData Width\r\n //part 3 depends on stove metaData Width // on Room Layout 6 we have Range + Stovetop, not Stove\r\n // part 4 - fridge\r\n // part 5 - peninsula\r\n\r\n let withStoveConditions = [...arrayOfConditions];\r\n const rangeIsActive = applianceParent && applianceParent.range && !applianceParent.range.disabled && applianceParent.range.activeFeature;\r\n if (applianceParent && applianceParent.layout.type === 6) {\r\n withStoveConditions.push({\r\n propName: \"Stovetop\",\r\n propValue: rangeIsActive ? METADATA.NO : \"ST\",\r\n });\r\n }\r\n withStoveConditions.push({\r\n propName: \"Width\",\r\n propValue: rangeIsActive\r\n ? applianceParent.range.activeFeature.metaData[\"Width\"] || \"30\"\r\n : applianceParent\r\n && applianceParent.stove\r\n && applianceParent.stove.activeFeature\r\n && applianceParent.stove.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.stove.activeFeature.metaData[\"Width\"]\r\n : \"30\"\r\n })\r\n // console.log(\"withStoveConditions\", withStoveConditions);\r\n const withDishWasherConditions = [...arrayOfConditions, {\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.dishwasher && applianceParent.dishwasher.activeFeature\r\n && applianceParent.dishwasher.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.dishwasher.activeFeature.metaData[\"Width\"]\r\n : \"24\",\r\n }];\r\n const withFridgeConditions = [...arrayOfConditions, {\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.fridge && applianceParent.fridge.activeFeature\r\n && applianceParent.fridge.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.fridge.activeFeature.metaData[\"Width\"]\r\n : \"36\",\r\n }];\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n if (useOldCabinetLogic) {\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")\r\n && sink && !sink.disabled && sink.activeFeature) {\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions([\r\n ...arrayOfConditions,\r\n {propName: \"MountType\", propValue: sink.activeFeature.metaData[\"MountType\"]}\r\n ])\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")\r\n && applianceParent && applianceParent.dishwasher && !applianceParent.dishwasher.disabled && applianceParent.dishwasher.activeFeature) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"4\")\r\n && applianceParent && applianceParent.stove && !applianceParent.stove.disabled && applianceParent.stove.activeFeature) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"6\")) { // 6 is fridge related\r\n if (!applianceParent || !applianceParent.fridge || applianceParent.fridge.disabled || !applianceParent.fridge.activeFeature) {\r\n return false\r\n }\r\n const fridgeConditions = applianceParent.fridge.getFridgeWidthAndHeightConditions();\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions([...arrayOfConditions, ...fridgeConditions])\r\n }\r\n } else {\r\n if (name1 !== feature.getSplittedFeatureName()) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")) {\r\n return feature.matchesMetaForArrayOfConditions(withDishWasherConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")) {\r\n return feature.matchesMetaForArrayOfConditions(withStoveConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"4\")) {\r\n return feature.matchesMetaForArrayOfConditions(withFridgeConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"5\")) {\r\n if (!applianceParent || !applianceParent.oven || applianceParent.oven.disabled || !applianceParent.oven.activeFeature) {\r\n return false\r\n }\r\n }\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n }\r\n\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../../../kvComponent/core/constants\";\r\n\r\nexport default class Sink extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'sink';\r\n this.partName = 'Sink';\r\n this.translateId = \"visualizer.kitchen.countertop.sink\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData && dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) {\r\n return false\r\n }\r\n return super.load_(dbFeature, new Sink());\r\n }\r\n\r\n disabledClick() {\r\n const relatedFaucet = this.getParent().faucet;\r\n if (relatedFaucet) {\r\n relatedFaucet.disabled = this.disabled;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {METADATA, PLACEMENTS} from \"../../constants\";\r\n\r\nexport default class Faucet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'faucet';\r\n this.partName = 'Faucet';\r\n this.translateId = \"visualizer.kitchen.countertop.faucet\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData && dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) {\r\n return false\r\n }\r\n const mountTypeMeta = dbFeature.metaData[\"MountType\"];\r\n if (mountTypeMeta && mountTypeMeta.includes(\"U\")) {\r\n METADATA.sinkUTypes.forEach(metaValue => {\r\n if (!mountTypeMeta.includes(metaValue)){\r\n mountTypeMeta.push(metaValue)\r\n }\r\n })\r\n }\r\n return super.load_(dbFeature, new Faucet());\r\n }\r\n\r\n getCurrentSinkMetaData() {\r\n const sinkParent = this.getParent().sink;\r\n let metaObject = {};\r\n if (sinkParent && sinkParent.activeFeature) {\r\n const sinkMeta = sinkParent.activeFeature.metaData[\"MountType\"];\r\n if (sinkMeta && (sinkMeta !== \"0\") && !sinkMeta.includes(\"0\")) {\r\n metaObject[\"MountType\"] = Array.isArray(sinkMeta) ? sinkMeta[0] : sinkMeta\r\n }\r\n const mountHolesMeta = sinkParent.activeFeature.metaData[\"MountHoles\"];\r\n if (mountHolesMeta && (mountHolesMeta !== \"0\") && !mountHolesMeta.includes(\"0\")) { // if 0 - we are showing all faucets\r\n metaObject[\"MountHoles\"] = mountHolesMeta\r\n }\r\n }\r\n return metaObject\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const currentSinkMetaData = this.getCurrentSinkMetaData();\r\n [\"MountType\", \"MountHoles\"].forEach(propName => {\r\n if (currentSinkMetaData[propName]) {\r\n conditions.push({\r\n propName,\r\n propValue: currentSinkMetaData[propName]\r\n })\r\n }\r\n })\r\n // console.log(\"conditions\", conditions);\r\n return conditions;\r\n }\r\n\r\n disabledClick() {\r\n const relatedFaucet = this.getParent().sink;\r\n if (relatedFaucet) {\r\n relatedFaucet.disabled = this.disabled;\r\n }\r\n }\r\n}\r\n","import EdgeCommon from \"../edgeCommon\";\r\n\r\nexport default class EdgeProfile extends EdgeCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'edge_profile';\r\n this.partName = 'Edge Profile';\r\n this.translateId = \"visualizer.kitchen.countertop.edge_profile\";\r\n // this.isStoneFeature = true;\r\n this.customClassName = \"edge\";\r\n this.hasNoVisualizerLayers = true;\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Cutouts extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'cutouts';\r\n this.partName = 'Cutouts';\r\n this.translateId = \"visualizer.kitchen.countertop.cutouts\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Cutouts());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Radius extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'radius';\r\n this.partName = 'Radius';\r\n this.translateId = \"visualizer.kitchen.countertop.radius\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Radius());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Appliance from \"../../parts/appliance\";\r\nimport CountertopGroup from \"../../parts/countertopGroup\";\r\nimport {METADATA} from \"../../constants\";\r\n\r\nexport default class BottomHandle extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'bottom_handle';\r\n this.partName = 'Bottom Handle';\r\n this.translateId = \"visualizer.kitchen.cabinet.bottom_handle\";\r\n this.canBeDisabled = true;\r\n this.layerPriority = 5;\r\n this.hasAdditionalParts = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (Array.isArray(dbFeature.metaData[\"MountType\"]) && dbFeature.metaData[\"MountType\"][0] === \"0\") {\r\n if (!dbFeature.metaData[\"MountType\"].includes(\"FM\")) {\r\n dbFeature.metaData[\"MountType\"].push(\"FM\")\r\n }\r\n if (!dbFeature.metaData[\"MountType\"].includes(\"ST\")) {\r\n dbFeature.metaData[\"MountType\"].push(\"ST\")\r\n }\r\n }\r\n if (dbFeature.metaData[\"RoomLayout\"]\r\n && (dbFeature.metaData[\"RoomLayout\"].includes(\"Layout3\") || dbFeature.metaData[\"RoomLayout\"].includes(\"3\"))) {\r\n // if (!dbFeature.metaData[\"MountType\"].includes(\"U\")) {\r\n // dbFeature.metaData[\"MountType\"].push(\"U\")\r\n // }\r\n // if (!dbFeature.metaData[\"MountType\"].includes(\"S\")) {\r\n // dbFeature.metaData[\"MountType\"].push(\"S\")\r\n // }\r\n dbFeature.metaData[\"MountType\"] = METADATA.ALL\r\n }\r\n if (!dbFeature.metaData[\"Stovetop\"]) {\r\n dbFeature.metaData[\"Stovetop\"] = METADATA.NO\r\n }\r\n const partNumber = (dbFeature.metaData[\"Part\"] && dbFeature.metaData[\"Part\"][0]) === \"1\" ? 1 : 2;\r\n return super.load_(dbFeature, new BottomHandle(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom = \"\") {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick(ignoreLocked, clickFrom);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.bottomHandle.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const cabinetParent = this.getParent();\r\n const countertopParent = cabinetParent.layout.parts[CountertopGroup.id];\r\n // const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n conditions.push({\r\n propName: \"MountType\",\r\n propValue: countertopParent && countertopParent.sink && countertopParent.sink.activeFeature\r\n && !countertopParent.sink.disabled && countertopParent.sink.featureGroupEnabled\r\n ? countertopParent.sink.activeFeature.metaData[\"MountType\"]\r\n : [\"U\"]\r\n });\r\n return conditions\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions().filter(metaObject => {\r\n return metaObject.propName !== \"MountType\"\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n\r\n const cabinetParent = this.getParent();\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n\r\n //part 1 will be with MountType\r\n // part 2 dishwasher - depends on dishwasher metaData Width\r\n //part 3 depends on stove metaData Width // on Room Layout 6 we have Range + Stovetop, not Stove\r\n // part 4 - fridge\r\n // part 5 - peninsula\r\n\r\n let withStoveConditions = [...arrayOfConditions];\r\n const rangeIsActive = applianceParent && applianceParent.range && !applianceParent.range.disabled && applianceParent.range.activeFeature;\r\n if (applianceParent && applianceParent.layout.type === 6) {\r\n withStoveConditions.push({\r\n propName: \"Stovetop\",\r\n propValue: rangeIsActive ? METADATA.NO : \"ST\",\r\n });\r\n }\r\n withStoveConditions.push({\r\n propName: \"Width\",\r\n propValue: rangeIsActive\r\n ? applianceParent.range.activeFeature.metaData[\"Width\"] || \"30\"\r\n : applianceParent\r\n && applianceParent.stove\r\n && applianceParent.stove.activeFeature\r\n && applianceParent.stove.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.stove.activeFeature.metaData[\"Width\"]\r\n : \"30\"\r\n })\r\n const withDishWasherConditions = [...arrayOfConditions, {\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.dishwasher && applianceParent.dishwasher.activeFeature\r\n && applianceParent.dishwasher.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.dishwasher.activeFeature.metaData[\"Width\"]\r\n : \"24\",\r\n }];\r\n const withFridgeConditions = [...arrayOfConditions, {\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.fridge && applianceParent.fridge.activeFeature\r\n && applianceParent.fridge.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.fridge.activeFeature.metaData[\"Width\"]\r\n : \"36\",\r\n }];\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n if (name1 !== feature.getSplittedFeatureName()) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")) {\r\n return feature.matchesMetaForArrayOfConditions(withDishWasherConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")) {\r\n return feature.matchesMetaForArrayOfConditions(withStoveConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"4\")) {\r\n return feature.matchesMetaForArrayOfConditions(withFridgeConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"5\")) {\r\n if (!applianceParent || !applianceParent.oven || applianceParent.oven.disabled || !applianceParent.oven.activeFeature) {\r\n return false\r\n }\r\n }\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Appliance from \"../../parts/appliance\";\r\n\r\nexport default class TopHandle extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'top_handle';\r\n this.partName = 'Top Handle';\r\n this.canBeDisabled = true;\r\n this.layerPriority = 2;\r\n this.translateId = \"visualizer.kitchen.cabinet.top_handle\";\r\n this.hasAdditionalParts = true;\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = (dbFeature.metaData[\"Part\"] && dbFeature.metaData[\"Part\"][0]) === \"1\" ? 1 : 2;\r\n return super.load_(dbFeature, new TopHandle(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const cabinetParent = this.getParent();\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n const hoodIsVisible = applianceParent && applianceParent.hood && applianceParent.hood.activeFeature && !applianceParent.hood.disabled;\r\n const microwaveIsVisible = applianceParent && applianceParent.microwave && applianceParent.microwave.activeFeature && !applianceParent.microwave.disabled;\r\n conditions.push({\r\n propName: \"Hood\",\r\n propValue: hoodIsVisible || ((cabinetParent.layout.type === 6) && microwaveIsVisible) ? \"H\" : \"C\"\r\n });\r\n if (hoodIsVisible && applianceParent.hood.activeFeature.metaData[\"Width\"]) {\r\n conditions.push({\r\n propName: \"Width\",\r\n propValue: applianceParent.hood.activeFeature.metaData[\"Width\"]\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions().filter(metaObject => {\r\n return metaObject.propName !== \"Hood\" && metaObject.propName !== \"Width\"\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n\r\n const cabinetParent = this.getParent();\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n\r\n // part1 - depends on hood - H hood enabled, С - disabled\r\n // part1 - depends on hood \"Width\"\r\n // part2 - depends on Fridge\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")) {\r\n const fridgeIsVisible = applianceParent && applianceParent.fridge && !applianceParent.fridge.disabled\r\n && applianceParent.fridge.activeFeature;\r\n const fridgeConditions = applianceParent && applianceParent.fridge\r\n ? applianceParent.fridge.getFridgeWidthAndHeightConditions()\r\n : [];\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions([\r\n ...arrayOfConditions, {\r\n propName: \"Fridge\",\r\n propValue: fridgeIsVisible ? \"F\" : \"C\"\r\n }, ...fridgeConditions\r\n ])\r\n } else if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")) {\r\n if (!applianceParent || !applianceParent.oven || applianceParent.oven.disabled || !applianceParent.oven.activeFeature) {\r\n return false\r\n }\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n }\r\n return false\r\n });\r\n\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Appliance from \"../../parts/appliance\";\r\nimport {METADATA} from \"../../constants\";\r\nimport Countertop from \"../countertop/countertop\";\r\n\r\nexport default class DoorHandle extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'door_handle';\r\n this.partName = 'Door Handle';\r\n this.canBeDisabled = true;\r\n this.layerPriority = 2;\r\n this.translateId = \"visualizer.kitchen.cabinet.door_handle\";\r\n this.hasAdditionalParts = true;\r\n // Door Handle and Drawer Handle are the same as Top Handle and Bottom Handle\r\n // Top Handle, part 1, size 30, H --> Door Handle, part 1, size 30, H\r\n // Top Handle, part 1, size 30, C --> Door Handle, part 1, size 30, C\r\n // Top Handle, part 2, size 36 --> Door Handle, part 2, size 36\r\n // Top Handle, part 3, size 30 --> Door Handle, part 3, size 30\r\n // 9:42\r\n // Bottom Handle, part 1, size 0, S U --> Drawer Handle, part 1, size 0, S U /// Placement Bottom\r\n // --> Door Handle, part 1, size 0, S U /// Placement Bottom\r\n // 2. Bottom Handle, part 3, size 30 --> Drawer Handle, part 3, size 30 /// Placement Bottom\r\n // --> Door Handle, part 3, size 30 /// Placement Bottom\r\n // 3. Bottom Handle, part 3, size 30, ST --> Drawer Handle, part 3, size 30, ST /// Placement Bottom\r\n // --> Door Handle, part 3, size 30, ST /// Placement Bottom\r\n // 4. Bottom Handle, part 4, size 36 --> Drawer Handle, part 4, size 36 /// Placement Bottom\r\n // --> Door Handle, part 4, size 36 /// Placement Bottom\r\n // 5. Bottom Handle, part 5, size 30, O --> Drawer Handle, part 5, size 30, O (edited) /// Placement Bottom\r\n }\r\n\r\n load(dbFeature) {\r\n if (((dbFeature.metaData[\"Part\"] && dbFeature.metaData[\"Part\"][0]) === \"1\") && dbFeature.metaData[\"Placement\"]\r\n && dbFeature.metaData[\"Placement\"].includes(\"Bottom\")) {\r\n dbFeature.metaData[\"Part\"] = [\"6\"];\r\n // console.log(\"dbFeaturedbF6\", dbFeature);\r\n } else if (((dbFeature.metaData[\"Part\"] && dbFeature.metaData[\"Part\"][0]) === \"3\") && dbFeature.metaData[\"Placement\"]\r\n && dbFeature.metaData[\"Placement\"].includes(\"Bottom\")) {\r\n dbFeature.metaData[\"Part\"] = [\"7\"];\r\n // console.log(\"dbFeaturedbFeature7\", dbFeature);\r\n }\r\n if (Array.isArray(dbFeature.metaData[\"MountType\"]) && dbFeature.metaData[\"MountType\"][0] === \"0\") {\r\n if (!dbFeature.metaData[\"MountType\"].includes(\"FM\")) {\r\n dbFeature.metaData[\"MountType\"].push(\"FM\")\r\n }\r\n if (!dbFeature.metaData[\"MountType\"].includes(\"ST\")) {\r\n dbFeature.metaData[\"MountType\"].push(\"ST\")\r\n }\r\n }\r\n if (dbFeature.metaData[\"RoomLayout\"]\r\n && (dbFeature.metaData[\"RoomLayout\"].includes(\"Layout3\") || dbFeature.metaData[\"RoomLayout\"].includes(\"3\"))) {\r\n dbFeature.metaData[\"MountType\"] = METADATA.ALL\r\n }\r\n if (dbFeature.metaData[\"RoomLayout\"]\r\n && (dbFeature.metaData[\"RoomLayout\"].includes(\"Layout6\") || dbFeature.metaData[\"RoomLayout\"].includes(\"6\"))) {\r\n if (!dbFeature.metaData[\"Stovetop\"]) {\r\n dbFeature.metaData[\"Stovetop\"] = METADATA.NO\r\n }\r\n }\r\n const partNumber = (dbFeature.metaData[\"Part\"] && dbFeature.metaData[\"Part\"][0]) === \"1\" ? 1 : 2;\r\n return super.load_(dbFeature, new DoorHandle(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const cabinetParent = this.getParent();\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n const hoodIsVisible = applianceParent && applianceParent.hood && applianceParent.hood.activeFeature && !applianceParent.hood.disabled;\r\n const microwaveIsVisible = applianceParent && applianceParent.microwave && applianceParent.microwave.activeFeature && !applianceParent.microwave.disabled;\r\n conditions.push({\r\n propName: \"Hood\",\r\n propValue: hoodIsVisible || ((cabinetParent.layout.type === 6) && microwaveIsVisible) ? \"H\" : \"C\"\r\n });\r\n if (hoodIsVisible && applianceParent.hood.activeFeature.metaData[\"Width\"]) {\r\n conditions.push({\r\n propName: \"Width\",\r\n propValue: applianceParent.hood.activeFeature.metaData[\"Width\"]\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions().filter(metaObject => {\r\n return metaObject.propName !== \"Hood\" && metaObject.propName !== \"Width\"\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n\r\n const cabinetParent = this.getParent();\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n const countertopParent = cabinetParent.layout.parts[Countertop.id];\r\n\r\n //part 1 will be with MountType\r\n // part 2 dishwasher - depends on dishwasher metaData Width\r\n //part 3 depends on stove metaData Width // on Room Layout 6 we have Range + Stovetop, not Stove\r\n // part 4 - fridge\r\n // part 5 - peninsula\r\n\r\n let withStoveConditions = [...arrayOfConditions];\r\n if (applianceParent && applianceParent.layout.type === 6) {\r\n const rangeIsActive = applianceParent && applianceParent.range && !applianceParent.range.disabled && applianceParent.range.activeFeature;\r\n withStoveConditions.push({\r\n propName: \"Stovetop\",\r\n propValue: rangeIsActive ? METADATA.NO : \"ST\",\r\n });\r\n if (rangeIsActive && applianceParent.range.activeFeature.metaData[\"Width\"]) {\r\n withStoveConditions.push({\r\n propName: \"Width\",\r\n propValue: applianceParent.range.activeFeature.metaData[\"Width\"],\r\n })\r\n }\r\n } else {\r\n withStoveConditions.push({\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.stove && applianceParent.stove.activeFeature\r\n && applianceParent.stove.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.stove.activeFeature.metaData[\"Width\"]\r\n : \"30\",\r\n })\r\n }\r\n const withFridgeConditions = [...arrayOfConditions, {\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.fridge && applianceParent.fridge.activeFeature\r\n && applianceParent.fridge.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.fridge.activeFeature.metaData[\"Width\"]\r\n : \"36\",\r\n }];\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n if (name1 !== feature.getSplittedFeatureName()) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")) {\r\n const fridgeIsVisible = applianceParent && applianceParent.fridge && !applianceParent.fridge.disabled\r\n && applianceParent.fridge.activeFeature;\r\n const fridgeConditions = applianceParent && applianceParent.fridge\r\n ? applianceParent.fridge.getFridgeWidthAndHeightConditions()\r\n : [];\r\n return feature.matchesMetaForArrayOfConditions([\r\n ...arrayOfConditions, {\r\n propName: \"Fridge\",\r\n propValue: fridgeIsVisible ? \"F\" : \"C\"\r\n }, ...fridgeConditions\r\n ])\r\n } else if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")) {\r\n if (!applianceParent || !applianceParent.oven || applianceParent.oven.disabled || !applianceParent.oven.activeFeature) {\r\n return false\r\n }\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"4\")) {\r\n return feature.matchesMetaForArrayOfConditions(withFridgeConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"5\")) {\r\n if (!applianceParent || !applianceParent.oven || applianceParent.oven.disabled || !applianceParent.oven.activeFeature) {\r\n return false\r\n }\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"6\")) {\r\n if (countertopParent && countertopParent.sink && countertopParent.sink.activeFeature && !countertopParent.sink.disabled) {\r\n return feature.matchesMetaForArrayOfConditions([\r\n ...arrayOfConditions, {\r\n propName: \"MountType\",\r\n propValue: countertopParent.sink.activeFeature.metaData[\"MountType\"]\r\n }])\r\n }\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"7\")) {\r\n return feature.matchesMetaForArrayOfConditions(withStoveConditions)\r\n }\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Appliance from \"../../parts/appliance\";\r\nimport CountertopGroup from \"../../parts/countertopGroup\";\r\nimport {METADATA} from \"../../constants\";\r\n\r\nexport default class DrawerHandle extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'drawer_handle';\r\n this.partName = 'Drawer Handle';\r\n this.translateId = \"visualizer.kitchen.cabinet.drawer_handle\";\r\n this.canBeDisabled = true;\r\n this.layerPriority = 5;\r\n this.hasAdditionalParts = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (Array.isArray(dbFeature.metaData[\"MountType\"]) && dbFeature.metaData[\"MountType\"][0] === \"0\") {\r\n if (!dbFeature.metaData[\"MountType\"].includes(\"FM\")) {\r\n dbFeature.metaData[\"MountType\"].push(\"FM\")\r\n }\r\n if (!dbFeature.metaData[\"MountType\"].includes(\"ST\")) {\r\n dbFeature.metaData[\"MountType\"].push(\"ST\")\r\n }\r\n }\r\n if (dbFeature.metaData[\"RoomLayout\"]\r\n && (dbFeature.metaData[\"RoomLayout\"].includes(\"Layout3\") || dbFeature.metaData[\"RoomLayout\"].includes(\"3\"))) {\r\n // if (!dbFeature.metaData[\"MountType\"].includes(\"U\")) {\r\n // dbFeature.metaData[\"MountType\"].push(\"U\")\r\n // }\r\n // if (!dbFeature.metaData[\"MountType\"].includes(\"S\")) {\r\n // dbFeature.metaData[\"MountType\"].push(\"S\")\r\n // }\r\n dbFeature.metaData[\"MountType\"] = METADATA.ALL\r\n }\r\n if (dbFeature.metaData[\"RoomLayout\"]\r\n && (dbFeature.metaData[\"RoomLayout\"].includes(\"Layout6\") || dbFeature.metaData[\"RoomLayout\"].includes(\"6\"))) {\r\n if (!dbFeature.metaData[\"Stovetop\"]) {\r\n dbFeature.metaData[\"Stovetop\"] = METADATA.NO\r\n }\r\n }\r\n const partNumber = (dbFeature.metaData[\"Part\"] && dbFeature.metaData[\"Part\"][0]) === \"1\" ? 1 : 2;\r\n return super.load_(dbFeature, new DrawerHandle(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom = \"\") {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick(ignoreLocked, clickFrom);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.bottomHandle.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const cabinetParent = this.getParent();\r\n const countertopParent = cabinetParent.layout.parts[CountertopGroup.id];\r\n // const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n const sinkIsVisible = countertopParent && countertopParent.sink && countertopParent.sink.activeFeature && !countertopParent.sink.disabled;\r\n if (sinkIsVisible) {\r\n conditions.push({\r\n propName: \"MountType\",\r\n propValue: countertopParent.sink.activeFeature.metaData[\"MountType\"]\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions().filter(metaObject => {\r\n return metaObject.propName !== \"MountType\"\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n\r\n const cabinetParent = this.getParent();\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n\r\n //part 1 will be with MountType\r\n // part 2 dishwasher - depends on dishwasher metaData Width\r\n //part 3 depends on stove metaData Width // on Room Layout 6 we have Range + Stovetop, not Stove\r\n // part 4 - fridge\r\n // part 5 - peninsula\r\n\r\n let withStoveConditions = [...arrayOfConditions];\r\n if (applianceParent && applianceParent.layout.type === 6) {\r\n const rangeIsActive = applianceParent && applianceParent.range && !applianceParent.range.disabled && applianceParent.range.activeFeature;\r\n withStoveConditions.push({\r\n propName: \"Stovetop\",\r\n propValue: rangeIsActive ? METADATA.NO : \"ST\",\r\n });\r\n if (rangeIsActive && applianceParent.range.activeFeature.metaData[\"Width\"]) {\r\n withStoveConditions.push({\r\n propName: \"Width\",\r\n propValue: applianceParent.range.activeFeature.metaData[\"Width\"],\r\n })\r\n }\r\n } else {\r\n withStoveConditions.push({\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.stove && applianceParent.stove.activeFeature\r\n && applianceParent.stove.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.stove.activeFeature.metaData[\"Width\"]\r\n : \"30\",\r\n })\r\n }\r\n const withDishWasherConditions = [...arrayOfConditions, {\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.dishwasher && applianceParent.dishwasher.activeFeature\r\n && applianceParent.dishwasher.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.dishwasher.activeFeature.metaData[\"Width\"]\r\n : \"24\",\r\n }];\r\n const withFridgeConditions = [...arrayOfConditions, {\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.fridge && applianceParent.fridge.activeFeature\r\n && applianceParent.fridge.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.fridge.activeFeature.metaData[\"Width\"]\r\n : \"36\",\r\n }];\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n if (name1 !== feature.getSplittedFeatureName()) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")) {\r\n return feature.matchesMetaForArrayOfConditions(withDishWasherConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")) {\r\n return feature.matchesMetaForArrayOfConditions(withStoveConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"4\")) {\r\n return feature.matchesMetaForArrayOfConditions(withFridgeConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"5\")) {\r\n if (!applianceParent || !applianceParent.oven || applianceParent.oven.disabled || !applianceParent.oven.activeFeature) {\r\n return false\r\n }\r\n }\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n}\r\n","import React, {Fragment} from \"react\";\r\nimport {View, Text, Image} from \"@react-pdf/renderer\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {wizardGroupInterface} from \"../../../interfaces/wizardItemInterface\";\r\nimport {getCartItemName} from \"./printDocumentFunctions\";\r\n\r\nconst PrintDocumentBodyWizardItem = (props) => {\r\n\r\n const {styles, wizardGroup, selectedFeature, fabricatorData, printContext, locale, cartItemsThumbnails} = props;\r\n\r\n const baseInfo = (\r\n \r\n \r\n {selectedFeature\r\n ? getCartItemName(selectedFeature, fabricatorData, printContext, locale)\r\n : wizardGroup.productCartTitle || wizardGroup.title || wizardGroup.groupName}\r\n \r\n \r\n \r\n {wizardGroup.productCartDescription || \"\"}\r\n \r\n \r\n \r\n )\r\n\r\n const withThumbnail = fabricatorData.receiptSettings && fabricatorData.receiptSettings.showThumbnailsAndDescriptions\r\n && cartItemsThumbnails\r\n && cartItemsThumbnails[wizardGroup.id];\r\n\r\n return (\r\n \r\n \r\n {wizardGroup.title || wizardGroup.groupName}\r\n \r\n \r\n {withThumbnail ? (\r\n \r\n \r\n \r\n \r\n \r\n {baseInfo}\r\n \r\n \r\n ) : baseInfo}\r\n \r\n \r\n )\r\n};\r\n\r\nPrintDocumentBodyWizardItem.propTypes = {\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n // locale: PropTypes.string.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default PrintDocumentBodyWizardItem\r\n","import React, {useContext} from \"react\";\r\nimport {View, Text} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {\r\n getCurrencySign,\r\n getPriceWithCurrency,\r\n getQuotePriceWithTaxes,\r\n getTotalPrice, sortByOrder,\r\n toFixedPrice\r\n} from \"../../../misc/helpers\";\r\nimport {DISCOUNT_TYPES} from \"../../priceWorksheet/discounstInterface\";\r\nimport {\r\n getDepositAmount, getDepositDiscount,\r\n getDiscountsForSection,\r\n getSubTotalPrice,\r\n shouldCalculateDiscount\r\n} from \"../../priceWorksheet/discountFunctions\";\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\nimport PrintDocumentDisclaimer from \"./printDocumentDisclaimer\";\r\nimport {getShowPrice} from \"../../../misc/priceFunctions\";\r\nimport {getDifferentCurrencyCartItems} from \"../../../misc/misc2\";\r\nimport {isCafeCountetops} from \"../../../misc/fabricatorHardcode\";\r\n\r\nconst PrintDocumentTotal = (props) => {\r\n const {styles, priceWorksheetState, fabricatorData, locale, cartItems} = props;\r\n const {discountSections, customAddedDiscounts} = priceWorksheetState;\r\n const fabricatorSettings = fabricatorData.settings;\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n if (fabricatorData.isAmericanImport) {\r\n return null\r\n }\r\n\r\n let subTotalPrice = getTotalPrice(null, false).materialPrice;\r\n const totalPrice = getTotalPrice();\r\n let grandTotal = getQuotePriceWithTaxes(totalPrice);\r\n\r\n let allTaxes = totalPrice.priceTaxes.length\r\n ? totalPrice.priceTaxes\r\n : [{name: \"\", materialTax: totalPrice.materialTaxes}];\r\n const showTaxes = allTaxes.some(tax => tax.materialTax > 0);\r\n\r\n const roundedPrice = (price) => toFixedPrice(Math.trunc(price * 100) / 100);\r\n\r\n const getDiscountPercentageAmount = (discountSections, discountSection, discount) => {\r\n const currentTotal = getSubTotalPrice(discountSections, discountSection, discount, true, customAddedDiscounts);\r\n const priceTaken = currentTotal * discount.amount / 100 // for ex. 25% from 2700 = 625\r\n return roundedPrice(priceTaken);\r\n };\r\n\r\n let discountsTotalAmount = 0;\r\n if (discountSections.length) {\r\n discountSections.forEach(discountSection => {\r\n const allDiscounts = sortByOrder(getDiscountsForSection(discountSection, customAddedDiscounts));\r\n allDiscounts.forEach(discount => {\r\n if (shouldCalculateDiscount(discount)) {\r\n const discountAmount = (discount.type === DISCOUNT_TYPES.price)\r\n ? discount.amount\r\n : getDiscountPercentageAmount(discountSections, discountSection, discount);\r\n discountsTotalAmount = discountsTotalAmount + (+discountAmount);\r\n }\r\n })\r\n })\r\n }\r\n\r\n const showPrice = getShowPrice(fabricatorData, true);\r\n\r\n if (!showPrice) {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n const differentCurrencyObjects = getDifferentCurrencyCartItems(fabricatorSettings, cartItems);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {differentCurrencyObjects.length ? differentCurrencyObjects.map((currObject, currObjectIndex) => {\r\n let currencySubTotal = getTotalPrice(null, false, currObject.cartItems).materialPrice;\r\n currencySubTotal = toFixedPrice(currencySubTotal, true);\r\n return (\r\n \r\n {printContext.messages[\"receipt.total.subTotal\"]}:\r\n \r\n {getCurrencySign(currObject.currency, fabricatorSettings) + currencySubTotal}\r\n \r\n \r\n )\r\n }) : null}\r\n \r\n {printContext.messages[\"receipt.total.subTotal\"]}:\r\n {getPriceWithCurrency(fabricatorSettings, subTotalPrice, null, false, true)}\r\n \r\n {discountsTotalAmount ? (\r\n \r\n {printContext.messages[\"receipt.total.discounts\"]}:\r\n -{getPriceWithCurrency(fabricatorSettings, roundedPrice(discountsTotalAmount), null, false, true)}\r\n \r\n ) : null}\r\n {showTaxes ? allTaxes.map((taxObject, taxObjectIndex) => {\r\n const taxTotal = taxObject.materialTax;\r\n const taxName = taxObject.nameIntl && taxObject.nameIntl[locale]\r\n ? taxObject.nameIntl[locale]\r\n : taxObject.state || printContext.messages[\"receipt.total.tax\"]\r\n return (\r\n \r\n {taxName}\r\n {getPriceWithCurrency(fabricatorSettings, taxTotal, null, false, true)}\r\n \r\n )\r\n }) : null}\r\n {totalPrice.installationTaxes ? (\r\n \r\n {printContext.messages[\"receipt.total.installationTaxes\"]}\r\n {getPriceWithCurrency(fabricatorSettings, totalPrice.installationTaxes, null, false, true)}\r\n \r\n ) : null}\r\n {fabricatorSettings.useShipping || isCafeCountetops ? (\r\n \r\n {printContext.messages[\"grohe.cart.confirm.columns.delivery\"]}\r\n {getPriceWithCurrency(fabricatorSettings, totalPrice.totalDeliveryCost, null, false, true)}\r\n \r\n ) : null}\r\n {(fabricatorSettings.deposit && fabricatorSettings.enableDeposit) || getDepositDiscount(discountSections) ? (\r\n \r\n {printContext.messages[\"depositPopup.depositAmount\"]}:\r\n \r\n {getPriceWithCurrency(fabricatorSettings, getDepositAmount(discountSections, grandTotal, fabricatorData), null, false, true)}\r\n \r\n \r\n ) : null}\r\n {differentCurrencyObjects.length ? differentCurrencyObjects.map(currObject => {\r\n const currentTotal = getTotalPrice(null, true, currObject.cartItems);\r\n const total = toFixedPrice(getQuotePriceWithTaxes(currentTotal), true)\r\n return (\r\n \r\n {printContext.messages[\"receipt.total.total\"]}:\r\n {getCurrencySign(currObject.currency, fabricatorSettings) + total}\r\n \r\n )\r\n }) : null}\r\n \r\n {printContext.messages[\"receipt.total.total\"]}:\r\n {getPriceWithCurrency(fabricatorSettings, grandTotal, null, false, true)}\r\n \r\n \r\n \r\n )\r\n};\r\n\r\nPrintDocumentTotal.propTypes = {\r\n priceWorksheetState: PropTypes.object.isRequired,\r\n fabricatorData: PropTypes.object.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n cartItems: PropTypes.array.isRequired,\r\n};\r\n\r\nexport default PrintDocumentTotal\r\n","import React, {useContext} from \"react\";\r\nimport {View, Text, Image} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\n\r\nconst PrintDocumentSignature = (props) => {\r\n const {styles, isContractSign, receiptSignature, userInfo, assignQuotePopupCustomer, locale, fabricatorData} = props;\r\n const {receiptSettings} = fabricatorData;\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n const customerName = assignQuotePopupCustomer\r\n ? assignQuotePopupCustomer.fullName\r\n : userInfo.firstName + (userInfo.lastName ? (\" \" + userInfo.lastName) : \"\");\r\n\r\n const formattedDate = (new Date().toLocaleString(locale,\r\n {year: 'numeric', month: 'numeric', day: 'numeric', hour: '2-digit', minute: '2-digit'}\r\n )).replace(/,/g, \"\");\r\n\r\n return (\r\n \r\n \r\n \r\n {receiptSettings && receiptSettings.doNotFillNameAndDate ? null : customerName}\r\n \r\n {printContext.messages[\"receipt.signature.name\"]}\r\n \r\n \r\n \r\n {receiptSettings && receiptSettings.doNotFillNameAndDate ? null : formattedDate}\r\n \r\n {printContext.messages[\"receipt.signature.date\"]}\r\n \r\n \r\n {receiptSignature && !isContractSign\r\n && !(fabricatorData.receiptSettings && fabricatorData.receiptSettings.hideSignatureField)\r\n ? \r\n : null}\r\n {printContext.messages[\"receipt.signature.signature\"]}\r\n \r\n \r\n )\r\n};\r\n\r\nPrintDocumentSignature.propTypes = {\r\n styles: PropTypes.object.isRequired,\r\n locale: PropTypes.string.isRequired,\r\n userInfo: PropTypes.object.isRequired,\r\n assignQuotePopupCustomer: PropTypes.object,\r\n isContractSign: PropTypes.bool,\r\n receiptSignature: PropTypes.string,\r\n};\r\n\r\nexport default PrintDocumentSignature\r\n","import React from \"react\";\r\nimport {View, Text} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport PrintDocumentDiscount from \"./printDocumentDiscount\";\r\nimport {\r\n getDiscountsForSection,\r\n isSaveOnlyDiscount,\r\n shouldCalculateDiscount\r\n} from \"../../priceWorksheet/discountFunctions\";\r\nimport {getQuotePriceWithTaxes, getTotalPrice, sortByOrder} from \"../../../misc/helpers\";\r\nimport {DISCOUNT_SECTION_TYPES} from \"../../priceWorksheet/discounstInterface\";\r\n\r\n\r\nconst PrintDocumentDiscountsList = (props) => {\r\n const {styles, priceWorksheetState, fabricatorSettings} = props;\r\n const {discountSections, customAddedDiscounts} = priceWorksheetState;\r\n\r\n const totalPrice = getTotalPrice();\r\n const grandTotal = getQuotePriceWithTaxes(totalPrice);\r\n\r\n return (\r\n \r\n {discountSections.map((discountSection, discountSectionIndex) => {\r\n if (discountSection.type === DISCOUNT_SECTION_TYPES.finance) {\r\n return null\r\n }\r\n const allDiscounts = getDiscountsForSection(discountSection, customAddedDiscounts);\r\n const displayDiscounts = sortByOrder(allDiscounts.filter(discount => {\r\n return shouldCalculateDiscount(discount) || isSaveOnlyDiscount(discount)\r\n }));\r\n if (!displayDiscounts.length) {\r\n return null\r\n }\r\n return (\r\n \r\n {discountSection.name}\r\n {displayDiscounts.map((discount, discountIndex) => {\r\n return \r\n })}\r\n \r\n )\r\n })}\r\n \r\n )\r\n};\r\n\r\nPrintDocumentDiscountsList.propTypes = {\r\n priceWorksheetState: PropTypes.object.isRequired,\r\n fabricatorSettings: PropTypes.object.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default PrintDocumentDiscountsList\r\n","import React, {Fragment, useContext} from \"react\";\r\nimport {View, Text} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {DISCOUNT_MAIN_TYPES, DISCOUNT_TYPES} from \"../../priceWorksheet/discounstInterface\";\r\nimport {getPriceWithCurrency, toFixedPrice} from \"../../../misc/helpers\";\r\nimport {getCustomDepositAmount, getSubTotalPrice} from \"../../priceWorksheet/discountFunctions\";\r\nimport PrintDocumentDiscountFinance from \"./printDocumentDiscountFinance\";\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\n\r\nconst PrintDocumentDiscount = (props) => {\r\n const {styles, discount, priceWorksheetState, discountSection, fabricatorSettings, grandTotal} = props;\r\n const {discountSections, customAddedDiscounts} = priceWorksheetState;\r\n\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n const getDiscountPercentageAmount = () => {\r\n const grandTotal = getSubTotalPrice(discountSections, discountSection, discount, true, customAddedDiscounts);\r\n const priceTaken = grandTotal * discount.amount / 100 // for ex. 25% from 2700 = 625\r\n return toFixedPrice(Math.trunc(priceTaken * 100) / 100);\r\n };\r\n\r\n if (discount.discountType === DISCOUNT_MAIN_TYPES.deposit) {\r\n return (\r\n \r\n {discount.name}\r\n \r\n {getPriceWithCurrency(fabricatorSettings, getCustomDepositAmount(discountSections, grandTotal))}\r\n \r\n \r\n )\r\n }\r\n\r\n if (discount.discountType === DISCOUNT_MAIN_TYPES.finance) {\r\n return \r\n }\r\n\r\n const discountAmount = discount.type === DISCOUNT_TYPES.price\r\n ? \"-\" + getPriceWithCurrency(fabricatorSettings, toFixedPrice(discount.amount))\r\n : \"-\" + getPriceWithCurrency(fabricatorSettings, getDiscountPercentageAmount());\r\n\r\n const approveOptions = discount.approveOptions ? JSON.parse(discount.approveOptions) : null;\r\n\r\n return (\r\n \r\n \r\n \r\n {discount.name}\r\n {approveOptions && approveOptions.selectedOption ? (\r\n \r\n {printContext.messages[\"receipt.discount.approvedBy\"]}: \r\n {approveOptions.selectedOption}\r\n \r\n ) : null}\r\n \r\n {discountAmount}\r\n \r\n \r\n )\r\n};\r\n\r\nPrintDocumentDiscount.propTypes = {\r\n discount: PropTypes.object.isRequired,\r\n priceWorksheetState: PropTypes.object.isRequired,\r\n discountSection: PropTypes.object.isRequired,\r\n fabricatorSettings: PropTypes.object.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n grandTotal: PropTypes.number,\r\n};\r\n\r\nexport default PrintDocumentDiscount\r\n","import React, {useContext} from \"react\";\r\nimport {View, Text} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\nimport {DISCOUNT_SECTION_TYPES, DISCOUNT_FINANCE_CELLS} from \"../../priceWorksheet/discounstInterface\";\r\nimport {calculateCellValue} from \"../../priceWorksheet/discountFunctions\";\r\n\r\nconst PrintDocumentDiscountFinance = (props) => {\r\n const {styles, discount, priceWorksheetState, fabricatorSettings, grandTotal} = props;\r\n const {discountSections, financePercentage, financeCellsVisible} = priceWorksheetState;\r\n\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n const financeSection = discountSections.find(sec => sec.type === DISCOUNT_SECTION_TYPES.finance);\r\n if (!financeSection) {\r\n return null;\r\n }\r\n\r\n let parsedOptions = typeof discount.financeOptions === \"string\"\r\n ? JSON.parse(discount.financeOptions)\r\n : [];\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {printContext.messages[\"shoppingCart.discounts.financeTitle\"]}\r\n \r\n \r\n \r\n \r\n {printContext.messages[\"shoppingCart.discounts.financeSubTitle\"]}\r\n \r\n \r\n {priceWorksheetState.financePercentage + \"%\"}\r\n \r\n \r\n \r\n \r\n {Object.keys(DISCOUNT_FINANCE_CELLS).map((property, propertyIndex) => {\r\n const cellStyles = propertyIndex === 1\r\n ? [styles.financeCell, styles.marginL10, styles.marginR10]\r\n : styles.financeCell;\r\n const selectedDiscount = financeSection.discounts.find(dis => dis.uuId === parsedOptions[propertyIndex]);\r\n return (\r\n \r\n \r\n {selectedDiscount\r\n ? selectedDiscount.financeMonths + \" \" + printContext.messages[\"shoppingCart.discounts.months\"]\r\n : null}\r\n \r\n \r\n \r\n {financeCellsVisible ? calculateCellValue(\r\n {discountSections, financePercentage, fabricatorSettings},\r\n selectedDiscount ? selectedDiscount.financeMonths : 0,\r\n grandTotal,\r\n ) : null}\r\n \r\n \r\n \r\n )\r\n })}\r\n \r\n \r\n )\r\n};\r\n\r\nPrintDocumentDiscountFinance.propTypes = {\r\n discount: PropTypes.object.isRequired,\r\n priceWorksheetState: PropTypes.object.isRequired,\r\n discountSection: PropTypes.object.isRequired,\r\n fabricatorSettings: PropTypes.object.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default PrintDocumentDiscountFinance\r\n","import React from \"react\";\r\nimport {View, Text} from '@react-pdf/renderer';\r\n\r\nconst PrintDocumentAsCentralText = (props) => {\r\n const {styles} = props;\r\n return (\r\n \r\n Buyer(s) listed above hereby jointly and severally agrees to purchase the goods and/or services listed below, in accordance with the prices and terms described on this Specification Sheet and the front and the reverse of the accompanying CUSTOM REMODELING AGREEMENT, of which this Specification Sheet is a part.\r\n \r\n )\r\n};\r\n\r\n\r\nexport default PrintDocumentAsCentralText\r\n","import {leadApiGet} from \"./api\";\r\nimport {fixWizardItem} from \"../../bvcomponents/look/lookNavigation/lookMain/lookWizard/wizardFunctionsCommon\";\r\n\r\nexport const getWizardListFromBackend = async () => {\r\n // const mainResponse = await leadApiGet(`/api/public/bvdata/${document.kvConfig.userId}/30?mode=leadForm`);\r\n const mainResponse = await leadApiGet(`/api/Public/Wizard/Get/${document.kvConfig.userId}/leadform`);\r\n // if (mainResponse.data) {\r\n // console.log(\"mainResponse\", mainResponse.data);\r\n // }\r\n if (mainResponse && mainResponse.data) {\r\n const wizardList = JSON.parse(mainResponse.data)\r\n .filter(wizardItem => wizardItem.enabled)\r\n .map((wizardItem, wizardItemIndex) => {\r\n wizardItem = fixWizardItem(wizardItem, wizardItemIndex,true);\r\n // wizardItem.id = getUpdatedWizardId(wizardItem.visualizer, wizardItem.id);\r\n return wizardItem\r\n });\r\n\r\n return {wizardList, error: mainResponse.data.error}\r\n }\r\n return {wizardList: [], error: mainResponse.error}\r\n}\r\n","import {getLixilCampaignInfo} from \"../lixilLogic/lixilActions\";\r\nimport {\r\n formatCalendarDateToMatchAvailableDate,\r\n getSelectedLixilDateObject\r\n} from \"../appointmentLogic/appointmentActions\";\r\nimport {replaceMaskToPassPhoneOnTheBackend} from \"../userLogic/userActions\";\r\n\r\n/**\r\n * returns feature compressed object that can be passed on the backend (without redundant info)\r\n * @param fromFeature {featureInterface}\r\n * @returns {object}\r\n */\r\nconst getCompressedFeature = (fromFeature) => {\r\n if (!fromFeature) {\r\n return null\r\n }\r\n return {\r\n partName: fromFeature.customDisplayName || fromFeature.displayName,\r\n sharedFeatureName: fromFeature.sharedFeatureName,\r\n dbFeatureId: fromFeature.id,\r\n sku: fromFeature.sku,\r\n partId: fromFeature.partId,\r\n groupName: fromFeature.groupName,\r\n featureDefinitionID: fromFeature.featureDefinitionID,\r\n }\r\n}\r\n\r\n/**\r\n * is used to compress the data that will be passed in the job data back and force\r\n * @param allWizardsValues {array}\r\n * @param allWizardsValues {array}\r\n */\r\nconst getCompressedAllWizardValues = (allWizardsValues) => {\r\n const allWizardsValuesToSave = allWizardsValues.map(newWizObject => {\r\n let wizValues = {};\r\n Object.keys(newWizObject.wizardSelectedValues).forEach(stepIndex => {\r\n wizValues[stepIndex] = Object.assign({}, newWizObject.wizardSelectedValues[stepIndex])\r\n if (newWizObject.wizardSelectedValues[stepIndex].wizardGroup) {\r\n wizValues[stepIndex].wizardGroup = Object.assign(\r\n {},\r\n newWizObject.wizardSelectedValues[stepIndex].wizardGroup,\r\n {featuresExcluded: [], featuresIncluded: []} // to keep clean in json\r\n )\r\n if (wizValues[stepIndex].wizardGroup.mergedGroups) {\r\n wizValues[stepIndex].wizardGroup.mergedGroups = wizValues[stepIndex].wizardGroup.mergedGroups.map(wizGroup => {\r\n return {id: wizGroup.id, groupName: wizGroup.groupName}\r\n });\r\n }\r\n }\r\n if (newWizObject.wizardSelectedValues[stepIndex].selectedFeature) {\r\n wizValues[stepIndex].selectedFeature = getCompressedFeature(\r\n newWizObject.wizardSelectedValues[stepIndex].selectedFeature,\r\n newWizObject.quoteIndex\r\n ); // to keep clean in json\r\n }\r\n if (newWizObject.wizardSelectedValues[stepIndex].selectedFeatures) {\r\n wizValues[stepIndex].selectedFeatures = newWizObject.wizardSelectedValues[stepIndex].selectedFeatures.map(feature => getCompressedFeature(\r\n feature,\r\n newWizObject.quoteIndex\r\n ))\r\n }\r\n })\r\n return Object.assign({}, newWizObject, {wizardSelectedValues: wizValues})\r\n });\r\n // console.log(\"allWizardsValues to save ->\", allWizardsValuesToSave);\r\n return allWizardsValuesToSave\r\n}\r\nconst getJobRecords = (store) => {\r\n const {wizardState, userState} = store;\r\n return [{\r\n bvImage: \"\",\r\n features: [],\r\n imageUrl: null,\r\n installationCost: 0,\r\n installationTaxes: 0,\r\n isCreatedInSQFT: false,\r\n isVisibleInSQFT: false,\r\n layoutType: 1,\r\n leadFeatures: [],\r\n materialCost: 0,\r\n materialTaxes: 0,\r\n priceTaxes: [],\r\n qtCatName: \"\",\r\n room: \"LeadForm\",\r\n sFtCalcDataJson: null,\r\n sqFtCalcImage: null,\r\n staticCanvasImage: \"\",\r\n data: JSON.stringify({ // here is the main stored info\r\n id: 1,\r\n lookId: 1,\r\n layout_type: 1,\r\n cartState: {},\r\n navigationType: \"LeadForm\",\r\n toolVersion: 1,\r\n userState: Object.assign({}, userState, {\r\n userInfo: Object.assign({}, userState.userInfo, {\r\n phone: replaceMaskToPassPhoneOnTheBackend(userState.userInfo.phone)\r\n })\r\n }),\r\n allWizardsValues: getCompressedAllWizardValues(wizardState.allWizardsValues)\r\n })\r\n }]\r\n}\r\n\r\nexport const getSaveJobData = (store, isDelayedSave = false) => {\r\n const {globalState, userState, appointmentState} = store;\r\n\r\n const {salesRepID, appointmentDate, appointmentTimeSlot, availableAppointmentDates} = appointmentState;\r\n\r\n const lixilCampaignInfo = getLixilCampaignInfo(store);\r\n if (appointmentDate) {\r\n const appDate = new Date(appointmentDate);\r\n lixilCampaignInfo.appointment_date_stc = formatCalendarDateToMatchAvailableDate(appDate, true);\r\n if (appointmentTimeSlot) {\r\n const selectedLixilDateObject = getSelectedLixilDateObject(appDate, availableAppointmentDates);\r\n if (selectedLixilDateObject) {\r\n const timeSlotObject = selectedLixilDateObject.salesRepsInSlots.find(timeSlotObject => timeSlotObject.timeSlot === appointmentTimeSlot)\r\n if (timeSlotObject && timeSlotObject.slotStartTime) {\r\n lixilCampaignInfo.appointment_time_stc = timeSlotObject.slotStartTime[0] === \"0\"\r\n ? timeSlotObject.slotStartTime.substring(1) // 04:00 -> 4:00\r\n : timeSlotObject.slotStartTime;\r\n }\r\n }\r\n }\r\n }\r\n\r\n const lixilData = {\r\n salesRepID,\r\n receiveSmsCheckbox: userState.userInfo.receiveSmsCheckbox,\r\n ...lixilCampaignInfo,\r\n isDelayedSave,\r\n }\r\n\r\n const appForm = document.getElementById(\"app-form\");\r\n if (appForm && appForm.children) {\r\n [].slice.call(appForm.children).forEach(input => {\r\n if (input.name && input.value) {\r\n lixilData[input.name] = input.value;\r\n }\r\n })\r\n }\r\n\r\n const saveDataBeforeConverting = {\r\n // fast\r\n jobId: document.kvConfig.jobId || globalState.jobId,\r\n fromBV: true,\r\n fabricatorId: document.kvConfig.userId,\r\n notes: [],\r\n documents: [],\r\n employeeId: 0,\r\n shareUrl: \"\",\r\n discountSections: [],\r\n installations: [],\r\n subId: document.subId && document.subId.toString ? document.subId.toString() : null,\r\n total: {\r\n materialCost: 0,\r\n installationCost: 0,\r\n installationTaxes: 0,\r\n materialTaxes: 0,\r\n priceTaxes: [],\r\n totalWithTaxes: 0,\r\n },\r\n records: getJobRecords(store),\r\n // fast end\r\n yesNoConsultationRequest: false,\r\n submit: true,\r\n fromCheckOutPage: false,\r\n sendConsumerEmail: true,\r\n customerEmail: userState.userInfo.email || userState.registeredUser.email || \"\",\r\n salesPerson: \"\",\r\n salesPersonEmail: \"\",\r\n leadOriginatorId: (window.salesPerson ? window.salesPerson.rawVal / ( Math.floor(Math.PI * 1000)) : 0),\r\n postalCode: userState.userInfo.postal,\r\n // isNewUser: !(code below) || (userState.registeredUser.email !== userState.userInfo.email), // not sure if we need it\r\n isNewUser: !(document.kvConfig.jobId || globalState.jobId),\r\n state: \"quote\",\r\n fromTool: \"LF\", //\"BV\",\r\n toolVersion: document.kvConfig.toolVersion,\r\n visualizerType: \"LeadForm\",\r\n navigationType: \"LeadForm\",\r\n quoteRequestType: \"ScheduleAnAppointment\", // QuoteRequestType\r\n currency: \"USD\",\r\n installationTaxesRate: 0,\r\n materialTaxesRate: 0,\r\n fromDashboard: document.kvConfig.isBackend,\r\n callFabricator: document.kvConfig.callFabricatorOnSave || false,\r\n language: \"en-US\",\r\n salesRepID,\r\n lixilData,\r\n }\r\n console.log(\"saveData\", saveDataBeforeConverting);\r\n const formData = new FormData();\r\n formData.append('json', JSON.stringify(saveDataBeforeConverting));\r\n return formData\r\n}\r\n","import {leadApiPost} from \"./api\";\r\n\r\nexport const postSaveJob = async (postData) => {\r\n const mainResponse = await leadApiPost(`api/Public/SaveQuote/`, postData);\r\n console.log(\"post SaveQuote response\", mainResponse);\r\n return mainResponse\r\n}\r\n\r\nexport const postScheduleAppointment = async (postData) => {\r\n const mainResponse = await leadApiPost(`api/Public/Schedule/`, postData);\r\n console.log(\"post Schedule response\", mainResponse);\r\n return mainResponse\r\n}\r\n","import {getSelectedLixilDateObject} from \"../appointmentLogic/appointmentActions\";\r\n\r\nexport const getSaveAppointmentData = (store, jobId) => {\r\n const {appointmentDate, appointmentTime, appointmentTimeSlot, availableAppointmentDates} = store.appointmentState;\r\n const {useLixilCalendar} = store.fabricatorState;\r\n\r\n let timeToPass = appointmentTime;\r\n\r\n if (appointmentDate && useLixilCalendar && appointmentTimeSlot) {\r\n const appDate = new Date(appointmentDate);\r\n const selectedLixilDateObject = getSelectedLixilDateObject(appDate, availableAppointmentDates);\r\n if (selectedLixilDateObject) {\r\n const timeSlotObject = selectedLixilDateObject.salesRepsInSlots.find(timeSlotObject => timeSlotObject.timeSlot === appointmentTimeSlot)\r\n if (timeSlotObject && timeSlotObject.slotStartTime) {\r\n timeToPass = timeSlotObject.slotStartTime;\r\n }\r\n }\r\n }\r\n\r\n const splittedTime = timeToPass.split(\":00\");\r\n const am = splittedTime[1] && splittedTime[1].toLowerCase().includes(\"am\");\r\n\r\n let date = \"\"+appointmentDate.getDate();\r\n let month = \"\"+(appointmentDate.getMonth() + 1); // +1 because getMonth returns starting from 0 (January is 0)\r\n let year = \"\"+appointmentDate.getFullYear();\r\n\r\n date = date.length === 1 ? \"0\" + date : date;\r\n month = month.length === 1 ? \"0\" + month : month;\r\n\r\n const scheduleData = {\r\n scheduleEntryData: {\r\n // date: \"03/02/2024\",\r\n date: `${month}/${date}/${year}`,\r\n time: `${splittedTime[0].length === 1 ? \"0\" + splittedTime[0] : splittedTime[0]}:00`, // 1:00 -> 01:00\r\n am: am,\r\n duration: 60,\r\n alert: 30,\r\n appointmentType: 'Quote'\r\n },\r\n jobId,\r\n jobIdType: 'JobQuote'\r\n };\r\n\r\n console.log(\"scheduleData\", scheduleData);\r\n return scheduleData\r\n}\r\n","import {leadApiPost} from \"./api\";\r\nimport {parseUrl} from \"../helperFunctions\";\r\n\r\nconst parsedUrl = parseUrl();\r\n\r\nconst getUserRegisterOrUpdateData = (store) => {\r\n\r\n const {userInfo, userLocation} = store.userState;\r\n const {email, firstName, lastName, phone, city, state, country, postal, address2} = userInfo; // address is not used\r\n const {streetNumber, streetName} = userLocation;\r\n\r\n return {\r\n email,\r\n firstName,\r\n lastName,\r\n phone,\r\n address1: (streetNumber ? streetNumber + \" \" : \"\") + streetName,\r\n address2,\r\n city,\r\n state,\r\n country,\r\n phone2: \"\",\r\n agreedToTerms: true,\r\n subscribeToNewsletter: true,\r\n isNew: true,\r\n postal,\r\n salesPersonEmail: (window.salesPerson ? window.salesPerson.email : \"\"),\r\n salesPersonFullName: (window.salesPerson ? window.salesPerson.name : \"\"),\r\n employeeId: window.salesPerson\r\n ? window.salesPerson.rawVal / ( Math.floor(Math.PI * 1000))\r\n : (parsedUrl && parsedUrl.p) ? +parsedUrl.p.split(\"/\")[0] : \"\",\r\n fabricatorId: document.kvConfig.userId || 61986,\r\n quoteRequestType: \"ScheduleAnAppointment\", // QuoteRequestType\r\n yesNoConsultationRequest: false,\r\n preferredCommunicationMethod: \"\",\r\n howDidYouHearAboutUs: \"\",\r\n language: \"en-US\",\r\n subId: document.subId && document.subId.toString ? document.subId.toString() : null,\r\n };\r\n}\r\n\r\nexport const registerUser = (store) => {\r\n return leadApiPost(\"/api/Public/RegisterClient\", getUserRegisterOrUpdateData(store))\r\n}\r\n\r\nexport const updateUser = (store) => {\r\n const {registeredUserAuthToken} = store.userState;\r\n const headers = {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + registeredUserAuthToken,\r\n }\r\n return leadApiPost(\"/api/client/update-with-token\", getUserRegisterOrUpdateData(store), headers)\r\n}\r\n","export function parseUrl(queryString = null) {\r\n queryString = queryString || window.location.search;\r\n const query = {};\r\n const pairs = (queryString[0] === '?' ? queryString.substr(1) : queryString).split('&');\r\n for (let i = 0; i < pairs.length; i++) {\r\n let pair = pairs[i].split('=');\r\n query[decodeURIComponent(pair[0]).toLowerCase()] = decodeURIComponent(pair[1] || '');\r\n }\r\n return query;\r\n}\r\n","export const getErrorPopupObject = (text, buttons) => {\r\n return {\r\n visible: true,\r\n title: \"Error\",\r\n text,\r\n buttons: buttons || [{\r\n text: \"Close\",\r\n }],\r\n }\r\n}\r\n","import {IS_LIXIL_UI} from \"../config\";\r\nimport {getCurrentZIndexes} from \"../bvcomponents/appLayout\";\r\n\r\n\r\nexport const makeHoveringLayer = (layer, image, layoutType = \"Large\", canvasDimensions = null, fabricatorData = null) => {\r\n\r\n const zIndexesObject = getCurrentZIndexes();\r\n\r\n // console.log('layer+', layer);\r\n const withNewBackgrounds = [\"bvLook\", \"kvScene\", \"Fireplace\", \"LaundryRoom\"].some(visType => document.kvConfig.visualizerType === visType);\r\n\r\n const isBackgroundLayer =\r\n ((document.kvConfig.visualizerType === \"bvScene\") && Object.values(zIndexesObject.layouts[layoutType].Background).includes(layer.zIndex))\r\n || (withNewBackgrounds && layer.zIndex >= 50000);\r\n\r\n // step 1 - create an image from layer // get layerDimensions\r\n let layerDimensions = zIndexesObject.getLayerDimensions(withNewBackgrounds ? layer : layer.zIndex, layoutType, canvasDimensions);\r\n // console.log('layerDimensions+', layerDimensions);\r\n if (!layerDimensions) {\r\n console.log('layerDimensions not found!', layer);\r\n // return makeHoveringLayerOld(layer, image)\r\n layerDimensions = {\r\n polygonArray: [[0, 0], [canvasDimensions.width, 0], [canvasDimensions.width, canvasDimensions.height], [0, canvasDimensions.height]],\r\n width: canvasDimensions.width,\r\n height: canvasDimensions.height\r\n };\r\n // return makeHoveringLayerOld(layer, image)\r\n }\r\n\r\n const width = layer.cropCoords ? layer.cropCoords[2] - layer.cropCoords[0] : layerDimensions.width;\r\n const height = layer.cropCoords ? layer.cropCoords[3] - layer.cropCoords[1] : layerDimensions.height;\r\n\r\n // step 2 - create for each layer fake canvas\r\n const fakeCanvas = document.createElement('canvas');\r\n fakeCanvas.setAttribute('width', `${width}px`);\r\n fakeCanvas.setAttribute('height', `${height}px`);\r\n const context2D = fakeCanvas.getContext(\"2d\", { willReadFrequently: true });\r\n\r\n // step 3 - make canvas layer 0.5 transparent\r\n // if (!backGroundIndexes.includes(layer.zIndex)) { // do it for all layers\r\n context2D.globalAlpha = fabricatorData && fabricatorData.isAmericanStandard ? 0.75 : 0.5;\r\n // }\r\n\r\n // step 4 - put layer image on fake canvas\r\n context2D.clearRect(0, 0, fakeCanvas.width, fakeCanvas.height);\r\n const x1 = layer.cropCoords ? 0 : layerDimensions.polygonArray[0][0];\r\n const y1 = layer.cropCoords ? 0 : layerDimensions.polygonArray[0][1];\r\n context2D.drawImage(image, x1, y1, width, height, 0, 0, width, height);\r\n\r\n // step 5 - create green map for this layer\r\n let imageData = null\r\n try {\r\n imageData = context2D.getImageData(0, 0, width, height);\r\n } catch (error) {\r\n console.log(\"error creating hovering layer\", layer, image, layoutType, canvasDimensions, error);\r\n return null\r\n }\r\n // const imageData = context2D.getImageData(300, 400, 300, 400);\r\n\r\n const map = imageData.data;\r\n\r\n let r, g, b, a;\r\n\r\n const multipliers = {\r\n r: IS_LIXIL_UI ? 0 : 0.2,\r\n g: 0.7,\r\n b: IS_LIXIL_UI ? 1 : 0.2,\r\n }\r\n\r\n for (let p = 0, len = imageData.data.length; p < len; p += 4) {\r\n\r\n r = map[p];\r\n g = map[p + 1];\r\n b = map[p + 2];\r\n a = map[p + 3];\r\n\r\n if (a !== 0 && (r > 2) && (b > 2) && (g > 2)) { // not a background or not dark\r\n if (fabricatorData && fabricatorData.isAmericanStandard) {\r\n r = 231;\r\n g = 0;\r\n b = 38;\r\n } else {\r\n r = r * multipliers.r;\r\n g = g * multipliers.g;\r\n b = b * multipliers.b;\r\n }\r\n if (g > 255) {\r\n g = 255;\r\n }\r\n map[p] = r;\r\n map[p + 1] = g;\r\n map[p + 2] = b;\r\n map[p + 3] = a;\r\n } else if (isBackgroundLayer) {\r\n map[p] = 0;\r\n map[p + 1] = 0;\r\n map[p + 2] = 0;\r\n map[p + 3] = 0;\r\n }\r\n }\r\n\r\n // step 6 - put green map on canvas\r\n context2D.clearRect(0, 0, width, height);\r\n context2D.putImageData(imageData, 0, 0);\r\n\r\n const greenImage = fakeCanvas.toDataURL();\r\n const hoveringImage = new Image();\r\n hoveringImage.crossOrigin = 'Anonymous';\r\n hoveringImage.layerDimensions = layer.layerDimensions || null;\r\n hoveringImage.coords = layer.coords || null;\r\n try {\r\n hoveringImage.src = greenImage;\r\n } catch (e) {\r\n console.log(e, 'Can\\'t apply layer Hovering src', greenImage);\r\n }\r\n return {\r\n layer,\r\n context2D,\r\n layerDimensions,\r\n greenImage,\r\n hoveringImage,\r\n };\r\n};\r\n\r\nexport const makeHoveringLayerOld = (layer, image, width = 1620, height = 1080) => {\r\n // window.t0 = performance.now();\r\n\r\n // step 1 - create an image from layer // no needed it more, it comes rendered from this.draw() method\r\n // const img = new Image();\r\n // img.crossOrigin = \"Anonymous\";\r\n // img.src = layer.image;\r\n\r\n // step 2 - create for each layer fake canvas\r\n const fakeCanvas = document.createElement('canvas');\r\n fakeCanvas.setAttribute('height', `${height}px`);\r\n fakeCanvas.setAttribute('width', `${width}px`);\r\n const context2D = fakeCanvas.getContext(\"2d\", { willReadFrequently: true });\r\n\r\n // step 3 - make canvas layer 0.5 transparent\r\n context2D.globalAlpha = 0.5;\r\n\r\n // step 4 - put layer image on fake canvas\r\n context2D.clearRect(0, 0, fakeCanvas.width, fakeCanvas.height);\r\n\r\n if (!(image.complete && image.naturalHeight !== 0)) {\r\n return {\r\n layer,\r\n context2D,\r\n greenImage: \"\"\r\n }\r\n }\r\n\r\n context2D.drawImage(image, 0, 0);\r\n\r\n // step 5 - create green map for this layer\r\n const imageData = context2D.getImageData(0, 0, width, height);\r\n // const imageData = context2D.getImageData(300, 400, 300, 400);\r\n\r\n const map = imageData.data;\r\n\r\n let r, g, b, a;\r\n for (let p = 0, len = imageData.data.length; p < len; p += 4) {\r\n\r\n r = map[p];\r\n g = map[p + 1];\r\n b = map[p + 2];\r\n a = map[p + 3];\r\n\r\n if (a !== 0) {\r\n r = r * 0.2;\r\n b = b * 0.2;\r\n g = g * 0.7;\r\n if (g > 255) {\r\n g = 255;\r\n }\r\n map[p] = r;\r\n map[p + 1] = g;\r\n map[p + 2] = b;\r\n map[p + 3] = a;\r\n }\r\n }\r\n\r\n // step 6 - put green map on canvas\r\n context2D.clearRect(0, 0, fakeCanvas.width, fakeCanvas.height);\r\n context2D.putImageData(imageData, 0, 0);\r\n\r\n // step 7 - set values in reverse order (we need top layers to be hoverable first)\r\n // window.t1 = performance.now();\r\n // console.log(\"Call to doSomething took \" + (window.t1 - window.t0) + \" milliseconds.\");\r\n return {\r\n layer,\r\n context2D,\r\n greenImage: fakeCanvas.toDataURL()\r\n };\r\n\r\n};\r\n","/*\r\n\r\n Copyright (c) Manuel Stofer 2013 - today, PinchZoom.js\r\n\r\n Permission is hereby granted, free of charge, to any person obtaining a copy\r\n of this software and associated documentation files (the \"Software\"), to deal\r\n in the Software without restriction, including without limitation the rights\r\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n copies of the Software, and to permit persons to whom the Software is\r\n furnished to do so, subject to the following conditions:\r\n\r\n The above copyright notice and this permission notice shall be included in\r\n all copies or substantial portions of the Software.\r\n\r\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n THE SOFTWARE.\r\n\r\n*/\r\n// import $ from 'jquery';\r\n// import ActionTypes from \"../misc/actionTypes\";\r\n\r\nimport pinchScroll from \"./pinchScroll\";\r\nimport ActionTypes from \"../misc/actionTypes\";\r\nimport {GROHE_CONFIG} from \"../bvcomponents/look/grohe/groheConfig\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../config\";\r\nimport store from \"../store\";\r\nimport {setCanvasScale} from \"../actions/actionFunctions\";\r\n\r\n// polyfills\r\nif (typeof Object.assign != 'function') {\r\n // Must be writable: true, enumerable: false, configurable: true\r\n Object.defineProperty(Object, \"assign\", {\r\n value: function assign(target) { // .length of function is 2\r\n if (target == null) { // TypeError if undefined or null\r\n throw new TypeError('Cannot convert undefined or null to object');\r\n }\r\n\r\n var to = Object(target);\r\n\r\n for (var index = 1; index < arguments.length; index++) {\r\n var nextSource = arguments[index];\r\n\r\n if (nextSource != null) { // Skip over if undefined or null\r\n for (var nextKey in nextSource) {\r\n // Avoid bugs when hasOwnProperty is shadowed\r\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\r\n to[nextKey] = nextSource[nextKey];\r\n }\r\n }\r\n }\r\n }\r\n return to;\r\n },\r\n writable: true,\r\n configurable: true\r\n });\r\n}\r\n\r\nif (typeof Array.from != 'function') {\r\n Array.from = function (object) {\r\n return [].slice.call(object);\r\n };\r\n}\r\n\r\n// utils\r\nvar buildElement = function(str) {\r\n // empty string as title argument required by IE and Edge\r\n var tmp = document.implementation.createHTMLDocument('');\r\n tmp.body.innerHTML = str;\r\n return Array.from(tmp.body.children)[0];\r\n};\r\n\r\nvar triggerEvent = function(el, name) {\r\n var event = document.createEvent('HTMLEvents');\r\n event.initEvent(name, true, false);\r\n el.dispatchEvent(event);\r\n};\r\n\r\nconst sanitizeValue = (newValue) => {\r\n return isNaN(newValue) ? 0 : newValue\r\n}\r\n\r\nvar definePinchZoom = function () {\r\n\r\n /**\r\n * Pinch zoom\r\n * @version 2.0.0\r\n * @author Manuel Stofer \r\n * @param el\r\n * @param options\r\n * @constructor\r\n */\r\n var PinchZoom = function (el, options) {\r\n this.el = el;\r\n this.elText = document.querySelector('.canvas-text');\r\n this.zoomFactor = 1;\r\n this.lastScale = 1;\r\n this.offset = {\r\n x: 0,\r\n y: 0\r\n };\r\n this.mousePos = {\r\n x: 0,\r\n y: 0\r\n };\r\n this.coImage = null;\r\n this.containerScrolled = false;\r\n this.mouseDown = false;\r\n this.timerId = null;\r\n this.timerId = null;\r\n this.options = Object.assign({}, this.defaults, options);\r\n this.setupMarkup();\r\n this.bindEvents();\r\n if (this.options.canUseUpdate) {\r\n this.update();\r\n }\r\n // default enable.\r\n this.enable();\r\n\r\n },\r\n sum = function (a, b) {\r\n return a + b;\r\n },\r\n isCloseTo = function (value, expected) {\r\n return value > expected - 0.01 && value < expected + 0.01;\r\n },\r\n interaction = null;\r\n\r\n PinchZoom.prototype = {\r\n\r\n defaults: {\r\n tapZoomFactor: 1.75,\r\n zoomOutFactor: 1.3,\r\n animationDuration: 500,\r\n maxZoom: 1.75,\r\n minZoom: 1,\r\n lockDragAxis: false,\r\n use2d: true,\r\n dragPixelsBeforeClick: 6,\r\n zoomStartEventName: 'pz_zoomstart',\r\n zoomEndEventName: 'pz_zoomend',\r\n dragStartEventName: 'pz_dragstart',\r\n dragEndEventName: 'pz_dragend',\r\n doubleTapEventName: 'pz_doubletap',\r\n canUseUpdate: true\r\n },\r\n\r\n /**\r\n * Event handler for 'dragstart'\r\n * @param event\r\n * @param isMobile {boolean}\r\n */\r\n handleDragStart: function (event, isMobile = true) {\r\n triggerEvent(this.el, this.options.dragStartEventName);\r\n this.stopAnimation();\r\n this.lastDragPosition = false;\r\n this.hasInteraction = true;\r\n isMobile ? this.handleDrag(event) : this.handleMove(event);\r\n },\r\n\r\n /**\r\n * Event handler for 'drag'\r\n * @param event\r\n */\r\n handleDrag: function (event) {\r\n if (this.zoomFactor > 1.0) {\r\n var touch = this.getTouches(event)[0];\r\n this.drag(touch, this.lastDragPosition);\r\n this.offset = this.sanitizeOffset(this.offset);\r\n this.lastDragPosition = touch;\r\n }\r\n },\r\n /**\r\n * Event handler for 'drag'\r\n * @param event\r\n */\r\n handleMove: function (event) {\r\n let mousePos = this.getTouches({\r\n touches: [{\r\n pageX: event.pageX,\r\n pageY: event.pageY,\r\n }]\r\n })[0];\r\n // console.log(\"mousePos\", mousePos);\r\n this.drag(mousePos, this.lastDragPosition);\r\n this.offset = this.sanitizeOffset(this.offset);\r\n this.lastDragPosition = mousePos;\r\n },\r\n\r\n handleDragEnd: function () {\r\n triggerEvent(this.el, this.options.dragEndEventName);\r\n this.end();\r\n },\r\n\r\n /**\r\n * Event handler for 'zoomstart'\r\n * @param event\r\n */\r\n handleZoomStart: function () {\r\n triggerEvent(this.el, this.options.zoomStartEventName);\r\n this.stopAnimation();\r\n this.lastScale = 1;\r\n this.nthZoom = 0;\r\n this.lastZoomCenter = false;\r\n this.hasInteraction = true;\r\n },\r\n\r\n /**\r\n * Event handler for 'zoom'\r\n * @param event\r\n */\r\n handleZoom: function (event, newScale) {\r\n // a relative scale factor is used\r\n var touchCenter = this.getTouchCenter(this.getTouches(event)),\r\n scale = newScale / this.lastScale;\r\n this.lastScale = newScale;\r\n\r\n // the first touch events are thrown away since they are not precise\r\n this.nthZoom += 1;\r\n if (this.nthZoom > 3) {\r\n\r\n this.scale(scale, touchCenter);\r\n this.drag(touchCenter, this.lastZoomCenter);\r\n }\r\n this.lastZoomCenter = touchCenter;\r\n },\r\n\r\n handleZoomEnd: function () {\r\n triggerEvent(this.el, this.options.zoomEndEventName);\r\n const closeToOne = isCloseTo(this.zoomFactor, 1);\r\n store.dispatch(setCanvasScale(closeToOne ? 1 : this.zoomFactor));\r\n this.end();\r\n },\r\n\r\n /**\r\n * Event handler for 'doubletap'\r\n * @param event\r\n */\r\n handleDoubleTap: function (event) {\r\n // document.querySelector('.canvas-text').innerHTML = 'doubleTap' + JSON.stringify(event);\r\n var center = this.getTouches(event)[0],\r\n zoomFactor = this.zoomFactor > 1 ? 1 : this.options.tapZoomFactor,\r\n startZoomFactor = this.zoomFactor,\r\n updateProgress = (function (progress) {\r\n this.scaleTo(startZoomFactor + progress * (zoomFactor - startZoomFactor), center);\r\n }).bind(this);\r\n\r\n if (this.hasInteraction) {\r\n return;\r\n }\r\n if (startZoomFactor > zoomFactor) {\r\n center = this.getCurrentZoomCenter();\r\n }\r\n\r\n this.animate(this.options.animationDuration, updateProgress, this.swing);\r\n triggerEvent(this.el, this.options.doubleTapEventName);\r\n },\r\n\r\n /**\r\n * Zoom on canvas click\r\n * @param center {object}\r\n * @param zoomFactor {number}\r\n * @param allowMoving {boolean} // only for nav = product for similar products\r\n * @param withFeatureScreen {boolean} // determines whether we display feature selections with feature screen or only feature selections\r\n */\r\n zoomToCenter: function (center, zoomFactor, allowMoving = false, withFeatureScreen = true) {\r\n // this.elText.innerHTML = 'zoomToCenter' + this.isZooming;\r\n // var center = this.getTouches(event)[0],\r\n\r\n // window.clearTimeout(this.mouseDownTimeoutId);\r\n\r\n const zoomOut = !center && zoomFactor === 1;\r\n const zoomOutFromLeft = zoomOut && this.offset.x < 0;\r\n\r\n if (!zoomFactor) {\r\n zoomFactor = this.zoomFactor > 1 ? this.zoomFactor : this.options.tapZoomFactor;\r\n }\r\n\r\n if (!center) {\r\n center = {\r\n x: this.el.clientWidth / 2,\r\n y: this.el.clientHeight / 2,\r\n }\r\n }\r\n\r\n // console.log(\"this.zoomFactor\", this.zoomFactor);\r\n // console.log(\"zoomFactor\", zoomFactor);\r\n\r\n // const alreadyZoomed = (this.zoomFactor > 1) && (zoomFactor > 1) && (zoomFactor !== this.options.maxZoom);\r\n // const alreadyZoomed = false; // here is always false, because we removed moving canvas in zoomed mode\r\n const alreadyZoomed = IS_PRODUCT_JOURNEY && allowMoving && (this.zoomFactor === this.options.maxZoom) // allow moving canvas in zoomed mode for new navigation type\r\n const startZoomFactor = this.zoomFactor;\r\n const startOffset = {\r\n x: this.zoomFactor === 1 ? 0 : this.offset.x,\r\n y: this.zoomFactor === 1 ? 0 : this.offset.y\r\n };\r\n const targetOffset = {\r\n x: sanitizeValue((zoomFactor - 1) * center.x),\r\n y: sanitizeValue((zoomFactor - 1) * center.y)\r\n };\r\n // console.log(\"this.offset\", this.offset);\r\n // console.log(\"targetOffset\", targetOffset);\r\n\r\n if (this.hasInteraction) {\r\n return;\r\n }\r\n if (startZoomFactor > zoomFactor) {\r\n center = this.getCurrentZoomCenter();\r\n }\r\n\r\n if (alreadyZoomed) { // keep it as is, old support, not sure how it works if we delete it\r\n\r\n const updateProgress = alreadyZoomed\r\n ? (function (progress) {\r\n this.offset.x = sanitizeValue(startOffset.x + progress * (targetOffset.x - startOffset.x));\r\n this.offset.y = sanitizeValue(startOffset.y + progress * (targetOffset.y - startOffset.y));\r\n this.update();\r\n }).bind(this)\r\n : (function (progress) {\r\n // console.log(\"startZoomFactor + progress * (zoomFactor - startZoomFactor)\", startZoomFactor + progress * (zoomFactor - startZoomFactor));\r\n this.scaleTo(startZoomFactor + progress * (zoomFactor - startZoomFactor), center, false);\r\n }).bind(this);\r\n\r\n this.animate(this.options.animationDuration, updateProgress, this.swing, () => {\r\n triggerEvent(this.el, this.options.zoomEndEventName);\r\n // console.log(\"finished\", );\r\n if (zoomOutFromLeft) {\r\n this.moveContainer(center, zoomFactor);\r\n }\r\n this.stopAnimation();\r\n this.end();\r\n // if (this.isInsaneOffset(this.offset)) {\r\n // this.sanitizeOffsetAnimation();\r\n // }\r\n this.offset = targetOffset;\r\n // window.clearTimeout(this.mouseDownTimeoutId);\r\n // console.log(\"end zoom\", );\r\n });\r\n } else {\r\n // console.log(\"targetOffset.x\", targetOffset.x);\r\n // if (targetOffset.x > 500) { // magic number to zoom in correct position\r\n // targetOffset.x = targetOffset.x * 1.8 // magic number to zoom in correct position\r\n // }\r\n this.update(targetOffset); // set canvas transform\r\n if (zoomOutFromLeft) {\r\n this.moveContainer(center, zoomFactor);\r\n }\r\n this.scaleTo(zoomFactor, center, false);\r\n this.offset = this.sanitizeOffset(targetOffset);\r\n this.stopAnimation();\r\n this.hasInteraction = false;\r\n this.offset = this.sanitizeOffset(targetOffset);\r\n this.end();\r\n triggerEvent(this.el, this.options.zoomEndEventName);\r\n }\r\n\r\n if (!zoomOutFromLeft) {\r\n this.moveContainer(center, zoomFactor, withFeatureScreen);\r\n }\r\n },\r\n\r\n /**\r\n * removes container and blurres from the co image\r\n * @param withAnimation {boolean}\r\n */\r\n removeContainerScroll: function (withAnimation = false) {\r\n // if (this.coImage) {\r\n // this.coImage.classList.remove(\"blurred\");\r\n // }\r\n this.setContainerTransform(null, withAnimation);\r\n this.containerScrolled = false;\r\n\r\n // if (withAnimation) {\r\n // this.setContainerTransform(null, withAnimation);\r\n // this.containerScrolled = false;\r\n // } else {\r\n // const center = this.getCurrentZoomCenter();\r\n // const updateProgress = (function (progress) {\r\n // this.scaleTo(this.zoomFactor + progress * (1 - this.zoomFactor), center, false);\r\n // }).bind(this);\r\n // this.animate(this.options.animationDuration, updateProgress, this.swing, () => {\r\n // triggerEvent(this.el, this.options.zoomEndEventName);\r\n // this.offset = {x: 0, y: 0};\r\n // this.containerScrolled = false;\r\n // });\r\n // }\r\n\r\n },\r\n\r\n /**\r\n * moves container and blurres the co image\r\n * @param center\r\n * @param zoomFactor\r\n * @param withFeatureScreen {boolean}\r\n */\r\n moveContainer: function (center, zoomFactor, withFeatureScreen) {\r\n // console.log(\"moveContainer center\", center, zoomFactor);\r\n if (zoomFactor === 1 && this.containerScrolled) {\r\n this.removeContainerScroll();\r\n return\r\n }\r\n if (IS_PRODUCT_JOURNEY) {\r\n this.moveGroheContainer(center, zoomFactor, withFeatureScreen);\r\n return;\r\n }\r\n if (center && center.featureX) {\r\n if (center.isMobile) {\r\n // const menuWidth = 316;\r\n // const shiftX = center.clientWidth - (center.clientWidth * center.featureX / 100);\r\n // // console.log(\"shiftX\", shiftX);\r\n // if (shiftX < menuWidth) {\r\n // // if (center.x === center.clientWidth) {\r\n // this.setContainerTransform('translateX(-'+menuWidth+'px)');\r\n // this.containerScrolled = true;\r\n // }\r\n } else if (!center.x) {\r\n const offsetX = center.x === 0 ? 420 : 0;\r\n const percentX = center.clientWidth * center.featureX / 100;\r\n const shiftX = percentX > 420 ? 0 : 420 - percentX;\r\n const offsetY = 0;\r\n const transform2d = 'translate(' + (offsetX + shiftX) + 'px,' + offsetY + 'px)';\r\n this.setContainerTransform(transform2d);\r\n this.containerScrolled = true;\r\n // } else {\r\n // this.removeContainerScroll();\r\n }\r\n } else if (center && !center.isMobile && center.x && this.containerScrolled) {\r\n this.removeContainerScroll();\r\n }\r\n },\r\n\r\n /**\r\n * moves container and blurres the co image (for nav type = grohe)\r\n * @param center\r\n * @param zoomFactor\r\n * @param withFeatureScreen {boolean}\r\n */\r\n moveGroheContainer: function (center, zoomFactor, withFeatureScreen) {\r\n if (center && center.featureX) {\r\n const state = store.getState();\r\n let menuWidth = center.isMobile ? GROHE_CONFIG.sidebarWidth.mobile : GROHE_CONFIG.mainBarWidth.desktop;\r\n if ((state.groheState.similarProductsOpened || state.lookState.lookActiveCategory) && !center.isMobile) {\r\n menuWidth = withFeatureScreen ? menuWidth + GROHE_CONFIG.similarProductsWidth.desktop : GROHE_CONFIG.similarProductsWidth.desktop\r\n }\r\n // console.log(\"shiftX\", shiftX);\r\n // console.log(\"center.featureX\", center.featureX);\r\n if (center.featureX > 20 && (window.innerWidth <= 1920)) { // no need to move container on full hd monitors\r\n // if feature X is less than 20 - it is ok not to scroll anywhere\r\n let translate = 0;\r\n if (center.featureX > 80) {\r\n translate = menuWidth // for the very right positions\r\n } else {\r\n translate = center.featureX * 3.4 // magic number for moving container\r\n if (center.featureX > 70) {\r\n translate = translate + 20; // plus 20 pixels\r\n } else if (center.featureX > 60) {\r\n translate = translate + 50; // plus 50 pixels if more than 60\r\n } else if (center.featureX > 50) {\r\n translate = translate + 80; // plus 80 pixels if between 50 and 70\r\n }\r\n if (translate > menuWidth) {\r\n translate = menuWidth; // just in case we are overscrolling\r\n }\r\n }\r\n this.setContainerTransform('translateX(-' + translate + 'px)', true);\r\n this.containerScrolled = true;\r\n } else if (this.containerScrolled) {\r\n // this.removeContainerScroll(true);\r\n }\r\n } else if (center && !center.isMobile && center.x && this.containerScrolled) {\r\n this.removeContainerScroll(true);\r\n }\r\n },\r\n\r\n /**\r\n * sets container transform position\r\n * @param transform2d\r\n * @param withAnimation {boolean}\r\n */\r\n setContainerTransform: function (transform2d, withAnimation = false) {\r\n // this.elText.innerHTML = 'setContainerTransform' + withAnimation;\r\n\r\n if (transform2d) {\r\n // if (this.coImage && !this.coImage.classList.contains(\"blurred\")) {\r\n // this.coImage.classList.add(\"blurred\");\r\n // }\r\n if (!this.containerScrolled) {\r\n this.containerScrolled = true;\r\n }\r\n }\r\n clearTimeout(this.containerTransition);\r\n if (withAnimation) {\r\n this.container.style.transition = \"all 0.5s ease\";\r\n }\r\n this.container.style.webkitTransform = transform2d;\r\n this.container.style.mozTransform = transform2d;\r\n this.container.style.msTransform = transform2d;\r\n this.container.style.oTransform = transform2d;\r\n this.container.style.transform = transform2d;\r\n if (withAnimation) {\r\n this.containerTransition = setTimeout(() => {\r\n this.container.style.transition = \"none\";\r\n }, 500)\r\n }\r\n },\r\n\r\n /**\r\n * Max / min values for the offset\r\n * @param offset\r\n * @return {Object} the sanitized offset\r\n */\r\n sanitizeOffset: function (offset) {\r\n var maxX = (this.zoomFactor - 1) * this.getContainerX(),\r\n maxY = (this.zoomFactor - 1) * this.getContainerY(),\r\n maxOffsetX = Math.max(maxX, 0),\r\n maxOffsetY = Math.max(maxY, 0),\r\n minOffsetX = Math.min(maxX, 0),\r\n minOffsetY = Math.min(maxY, 0);\r\n\r\n return {\r\n x: sanitizeValue(Math.min(Math.max(offset.x, minOffsetX), maxOffsetX)),\r\n y: sanitizeValue(Math.min(Math.max(offset.y, minOffsetY), maxOffsetY))\r\n };\r\n },\r\n\r\n /**\r\n * Scale to a specific zoom factor (not relative)\r\n * @param zoomFactor\r\n * @param needToMoveContainer {boolean}\r\n * @param center\r\n */\r\n scaleTo: function (zoomFactor, center, needToMoveContainer = true) {\r\n this.scale(zoomFactor / this.zoomFactor, center);\r\n if (needToMoveContainer && zoomFactor === 1) {\r\n this.moveContainer(null, zoomFactor);\r\n }\r\n },\r\n\r\n /**\r\n * Scales the element from specified center\r\n * @param scale\r\n * @param center\r\n */\r\n scale: function (scale, center) {\r\n scale = this.scaleZoomFactor(scale);\r\n this.addOffset({\r\n x: sanitizeValue((scale - 1) * (center.x + this.offset.x)),\r\n y: sanitizeValue((scale - 1) * (center.y + this.offset.y))\r\n });\r\n },\r\n\r\n /**\r\n * Scales the zoom factor relative to current state\r\n * @param scale\r\n * @return the actual scale (can differ because of max min zoom factor)\r\n */\r\n scaleZoomFactor: function (scale) {\r\n var originalZoomFactor = this.zoomFactor;\r\n this.zoomFactor *= scale;\r\n this.zoomFactor = Math.round(Math.min(this.options.maxZoom, Math.max(this.zoomFactor, this.options.minZoom)) * 1000) / 1000;\r\n return this.zoomFactor / originalZoomFactor;\r\n },\r\n\r\n /**\r\n * Drags the element\r\n * @param center\r\n * @param lastCenter\r\n */\r\n drag: function (center, lastCenter) {\r\n if (lastCenter) {\r\n if(this.options.lockDragAxis) {\r\n // lock scroll to position that was changed the most\r\n if(Math.abs(center.x - lastCenter.x) > Math.abs(center.y - lastCenter.y)) {\r\n this.addOffset({\r\n x: -(center.x - lastCenter.x),\r\n y: 0\r\n });\r\n }\r\n else {\r\n this.addOffset({\r\n y: -(center.y - lastCenter.y),\r\n x: 0\r\n });\r\n }\r\n }\r\n else {\r\n this.addOffset({\r\n y: -(center.y - lastCenter.y),\r\n x: -(center.x - lastCenter.x)\r\n });\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Calculates the touch center of multiple touches\r\n * @param touches\r\n * @return {Object}\r\n */\r\n getTouchCenter: function (touches) {\r\n return this.getVectorAvg(touches);\r\n },\r\n\r\n /**\r\n * Calculates the average of multiple vectors (x, y values)\r\n */\r\n getVectorAvg: function (vectors) {\r\n return {\r\n x: vectors.map(function (v) { return v.x; }).reduce(sum) / vectors.length,\r\n y: vectors.map(function (v) { return v.y; }).reduce(sum) / vectors.length\r\n };\r\n },\r\n\r\n /**\r\n * Adds an offset\r\n * @param offset the offset to add\r\n * @return return true when the offset change was accepted\r\n */\r\n addOffset: function (offset) {\r\n this.offset = {\r\n x: sanitizeValue(this.offset.x + offset.x),\r\n y: sanitizeValue(this.offset.y + offset.y)\r\n };\r\n },\r\n\r\n sanitize: function () {\r\n if (this.zoomFactor < this.options.zoomOutFactor) {\r\n this.zoomOutAnimation();\r\n } else if (this.isInsaneOffset(this.offset)) {\r\n this.sanitizeOffsetAnimation();\r\n }\r\n },\r\n\r\n /**\r\n * Checks if the offset is ok with the current zoom factor\r\n * @param offset\r\n * @return {Boolean}\r\n */\r\n isInsaneOffset: function (offset) {\r\n var sanitizedOffset = this.sanitizeOffset(offset);\r\n return sanitizedOffset.x !== offset.x ||\r\n sanitizedOffset.y !== offset.y;\r\n },\r\n\r\n /**\r\n * Creates an animation moving to a sane offset\r\n */\r\n sanitizeOffsetAnimation: function () {\r\n var targetOffset = this.sanitizeOffset(this.offset),\r\n startOffset = {\r\n x: this.offset.x,\r\n y: this.offset.y\r\n },\r\n updateProgress = (function (progress) {\r\n this.offset.x = sanitizeValue(startOffset.x + progress * (targetOffset.x - startOffset.x));\r\n this.offset.y = sanitizeValue(startOffset.y + progress * (targetOffset.y - startOffset.y));\r\n this.update();\r\n }).bind(this);\r\n\r\n this.animate(\r\n this.options.animationDuration,\r\n updateProgress,\r\n this.swing\r\n );\r\n },\r\n\r\n /**\r\n * Zooms back to the original position,\r\n * (no offset and zoom factor 1)\r\n */\r\n zoomOutAnimation: function () {\r\n var startZoomFactor = this.zoomFactor,\r\n zoomFactor = 1,\r\n center = this.getCurrentZoomCenter(),\r\n updateProgress = (function (progress) {\r\n this.scaleTo(startZoomFactor + progress * (zoomFactor - startZoomFactor), center);\r\n }).bind(this);\r\n\r\n this.animate(\r\n this.options.animationDuration,\r\n updateProgress,\r\n this.swing\r\n );\r\n },\r\n\r\n /**\r\n * Updates the aspect ratio\r\n */\r\n updateAspectRatio: function () {\r\n this.setContainerY(this.getContainerX() / this.getAspectRatio());\r\n },\r\n\r\n /**\r\n * Calculates the initial zoom factor (for the element to fit into the container)\r\n * @return the initial zoom factor\r\n */\r\n getInitialZoomFactor: function () {\r\n return this.container.offsetWidth / this.el.offsetWidth;\r\n },\r\n\r\n /**\r\n * Calculates the aspect ratio of the element\r\n * @return the aspect ratio\r\n */\r\n getAspectRatio: function () {\r\n return this.el.offsetWidth / this.el.offsetHeight;\r\n },\r\n\r\n /**\r\n * Calculates the virtual zoom center for the current offset and zoom factor\r\n * (used for reverse zoom)\r\n * @return {Object} the current zoom center\r\n */\r\n getCurrentZoomCenter: function () {\r\n\r\n // uses following formula to calculate the zoom center x value\r\n // offset_left / offset_right = zoomcenter_x / (container_x - zoomcenter_x)\r\n var length = this.container.offsetWidth * this.zoomFactor,\r\n offsetLeft = this.offset.x,\r\n offsetRight = length - offsetLeft - this.container.offsetWidth,\r\n widthOffsetRatio = offsetLeft / offsetRight,\r\n centerX = widthOffsetRatio * this.container.offsetWidth / (widthOffsetRatio + 1),\r\n\r\n // the same for the zoomcenter y\r\n height = this.container.offsetHeight * this.zoomFactor,\r\n offsetTop = this.offset.y,\r\n offsetBottom = height - offsetTop - this.container.offsetHeight,\r\n heightOffsetRatio = offsetTop / offsetBottom,\r\n centerY = heightOffsetRatio * this.container.offsetHeight / (heightOffsetRatio + 1);\r\n\r\n // prevents division by zero\r\n if (offsetRight === 0) { centerX = this.container.offsetWidth; }\r\n if (offsetBottom === 0) { centerY = this.container.offsetHeight; }\r\n\r\n return {\r\n x: centerX,\r\n y: centerY\r\n };\r\n },\r\n\r\n canDrag: function () {\r\n return !isCloseTo(this.zoomFactor, 1);\r\n },\r\n\r\n /**\r\n * Returns the touches of an event relative to the container offset\r\n * @param event\r\n * @return array touches\r\n */\r\n getTouches: function (event) {\r\n var rect = this.container.getBoundingClientRect();\r\n var posTop = rect.top + document.body.scrollTop;\r\n var posLeft = rect.left + document.body.scrollLeft;\r\n\r\n return Array.prototype.slice.call(event.touches).map(function (touch) {\r\n return {\r\n x: touch.pageX - posLeft,\r\n y: touch.pageY - posTop,\r\n };\r\n });\r\n },\r\n //\r\n // /**\r\n // * Returns the touches of an event relative to the container offset\r\n // * @param event\r\n // * @return array touches\r\n // */\r\n // getMousePosition: function (event, container) {\r\n // var rect = container.getBoundingClientRect();\r\n // var posTop = rect.top + document.body.scrollTop;\r\n // var posLeft = rect.left + document.body.scrollLeft;\r\n //\r\n // return {\r\n // x: event.pageX - posLeft,\r\n // y: event.pageY - posTop,\r\n // };\r\n // },\r\n\r\n /**\r\n * Animation loop\r\n * does not support simultaneous animations\r\n * @param duration\r\n * @param framefn\r\n * @param timefn\r\n * @param callback\r\n */\r\n animate: function (duration, framefn, timefn, callback) {\r\n\r\n let start = performance.now();\r\n this.inAnimation = true;\r\n const _self = this;\r\n\r\n requestAnimationFrame(function animateNew(time) {\r\n // timeFraction изменяется от 0 до 1\r\n if (!_self.inAnimation) { return; }\r\n let timeFraction = (time - start) / duration;\r\n if (timeFraction > 1) timeFraction = 1;\r\n\r\n // вычисление текущего состояния анимации\r\n let progress = timeFraction;\r\n\r\n framefn(progress); // отрисовать её\r\n _self.update();\r\n\r\n if (timeFraction < 1) {\r\n requestAnimationFrame(animateNew);\r\n } else {\r\n framefn(1);\r\n if (callback) {\r\n callback();\r\n }\r\n _self.update();\r\n _self.stopAnimation();\r\n _self.update();\r\n }\r\n });\r\n\r\n // var startTime = new Date().getTime(),\r\n // renderFrame = (function () {\r\n // if (!this.inAnimation) { return; }\r\n // var frameTime = new Date().getTime() - startTime,\r\n // progress = frameTime / duration;\r\n // if (frameTime >= duration) {\r\n // framefn(1);\r\n // if (callback) {\r\n // callback();\r\n // }\r\n // this.update();\r\n // this.stopAnimation();\r\n // this.update();\r\n // } else {\r\n // if (timefn) {\r\n // progress = timefn(progress);\r\n // }\r\n // framefn(progress);\r\n // this.update();\r\n // requestAnimationFrame(renderFrame);\r\n // }\r\n // }).bind(this);\r\n // this.inAnimation = true;\r\n // requestAnimationFrame(renderFrame);\r\n },\r\n\r\n /**\r\n * Stops the animation\r\n */\r\n stopAnimation: function () {\r\n this.inAnimation = false;\r\n },\r\n\r\n /**\r\n * Swing timing function for animations\r\n * @param p\r\n * @return {Number}\r\n */\r\n swing: function (p) {\r\n return -Math.cos(p * Math.PI) / 2 + 0.5;\r\n },\r\n\r\n getContainerX: function () {\r\n return this.container.offsetWidth;\r\n },\r\n\r\n getContainerY: function () {\r\n return this.container.offsetHeight;\r\n },\r\n\r\n setContainerY: function (y) {\r\n return this.container.style.height = y + 'px';\r\n },\r\n\r\n /**\r\n * Creates the expected html structure\r\n */\r\n setupMarkup: function () {\r\n this.container = buildElement('
    ');\r\n this.coImage = document.getElementsByClassName(\"canvas-co-image\")[0];\r\n this.el.parentNode.insertBefore(this.container, this.el);\r\n this.container.appendChild(this.el);\r\n\r\n this.container.style.overflow = 'hidden';\r\n this.container.style.position = 'relative';\r\n\r\n this.el.style.webkitTransformOrigin = '0% 0%';\r\n this.el.style.mozTransformOrigin = '0% 0%';\r\n this.el.style.msTransformOrigin = '0% 0%';\r\n this.el.style.oTransformOrigin = '0% 0%';\r\n this.el.style.transformOrigin = '0% 0%';\r\n\r\n // this.el.style.position = 'absolute';\r\n },\r\n\r\n end: function () {\r\n this.hasInteraction = false;\r\n this.sanitize();\r\n // document.querySelector('.canvas-text').innerHTML = 'update end';\r\n this.update();\r\n },\r\n\r\n /**\r\n * Binds all required event listeners\r\n */\r\n bindEvents: function () {\r\n var self = this;\r\n detectGestures(this.container, this, this.elText);\r\n\r\n window.addEventListener('resize', this.updateCheck.bind(this));\r\n Array.from(this.el.querySelectorAll('img')).forEach(function(imgEl) {\r\n imgEl.addEventListener('load', self.update.bind(self));\r\n });\r\n\r\n if (this.el.nodeName === 'IMG') {\r\n this.el.addEventListener('load', this.update.bind(this));\r\n }\r\n },\r\n\r\n updateCheck: function () {\r\n if (!(window.canvasIsDragging || window.mobileMenuOpened)) {\r\n // document.querySelector('.canvas-text').innerHTML = 'update resize';\r\n this.update();\r\n }\r\n },\r\n\r\n getCanvasTransform: function (targetOffset = this.offset, targetZoomFactor = this.zoomFactor, useNewScale = false) {\r\n // if (useNewScale) {\r\n // debugger;//eslint-disable-line\r\n // }\r\n var zoomFactor = this.getInitialZoomFactor() * targetZoomFactor,\r\n offsetX = -targetOffset.x / zoomFactor,\r\n offsetY = -targetOffset.y / zoomFactor;\r\n if (useNewScale) {\r\n offsetX = offsetX * 1.8 // magic number to zoom in correct position\r\n }\r\n var transform3d = useNewScale\r\n ? 'translate3d(' + (offsetX > 0 ? 0 : offsetX) + 'px,' + offsetY + 'px,0px)' + ' scale3d(' + zoomFactor + ', ' + zoomFactor + ',1)'\r\n : 'scale3d(' + zoomFactor + ', ' + zoomFactor + ',1)' + 'translate3d(' + (offsetX > 0 ? 0 : offsetX) + 'px,' + offsetY + 'px,0px)',\r\n transform2d = useNewScale\r\n ? 'translate(' + (offsetX > 0 ? 0 : offsetX) + 'px,' + offsetY + 'px)' + ' scale(' + zoomFactor + ', ' + zoomFactor + ')'\r\n : 'scale(' + zoomFactor + ', ' + zoomFactor + ') ' + 'translate(' + (offsetX > 0 ? 0 : offsetX) + 'px,' + offsetY + 'px)';\r\n\r\n return {zoomFactor, offsetX, offsetY, transform2d, transform3d}\r\n },\r\n\r\n setCanvasTransform: function (transform2d, transform3d = \"\") {\r\n this.el.style.webkitTransform = transform3d || transform2d;\r\n this.el.style.mozTransform = transform2d;\r\n this.el.style.msTransform = transform2d;\r\n this.el.style.oTransform = transform2d;\r\n this.el.style.transform = transform3d || transform2d;\r\n },\r\n\r\n /**\r\n * Updates the css values according to the current zoom factor and offset\r\n */\r\n update: function (targetOffset = this.offset) {\r\n if (this.updatePlaned || window.canvasIsDragging) {\r\n return;\r\n }\r\n this.updatePlaned = true;\r\n\r\n // document.querySelector('.canvas-text').innerHTML = 'ahahah update';\r\n // document.querySelector('.canvas-text').innerHTML = this.enabled;\r\n\r\n window.setTimeout((function () {\r\n this.updatePlaned = false;\r\n this.updateAspectRatio();\r\n\r\n // this.elText.innerHTML = this.offset.x + \" / \" + this.offset.y;\r\n const isMobile = this.el.dataset.mobile === \"true\";\r\n\r\n var {offsetX, transform2d, transform3d}\r\n = this.getCanvasTransform(targetOffset, this.zoomFactor, true); // new for desktop\r\n\r\n var removeClone = (function () {\r\n if (this.clone) {\r\n this.clone.parentNode.removeChild(this.clone);\r\n delete this.clone;\r\n }\r\n }).bind(this);\r\n\r\n const offsetXForContainer = offsetX / 1.8; // because we increased it in getCanvasTransform func\r\n if (offsetXForContainer > 0 && !interaction && !IS_PRODUCT_JOURNEY) {\r\n const shiftXFromLeft = isMobile ? 2 : 2.5;\r\n const translateX = offsetXForContainer > 10 ? offsetXForContainer * shiftXFromLeft : offsetXForContainer;\r\n this.setContainerTransform('translateX('+(translateX)+'px)');\r\n }\r\n\r\n // Scale 3d and translate3d are faster (at least on ios)\r\n // but they also reduce the quality.\r\n // PinchZoom uses the 3d transformations during interactions\r\n // after interactions it falls back to 2d transformations\r\n if (!this.options.use2d || this.hasInteraction || this.inAnimation) {\r\n this.is3d = true;\r\n removeClone();\r\n this.setCanvasTransform(transform2d, transform3d);\r\n } else {\r\n // When changing from 3d to 2d transform webkit has some glitches.\r\n // To avoid this, a copy of the 3d transformed element is displayed in the\r\n // foreground while the element is converted from 3d to 2d transform\r\n if (this.is3d) {\r\n this.clone = this.el.cloneNode(true);\r\n this.clone.style.pointerEvents = 'none';\r\n this.container.appendChild(this.clone);\r\n window.setTimeout(removeClone, 200);\r\n }\r\n\r\n this.setCanvasTransform(transform2d);\r\n\r\n this.is3d = false;\r\n }\r\n }).bind(this), 0);\r\n },\r\n\r\n /**\r\n * Enables event handling for gestures\r\n */\r\n enable: function() {\r\n this.enabled = true;\r\n },\r\n\r\n /**\r\n * Disables event handling for gestures\r\n */\r\n disable: function() {\r\n this.enabled = false;\r\n },\r\n\r\n /**\r\n * Returns scale\r\n */\r\n getScale: function() {\r\n return this.zoomFactor\r\n },\r\n\r\n reset: function() {\r\n // var currentTranslate = getTranslate(this.el);\r\n // this.elText.innerHTML = JSON.stringify(currentTranslate);\r\n this.zoomFactor = 1;\r\n this.offset = {\r\n x: 0,\r\n y: 0\r\n };\r\n // this.end();\r\n // this.elText.innerHTML = 'reset!';\r\n\r\n },\r\n\r\n imageCanvasScroll: function (canvasClass, removeAllClasses, layoutType) {\r\n\r\n // document.querySelector('.canvas-text').innerHTML = 'imageCanvasScroll ' + canvasClass;\r\n clearTimeout(this.timerId);\r\n if (removeAllClasses) {\r\n window.imageCanvasScroll = true;\r\n this.el.style.transition = 'all 0.5s ease';\r\n this.el.style.WebkitTransition = 'all 0.5s ease';\r\n this.el.style.MozTransition = 'all 0.5s ease';\r\n this.timerId = setTimeout(() => {\r\n if (this.el.style.transition === 'all 0.5s ease') {\r\n this.el.style.transition = 'none';\r\n this.el.style.WebkitTransition = 'none';\r\n this.el.style.MozTransition = 'none';\r\n }\r\n window.imageCanvasScroll = false;\r\n }, 500);\r\n } else {\r\n window.imageCanvasScroll2 = true;\r\n this.el.style.transition = 'all 1.3s cubic-bezier(0.4, 0.01, 0.51, 1)';\r\n this.el.style.WebkitTransition = 'all 1.3s cubic-bezier(0.4, 0.01, 0.51, 1)';\r\n this.el.style.MozTransition = 'all 1.3s cubic-bezier(0.4, 0.01, 0.51, 1)';\r\n this.timerId = setTimeout(() => {\r\n if (this.el.style.transition === 'all 1.3s cubic-bezier(0.4, 0.01, 0.51, 1)') {\r\n this.el.style.transition = 'none';\r\n this.el.style.WebkitTransition = 'none';\r\n this.el.style.MozTransition = 'none';\r\n }\r\n window.imageCanvasScroll2 = false;\r\n }, 1300);\r\n }\r\n\r\n const\r\n zoomFactor = 1,\r\n offsetX = pinchScroll(canvasClass, this.getContainerX(), layoutType),\r\n offsetY = '0';\r\n\r\n const transform2d = 'scale(' + zoomFactor + ', ' + zoomFactor + ') ' +\r\n 'translate(' + offsetX + ',' + offsetY + 'px)';\r\n this.setCanvasTransform(transform2d);\r\n },\r\n\r\n onMouseDown: function (event) {\r\n // console.log(\"mousedown\", );\r\n if (this.zoomFactor > 1) {\r\n this.firstMove = true; // was true\r\n this.mouseDown = [event.pageX, event.pageY];\r\n // this.elText.innerHTML = 'mousedown' + this.mousePos[0] + \"\";\r\n window.touchMove = false;\r\n }\r\n },\r\n onMouseMove: function (event) {\r\n if (this.mouseDown) {\r\n if (this.firstMove) {\r\n this.handleDragStart(event, false);\r\n triggerEvent(window, ActionTypes.REMOVE_GREEN_ZONE_ON_CANVAS);\r\n window.touchMove = true;\r\n this.el.classList.add(\"drag\");\r\n event.stopPropagation();\r\n event.preventDefault();\r\n } else {\r\n this.handleMove(event);\r\n this.update();\r\n }\r\n this.firstMove = false;\r\n }\r\n },\r\n onMouseUp: function (event, lookCanvasClick) {\r\n // console.log(\"mouseup\", );\r\n\r\n if (this.mouseDown) {\r\n const diffX = Math.abs(event.pageX - this.mouseDown[0]);\r\n const diffY = Math.abs(event.pageY - this.mouseDown[1]);\r\n\r\n this.mouseDown = null;\r\n window.touchMove = false;\r\n this.el.classList.remove(\"drag\");\r\n if (this.hasInteraction) {\r\n this.hasInteraction = false\r\n }\r\n\r\n if (diffX < this.options.dragPixelsBeforeClick && diffY < this.options.dragPixelsBeforeClick) {\r\n lookCanvasClick(event); // Click! we moved less than 6 pixels\r\n } else {\r\n // console.log(\"this.handleDragEnd :(\");\r\n // window.clearTimeout(this.mouseDownTimeoutId);\r\n this.handleDragEnd();\r\n }\r\n } else if (lookCanvasClick) {\r\n lookCanvasClick(event)\r\n }\r\n },\r\n\r\n };\r\n\r\n var detectGestures = function (el, target) {\r\n let fingers = 0,\r\n // lastTouchStart = null,\r\n startTouches = null,\r\n\r\n setInteraction = function (newInteraction, event) {\r\n if (interaction !== newInteraction) {\r\n\r\n if (interaction && !newInteraction) {\r\n switch (interaction) {\r\n case \"zoom\":\r\n target.handleZoomEnd(event);\r\n break;\r\n case 'drag':\r\n target.handleDragEnd(event);\r\n break;\r\n }\r\n }\r\n\r\n switch (newInteraction) {\r\n case 'zoom':\r\n target.handleZoomStart(event);\r\n break;\r\n case 'drag':\r\n target.handleDragStart(event);\r\n break;\r\n }\r\n }\r\n interaction = newInteraction;\r\n },\r\n\r\n updateInteraction = function (event) {\r\n if (fingers === 2) {\r\n setInteraction('zoom');\r\n } else if (fingers === 1 && target.canDrag()) {\r\n setInteraction('drag', event);\r\n } else {\r\n setInteraction(null, event);\r\n }\r\n },\r\n\r\n targetTouches = function (touches) {\r\n return Array.from(touches).map(function (touch) {\r\n return {\r\n x: touch.pageX,\r\n y: touch.pageY\r\n };\r\n });\r\n },\r\n\r\n getDistance = function (a, b) {\r\n var x, y;\r\n x = a.x - b.x;\r\n y = a.y - b.y;\r\n return Math.sqrt(x * x + y * y);\r\n },\r\n\r\n calculateScale = function (startTouches, endTouches) {\r\n var startDistance = getDistance(startTouches[0], startTouches[1]),\r\n endDistance = getDistance(endTouches[0], endTouches[1]);\r\n return endDistance / startDistance;\r\n },\r\n\r\n cancelEvent = function (event) {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n },\r\n\r\n // detectDoubleTap = function (event) {\r\n // var time = (new Date()).getTime();\r\n //\r\n // if (fingers > 1) {\r\n // lastTouchStart = null;\r\n // }\r\n //\r\n // if (time - lastTouchStart < 300) {\r\n // cancelEvent(event);\r\n //\r\n // target.handleDoubleTap(event);\r\n // switch (interaction) {\r\n // case \"zoom\":\r\n // target.handleZoomEnd(event);\r\n // break;\r\n // case 'drag':\r\n // target.handleDragEnd(event);\r\n // break;\r\n // }\r\n // }\r\n //\r\n // if (fingers === 1) {\r\n // lastTouchStart = time;\r\n // }\r\n // },\r\n firstMove = true;\r\n\r\n el.addEventListener('touchstart', function (event) {\r\n try {\r\n // target.elText.innerHTML = 'touchstart';\r\n if(target.enabled) {\r\n firstMove = true;\r\n fingers = event.touches.length;\r\n // target.elText.innerHTML = 'touchstart 2 ' + fingers;\r\n\r\n // if (!window.mobileMenuOpened) {\r\n // detectDoubleTap(event);\r\n // }\r\n }\r\n window.touchMove = false;\r\n } catch (e) {\r\n // alert(e)\r\n }\r\n\r\n });\r\n\r\n el.addEventListener('touchmove', function (event) {\r\n try {\r\n if(target.enabled) {\r\n if (firstMove) {\r\n updateInteraction(event);\r\n if (interaction) {\r\n cancelEvent(event);\r\n }\r\n startTouches = targetTouches(event.touches);\r\n } else {\r\n switch (interaction) {\r\n case 'zoom':\r\n target.handleZoom(event, calculateScale(startTouches, targetTouches(event.touches)));\r\n break;\r\n case 'drag':\r\n target.handleDrag(event);\r\n break;\r\n }\r\n if (interaction) {\r\n cancelEvent(event);\r\n target.update();\r\n }\r\n }\r\n\r\n firstMove = false;\r\n }\r\n // target.elText.innerHTML = 'touchmove';\r\n window.touchMove = true;\r\n } catch (e) {\r\n // alert(e)\r\n target.reset();\r\n target.zoomOutAnimation()\r\n }\r\n });\r\n\r\n el.addEventListener('touchend', function (event) {\r\n try {\r\n // target.elText.innerHTML = 'touchend';\r\n window.touchMove = false;\r\n target.stopAnimation();\r\n if (+isCloseTo(target.zoomFactor, 1) && interaction) {\r\n // target.elText.innerHTML = 'touchend 2' + target.zoomFactor;\r\n target.handleDragEnd();\r\n target.reset();\r\n target.zoomOutAnimation()\r\n }\r\n if (target.enabled) {\r\n // target.elText.innerHTML = 'touchend 1' + target.zoomFactor;\r\n fingers = event.touches.length;\r\n updateInteraction(event);\r\n }\r\n } catch (e) {\r\n // alert(e)\r\n target.reset();\r\n target.zoomOutAnimation()\r\n }\r\n });\r\n\r\n };\r\n\r\n return PinchZoom;\r\n};\r\n\r\nvar PinchZoom = definePinchZoom();\r\n\r\nexport default PinchZoom;\r\n","import KitchenZIndex from \"../bvcomponents/kvComponent/core/zIndex\";\r\nimport store from \"../store\";\r\n\r\nexport default function (canvasClass, containerX, layoutType, layoutScene) {\r\n // console.log('canvasClass', canvasClass);\r\n // console.log('layoutType', layoutType);\r\n // console.log('layoutScene', layoutScene);\r\n switch(document.kvConfig.visualizerType) {\r\n case \"Bathroom\":\r\n case \"BV\":\r\n switch (canvasClass) {\r\n case 'shower':\r\n case 'shower-shower':\r\n case 'shower-shower-body':\r\n case 'shower-interior-wall':\r\n case 'shower-shower-walls':\r\n case 'shower-fixture':\r\n case 'shower-shower_head':\r\n case 'shower-shower-head':\r\n case 'shower-floor':\r\n case 'shower-pan':\r\n case 'shower-tub-combo':\r\n case 'shower-shower-door':\r\n case 'shower-shower-door-handle':\r\n case 'shower-handle':\r\n case 'shower-shower-pan':\r\n case 'shower-interior-wall-accent':\r\n case 'shower-shower-walls-accent':\r\n case 'shower-tub-combo-wall-configuration':\r\n case 'shower-tub-combo-shower-door':\r\n case 'shower-tub-combo-handle':\r\n case 'shower-tub-combo-tub-liner':\r\n case 'shower-tub-combo-jetted-tub':\r\n case 'shower-tub-combo-replacement-tub':\r\n case 'shower-tub-combo-walk-in-tub':\r\n case 'shower-tub-combo-fixture':\r\n case 'shower-tub-combo-shower-head':\r\n case 'shower-tub-combo-shower_head':\r\n case 'shower-tub-combo-interior-wall':\r\n case 'shower-tub-combo-interior-wall-accent':\r\n case 'shower-tub-combo-shower-walls':\r\n case 'shower-tub-combo-shower-walls-accent':\r\n case 'shower-tub-combo-pony-wall-cap':\r\n case 'shower-tub-combo-pony-wall-glass':\r\n case 'shower-threshold':\r\n case 'shower-accessories':\r\n case 'shower-accessories-soap-dish':\r\n case 'shower-accessories-large-corner-seat':\r\n case 'shower-accessories-corner-caddie':\r\n case 'shower-accessories-large-corner-caddie':\r\n case 'shower-accessories-small-corner-shelf':\r\n case 'shower-accessories-grab-bar':\r\n return containerX < 680 ? '-38%' : '-33%';\r\n case 'shower-pony-wall':\r\n case 'shower-pony-wall-cap':\r\n case 'shower-pony-wall-glass':\r\n case 'pony-wall':\r\n case 'wall-pony-wall':\r\n if (layoutType === \"Small\") { // small room layout\r\n return containerX < 680 ? '-60%' : '-50%';\r\n } else { // large room layout\r\n return containerX < 680 ? '-38%' : '-33%';\r\n }\r\n case 'window':\r\n case 'wall-c':\r\n case 'wall-wall-c':\r\n return containerX < 680 ? '-60%' : '-50%';\r\n case 'bathtub':\r\n case 'bathtub-bathtub':\r\n case 'bathtub-fixture':\r\n case 'bathtub-base':\r\n case 'bathtub-rim':\r\n case 'bathtub-spa':\r\n if (window.innerWidth < 991) {\r\n window.scrollTo({\r\n top: window.innerHeight,\r\n behavior: \"smooth\"\r\n });\r\n }\r\n return containerX < 680 ? '-60%' : '-50%';\r\n case 'toilet':\r\n case 'toilet-toilet':\r\n return containerX < 680 ? '-18%' : '-14.5%';\r\n case 'left-shower-wall':\r\n case 'wall-left-shower-wall':\r\n if (layoutType === \"Small\") { // small room layout\r\n return containerX < 680 ? '-50%' : '-45%';\r\n } else { // large room layout\r\n return containerX < 680 ? '-22%' : '-18%';\r\n }\r\n case 'right-shower-wall':\r\n case 'wall-right-shower-wall':\r\n if (layoutType === \"Small\") { // small room layout\r\n return containerX < 680 ? '-22%' : '-18%';\r\n } else { // large room layout\r\n return containerX < 680 ? '-50%' : '-45%';\r\n }\r\n case 'floor':\r\n return containerX < 680 ? '-40%' : '-35%';\r\n default:\r\n return \"0\"\r\n }\r\n case \"bvScene\":\r\n case \"bvLook\": {\r\n switch (canvasClass) {\r\n case 'shower':\r\n case 'shower-head':\r\n case 'shower-shower':\r\n case 'shower-shower-body':\r\n case 'shower-interior-wall':\r\n case 'shower-shower-walls':\r\n case 'shower-fixture':\r\n case 'shower-shower_head':\r\n case 'shower-shower-head':\r\n case 'shower-floor':\r\n case 'shower-pan':\r\n case 'shower-tub-combo':\r\n case 'shower-shower-door':\r\n case 'shower-shower-door-handle':\r\n case 'shower-handle':\r\n case 'shower-shower-pan':\r\n case 'shower-interior-wall-accent':\r\n case 'shower-shower-walls-accent':\r\n case 'shower-tub-combo-wall-configuration':\r\n case 'shower-tub-combo-shower-door':\r\n case 'shower-tub-combo-handle':\r\n case 'shower-tub-combo-tub-liner':\r\n case 'shower-tub-combo-jetted-tub':\r\n case 'shower-tub-combo-replacement-tub':\r\n case 'shower-tub-combo-walk-in-tub':\r\n case 'shower-tub-combo-fixture':\r\n case 'shower-tub-combo-shower-head':\r\n case 'shower-tub-combo-shower_head':\r\n case 'shower-tub-combo-interior-wall':\r\n case 'shower-tub-combo-interior-wall-accent':\r\n case 'shower-tub-combo-shower-walls':\r\n case 'shower-tub-combo-shower-walls-accent':\r\n case 'shower-tub-combo-pony-wall-cap':\r\n case 'shower-tub-combo-pony-wall-glass':\r\n case 'shower-threshold':\r\n case 'shower-accessories':\r\n case 'shower-accessories-soap-dish':\r\n case 'shower-accessories-large-corner-seat':\r\n case 'shower-accessories-corner-caddie':\r\n case 'shower-accessories-large-corner-caddie':\r\n case 'shower-accessories-small-corner-shelf':\r\n case 'shower-accessories-grab-bar':\r\n case 'shower-pony-wall':\r\n case 'shower-pony-wall-cap':\r\n case 'shower-pony-wall-glass':\r\n case 'pony-wall':\r\n case 'wall-pony-wall':\r\n if (layoutType === \"Layout4\") { // small room layout\r\n return containerX < 680 ? '-40%' : '-23%';\r\n } else { // large room layout\r\n return \"0\";\r\n }\r\n case 'window':\r\n case 'wall-c':\r\n case 'wall-wall-c':\r\n case 'right-wall':\r\n return containerX < 680 ? '-60%' : '-50%';\r\n case 'bathtub':\r\n case 'bathtub-bathtub':\r\n case 'bathtub-fixture':\r\n case 'bathtub-base':\r\n case 'bathtub-rim':\r\n case 'bathtub-spa':\r\n if (window.innerWidth < 991) {\r\n window.scrollTo({\r\n top: window.innerHeight,\r\n behavior: \"smooth\"\r\n });\r\n }\r\n return containerX < 680 ? '-60%' : '-50%';\r\n case 'toilet':\r\n case 'toilet-toilet': {\r\n switch (layoutType) {\r\n case \"Layout1\":\r\n return containerX < 680 ? '-18%' : '-14.5%';\r\n default:\r\n break;\r\n }\r\n break;\r\n }\r\n case 'left-shower-wall':\r\n case 'wall-left-shower-wall':\r\n if (layoutType === \"Small\") { // small room layout\r\n return containerX < 680 ? '-50%' : '-45%';\r\n } else { // large room layout\r\n return containerX < 680 ? '-22%' : '-18%';\r\n }\r\n case 'right-shower-wall':\r\n case 'wall-right-shower-wall':\r\n if (layoutType === \"Small\") { // small room layout\r\n return containerX < 680 ? '-22%' : '-18%';\r\n } else { // large room layout\r\n return containerX < 680 ? '-50%' : '-45%';\r\n }\r\n case 'floor':\r\n return containerX < 680 ? '-22%' : '-18%';\r\n default:\r\n return \"0\"\r\n }\r\n return \"0\"\r\n }\r\n case \"Kitchen\":\r\n case \"KV\":\r\n switch (canvasClass) {\r\n //APPLIANCE\r\n case 'hood':\r\n case 'microwave':\r\n case 'range':\r\n case 'appliance-hood':\r\n case 'appliance-range':\r\n case 'appliance-microwave':\r\n return containerX < 680 ? '-39%' : '-37%';\r\n case 'dishwasher':\r\n case 'appliance-dishwasher':\r\n return containerX < 680 ? '-23%' : '-20%';\r\n case 'fridge':\r\n case 'appliance-fridge':\r\n switch (layoutType) {\r\n case \"Small\":\r\n case \"SmallWithPeninsula\":\r\n case \"SmallWithIsland\":\r\n case \"SmallWithPeninsulaWithIsland\":\r\n return containerX < 680 ? '-15%' : '-13%';\r\n default:\r\n return \"0\";\r\n }\r\n //CABINET\r\n case \"cabinet\":\r\n case \"top-cabinet\":\r\n case \"cabinet-top-cabinet\":\r\n case \"handle\":\r\n case \"cabinet-top-handle\":\r\n case \"cabinet-bottom-handle\":\r\n case \"crown-molding\":\r\n case \"cabinet-crown-molding\":\r\n case 'bottom-cabinet':\r\n case 'cabinet-bottom-cabinet': {\r\n if (document.hoveredLayer\r\n && (document.hoveredLayer.zIndex === KitchenZIndex.layouts[layoutType].Cabinet.Peninsula)\r\n && window.innerWidth < 991) {\r\n window.scrollTo({\r\n top: window.innerHeight,\r\n behavior: \"smooth\"\r\n });\r\n }\r\n const module = store.getState().navigationState.moduleContextMenuModule;\r\n // console.log('module', module);\r\n switch (module) {\r\n case \"1\":\r\n case \"2\":\r\n case \"3\":\r\n return \"0\";\r\n case \"4\":\r\n return containerX < 680 ? '-19%' : '-17%';\r\n case \"5\":\r\n return containerX < 680 ? '-27%' : '-25%';\r\n case \"6\":\r\n return containerX < 680 ? '-43%' : '-40%';\r\n case null:\r\n default:\r\n return containerX < 680 ? '-60%' : '-50%';\r\n }\r\n }\r\n //CENTER ISLAND\r\n case 'center-island':\r\n case 'center-island-countertop':\r\n case 'center-island-edge':\r\n case 'center-island-cabinet':\r\n case 'center-island-sink':\r\n case 'center-island-faucet':\r\n return containerX < 680 ? '-22%' : '-18%';\r\n case 'chairs':\r\n case 'center-island-chairs':\r\n return containerX < 680 ? '-5%' : '-4%';\r\n case 'center-island-handle':\r\n return containerX < 680 ? '-27%' : '-25%';\r\n //COUNTERTOP\r\n case 'countertop-countertop':\r\n case 'countertop-edge-profile':\r\n case 'countertop-sink':\r\n case 'countertop-faucet':\r\n return containerX < 680 ? '-60%' : '-50%';\r\n case 'countertop':\r\n if (document.hoveredLayer) {\r\n switch (document.hoveredLayer.zIndex) {\r\n case KitchenZIndex.layouts[layoutType].CenterIsland.Countertop:\r\n return containerX < 680 ? '-22%' : '-18%';\r\n case KitchenZIndex.layouts[layoutType].CountertopGroup.Countertop2:\r\n return containerX < 680 ? '-60%' : '-50%';\r\n case KitchenZIndex.layouts[layoutType].CountertopGroup.Countertop:\r\n return containerX < 680 ? '-15%' : '-13%';\r\n default:\r\n return \"0\"\r\n }\r\n }\r\n return \"0\";\r\n case 'faucet':\r\n if (document.hoveredLayer && document.hoveredLayer.zIndex === KitchenZIndex.layouts[layoutType].CenterIsland.Faucet) {\r\n return containerX < 680 ? '-22%' : '-18%';\r\n } else {\r\n return containerX < 680 ? '-60%' : '-50%';\r\n }\r\n case 'sink':\r\n if (document.hoveredLayer && document.hoveredLayer.zIndex === KitchenZIndex.layouts[layoutType].CenterIsland.Sink) {\r\n return containerX < 680 ? '-22%' : '-18%';\r\n } else {\r\n return containerX < 680 ? '-60%' : '-50%';\r\n }\r\n //WALLS\r\n case \"backsplash\":\r\n case \"walls-backsplash\":\r\n case \"ceiling\":\r\n case \"walls-ceiling\":\r\n return containerX < 680 ? '-15%' : '-13%';\r\n case \"right-wall\":\r\n case \"walls-right-wall\":\r\n return containerX < 680 ? '-37%' : '-35%';\r\n default:\r\n return \"0\"\r\n }\r\n case \"kvScene\":\r\n switch(layoutType) {\r\n case \"Layout1\": {\r\n switch (layoutScene) {\r\n case \"1\": {\r\n switch (canvasClass) {\r\n //CENTER ISLAND\r\n case 'center-island':\r\n case 'center-island-countertop':\r\n case 'center-island-island-countertop':\r\n case 'center-island-stovetop':\r\n case 'center-island-edge':\r\n case 'center-island-cabinet':\r\n case 'center-island-sink':\r\n case 'center-island-faucet':\r\n case 'centerisland':\r\n case 'centerisland-countertop':\r\n case 'centerisland-island-countertop':\r\n case 'centerisland-stovetop':\r\n case 'centerisland-edge':\r\n case 'centerisland-cabinet':\r\n case 'centerisland-sink':\r\n case 'centerisland-faucet':\r\n return containerX < 680 ? '-30%' : '-23%';\r\n case 'chairs':\r\n case 'centerisland-chairs':\r\n case 'centerisland-handle':\r\n case 'centerisland-island-hood':\r\n return containerX < 680 ? '-35%' : '-30%';\r\n case 'faucet':\r\n case 'countertop-faucet':\r\n case 'sink':\r\n case 'countertop-sink':\r\n return containerX < 680 ? '-15%' : '-10%';\r\n case 'walls-right-wall':\r\n return containerX < 680 ? '-40%' : '-32%';\r\n case 'walls-center-wall':\r\n return containerX < 680 ? '-48%' : '-44%';\r\n case 'walls-front-wall':\r\n return '-50%';\r\n default:\r\n return \"0\"\r\n }\r\n }\r\n case \"2\": {\r\n switch (canvasClass) {\r\n //CENTER ISLAND\r\n case 'center-island':\r\n case 'center-island-countertop':\r\n case 'center-island-island-countertop':\r\n case 'center-island-stovetop':\r\n case 'center-island-edge':\r\n case 'center-island-cabinet':\r\n case 'center-island-sink':\r\n case 'center-island-faucet':\r\n case 'centerisland':\r\n case 'centerisland-countertop':\r\n case 'centerisland-island-countertop':\r\n case 'centerisland-stovetop':\r\n case 'centerisland-edge':\r\n case 'centerisland-cabinet':\r\n case 'centerisland-sink':\r\n case 'centerisland-faucet':\r\n return containerX < 680 ? '-30%' : '-23%';\r\n case 'chairs':\r\n case 'centerisland-chairs':\r\n case 'centerisland-handle':\r\n case 'centerisland-island-hood':\r\n return containerX < 680 ? '-35%' : '-30%';\r\n case 'faucet':\r\n case 'countertop-faucet':\r\n case 'sink':\r\n case 'countertop-sink':\r\n return containerX < 680 ? '-15%' : '-10%';\r\n case 'walls-center-wall':\r\n return containerX < 680 ? '-48%' : '-44%';\r\n case 'walls-front-wall':\r\n case 'walls-right-wall':\r\n return '-50%';\r\n default:\r\n return \"0\"\r\n }\r\n }\r\n case \"3\": {\r\n switch (canvasClass) {\r\n //CENTER ISLAND\r\n case 'center-island':\r\n case 'center-island-countertop':\r\n case 'center-island-island-countertop':\r\n case 'center-island-stovetop':\r\n case 'center-island-edge':\r\n case 'center-island-cabinet':\r\n case 'center-island-sink':\r\n case 'center-island-faucet':\r\n case 'centerisland':\r\n case 'centerisland-countertop':\r\n case 'centerisland-island-countertop':\r\n case 'centerisland-stovetop':\r\n case 'centerisland-edge':\r\n case 'centerisland-cabinet':\r\n case 'centerisland-sink':\r\n case 'centerisland-faucet':\r\n case 'appliances-hood':\r\n case 'appliances-stove':\r\n case 'appliances-stovetop':\r\n case 'walls-backsplash':\r\n return containerX < 680 ? '-30%' : '-23%';\r\n case 'appliances-dishwasher':\r\n return containerX < 680 ? '-35%' : '-30%';\r\n case 'faucet':\r\n case 'countertop-faucet':\r\n case 'sink':\r\n case 'countertop-sink':\r\n case 'walls-right-wall':\r\n case 'countertop-edge-profile':\r\n case 'countertop-countertop':\r\n return '-50%';\r\n default:\r\n return \"0\"\r\n }\r\n }\r\n default:\r\n return \"0\"\r\n }\r\n }\r\n case \"Layout2\": {\r\n switch (canvasClass) {\r\n //CENTER ISLAND\r\n case 'faucet':\r\n case 'countertop-faucet':\r\n case 'sink':\r\n case 'countertop-sink':\r\n case 'countertop-edge-profile':\r\n case 'walls-front-wall':\r\n case 'countertop-countertop':\r\n case 'walls-backsplash':\r\n return containerX < 680 ? '-25%' : '-20%';\r\n case 'appliances-hood':\r\n case 'appliances-stove':\r\n case 'appliances-oven':\r\n return containerX < 680 ? '-45%' : '-37%';\r\n case 'walls-center-wall':\r\n return containerX < 680 ? '-48%' : '-44%';\r\n case 'walls-right-wall':\r\n case 'appliances-fridge':\r\n case 'appliances-fridge-enclosure':\r\n return '-50%';\r\n default:\r\n return \"0\"\r\n }\r\n }\r\n case \"Layout3\": {\r\n switch (canvasClass) {\r\n //CENTER ISLAND\r\n case 'faucet':\r\n case 'countertop-faucet':\r\n case 'sink':\r\n case 'countertop-sink':\r\n case 'countertop-edge-profile':\r\n case 'walls-front-wall':\r\n case 'countertop-countertop':\r\n case 'walls-backsplash':\r\n return containerX < 680 ? '-25%' : '-20%';\r\n case 'appliances-hood':\r\n case 'appliances-stove':\r\n case 'appliances-oven':\r\n return containerX < 680 ? '-18%' : '-15%';\r\n case 'center-island':\r\n case 'center-island-countertop':\r\n case 'center-island-island-countertop':\r\n case 'center-island-stovetop':\r\n case 'center-island-edge':\r\n case 'center-island-cabinet':\r\n case 'center-island-sink':\r\n case 'center-island-faucet':\r\n case 'centerisland':\r\n case 'centerisland-countertop':\r\n case 'centerisland-island-countertop':\r\n case 'centerisland-stovetop':\r\n case 'centerisland-edge':\r\n case 'centerisland-cabinet':\r\n case 'centerisland-sink':\r\n case 'centerisland-faucet':\r\n return '-50%';\r\n default:\r\n return \"0\"\r\n }\r\n }\r\n default:\r\n return \"0\"\r\n }\r\n default:\r\n return \"0\"\r\n }\r\n}\r\n","import orderBy from \"lodash/orderBy\";\r\n\r\nimport {getCurrentRoomType} from \"../appLayout\";\r\nimport {LOOK_ROOM_TYPES} from \"../look/core/constants\";\r\n\r\nexport const getLayerPartToRender = (layerHovering, hoveredLayerIndex, layers) => {\r\n return {\r\n zIndex: layers[hoveredLayerIndex].zIndex,\r\n cropCoords: layers[hoveredLayerIndex].cropCoords,\r\n coords: layers[hoveredLayerIndex].coords,\r\n image: layerHovering.greenImage,\r\n layerDimensions: layerHovering.layerDimensions,\r\n partId: layerHovering.layer.partId || \"\",\r\n isGreenHovering: true,\r\n hoveringImage: layerHovering.hoveringImage,\r\n }\r\n}\r\n\r\nexport const checkForLayerParts = (imageCanvasComponent, layers, hoveredLayerIndex, layerHovering, allLayers) => {\r\n // 1) add new Green Layer\r\n layers.splice(hoveredLayerIndex + 1, 0, getLayerPartToRender(layerHovering, hoveredLayerIndex, layers));\r\n\r\n // 2) Check if it needs additional Part\r\n // console.log(\"layerHovering\", layerHovering);\r\n // console.log(\"layersHoverings\", layersHoverings);\r\n switch (document.kvConfig.visualizerType) {\r\n case \"Bathroom\":\r\n case \"BV\": {\r\n const ShowerBodyIndexes = imageCanvasComponent.props.layout.zIndexes[imageCanvasComponent.props.layoutType].Shower.Steam60in.Body;\r\n const ShowerIndexes = imageCanvasComponent.props.layout.zIndexes[imageCanvasComponent.props.layoutType].Shower.Custom60in;\r\n if (layerHovering.layer.zIndex === ShowerBodyIndexes[\"1\"] || layerHovering.layer.zIndex === ShowerBodyIndexes[\"2\"]) {\r\n\r\n const missingBodyPart = layerHovering.layer.zIndex === ShowerBodyIndexes[\"1\"] ? \"2\" : \"1\";\r\n\r\n const layerHovering2 = imageCanvasComponent.state.layersHoverings.find((layersHoveringItem) => {\r\n return layersHoveringItem.layer.zIndex === ShowerBodyIndexes[missingBodyPart]\r\n });\r\n const hoveredLayerIndex = layers.findIndex((layer) => {\r\n return layer.zIndex === layerHovering2.layer.zIndex\r\n });\r\n\r\n layers.splice(hoveredLayerIndex + 1, 0, {\r\n zIndex: ShowerBodyIndexes[missingBodyPart],\r\n image: layerHovering2.greenImage,\r\n layerDimensions: layerHovering2.layerDimensions,\r\n isGreenHovering: true,\r\n hoveringImage: layerHovering2.hoveringImage,\r\n });\r\n }\r\n if (layerHovering.layer.zIndex === ShowerIndexes.Wall || layerHovering.layer.zIndex === ShowerIndexes.Wall2\r\n || layerHovering.layer.zIndex === ShowerIndexes.WallAccent || layerHovering.layer.zIndex === ShowerIndexes.WallAccent2) {\r\n let missingZIndex = 0;\r\n if (layerHovering.layer.zIndex === ShowerIndexes.Wall || layerHovering.layer.zIndex === ShowerIndexes.Wall2) {\r\n missingZIndex = layerHovering.layer.zIndex === ShowerIndexes.Wall ? ShowerIndexes.Wall2 : ShowerIndexes.Wall;\r\n }\r\n if (layerHovering.layer.zIndex === ShowerIndexes.WallAccent || layerHovering.layer.zIndex === ShowerIndexes.WallAccent2) {\r\n missingZIndex = layerHovering.layer.zIndex === ShowerIndexes.WallAccent ? ShowerIndexes.WallAccent2 : ShowerIndexes.WallAccent;\r\n }\r\n const layerHovering2 = imageCanvasComponent.state.layersHoverings.find((layersHoveringItem) => {\r\n return layersHoveringItem.layer.zIndex === missingZIndex\r\n });\r\n if (layerHovering2) {\r\n const hoveredLayerIndex = layers.findIndex((layer) => {\r\n return layer.zIndex === layerHovering2.layer.zIndex\r\n });\r\n layers.splice(hoveredLayerIndex + 1, 0, {\r\n zIndex: missingZIndex,\r\n image: layerHovering2.greenImage,\r\n layerDimensions: layerHovering2.layerDimensions,\r\n isGreenHovering: true,\r\n hoveringImage: layerHovering2.hoveringImage,\r\n });\r\n }\r\n }\r\n break;\r\n }\r\n case \"bvScene\": {\r\n // const CabinetIndexes = imageCanvasComponent.props.layout.zIndexes[imageCanvasComponent.props.layoutType].Cabinet;\r\n let missingZindex = 0;\r\n let missingZindex2 = 0;\r\n // switch(layerHovering.layer.zIndex) {\r\n // case CabinetIndexes[\"CrownMolding\"]:\r\n // missingZindex = CabinetIndexes[\"CrownMolding2\"];\r\n // break;\r\n // }\r\n if (missingZindex) {\r\n const layerHovering2 = imageCanvasComponent.state.layersHoverings.find((layersHoveringItem) => {\r\n return layersHoveringItem.layer.zIndex === missingZindex\r\n });\r\n const hoveredLayerIndex2 = layers.findIndex((layer) => {\r\n return layer.zIndex === missingZindex\r\n });\r\n if (layerHovering2 && hoveredLayerIndex2) {\r\n layers.splice(hoveredLayerIndex2 + 1, 0, {\r\n zIndex: missingZindex,\r\n image: layerHovering2.greenImage,\r\n layerDimensions: layerHovering2.layerDimensions,\r\n isGreenHovering: true,\r\n hoveringImage: layerHovering2.hoveringImage,\r\n });\r\n }\r\n }\r\n if (missingZindex2) {\r\n const layerHovering3 = imageCanvasComponent.state.layersHoverings.find((layersHoveringItem) => {\r\n return layersHoveringItem.layer.zIndex === missingZindex2\r\n });\r\n const hoveredLayerIndex3 = layers.findIndex((layer) => {\r\n return layer.zIndex === missingZindex2\r\n });\r\n if (layerHovering3 && hoveredLayerIndex3) {\r\n layers.splice(hoveredLayerIndex3 + 1, 0, {\r\n zIndex: missingZindex2,\r\n image: layerHovering3.greenImage,\r\n layerDimensions: layerHovering3.layerDimensions,\r\n isGreenHovering: true,\r\n hoveringImage: layerHovering3.hoveringImage,\r\n });\r\n }\r\n }\r\n break;\r\n }\r\n case \"Kitchen\": {\r\n const CabinetIndexes = imageCanvasComponent.props.layout.zIndexes[imageCanvasComponent.props.layoutType].Cabinet;\r\n const CountertopGroupIndexes = imageCanvasComponent.props.layout.zIndexes[imageCanvasComponent.props.layoutType].CountertopGroup;\r\n let missingZindex = 0;\r\n let missingZindex2 = 0;\r\n switch(layerHovering.layer.zIndex) {\r\n case CabinetIndexes[\"TopCabinet\"]:\r\n missingZindex = CabinetIndexes[\"TopCabinet2\"];\r\n break;\r\n case CabinetIndexes[\"TopCabinet2\"]:\r\n missingZindex = CabinetIndexes[\"TopCabinet\"];\r\n break;\r\n case CabinetIndexes[\"BottomCabinet\"]:\r\n missingZindex = CabinetIndexes[\"BottomCabinet2\"];\r\n missingZindex2 = CabinetIndexes[\"Peninsula\"];\r\n break;\r\n case CabinetIndexes[\"BottomCabinet2\"]:\r\n missingZindex = CabinetIndexes[\"BottomCabinet\"];\r\n missingZindex2 = CabinetIndexes[\"Peninsula\"];\r\n break;\r\n case CabinetIndexes[\"Peninsula\"]:\r\n missingZindex = CabinetIndexes[\"BottomCabinet\"];\r\n missingZindex2 = CabinetIndexes[\"BottomCabinet2\"];\r\n break;\r\n case CabinetIndexes[\"CrownMolding\"]:\r\n missingZindex = CabinetIndexes[\"CrownMolding2\"];\r\n break;\r\n case CabinetIndexes[\"CrownMolding2\"]:\r\n missingZindex = CabinetIndexes[\"CrownMolding\"];\r\n break;\r\n case CountertopGroupIndexes[\"Countertop\"]:\r\n missingZindex = CountertopGroupIndexes[\"Countertop2\"];\r\n break;\r\n case CountertopGroupIndexes[\"Countertop2\"]:\r\n missingZindex = CountertopGroupIndexes[\"Countertop\"];\r\n break;\r\n case CabinetIndexes[\"TopHandle\"]:\r\n missingZindex = CabinetIndexes[\"TopHandle2\"];\r\n break;\r\n case CabinetIndexes[\"TopHandle2\"]:\r\n missingZindex = CabinetIndexes[\"TopHandle\"];\r\n break;\r\n case CabinetIndexes[\"BottomHandle\"]:\r\n missingZindex = CabinetIndexes[\"BottomHandle2\"];\r\n break;\r\n case CabinetIndexes[\"BottomHandle2\"]:\r\n missingZindex = CabinetIndexes[\"BottomHandle\"];\r\n break;\r\n }\r\n if (missingZindex) {\r\n const layerHovering2 = imageCanvasComponent.state.layersHoverings.find((layersHoveringItem) => {\r\n return layersHoveringItem.layer.zIndex === missingZindex\r\n });\r\n const hoveredLayerIndex2 = layers.findIndex((layer) => {\r\n return layer.zIndex === missingZindex\r\n });\r\n if (layerHovering2 && hoveredLayerIndex2) {\r\n layers.splice(hoveredLayerIndex2 + 1, 0, {\r\n zIndex: missingZindex,\r\n image: layerHovering2.greenImage,\r\n layerDimensions: layerHovering2.layerDimensions,\r\n isGreenHovering: true,\r\n hoveringImage: layerHovering2.hoveringImage,\r\n });\r\n }\r\n }\r\n if (missingZindex2) {\r\n const layerHovering3 = imageCanvasComponent.state.layersHoverings.find((layersHoveringItem) => {\r\n return layersHoveringItem.layer.zIndex === missingZindex2\r\n });\r\n const hoveredLayerIndex3 = layers.findIndex((layer) => {\r\n return layer.zIndex === missingZindex2\r\n });\r\n if (layerHovering3 && hoveredLayerIndex3) {\r\n layers.splice(hoveredLayerIndex3 + 1, 0, {\r\n zIndex: missingZindex2,\r\n image: layerHovering3.greenImage,\r\n layerDimensions: layerHovering3.layerDimensions,\r\n isGreenHovering: true,\r\n hoveringImage: layerHovering3.hoveringImage,\r\n });\r\n }\r\n }\r\n break;\r\n }\r\n case \"kvMaster\": {\r\n // 2) Check if it needs additional Part\r\n const CabinetIndexes = imageCanvasComponent.props.layout.zIndexes[imageCanvasComponent.props.layoutType].Cabinet;\r\n const CountertopGroupIndexes = imageCanvasComponent.props.layout.zIndexes[imageCanvasComponent.props.layoutType].CountertopGroup;\r\n let missingZindex = 0;\r\n let missingZindex2 = 0;\r\n switch(layerHovering.layer.zIndex) {\r\n case CabinetIndexes[\"TopCabinet\"]:\r\n missingZindex = CabinetIndexes[\"TopCabinet2\"];\r\n break;\r\n case CabinetIndexes[\"TopCabinet2\"]:\r\n missingZindex = CabinetIndexes[\"TopCabinet\"];\r\n break;\r\n case CabinetIndexes[\"BottomCabinet\"]:\r\n missingZindex = CabinetIndexes[\"BottomCabinet2\"];\r\n missingZindex2 = CabinetIndexes[\"Peninsula\"];\r\n break;\r\n case CabinetIndexes[\"BottomCabinet2\"]:\r\n missingZindex = CabinetIndexes[\"BottomCabinet\"];\r\n missingZindex2 = CabinetIndexes[\"Peninsula\"];\r\n break;\r\n case CabinetIndexes[\"Peninsula\"]:\r\n missingZindex = CabinetIndexes[\"BottomCabinet\"];\r\n missingZindex2 = CabinetIndexes[\"BottomCabinet2\"];\r\n break;\r\n case CabinetIndexes[\"CrownMolding\"]:\r\n missingZindex = CabinetIndexes[\"CrownMolding2\"];\r\n break;\r\n case CabinetIndexes[\"CrownMolding2\"]:\r\n missingZindex = CabinetIndexes[\"CrownMolding\"];\r\n break;\r\n case CountertopGroupIndexes[\"Countertop\"]:\r\n missingZindex = CountertopGroupIndexes[\"Countertop2\"];\r\n break;\r\n case CountertopGroupIndexes[\"Countertop2\"]:\r\n missingZindex = CountertopGroupIndexes[\"Countertop\"];\r\n break;\r\n case CabinetIndexes[\"TopHandle\"]:\r\n missingZindex = CabinetIndexes[\"TopHandle2\"];\r\n break;\r\n case CabinetIndexes[\"TopHandle2\"]:\r\n missingZindex = CabinetIndexes[\"TopHandle\"];\r\n break;\r\n case CabinetIndexes[\"BottomHandle\"]:\r\n missingZindex = CabinetIndexes[\"BottomHandle2\"];\r\n break;\r\n case CabinetIndexes[\"BottomHandle2\"]:\r\n missingZindex = CabinetIndexes[\"BottomHandle\"];\r\n break;\r\n }\r\n if (missingZindex) {\r\n const layerHovering2 = imageCanvasComponent.state.layersHoverings.find((layersHoveringItem) => {\r\n return layersHoveringItem.layer.zIndex === missingZindex\r\n });\r\n const hoveredLayerIndex2 = layers.findIndex((layer) => {\r\n return layer.zIndex === missingZindex\r\n });\r\n if (layerHovering2 && hoveredLayerIndex2) {\r\n layers.splice(hoveredLayerIndex2 + 1, 0, {\r\n zIndex: missingZindex,\r\n image: layerHovering2.greenImage,\r\n layerDimensions: layerHovering2.layerDimensions,\r\n isGreenHovering: true,\r\n hoveringImage: layerHovering2.hoveringImage,\r\n });\r\n }\r\n }\r\n if (missingZindex2) {\r\n const layerHovering3 = imageCanvasComponent.state.layersHoverings.find((layersHoveringItem) => {\r\n return layersHoveringItem.layer.zIndex === missingZindex2\r\n });\r\n const hoveredLayerIndex3 = layers.findIndex((layer) => {\r\n return layer.zIndex === missingZindex2\r\n });\r\n if (layerHovering3 && hoveredLayerIndex3) {\r\n layers.splice(hoveredLayerIndex3 + 1, 0, {\r\n zIndex: missingZindex2,\r\n image: layerHovering3.greenImage,\r\n layerDimensions: layerHovering3.layerDimensions,\r\n isGreenHovering: true,\r\n hoveringImage: layerHovering3.hoveringImage,\r\n });\r\n }\r\n }\r\n break;\r\n }\r\n case \"kvScene\":\r\n case \"bvLook\":\r\n case \"LaundryRoom\":\r\n case \"Laundryroom\":\r\n case \"laundryroom\":\r\n case \"laundryRoom\": {\r\n let needToCheck = false;\r\n if (document.kvConfig.visualizerType === \"kvScene\") {\r\n const withParts = [\"countertop\", \"top_cabinet\", \"bottom_cabinet\", \"handle\", \"crown_molding\",\r\n \"top_handle\", \"bottom_handle\", \"door_handle\", \"drawer_handle\"];\r\n needToCheck = withParts.includes(layerHovering.layer.partId);\r\n } else if (document.kvConfig.visualizerType === \"bvLook\") {\r\n needToCheck = getCurrentRoomType() === LOOK_ROOM_TYPES.as && layerHovering.layer.partId.includes(\"vanity_\");\r\n } else {\r\n const withParts = [\"slat_wall\", \"bottom_cabinet\", \"tall_cabinet\"];\r\n needToCheck = withParts.includes(layerHovering.layer.partId);\r\n }\r\n if (!needToCheck && !allLayers) {\r\n break;\r\n }\r\n imageCanvasComponent.state.layersHoverings.forEach(layerHov => {\r\n if (layerHov.layer.partId === layerHovering.layer.partId && (layerHov.layer.zIndex !== layerHovering.layer.zIndex)) {\r\n layers.push({\r\n zIndex: layerHov.layer.zIndex,\r\n cropCoords: layerHov.layer.cropCoords,\r\n image: layerHov.greenImage,\r\n layerDimensions: layerHov.layerDimensions,\r\n coords: layerHov.layer.coords || null,\r\n partId: layerHov.layer.partId || \"\",\r\n isGreenHovering: true,\r\n hoveringImage: layerHov.hoveringImage,\r\n });\r\n }\r\n });\r\n return orderBy(layers, ['zIndex'], ['desc']);\r\n }\r\n default:\r\n break;\r\n }\r\n\r\n return layers;\r\n};\r\n","import {Part} from \"./part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {BathTubType, bathTubTypeToString, LayoutType} from \"../constants\";\r\nimport {bathTubThumbnail} from \"../assets\";\r\n\r\nimport BathTubBody from \"../subparts/bathTub/bathTubBody\";\r\nimport BathTubBase from \"../subparts/bathTub/bathTubBase\";\r\nimport BathTubFixture from \"../subparts/bathTub/bathTubFixture\";\r\nimport BathTubRim from \"../subparts/bathTub/bathTubRim\";\r\nimport BathTubSpa from \"../subparts/bathTub/bathTubSpa\";\r\nimport BathTubTowelRack from \"../subparts/bathTub/bathTubTowelRack\";\r\n\r\nexport class Bathtub extends Part {\r\n static id = 'Bathtub';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Bathtub';\r\n this.translateId = \"visualizer.bathroom.bathtub\";\r\n this.partThumbnail = bathTubThumbnail;\r\n this.activeSubType_ = BathTubType.FreeStanding;\r\n this.bathTubBody = null;\r\n this.towelRack = null;\r\n this.bathtubRim = null;\r\n this.bathTubBase = null;\r\n this.bathTubFixture = null;\r\n this.bathTubSpa = null;\r\n this.relatedItems = [];\r\n this.bathTubType_ = BathTubType.FreeStanding;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Bathtub\":\r\n relatedItemName = \"bathTubBody\";\r\n RelatedItemClass = BathTubBody;\r\n break;\r\n case \"Fixture\":\r\n relatedItemName = \"bathTubFixture\";\r\n RelatedItemClass = BathTubFixture;\r\n break;\r\n case \"BathtubBase\":\r\n relatedItemName = \"bathTubBase\";\r\n RelatedItemClass = BathTubBase;\r\n break;\r\n case \"Bathtub - Spa\":\r\n relatedItemName = \"bathTubSpa\";\r\n RelatedItemClass = BathTubSpa;\r\n break;\r\n case \"BathtubRim\":\r\n relatedItemName = \"bathtubRim\";\r\n RelatedItemClass = BathTubRim;\r\n break;\r\n case \"Towel Rack\":\r\n relatedItemName = \"towelRack\";\r\n RelatedItemClass = BathTubTowelRack;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n changeLayout(layoutType) {\r\n if (layoutType === LayoutType.Small) {\r\n // this.activeSubType_ = BathTubType.Custom60in;\r\n // this.bathTubType_ = BathTubType.Custom60in;\r\n if (!this.layout.parts.Shower.showerBody.disabled) { // disable bathtub if shower is active\r\n if (this.bathTubBody) {\r\n this.bathTubBody.disabled = true;\r\n }\r\n if (this.bathTubBase) {\r\n this.bathTubBase.disabled = true;\r\n this.bathTubBase.disabledClick();\r\n }\r\n }\r\n } else {\r\n if (this.bathTubBody) {\r\n this.bathTubBody.disabled = false;\r\n }\r\n if (this.bathTubBase) {\r\n this.bathTubBase.disabled = false;\r\n this.bathTubBase.disabledClick();\r\n }\r\n }\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n const layers = [];\r\n this.getRelatedItems().forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n ? relatedItem.placeholderFeature.layer.addTo(layers)\r\n : relatedItem.activeFeature && relatedItem.activeFeature.layer.addTo(layers)\r\n });\r\n\r\n return layers;\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Bathtub', this)\r\n }\r\n\r\n subTypes() {\r\n return (this.bathTubBody && this.bathTubBase\r\n && this.bathTubBody.features.some(feature => feature.partName && !feature.partName.includes(\"laceholder\"))\r\n && this.bathTubBase.features.some(feature => feature.partName && !feature.partName.includes(\"laceholder\"))\r\n ) ? [\r\n BathTubType.Custom60in,\r\n BathTubType.FreeStanding\r\n ] : [];\r\n }\r\n\r\n subTypeToString(subType) {\r\n return bathTubTypeToString(subType);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return true;\r\n }\r\n\r\n getRelatedItems() {\r\n return this.relatedItems.filter(item => item.visible.includes(this.bathTubType_))\r\n .sort((a, b) => a.partName !== b.partName ? a.partName < b.partName ? -1 : 1 : 0); // sort by partName\r\n }\r\n\r\n subParts() {\r\n return this.getRelatedItems().map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n setDefault(layout) {\r\n this.getRelatedItems().forEach(relatedItem => relatedItem.setDefault(layout));\r\n }\r\n\r\n handleSubPartClick() {}\r\n\r\n handleSubTypeClick(subType) {\r\n this.bathTubType_ = subType;\r\n this.activeSubType_ = subType; // BathTubType.Custom60in or BathTubType.FreeStanding\r\n this.bathTubFixture.disabled = (this.activeSubType_=== BathTubType.Custom60in)\r\n ? this.bathTubBase.disabled\r\n : this.bathTubBody.disabled\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n // return (this.bathTubType_ === BathTubType.Custom60in) ? this.subParts()[0] : null\r\n return this.subParts()[0]\r\n }\r\n\r\n activeSubType() {\r\n return this.activeSubType_;\r\n }\r\n\r\n getFixtureType() {\r\n if (this.activeSubType_ === BathTubType.FreeStanding && this.bathTubBody && this.bathTubBody.activeFeature) {\r\n return this.bathTubBody.activeFeature.metaData[\"Fixture\"]\r\n }\r\n return [\"All\"]\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {BathTubType, LayoutType, ShowerComboTubType} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class BathTubBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'bathtub';\r\n this.partName = 'Bathtub';\r\n this.translateId = \"visualizer.bathroom.bathtub.bathtub\";\r\n this.homePageTitle = 'Bathtubs';\r\n this.visible = [BathTubType.FreeStanding];\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n // return super.load_(dbFeature, this, false);\r\n const feature = this.load_(dbFeature, new BathTubBody());\r\n if (feature) {\r\n BathTubBody.setAdditionalMetaData(feature);\r\n }\r\n }\r\n\r\n static setAdditionalMetaData(feature) {\r\n if (!feature.metaData[\"Fixture\"]) {\r\n feature.metaData[\"Fixture\"] = [\"All\"];\r\n }\r\n if (!feature.metaData[\"CompatibleTub\"]) {\r\n feature.metaData[\"CompatibleTub\"] = [\"All\"];\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const bathTubFixture = this.getParent().bathTubFixture;\r\n if (bathTubFixture) {\r\n bathTubFixture.disabled = this.disabled;\r\n }\r\n const bathtubParent = this.getParent();\r\n if (bathtubParent.layout.type === LayoutType.Small && !this.disabled) { // switch off all shower features\r\n const showerBody = bathtubParent.layout.parts.Shower.showerBody;\r\n if (showerBody) {\r\n showerBody.disabled = true;\r\n showerBody.disabledClick();\r\n }\r\n const comboPart = bathtubParent.layout.parts[ShowerTubCombo.id];\r\n if (comboPart) {\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n }\r\n\r\n handleClick() {\r\n const bathTubParent = this.getParent().getParent();\r\n bathTubParent.bathTubType_ = BathTubType.FreeStanding;\r\n bathTubParent.activeSubType_ = BathTubType.FreeStanding;\r\n super.handleClick();\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerTubCombo = this.getParent().layout.parts[ShowerTubCombo.id];\r\n const compatibleTubValue = (showerTubCombo.showerTubComboIsActive && showerTubCombo.bottomTub === ShowerComboTubType.walk_in_tub)\r\n ? [\"All\"]\r\n : [\"All\", \"WalkInTub\"];\r\n return [{\r\n propName: 'CompatibleTub',\r\n propValue: compatibleTubValue\r\n }];\r\n }\r\n\r\n setDefault(layout) {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Kingston Elegance 258GRA\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.BathTub.FreeStanding.Base;\r\n }\r\n if(zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.BathTub.FreeStanding.Base;\r\n }\r\n }\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class BathTubLiner extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"bathtub_liner\";\r\n this.bottomTubId = \"bathtub_liner\";\r\n this.visible = true;\r\n this.partName = \"Tub Liner\";\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.bathtub_liner\";\r\n this.dbName = \"Bathtub Liner\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BathTubLiner());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.TubCombo.Liner;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class ReplacementTub extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'replacement_tub';\r\n this.bottomTubId = \"replacement_tub\";\r\n this.visible = true;\r\n this.partName = 'Replacement Tub';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.replacement_tub\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ReplacementTub());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.TubCombo.ReplacementTub;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class WalkInTub extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'walk_in_tub';\r\n this.bottomTubId = \"walk_in_tub\";\r\n this.visible = true;\r\n this.partName = 'Walk In Tub';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.walk_in_tub\";\r\n this.isStoneFeature = false;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new WalkInTub());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.TubCombo.WalkInTub;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n getFeatureByPartName(partName) {\r\n if (!partName) {\r\n return null\r\n }\r\n let walkInTubType = null;\r\n const possibleWalkInTubTypes = [\" AMD\", \" BSC\", \" WH\"];\r\n for (let i = 0; i < possibleWalkInTubTypes.length; i++) {\r\n if (partName.includes(possibleWalkInTubTypes[i])) {\r\n walkInTubType = possibleWalkInTubTypes[i];\r\n break;\r\n }\r\n }\r\n if (walkInTubType) {\r\n partName = partName.split(walkInTubType).join(\"\");\r\n }\r\n partName = partName.toLowerCase();\r\n if (partName[partName.length-1] === \"r\") {\r\n partName = partName.slice(0, partName.length-1);\r\n }\r\n return this.features.find(feature => {\r\n if (!feature.partName) {\r\n return false\r\n }\r\n let featurePartName = feature.partName;\r\n if (walkInTubType) {\r\n featurePartName = featurePartName.split(walkInTubType).join(\"\");\r\n }\r\n featurePartName = featurePartName.toLowerCase();\r\n if (featurePartName[featurePartName.length-1] === \"r\") {\r\n featurePartName = featurePartName.slice(0, featurePartName.length-1);\r\n }\r\n return partName === featurePartName\r\n });\r\n }\r\n\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class JettedTub extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'jetted_tub';\r\n this.bottomTubId = \"jetted_tub\";\r\n this.visible = true;\r\n this.partName = 'Jetted Tub';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.jetted_tub\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new JettedTub());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.TubCombo.JettedTub;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\n\r\nexport default class WallConfiguration extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'wall_configuration';\r\n this.partName = 'Wall Configuration';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.wall_configuration\";\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n this.createdManually = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new WallConfiguration())\r\n }\r\n\r\n // setLayers(layout) {\r\n // this.activeFeature = this.features.find((feature) => {\r\n // return feature.partName === this.getParent().showerBody.activeFeature.partName // set the same glass as Body\r\n // });\r\n // return super.setLayers(layout);\r\n // }\r\n\r\n handleClick() {\r\n super.handleClick();\r\n const showerTubComboParent = this.getParent().getParent();\r\n showerTubComboParent.setShowerTubCombo();\r\n showerTubComboParent.setShowerSize(this.leftShowerWallType, this.showerComboSize);\r\n this.featureClicked();\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.TubCombo.WallConfiguration;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {BathTubType, LayoutType} from \"../../constants\";\r\n\r\nexport default class BathTubBase extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'bathtub_base';\r\n this.visible = [BathTubType.Custom60in];\r\n this.partName = 'Base';\r\n this.translateId = \"visualizer.bathroom.bathtub.bathtub_base\";\r\n this.dbName = 'BathtubBase';\r\n this.homePageTitle = 'Bathtubs';\r\n this.canBeDisabled = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BathTubBase());\r\n }\r\n\r\n disabledClick() {\r\n const bathtubParent = this.getParent();\r\n [bathtubParent.bathtubRim, bathtubParent.bathTubSpa, bathtubParent.bathTubFixture].forEach(subPart => {\r\n if (subPart) {\r\n subPart.disabled = this.disabled;\r\n }\r\n });\r\n if (bathtubParent.layout.type === LayoutType.Small && !this.disabled) { // switch off all shower features\r\n bathtubParent.layout.parts.Shower.showerBody.disabled = true;\r\n bathtubParent.layout.parts.Shower.showerBody.disabledClick();\r\n }\r\n }\r\n\r\n setDefault(layout) {\r\n const filteredFeatures = this.features;\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const sameStoneAsWalls = this.getParent().layout.parts.Walls.wallA.activeFeature\r\n && this.getParent().layout.parts.Walls.wallA.activeFeature.partName;\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(sameStoneAsWalls || \"Sahara Autumn Porcelain Tile\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || super.setDefault(layout) || null;\r\n }\r\n }\r\n\r\n handleClick() {\r\n const bathtubParent = this.getParent().getParent();\r\n bathtubParent.bathTubType_ = BathTubType.Custom60in;\r\n bathtubParent.activeSubType_ = BathTubType.Custom60in;\r\n super.handleClick();\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType() === BathTubType.Custom60in) {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.BathTub.Custom60in.Base;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.BathTub.Custom60in.Base;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {BathTubType, LayoutType} from \"../../constants\";\r\nimport store from \"../../../../../store\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\n\r\nexport default class BathTubFixture extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"bathtub_fixture\";\r\n this.translateId = \"visualizer.bathroom.bathtub.bathtub_fixture\";\r\n this.visible = [BathTubType.Custom60in, BathTubType.FreeStanding];\r\n this.partName = 'Fixture';\r\n this.homePageTitle = 'Bathtub Fixtures';\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n const feature = this.load_(dbFeature, new BathTubFixture());\r\n if (feature) {\r\n BathTubFixture.setAdditionalMetaData(feature);\r\n }\r\n }\r\n\r\n static setAdditionalMetaData(feature) {\r\n feature.metaData[\"Fixture\"] = [\"All\"];\r\n }\r\n\r\n disabledClick() {\r\n const bathTubBody = this.getParent().bathTubBody;\r\n if (bathTubBody && bathTubBody.disabled && !this.disabled) {\r\n bathTubBody.disabled = false;\r\n }\r\n const bathtubParent = this.getParent();\r\n if (bathtubParent.layout.type === LayoutType.Small && !this.disabled) { // switch off all shower features\r\n const showerBody = bathtubParent.layout.parts.Shower.showerBody;\r\n if (showerBody) {\r\n showerBody.disabled = true;\r\n showerBody.disabledClick();\r\n }\r\n const comboPart = bathtubParent.layout.parts[ShowerTubCombo.id];\r\n if (comboPart) {\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n let activeSubType = \"\";\r\n switch (this.getParent().activeSubType()) {\r\n case BathTubType.Custom60in:\r\n activeSubType = \"Custom60in\";\r\n break;\r\n case BathTubType.FreeStanding:\r\n activeSubType = \"FreeStanding\";\r\n break;\r\n }\r\n let floorMount = false;\r\n if (zIndexes && this.activeFeature) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const placeTypeGroup = filterGroups.find(filterGroup => filterGroup.name === \"PlaceType\");\r\n if (placeTypeGroup) {\r\n const featurePlaceTypeValue = this.activeFeature.dbFeature.filterValueIDs[placeTypeGroup.id];\r\n if (featurePlaceTypeValue && featurePlaceTypeValue.length) {\r\n const currentValue = placeTypeGroup.values.find(filterValue => filterValue.id === featurePlaceTypeValue[0]);\r\n if (currentValue && currentValue.value === \"FloorMount\") {\r\n floorMount = true;\r\n }\r\n }\r\n }\r\n floorMount\r\n ? this.activeFeature.layer.zIndex = zIndexes.BathTub[activeSubType].FixtureFloorMount\r\n : this.activeFeature.layer.zIndex = zIndexes.BathTub[activeSubType].Fixture\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n floorMount\r\n ? this.placeholderFeature.layer.zIndex = zIndexes.BathTub[activeSubType].FixtureFloorMount\r\n : this.placeholderFeature.layer.zIndex = zIndexes.BathTub[activeSubType].Fixture\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'Fixture',\r\n propValue: this.getParent().getFixtureType()\r\n }];\r\n }\r\n\r\n setDefault(layout) {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Sahara Autumn Porcelain Tile\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {BathTubType} from \"../../constants\";\r\n\r\nexport default class BathTubRim extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'bathtub_rim';\r\n this.translateId = \"visualizer.bathroom.bathtub.bathtub_rim\";\r\n this.visible = [BathTubType.Custom60in];\r\n this.partName = 'Rim';\r\n this.dbName = \"BathtubRim\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BathTubRim());\r\n }\r\n\r\n disabledClick() {\r\n if (this.disabled) {\r\n this.getParent().bathTubBase.disabled = true;\r\n } else {\r\n this.getParent().bathTubBase.disabled = false;\r\n }\r\n }\r\n\r\n handleClick() {\r\n const bathtubParent = this.getParent().getParent();\r\n bathtubParent.bathTubType_ = BathTubType.Custom60in;\r\n bathtubParent.activeSubType_ = BathTubType.Custom60in;\r\n super.handleClick();\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n // if (layout.type === LayoutType.Large) {\r\n // if (this.getParent().activeSubType() === BathTubType.Custom60in) {\r\n // this.activeFeature.layer.zIndex = Z.layouts.Large.BathTub.Custom60in.Top;\r\n // }\r\n // } else {\r\n // Exception.NotImplemented();\r\n // }\r\n if (zIndexes && this.getParent().activeSubType() === BathTubType.Custom60in) {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.BathTub.Custom60in.Top;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.BathTub.Custom60in.Top;\r\n }\r\n }\r\n }\r\n\r\n setDefault(layout) {\r\n const filteredFeatures = this.features;\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Sahara Autumn Porcelain Tile\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || super.setDefault(layout) || null;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {BathTubType} from \"../../constants\";\r\n\r\nexport default class BathTubSpa extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'bathtub_spa';\r\n this.translateId = \"visualizer.bathroom.bathtub.bathtub_spa\";\r\n this.partName = 'Spa';\r\n this.visible = [BathTubType.Custom60in];\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BathTubSpa());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.BathTub.Custom60in.Spa;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.BathTub.Custom60in.Spa;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\n\r\nexport default class BathTubTowelRack extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'bathtub_towel_rack';\r\n this.translateId = \"visualizer.bathroom.bathtub.bathtub_towel_rack\";\r\n this.partName = 'Towel Rack';\r\n this.visible = [];\r\n // this.visible = [BathTubType.Custom60in, BathTubType.FreeStanding];\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BathTubTowelRack());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n // if (layout.type === LayoutType.Large) {\r\n // this.activeFeature.layer.zIndex = Z.layouts.Large.Towel_Rack;\r\n // } else {\r\n // Exception.NotImplemented();\r\n // }\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Towel_Rack;\r\n }\r\n }\r\n}\r\n","import {Part} from \"./part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {floorThumbnail} from \"../assets\";\r\n\r\nimport {IntermediatePart} from \"./intermediatePart\";\r\n\r\nexport default class Floor extends Part {\r\n static id = 'Floor';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.partId = 'bathroom_floor';\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Floor';\r\n this.homePageTitle = 'Flooring';\r\n this.translateId = \"visualizer.bathroom.floor\";\r\n this.partThumbnail = floorThumbnail;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Floor\":\r\n relatedItemName = \"floorBody\";\r\n RelatedItemClass = FloorBody;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Floor', this)\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n const layers = [];\r\n this.getRelatedItems().forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n ? relatedItem.placeholderFeature.layer.addTo(layers)\r\n : relatedItem.activeFeature && relatedItem.activeFeature.layer.addTo(layers)\r\n });\r\n\r\n return layers;\r\n }\r\n}\r\n\r\nclass FloorBody extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.isStoneFeature = true;\r\n this.partId = 'bathroom_floor';\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.bathroom.floor\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new FloorBody());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Floor;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\n\r\nexport default class CompleteVanity extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity';\r\n this.partName = 'Vanity';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity\";\r\n this.homePageTitle = 'Complete Vanities';\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new CompleteVanity());\r\n }\r\n\r\n setDefault(layout) {\r\n const availableCompleteFeatures = this.features.filter(feature => {\r\n return feature.metaData[\"Vanity\"] && feature.metaData[\"Vanity\"].includes(\"Complete\")\r\n });\r\n const hardCodedDefault = this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Buffalo Complete Sand 987SANBLK17VK24\");\r\n });\r\n // const placeholderDefault =\r\n // (\r\n // this.getParent().pedestalSink\r\n // && this.getParent().pedestalSink.features\r\n // && this.getParent().pedestalSink.features.length\r\n // && this.getParent().pedestalSink.features.find((feature) => +feature.vanitySize === 24 && feature.dbFeature.displayName.includes(\"laceholder\"))\r\n // ) || this.features.find((feature) => {\r\n // return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Placeholder S\");\r\n // });\r\n const placeholderDefault = this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Placeholder S\");\r\n });\r\n // console.log('this.features', this.features);\r\n // console.log('placeholderDefault', placeholderDefault);\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || availableCompleteFeatures[0];\r\n this.placeholderFeature = placeholderDefault || super.setDefault(layout) || null;\r\n }\r\n\r\n // setLayers(layout) {\r\n // // const s3Binding = find(this.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this)});\r\n // if (!this.activeFeature) {\r\n // this.setDefault(layout);\r\n // }\r\n //\r\n // let s3Binding = find(this.activeFeature.dbFeature.s3Bindings, {\r\n // entityID: this.getParent().featureDefinitionId(this),\r\n // layout: layout.getCurrentLayoutAbbreviation()\r\n // });\r\n // if (!s3Binding) {\r\n // s3Binding = find(this.activeFeature.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this)});\r\n // }\r\n // this.activeFeature.layer.fromS3Binding(s3Binding);\r\n // }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Complete.Cabinet;\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Vanity.Complete.Cabinet;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class VanityHandle extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_handle';\r\n this.partName = 'Handle';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_handle\";\r\n this.dbName = \"Vanity Handle\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new VanityHandle())\r\n }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n getArrayOfConditions() {\r\n const counterTopSize = this.getParent().counterTopSize();\r\n return [{\r\n propName: 'VanitySize',\r\n propValue: counterTopSize\r\n }];\r\n }\r\n\r\n getAvailableFeatures() {\r\n return this.features && this.features.filter(f => f.matchesMetaForCondition('VanitySize', this.getParent().counterTopSize())) || [];\r\n }\r\n\r\n setDefault(layout) {\r\n const filteredFeatures = this.getAvailableFeatures();\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Aliveri\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const vanityPedestal = this.getParent().pedestalSink;\r\n if (vanityPedestal && vanityPedestal.activeFeature) {\r\n const handleMeta = vanityPedestal.activeFeature.metaData[\"VanityHandle\"];\r\n const hardCodedWizardConditions = vanityPedestal.activeFeature.partName.includes(\"WizardPlaceholder\") &&\r\n (\r\n vanityPedestal.activeFeature.partName.includes(\"WizardPlaceholder52 in36 S\")\r\n || (handleMeta && handleMeta.includes(\"true\")) // WizardPlaceholder QC Liberty\r\n );\r\n if (handleMeta && handleMeta.includes(\"None\") || hardCodedWizardConditions) {\r\n super.hideLayers();\r\n return;\r\n }\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType_ === Vanity.Types.Custom) {\r\n const zIndex = zIndexes.Vanity.Custom.Handle;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport store from \"../../../../../store\";\r\nimport {Layout} from \"../../layout\";\r\n\r\nexport default class VanityPedestal extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_cabinet';\r\n this.partName = 'Cabinet';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_cabinet\";\r\n this.dbName = \"Vanity\";\r\n this.homePageTitle = 'Vanity Bases';\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n this.canUseWizard = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new VanityPedestal())\r\n }\r\n\r\n // navigationSubItems() {\r\n // return super.navigationSubItemsWithFilter('VanitySize', this.getParent().counterTopSize());\r\n // }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n setActiveFeatureByFilter(filterName, filterValue) {\r\n\r\n // console.log('filterName', filterName);\r\n // console.log('filterValue', filterValue);\r\n\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const group = filterGroups.find(group => group.name === filterName);\r\n const groupId = group.id;\r\n const filterValueId = Layout.getfilterValueIdByValue(groupId, filterValue);\r\n const filteredFeatures = this.features.filter(\r\n feature => feature.dbFeature && feature.dbFeature.filterValueIDs[groupId] && feature.dbFeature.filterValueIDs[groupId].includes(filterValueId)\r\n ); // find among all features only those, who have filter with value === props size\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, null, \"ustom\")) {\r\n this.activeFeature = filteredFeatures[0];\r\n const placeholderAvailableFeatures = filteredFeatures.filter(feature => {\r\n return feature.dbFeature.displayName.includes(\"laceholder\") && feature.dbFeature.displayName.includes(\"ustom\")\r\n });\r\n this.placeholderFeature = placeholderAvailableFeatures[0];\r\n }\r\n }\r\n\r\n // getAvailableFeatures() {\r\n // return this.features.filter(f => f.vanitySize+'in' === this.getParent().counterTopSize());\r\n // }\r\n\r\n setDefault(layout) {\r\n super.setDefault(layout);\r\n const hardCodedDefault = this.features.find((feature) => {\r\n return +feature.vanitySize === 48\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout);\r\n this.placeholderFeature = this.features.find((feature) => {\r\n return +feature.vanitySize === 48\r\n && feature.dbFeature.displayName\r\n && feature.dbFeature.displayName.includes(\"laceholder\")\r\n && feature.dbFeature.displayName.includes(\"ustom\")\r\n }) || null;\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Custom.Cabinet;\r\n }\r\n if(zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Vanity.Custom.Cabinet;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport uniqBy from \"lodash/uniqBy\";\r\n\r\nexport default class VanityCountertop extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_countertop';\r\n this.partName = 'Countertop';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_countertop\";\r\n this.homePageTitle = 'Countertops';\r\n this.visible = [Vanity.Types.Custom];\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new VanityCountertop())\r\n }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n // return super.navigationSubItemsWithFilter('CountertopSize', this.getParent().counterTopSize(), filteredAvailableFeatures);\r\n let counterTopsAvailable = filteredAvailableFeatures.filter(feature => {\r\n return feature.matchesMetaForCondition('CountertopSize', this.getParent().counterTopSize())\r\n })\r\n return uniqBy(counterTopsAvailable, (feature) => feature.dbFeature.id)\r\n .map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setDefault(layout) {\r\n const counterTopSize = this.getParent().counterTopSize();\r\n const filteredFeatures = this.features && this.features.filter(f => f.matchesMetaForCondition('CountertopSize', counterTopSize)) || [];\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Aliveri\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || super.setDefault(layout) || null;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n const counterTopSize = this.getParent().counterTopSize();\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForCondition('CountertopSize', counterTopSize)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType_ === Vanity.Types.Custom) {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Custom.CounterTop;\r\n }\r\n if(this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Vanity.Custom.CounterTop;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n\r\nexport default class LightingFixture extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_lightning_fixture';\r\n this.partName = 'Lighting Fixture';\r\n this.visible = [Vanity.Types.Complete, Vanity.Types.Custom];\r\n }\r\n\r\n setZIndex() {\r\n console.log('layout');\r\n }\r\n}","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n\r\nexport default class VanityBacksplash extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_backsplash';\r\n this.partName = 'Backsplash';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_backsplash\";\r\n this.dbName = 'Backsplash';\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new VanityBacksplash())\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n return super.navigationSubItemsWithFilter('CountertopSize', this.getParent().counterTopSize(), filteredAvailableFeatures);\r\n }\r\n\r\n setDefault(layout) {\r\n const counterTopSize = this.getParent().counterTopSize();\r\n const filteredFeatures = this.features && this.features.filter(f => f.matchesMetaForCondition('CountertopSize', counterTopSize)) || [];\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Aliveri\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || super.setDefault(layout) || null;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n const counterTopSize = this.getParent().counterTopSize();\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForCondition('CountertopSize', counterTopSize)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType_ === Vanity.Types.Custom) {\r\n const zIndex = zIndexes.Vanity.Custom.VanityBacksplash;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {NotQCVanityDoorStylesFilters} from \"../../constants\";\r\nimport store from \"../../../../../store\";\r\n\r\nexport default class Mirror extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_mirror';\r\n this.partName = 'Mirror';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_mirror\";\r\n this.homePageTitle = 'Mirrors';\r\n this.visible = [Vanity.Types.Complete, Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Mirror())\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let navItems = super.navigationSubItemsWithFilter('Pedestal', this.getParent().counterTopSize(), filteredAvailableFeatures);\r\n // console.log('navItems1', navItems.slice());\r\n const vanityParent = this.getParent();\r\n const vanityPart = (vanityParent.activeSubType_ === Vanity.Types.Custom)\r\n ? vanityParent.pedestalSink\r\n : vanityParent.completeVanity;\r\n /*** return Mirrors with the same Color and DoorStyle or Material - as the current selected Vanity ***/\r\n if (vanityPart && vanityPart.activeFeature && vanityPart.activeFeature.dbFeature && vanityPart.activeFeature.dbFeature.filterValueIDs) {\r\n const oldVanityType = NotQCVanityDoorStylesFilters.some(filterName => {\r\n const partName = vanityPart.activeFeature.partName;\r\n return partName.includes(filterName) && !partName.includes(\"QC\");\r\n });\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const colorFilter = filterGroups.find(group => group.name === \"Color\");\r\n const activeFilterValueIDs = vanityPart.activeFeature.dbFeature.filterValueIDs;\r\n const secondFilter = filterGroups.find(group => group.name === (oldVanityType ? \"Material\" : \"DoorStyle\"));\r\n\r\n if (colorFilter && secondFilter) {\r\n navItems = navItems.map(item => {\r\n item.mathesToCurrentVanity = IntermediatePart.featureHasFilters(item.part, activeFilterValueIDs, colorFilter, secondFilter);\r\n return item\r\n }).sort((itemA, itemB) => {\r\n return (itemA.mathesToCurrentVanity < itemB.mathesToCurrentVanity)\r\n ? 1\r\n : ((itemB.mathesToCurrentVanity < itemA.mathesToCurrentVanity)\r\n ? -1\r\n : 0)\r\n });\r\n }\r\n\r\n // console.log('sorted!', navItems);\r\n }\r\n return navItems\r\n }\r\n\r\n setDefault(layout) {\r\n const counterTopSize = this.getParent().counterTopSize();\r\n const filteredFeatures = this.features && this.features.filter(f => f.matchesMetaForCondition('Pedestal', counterTopSize)) || [];\r\n\r\n let name = null;\r\n if (this.activeFeature) {\r\n name = this.activeFeature.partName\r\n }\r\n if (name) {\r\n name = name.split(\" Single\")[0].split(\" Double\")[0].split(\" S\")[0].split(\" D\")[0]\r\n }\r\n\r\n if (!this.tryToSetTheSameFeatureByFilters(filteredFeatures) && !this.tryToSetTheSameFeature(filteredFeatures, name || null)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Elegant BLK\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || filteredFeatures[0];\r\n this.setPlaceholderFeature(filteredFeatures, layout);\r\n }\r\n }\r\n\r\n tryToSetTheSameFeatureByFilters(filteredFeatures, layout) {\r\n const vanityParent = this.getParent();\r\n const vanityPart = (vanityParent.activeSubType_ === Vanity.Types.Custom)\r\n ? vanityParent.pedestalSink\r\n : vanityParent.completeVanity;\r\n if (vanityPart && vanityPart.activeFeature && !vanityPart.activeFeature.partName.includes(\"WizardPlaceholder\")\r\n && vanityPart.activeFeature.dbFeature && vanityPart.activeFeature.dbFeature.filterValueIDs) {\r\n const vanityFilters = vanityPart.activeFeature.dbFeature.filterValueIDs;\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const materialFilter = filterGroups.find(group => group.name === \"Material\");\r\n const colorFilter = filterGroups.find(group => group.name === \"Color\");\r\n\r\n const matchingFilterFeature = filteredFeatures.find((feature) => {\r\n return feature.dbFeature && materialFilter && colorFilter\r\n && feature.dbFeature.filterValueIDs[materialFilter.id]\r\n && vanityFilters[materialFilter.id]\r\n && vanityFilters[colorFilter.id]\r\n && feature.dbFeature.filterValueIDs[materialFilter.id].includes(vanityFilters[materialFilter.id][0])\r\n && feature.dbFeature.filterValueIDs[colorFilter.id]\r\n && feature.dbFeature.filterValueIDs[colorFilter.id].includes(vanityFilters[colorFilter.id][0])\r\n });\r\n if (matchingFilterFeature) {\r\n this.activeFeature = matchingFilterFeature;\r\n this.setPlaceholderFeature(filteredFeatures, layout);\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n tryToSetTheSameFeature(filteredFeatures, partName, placeholderName) {\r\n if (this.activeFeature && this.activeFeature.partName) {\r\n const nameSplitted = (partName || this.activeFeature.partName).split(\" FM\")[0];\r\n this.activeFeature = filteredFeatures.find(feature => {\r\n const currentNameSplitted = feature.partName.split(\" FM\")[0];\r\n return nameSplitted === currentNameSplitted\r\n });\r\n // console.log('AF', filteredFeatures, this.activeFeature);\r\n this.placeholderFeature = filteredFeatures.find((feature) => {\r\n return placeholderName\r\n ? feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\"placeholder\")\r\n && feature.dbFeature.displayName.includes(placeholderName)\r\n : feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\"placeholder\")\r\n });\r\n if (this.activeFeature) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n setPlaceholderFeature(filteredFeatures, layout) {\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.placeholderFeature = placeholderDefault || super.setDefault(layout) || null;\r\n }\r\n\r\n setLayers(layout) {\r\n const counterTopSize = this.getParent().counterTopSize();\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForCondition('Pedestal', counterTopSize)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n // if ((this.getParent().activeSubType_ === Vanity.Types.Custom) && this.activeFeature) {\r\n if (zIndexes && this.activeFeature) {\r\n // this.activeFeature.layer.zIndex = Z.layouts.Large.Vanity.Custom.Mirror;\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Custom.Mirror;\r\n }\r\n if(zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Vanity.Custom.Mirror;\r\n }\r\n }\r\n}\r\n","import filter from 'lodash/filter';\r\n\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport Config from \"../../../../../config\";\r\nimport { Vanity } from \"../../parts/vanity\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class Sink extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_sink';\r\n this.partName = 'Sink';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_sink\";\r\n this.homePageTitle = 'Sinks';\r\n this.visible = [Vanity.Types.Custom];\r\n if (Config.isDevMode()) {\r\n this.canBeDisabled = true;\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Sink())\r\n }\r\n //\r\n // navigationSubItems(filters, searchText) {\r\n // const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n // return super.navigationSubItemsWithFilterWithInactive('VanitySize', this.getParent().counterTopSize(), filteredAvailableFeatures);\r\n // }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const counterTopSize = this.getParent().counterTopSize();\r\n return [{\r\n propName: 'VanitySize',\r\n propValue: counterTopSize\r\n }];\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n handleChangeParent(nonCompatibleWith) {\r\n if (nonCompatibleWith === \"faucet\") {\r\n // some additional logic if needed\r\n } else {\r\n this.getParent().getParent().pedestalSink.setActiveFeatureByFilter(\"Size\", this.metaData[\"VanitySize\"] ? this.metaData[\"VanitySize\"][0] : null); // \"60in\", etc.\r\n }\r\n }\r\n\r\n getAvailableFeatures() {\r\n return filter(this.features, f => f.matchesMetaForCondition('VanitySize', this.getParent().counterTopSize()));\r\n }\r\n\r\n setActiveFeatureByFilter(filterName, filterValue) {\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions());\r\n const filteredFeatures = featuresToDisplay.filter((feature) => {\r\n return feature.metaData[filterName] && feature.metaData[filterName].includes(filterValue);\r\n });\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n this.activeFeature = filteredFeatures[0];\r\n const placeholderAvailableFeatures = filteredFeatures.filter(feature => {\r\n return feature.dbFeature.displayName.includes(\"laceholder\")\r\n });\r\n this.placeholderFeature = placeholderAvailableFeatures[0];\r\n }\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.getAvailableFeatures();\r\n let name = null;\r\n if (this.activeFeature) {\r\n name = this.activeFeature.partName\r\n }\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, name ? name.substring(0, name.length - 2) : null)) { // remove 2 last letters\r\n this.activeFeature = filteredFeatures[0];\r\n this.placeholderFeature = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType_ === Vanity.Types.Custom) {\r\n if(this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Custom.Sink;\r\n }\r\n if(this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Vanity.Custom.Sink;\r\n }\r\n }\r\n }\r\n}\r\n","import filter from 'lodash/filter';\r\n\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport Config from \"../../../../../config\";\r\nimport { Vanity } from \"../../parts/vanity\";\r\n\r\nexport default class VanityFaucet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_faucet';\r\n this.partName = 'Faucet';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_faucet\";\r\n this.homePageTitle = 'Faucets';\r\n this.useMatchesFailedNavigation = true;\r\n this.visible = [Vanity.Types.Custom];\r\n if (Config.isDevMode()) {\r\n this.canBeDisabled = true;\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const vanityFaucetFeature = this.load_(dbFeature, new VanityFaucet());\r\n if (vanityFaucetFeature) {\r\n VanityFaucet.setAdditionalMetaData(vanityFaucetFeature);\r\n }\r\n }\r\n\r\n static setAdditionalMetaData(vanityFaucetFeature) {\r\n const compatible = vanityFaucetFeature.metaData[\"SinkSize\"];\r\n const size = vanityFaucetFeature.metaData[\"Size\"];\r\n if (compatible && compatible.includes(\"Outer\") && !compatible.includes(\"Inner\")) {\r\n compatible.push(\"Inner\")\r\n }\r\n if (size && !compatible) {\r\n vanityFaucetFeature.metaData[\"SinkSize\"] = size.includes(\"21in\") ? [\"Outer\", \"Inner\"] : [];\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n getCurrentSinkSize() {\r\n const sinkParent = this.getParent().sink;\r\n if (sinkParent && sinkParent.activeFeature) {\r\n const sinkMeta = sinkParent.activeFeature.metaData[\"SinkSize\"];\r\n if (sinkMeta) {\r\n return Array.isArray(sinkMeta) ? sinkMeta[0] : sinkMeta\r\n } else if (sinkParent.activeFeature.partName.includes(\"Placeholder\")) {\r\n return \"Outer\"\r\n }\r\n }\r\n return null\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n const sinkSize = this.getCurrentSinkSize();\r\n if (sinkSize) {\r\n return super.navigationSubItemsWithFilterWithInactive('SinkSize', sinkSize, featuresToDisplay)\r\n }\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n getArrayOfConditions(withSinkSize) {\r\n const counterTopSize = this.getParent().counterTopSize();\r\n const conditions = [{\r\n propName: 'VanitySize',\r\n propValue: counterTopSize\r\n }];\r\n if (withSinkSize) {\r\n conditions.push({\r\n propName: 'SinkSize',\r\n propValue: this.getCurrentSinkSize()\r\n })\r\n }\r\n return conditions;\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions(true))\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getAvailableFeatures() {\r\n return filter(this.features, f => f.matchesMetaForCondition('VanitySize', this.getParent().counterTopSize()));\r\n }\r\n\r\n handleChangeParent(nonCompatibleWith) {\r\n if (nonCompatibleWith === \"sink\") {\r\n this.getParent().getParent().sink.setActiveFeatureByFilter(\"SinkSize\", \"Inner\")\r\n } else {\r\n this.getParent().getParent().pedestalSink.setActiveFeatureByFilter(\"Size\", this.metaData[\"VanitySize\"] ? this.metaData[\"VanitySize\"][0] : null); // \"60in\", etc.\r\n }\r\n }\r\n\r\n setDefault(layout) {\r\n const filteredFeatures = this.features && this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions(true))) || [];\r\n let name = null;\r\n if (this.activeFeature) {\r\n name = this.activeFeature.partName\r\n }\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, name ? name.substring(0, name.length - 2) : null)) { // remove 2 last letters // \"Platte 456AS D\"\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Platte 456AS\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType_ === Vanity.Types.Custom) {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Custom.Faucet;\r\n }\r\n if(this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Vanity.Custom.Faucet;\r\n }\r\n }\r\n }\r\n}\r\n","import find from \"lodash/find\";\r\n\r\nimport {Part} from \"./part\";\r\nimport {LayoutType} from \"../constants\";\r\nimport {windowThumbnail} from \"../assets\";\r\nimport {NN} from \"../../../../misc/utils\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {IntermediatePart} from \"./intermediatePart\";\r\n\r\nexport class Window extends Part {\r\n static id = 'Window';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Simple);\r\n this.partId = 'window';\r\n this.menuType = PartMenuType.Simple;\r\n this.partName = 'Window';\r\n this.translateId = \"visualizer.bathroom.window\";\r\n this.homePageTitle = 'Window Coverings';\r\n this.dbName = 'Window Covering';\r\n this.partThumbnail = windowThumbnail;\r\n }\r\n\r\n load(dbFeature) {\r\n const isWindowCovering = dbFeature.groupName === 'Window Covering';\r\n const isWindow = dbFeature.groupName === 'Window';\r\n\r\n if (!isWindowCovering && !isWindow)\r\n return false;\r\n\r\n const part = new WindowBody();\r\n part.getParent = () => this;\r\n\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n\r\n if (isWindowCovering) {\r\n part.load(dbFeature);\r\n } else {\r\n this.windowDefault = part;\r\n this.windowDefault.dbFeature = dbFeature;\r\n }\r\n return true\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n if (layout.type === LayoutType.Small)\r\n return null;\r\n\r\n if (!this.activeFeature)\r\n return null;\r\n\r\n const res = [];\r\n // let s3Binding = find(this.activeFeature.dbFeature.s3Bindings, {entityID: this.activeFeature.featureDefinitionId()});\r\n let s3Binding = find(this.activeFeature.dbFeature.s3Bindings, {entityID: this.activeFeature.featureDefinitionId(), layout: layout.getCurrentLayoutAbbreviation()});\r\n if (!s3Binding) {\r\n s3Binding = find(this.activeFeature.dbFeature.s3Bindings, {entityID: this.activeFeature.featureDefinitionId()});\r\n }\r\n\r\n if (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature) {\r\n s3Binding = find(this.placeholderFeature.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this.placeholderFeature), layout: layout.getCurrentLayoutAbbreviation()});\r\n if (!s3Binding) {\r\n s3Binding = find(this.placeholderFeature.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this.placeholderFeature)});\r\n }\r\n }\r\n\r\n this.activeFeature.layer.fromS3Binding(s3Binding);\r\n // this.activeFeature.layer.addTo(res);\r\n\r\n if (this.placeholderFeature) {\r\n let s3Binding = find(this.placeholderFeature.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this.placeholderFeature), layout: layout.getCurrentLayoutAbbreviation()});\r\n if (!s3Binding) {\r\n s3Binding = find(this.placeholderFeature.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this.placeholderFeature)});\r\n }\r\n this.placeholderFeature.layer.fromS3Binding(s3Binding);\r\n }\r\n\r\n if (this.windowDefault && this.windowDefault.dbFeature.s3Bindings) {\r\n const dbFeature = this.windowDefault.dbFeature;\r\n s3Binding = dbFeature.s3Bindings[0];\r\n this.windowDefault.layer.fromS3Binding(s3Binding);\r\n this.windowDefault.layer.addTo(res);\r\n }\r\n\r\n (placeholdersNeeded && !this.placeholderChanged && this.placeholderFeature)\r\n ? this.placeholderFeature.layer.addTo(res)\r\n : this.activeFeature.layer.addTo(res);\r\n\r\n return res;\r\n }\r\n\r\n setDefault() {\r\n const hardCodedDefault = this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Stylewise Snowblind\");\r\n });\r\n const placeholderDefault = this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || this.features[0];\r\n this.placeholderFeature = placeholderDefault || this.features[0];\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem(this.partName, this);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n // if (layout.type === LayoutType.Large) {\r\n // NN(this.windowDefault, _ => _.layer.zIndex = Z.layouts.Large.Window_Default);\r\n // NN(this.activeFeature, _ => _.layer.zIndex = Z.layouts.Large.Window_Covering);\r\n // }\r\n if(zIndexes) {\r\n NN(this.windowDefault, _ => _.layer.zIndex = zIndexes.Window_Default);\r\n NN(this.activeFeature, _ => _.layer.zIndex = zIndexes.Window_Covering);\r\n if(this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Window_Covering;\r\n }\r\n }\r\n }\r\n\r\n subParts() {\r\n return [{\r\n text: this.partName,\r\n part: this\r\n }]\r\n }\r\n\r\n}\r\n\r\nclass WindowBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'window';\r\n this.partName = 'Window';\r\n this.translateId = \"visualizer.bathroom.window\";\r\n }\r\n\r\n load(dbFeature) {\r\n super.load_.call(this.getParent(), dbFeature, this, false);\r\n }\r\n}\r\n","import find from \"lodash/find\";\r\n\r\nimport {Part} from \"./part\";\r\nimport {ceilingThumbnail, ceilingPlaceholder} from \"../assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {IntermediatePart} from \"./intermediatePart\";\r\n\r\nexport class Ceiling extends Part {\r\n static id = 'Ceiling';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Simple);\r\n this.partId = 'ceiling';\r\n this.menuType = PartMenuType.Simple;\r\n this.partName = 'Ceiling';\r\n this.translateId = \"visualizer.bathroom.ceiling\";\r\n this.homePageTitle = 'Ceilings';\r\n this.partThumbnail = ceilingThumbnail;\r\n this.ceilingLight = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let part = null;\r\n switch (dbFeature.groupName) {\r\n case \"Ceiling\":\r\n part = new CeilingBody();\r\n break;\r\n case \"Ceiling Lights\":\r\n if (!this.ceilingLight) {\r\n this.ceilingLight = new CeilingLight(true);\r\n this.relatedItems.push(this.ceilingLight);\r\n }\r\n part = this.ceilingLight;\r\n break;\r\n }\r\n if (part) {\r\n part.getParent = () => this;\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n part.load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n const layers = [];\r\n\r\n if (placeholdersNeeded && !this.placeholderChanged && this.placeholderFeature) {\r\n this.placeholderFeature.layer.src = ceilingPlaceholder;\r\n this.placeholderFeature.layer.fromS3 = false;\r\n this.placeholderFeature.layer.addTo(layers)\r\n } else if (this.activeFeature) {\r\n this.activeFeature.setLayers(layout);\r\n this.activeFeature.layer.addTo(layers);\r\n }\r\n\r\n this.relatedItems.forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n if (relatedItem && relatedItem.activeFeature) {\r\n relatedItem.activeFeature.layer.addTo(layers);\r\n }\r\n });\r\n\r\n return layers;\r\n }\r\n\r\n setDefault(layout) {\r\n this.relatedItems.forEach(_ => _.setDefault(layout));\r\n const hardCodedDefault = this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"BR Frost\");\r\n });\r\n const placeholderDefault = this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || this.features[0];\r\n this.placeholderFeature = placeholderDefault || this.features[0];\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem(this.partName, this);\r\n }\r\n\r\n handleSubPartClick() {}\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n this.relatedItems.forEach(_ => _.setZIndex(zIndexes));\r\n this.activeFeature && this.activeFeature.setZIndex(zIndexes);\r\n if(this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Ceiling;\r\n }\r\n }\r\n }\r\n\r\n subParts() {\r\n return [{\r\n text: this.partName,\r\n part: this\r\n }]\r\n }\r\n}\r\n\r\nclass CeilingBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n\r\n this.partName = 'Ceiling';\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n super.load_.call(this.getParent(), dbFeature, this, false);\r\n }\r\n\r\n setLayers(layout) {\r\n // const s3Binding = find(this.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this)});\r\n let s3Binding = find(this.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this), layout: layout.getCurrentLayoutAbbreviation()});\r\n if (!s3Binding) {\r\n s3Binding = find(this.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this)});\r\n }\r\n this.layer.fromS3Binding(s3Binding);\r\n }\r\n\r\n setDefault(layout) {\r\n this.activeFeature = super.setDefault(layout) || this.features[0];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes)\r\n this.layer.zIndex = zIndexes.Ceiling;\r\n }\r\n}\r\n\r\nclass CeilingLight extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partName = 'Ceiling Light';\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new CeilingLight());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature && this.activeFeature.layer) {\r\n this.activeFeature.layer.zIndex = zIndexes.Ceiling_Lights;\r\n }\r\n }\r\n}\r\n\r\n","import {Part} from \"./part\";\r\nimport {toiletThumbnail} from '../assets';\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {IntermediatePart} from \"./intermediatePart\";\r\nimport {Vanity} from \"./vanity\";\r\n\r\nexport class Toilet extends Part {\r\n static id = 'Toilet';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Toilet';\r\n this.translateId = \"visualizer.bathroom.toilet\";\r\n this.homePageTitle = 'Toilets';\r\n this.partThumbnail = toiletThumbnail;\r\n this.toilet = null;\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded){\r\n const layers = [];\r\n this.relatedItems.forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n ? relatedItem.placeholderFeature.layer.addTo(layers)\r\n : relatedItem.activeFeature ? relatedItem.activeFeature.layer.addTo(layers) : null\r\n\r\n });\r\n return layers;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.groupName === \"Toilet\") {\r\n if (!this.toilet) {\r\n this.toilet = new ToiletBody(true);\r\n this.relatedItems.push(this.toilet);\r\n this.toilet.getParent = () => this;\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this.toilet.load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts() {\r\n return this.relatedItems.map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n return this.subParts()[0]\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Toilet', this)\r\n }\r\n\r\n setDefault(layout) {\r\n this.relatedItems.forEach(_ => _.setDefault(layout));\r\n }\r\n}\r\n\r\nclass ToiletBody extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'toilet';\r\n this.partName = 'Toilet';\r\n this.translateId = \"visualizer.bathroom.toilet\";\r\n this.homePageTitle = 'Toilets';\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ToiletBody());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const vanitySize = layout.parts[Vanity.id].counterTopSize();\r\n\r\n // console.log('Toilet - vanity size: ', vanitySize);\r\n if (vanitySize === '72in' || vanitySize === '60in') {\r\n // console.warn('Toilet - not visible for current vanity size: ', vanitySize);\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n return super.setLayers(layout);\r\n }\r\n\r\n setDefault(layout) {\r\n const hardCodedDefault = this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Melbourne MR4CGR\");\r\n });\r\n const placeholderDefault = this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || this.features[0];\r\n this.placeholderFeature = placeholderDefault || super.setDefault(layout) || null;\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Toilet;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Toilet;\r\n }\r\n }\r\n}\r\n\r\n\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport store from \"../../../../../store\";\r\nimport {toggleNotCompatibleView} from \"../../../../../actions/selectionFunctions\";\r\nimport {ShowerComboTubType} from \"../../constants\";\r\n\r\nexport default class ShowerFixture extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_fixture';\r\n this.partName = 'Fixture';\r\n this.translateId = \"visualizer.bathroom.shower.shower_fixture\";\r\n this.homePageTitle = 'Shower Fixtures';\r\n this.dbName = 'Shower Fixture';\r\n this.layerPriority = 4;\r\n if (isChild) {\r\n this.previouslySelectedFeatures = {\r\n LG: {},\r\n SM: {}\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerFixture());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerTubCombo = this.getParent().layout.parts[ShowerTubCombo.id];\r\n\r\n if (this.getParent().showerTubComboIsActive() && showerTubCombo && showerTubCombo.walkInTub\r\n && showerTubCombo.bottomTub === showerTubCombo.walkInTub.bottomTubId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n if (shower.layout && shower.showerTubComboIsActive()\r\n && shower.layout.parts[ShowerTubCombo.id].bottomTub === ShowerComboTubType.walk_in_tub) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n comboPart.bottomTub = ShowerComboTubType.bathtub_liner;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked); // set active item & not in visualizer item\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n\r\n const showerFixtureParent = this.getParent();\r\n const shower = showerFixtureParent.getParent();\r\n if (shower.showerTubComboIsActive() && shower.layout.parts[ShowerTubCombo.id].bottomTub === ShowerComboTubType.walk_in_tub\r\n && !window.location.hash.includes(\"visualizer\")) {\r\n store.dispatch(toggleNotCompatibleView(true));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n const activeShowerPartId = showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n return [{\r\n propName: \"Shower\",\r\n propValue: showerParent.showerTubComboIsActive()\r\n && (showerParent.layout.parts[activeShowerPartId].bottomTub !== ShowerComboTubType.walk_in_tub)\r\n ? [\"Tub\"]\r\n : showerParent.isComplete() ? \"Complete\" : \"Custom\"\r\n }, {\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }]\r\n }\r\n\r\n setDefault() {\r\n const shower = this.getParent();\r\n const currentActiveFeature = this.activeFeature;\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n this.setDefaultAccordingToPreviousSelect(shower, filteredFeatures, \"Brantford\");\r\n }\r\n this.rememberPreviousSelection(shower, currentActiveFeature);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const ShowerType = this.getParent().activeSubType() === Shower.Type.Custom || this.getParent().showerTubComboIsActive()\r\n ? 'Custom60in'\r\n : 'Steam60in';\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Shower[ShowerType].Fixture;\r\n }\r\n if(zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Shower[ShowerType].Fixture;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {ShowerBodyType} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class ShowerGlass extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_glass';\r\n this.translateId = \"visualizer.bathroom.shower.shower_glass\";\r\n this.partName = 'Glass';\r\n this.visible = false;\r\n this.layerPriority = 12;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerGlass())\r\n }\r\n\r\n // navigationSubItems() {\r\n // const showerSize = this.getParent().showerSize().split('in')[0];\r\n // return super.navigationSubItemsWithFilter('ShowerSize', showerSize);\r\n // }\r\n setLayers(layout) {\r\n\r\n if (this.getParent().showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.getParent().customBodyType === ShowerBodyType.Door) {\r\n this.disabled = true;\r\n }\r\n this.activeFeature = this.features.find((feature) => {\r\n const showerBodyActiveFeature = this.getParent().showerBody.activeFeature;\r\n return showerBodyActiveFeature && feature.partName === showerBodyActiveFeature.partName // set the same glass as Body\r\n });\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType() === Shower.Type.Custom && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Shower.Custom60in.Glass;\r\n }\r\n }\r\n}\r\n","import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n\r\nimport {ShowerType, LayoutType} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {\r\n custom30in15X4Shower,\r\n custom30in30X8Shower,\r\n custom30inPonyShower,\r\n custom60in15X4Shower,\r\n custom60in30X8Shower,\r\n custom60inPonyShower\r\n} from \"../../assets\";\r\n\r\nexport default class ShowerBody extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partId = 'shower_body';\r\n this.partName = 'Shower Body';\r\n this.translateId = \"visualizer.bathroom.shower.shower_body\";\r\n this.homePageTitle = 'Shower Doors & Glass';\r\n this.partNumber = partNumber;\r\n this.activeFeatureParts = [];\r\n this.canBeDisabled = false;\r\n this.placeholderChanged = true; // never show placeholder to body\r\n this.firstClick = {\r\n \"0\": true // never show placeholder to body\r\n }\r\n this.layerPriority = 1;\r\n this.createdManually = true;\r\n }\r\n\r\n load(dbFeature) {\r\n const parts = dbFeature.metaData[\"Parts\"];\r\n if (parts) {\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return super.load_(dbFeature, new ShowerBody(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n } else {\r\n const loadedShowerBody = super.load_(dbFeature, new ShowerBody());\r\n if (loadedShowerBody) { // it can be false (just skip it)\r\n const featureName = loadedShowerBody.dbFeature.sharedFeatureName;\r\n loadedShowerBody.featureName = featureName;\r\n loadedShowerBody.showerBodyType = 'Custom';\r\n loadedShowerBody.type = ShowerType.Custom;\r\n loadedShowerBody.showerDimensions = this.loadShowerDimensions(featureName);\r\n loadedShowerBody.metaData = this.loadShowerMetaData(featureName, loadedShowerBody.showerDimensions);\r\n loadedShowerBody.showerBodyId = featureName.toLowerCase().replace(/ /gi, \"-\");\r\n loadedShowerBody.notAvailableInVisualizer = false;\r\n if (!loadedShowerBody.dbFeature.thumbnailUrl) {\r\n loadedShowerBody.customThumbnail = this.loadThumbnail(featureName)\r\n }\r\n }\r\n return loadedShowerBody\r\n }\r\n }\r\n\r\n loadShowerDimensions(featureName = this.activeFeature.featureName) {\r\n switch (true) {\r\n case featureName.includes(\"15X4\"):\r\n return \"15X4\"\r\n case featureName.includes(\"Pony\"):\r\n return \"Pony\"\r\n case featureName.includes(\"30X8\"):\r\n default:\r\n return \"30X8\"\r\n }\r\n }\r\n\r\n loadShowerMetaData(featureName = this.activeFeature.featureName, showerDimensions) {\r\n const featureNameSplitted = featureName.split(\" \");\r\n return {\r\n \"ShowerSize\": featureName.includes(\"Custom\") ? [featureNameSplitted[2]] : ['60in'],\r\n \"CountertopSize\": showerDimensions === \"30X8\" ? [\"72in\"] : [\"20in\", \"24in\", \"30in\", \"36in\", \"48in\", \"60in\"]\r\n }\r\n }\r\n\r\n loadThumbnail(featureName = this.activeFeature.featureName) {\r\n switch (true) {\r\n case featureName.includes(\"15X4\"):\r\n return featureName.includes(\"30in\") ? custom30in15X4Shower : custom60in15X4Shower\r\n case featureName.includes(\"Pony\"):\r\n return featureName.includes(\"30in\") ? custom30inPonyShower : custom60inPonyShower\r\n case featureName.includes(\"30X8\"):\r\n default:\r\n return featureName.includes(\"30in\") ? custom30in30X8Shower : custom60in30X8Shower\r\n }\r\n }\r\n\r\n handleClick() {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick();\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.showerBody.activeFeature = this;\r\n }\r\n this.getParent().showerBodySelectedByUser = true;\r\n const shower = this.getParent().layout ? this.getParent() : this.getParent().getParent(); // workaround for complete & custom click\r\n if (shower.showerTubComboIsActive) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n disabledClick() {\r\n const showerParent = this.getParent();\r\n showerParent.relatedItems.forEach((relItem) => {\r\n relItem.disabled = this.disabled;\r\n if (relItem.activeFeatureParts && relItem.activeFeatureParts.length) {\r\n relItem.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart) {\r\n activeFeaturePart.disabled = this.disabled\r\n }\r\n });\r\n }\r\n });\r\n if (showerParent.layout && showerParent.showerTubComboIsActive) {\r\n const comboPart = showerParent.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const wallParent = showerParent.layout.parts.Walls;\r\n wallParent.wallExL.disabled = this.disabled;\r\n // wallParent.wallExR.disabled = this.disabled;\r\n\r\n const bathtubParent = showerParent.layout.parts.Bathtub;\r\n\r\n if (showerParent.layout.type === LayoutType.Small && !this.disabled && bathtubParent) { // switch off all bathtub features\r\n if (bathtubParent.bathTubBody) {\r\n bathtubParent.bathTubBody.disabled = true;\r\n }\r\n if (bathtubParent.bathTubBody) {\r\n bathtubParent.bathTubBase.disabled = true;\r\n bathtubParent.bathTubBase.disabledClick();\r\n }\r\n }\r\n }\r\n\r\n availableFeatures(filters) {\r\n const layout = this.getParent().layout;\r\n const filteredAvailableFeatures = filters ? super.getFilteredFeaturesByFilters(filters) : this.features;\r\n const counterTopSize = layout.parts[Vanity.id].counterTopSize();\r\n return filteredAvailableFeatures.filter((feature) => {\r\n if (this.getParent().activeSubType_ === Shower.Type.Custom) {\r\n return counterTopSize === '72in' && layout.type === 1\r\n ? feature.showerDimensions === \"30X8\" || feature.showerDimensions === \"Pony\"\r\n : feature.showerBodyType === Shower.Type.Custom\r\n } else {\r\n return (feature.showerBodyType !== Shower.Type.Custom) && feature.partNumber === 1\r\n }\r\n })\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(this.availableFeatures(filters), searchText);\r\n return filteredAvailableFeatures.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setActiveFeatureParts() {\r\n const activeFeatureParts = (this.activeFeature && this.activeFeature.partNumber) ? this.featuresParts.filter((feature) => {\r\n return feature.partName === this.activeFeature.partName\r\n }) : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n return activeFeatureParts\r\n }\r\n\r\n setDefault() {\r\n const availableFeatures = this.availableFeatures();\r\n const layout = this.getParent().layout;\r\n let hardCodedDefault = availableFeatures.find((feature) => {\r\n return feature.partName === \"Custom B 60in 15X4\";\r\n });\r\n const counterTopSize = layout.parts[Vanity.id].counterTopSize();\r\n if (counterTopSize === '72in' && layout.type === 1 && this.activeFeature) {\r\n hardCodedDefault = availableFeatures.find((feature) => {\r\n return this.activeFeature.partName.includes(\"60in\")\r\n ? feature.partName.includes(\"60in\")\r\n : feature.partName.includes(\"30in\")\r\n });\r\n }\r\n this.activeFeature = hardCodedDefault || availableFeatures[0];\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n if (this.getParent().showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.getParent().activeSubType_ === Shower.Type.Custom && this.activeFeature) {\r\n this.activeFeature.layer.src = '';\r\n const counterTopSize = layout.parts[Vanity.id].counterTopSize();\r\n const showerDimensions = this.getParent().showerDimensions();\r\n if (counterTopSize === '72in' && layout.type === 1 && (showerDimensions === \"15X4\")) {\r\n // removed showerBodySelectedByUser detect cause we need to change shower body in any case! if it is not full!\r\n this.setDefault();\r\n } else if (counterTopSize !== '72in' && layout.type === 1 && !this.showerBodySelectedByUser // set default shower back\r\n && (showerDimensions !== \"15X4\")) {\r\n this.setDefault();\r\n }\r\n } else {\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const ShowerType = (this.getParent().activeSubType() === Shower.Type.Custom) ? 'Custom60in' : 'Steam60in';\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Shower[ShowerType].Body[this.activeFeature.partNumber];\r\n }\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.layer.zIndex = zIndexes.Shower[ShowerType].Body[activeFeaturePart.partNumber];\r\n })\r\n }\r\n }\r\n\r\n changeLayout(layoutType) {\r\n if (layoutType === 1 && this.disabled) {\r\n this.disabled = false;\r\n this.disabledClick();\r\n }\r\n }\r\n}\r\n","import isEqual from \"lodash/isEqual\";\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nimport { Shower } from \"../../parts/shower\";\r\nimport { ShowerTubCombo } from \"../../parts/showerTubCombo\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class ShowerInteriorWall extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partId = 'shower_interior_wall';\r\n this.partName = 'Shower Walls';\r\n this.translateId = \"visualizer.bathroom.shower.shower_interior_wall\";\r\n this.homePageTitle = 'Interior Shower Walls';\r\n this.dbName = \"Shower Wall\";\r\n this.isStoneFeature = true;\r\n this.canUseWizard = true;\r\n this.partNumber = partNumber;\r\n this.activeFeatureParts = [];\r\n this.shadowName = \"Interior Wall\";\r\n this.layerPriority = 2;\r\n }\r\n\r\n load(dbFeature) {\r\n const parts = dbFeature.metaData && dbFeature.metaData[\"Parts\"];\r\n if (parts) {\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return super.load_(dbFeature, new ShowerInteriorWall(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n } else {\r\n return super.load_(dbFeature, new ShowerInteriorWall());\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const parent = this.getParent();\r\n super.handleClick(ignoreLocked);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n const shower = parent.getParent();\r\n if (shower.showerInteriorWallAccent && shower.showerInteriorWallAccent.canBeDisabled\r\n && !shower.showerInteriorWallAccent.placeholderChanged && !getFeatureIsLocked(this)) {\r\n shower.showerInteriorWallAccent.disabled = true;\r\n shower.showerInteriorWallAccent.disabledClick();\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(this.availableFeatures(super.getFilteredFeaturesByFilters(filters)), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n availableFeatures(wallFeatures) {\r\n return wallFeatures.filter(wallFeature => wallFeature.partNumber === 1)\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.shadowFeature && !this.shadowFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())) {\r\n this.setShadowFeature();\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n const matchingFeatureExist = super.tryToSetTheSameFeature(filteredFeatures, null, null, true);\r\n if (!matchingFeatureExist) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Tan Hexagon\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\"placeholder\");\r\n });\r\n\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n this.placeholderFeature = placeholderDefault || null;\r\n } else {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n this.setShadowFeature();\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n const activeShowerPartId = showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.Wall;\r\n const zIndex2 = zIndexes.Shower.Custom60in.Wall2;\r\n const zIndex3 = zIndexes.Shower.Custom60in.WallShadow;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.zIndex = zIndex2\r\n }\r\n })\r\n }\r\n if(zIndexes && this.shadowFeature) {\r\n this.shadowFeature.layer.zIndex = zIndex3;\r\n }\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature) {\r\n if (!fromFeature) {\r\n return []\r\n }\r\n const showerSize = fromFeature.metaData[\"ShowerSize\"];\r\n const name1 = fromFeature.getSplittedFeatureName().split(\"30in \")[0].split(\"60in \")[0];\r\n const activeFeaturePart = fromFeature && fromFeature.partNumber && showerSize ? this.featuresParts.find((feature) => {\r\n const showerSize2 = feature.metaData[\"ShowerSize\"];\r\n const name2 = feature.getSplittedFeatureName().split(\"30in \")[0].split(\"60in \")[0];\r\n return showerSize2 && isEqual(showerSize, showerSize2) && (feature.partName === fromFeature.partName || name1 === name2)\r\n }) : null;\r\n if (activeFeaturePart) {\r\n activeFeaturePart.disabled = this.disabled\r\n return [activeFeaturePart]\r\n }\r\n return []\r\n }\r\n}\r\n","import isEqual from \"lodash/isEqual\";\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nimport { Shower } from \"../../parts/shower\";\r\nimport { ShowerTubCombo } from \"../../parts/showerTubCombo\";\r\n\r\nexport default class ShowerInteriorWallAccent extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partId = \"shower_interior_wall_accent\";\r\n this.partName = \"Shower Walls Accent\";\r\n this.translateId = \"visualizer.bathroom.shower.shower_interior_wall_accent\";\r\n this.dbName = \"Shower Wall Accent\";\r\n // this.homePageTitle = 'Interior Shower Walls';\r\n this.isStoneFeature = true;\r\n this.partNumber = partNumber;\r\n this.activeFeatureParts = [];\r\n this.canBeDisabled = true;\r\n this.layerPriority = 3;\r\n }\r\n\r\n load(dbFeature) {\r\n const parts = dbFeature.metaData && dbFeature.metaData[\"Parts\"];\r\n if (parts) {\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return super.load_(\r\n dbFeature,\r\n new ShowerInteriorWallAccent(false, partNumber),\r\n true,\r\n partNumber === 1 ? 'features' : 'featuresParts'\r\n );\r\n } else {\r\n return super.load_(dbFeature, new ShowerInteriorWallAccent());\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick(ignoreLocked);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.showerInteriorWallAccent.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(this.availableFeatures(super.getFilteredFeaturesByFilters(filters)), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n availableFeatures(wallFeatures) {\r\n return wallFeatures.filter(wallFeature => wallFeature.partNumber === 1)\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n const matchingFeatureExist = super.tryToSetTheSameFeature(filteredFeatures, null, null, true);\r\n if (!matchingFeatureExist) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Tan Hexagon\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n } else {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n this.setShadowFeature();\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n const activeShowerPartId = showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.WallAccent;\r\n const zIndex2 = zIndexes.Shower.Custom60in.WallAccent2;\r\n\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.zIndex = zIndex2\r\n }\r\n })\r\n }\r\n }\r\n\r\n setActiveFeatureParts() {\r\n const activeFeature = this.placeholderChanged ? this.activeFeature : this.placeholderFeature;\r\n if (activeFeature) {\r\n const showerSize = activeFeature.metaData[\"ShowerSize\"];\r\n const name1 = activeFeature.getSplittedFeatureName().split(\"30in \")[0].split(\"60in \")[0];\r\n const activeFeaturePart = activeFeature.partNumber && showerSize ? this.featuresParts.find((feature) => {\r\n const showerSize2 = feature.metaData[\"ShowerSize\"];\r\n const name2 = feature.getSplittedFeatureName().split(\"30in \")[0].split(\"60in \")[0];\r\n return showerSize2 && isEqual(showerSize, showerSize2) && (feature.partName === activeFeature.partName || name1 === name2)\r\n }) : [];\r\n if (activeFeaturePart) {\r\n activeFeaturePart.disabled = this.disabled;\r\n return [activeFeaturePart]\r\n }\r\n }\r\n return []\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport { ShowerComboTubType } from \"../../constants\";\r\nimport { getMetadataByDimensions } from \"../../../../../misc/utils\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class ShowerDoor extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_door';\r\n this.partName = 'Shower Door';\r\n this.translateId = \"visualizer.bathroom.shower.shower_door\";\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.canBeDisabled = true;\r\n this.layerPriority = 5;\r\n\r\n /* only shower door properties */\r\n if (isChild) {\r\n this.previouslySelectedFeatures = {\r\n LG: {},\r\n SM: {}\r\n };\r\n }\r\n this.currentShowerBodyId = \"\"; // for example \"custom-a-60in-30x8\"\r\n }\r\n\r\n load(dbFeature) {\r\n const doorFeature = this.load_(dbFeature, new ShowerDoor());\r\n if (doorFeature) {\r\n ShowerDoor.setAdditionalMetaData(doorFeature);\r\n }\r\n }\r\n\r\n static setAdditionalMetaData(doorFeature) {\r\n if (!doorFeature.metaData[\"CompatibleTub\"]) {\r\n doorFeature.metaData[\"CompatibleTub\"] = [\"None\"];\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const showerDoorHandle = this.getParent().showerDoorHandle;\r\n if (showerDoorHandle) {\r\n showerDoorHandle.disabled = this.disabled;\r\n }\r\n }\r\n\r\n handleClick() {\r\n super.handleClick();\r\n if (!this.notAvailableInVisualizer && !getFeatureIsLocked(this)) {\r\n // this.getParent().getParent().setShowerTubCombo();\r\n // let doorWithLiner = false;\r\n // if(this.metaData && this.metaData.length) {\r\n // const activeDoorMetadata = this.metaData.find(metaDataObject => metaDataObject.isFor);\r\n // const showerPanValues = activeDoorMetadata.conditions.find(condition => condition.name === \"BathtubLiner\");\r\n // if (showerPanValues) {\r\n // doorWithLiner = true;\r\n // }\r\n // }\r\n // this.getParent().getParent().setLinerActive(doorWithLiner);\r\n const shower = this.getParent().getParent();\r\n const showerPanCondition = this.metaData[\"ShowerPan\"];\r\n if (!shower.showerTubComboIsActive()) {\r\n shower.showerFloorIsActive = showerPanCondition && showerPanCondition.includes(\"Threshold\");\r\n }\r\n if(!this.matchesMetaForArrayOfConditions(this.getParent().getArrayOfConditions())) {\r\n const showerSizeValues = this.metaData[\"ShowerSize\"];\r\n const showerBodyParent = this.getParent().getParent().showerBody;\r\n if (showerSizeValues) {\r\n const showerBodyThatFits = showerBodyParent.features.filter(showerBodyFeature => {\r\n const showerSizeValues2 = showerBodyFeature.metaData[\"ShowerSize\"];\r\n return showerSizeValues.some(condValue => {\r\n return showerSizeValues2.some(condValue2 => condValue === condValue2);\r\n });\r\n });\r\n if (showerBodyThatFits.length && showerBodyThatFits.every(shBody => shBody.partName !== showerBodyParent.activeFeature.partName)) {\r\n let showerBodyToSet = showerBodyThatFits.find(shBody => {\r\n return shBody.showerDimensions === showerBodyParent.activeFeature.showerDimensions\r\n }) || showerBodyThatFits[0];\r\n showerBodyParent.showerBodySelectedByUser = true;\r\n showerBodyParent.activeFeature = showerBodyToSet;\r\n }\r\n }\r\n }\r\n this.featureClicked();\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const shower = this.getParent();\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(shower.showerFloorIsActive), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n const shower = this.getParent();\r\n const currentConditions = this.getArrayOfConditions(shower.showerFloorIsActive);\r\n\r\n if (this.activeFeature && !this.activeFeature.notAvailableInVisualizer && this.activeFeature.matchesMetaForArrayOfConditions(currentConditions)) {\r\n this.checkIfPlaceHolderFits(currentConditions); // here we need to check if placeholder is the same as active feature\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n this.checkIfPlaceHolderFits(currentConditions);\r\n return super.setLayers(layout);\r\n }\r\n\r\n checkIfPlaceHolderFits(currentConditions) {\r\n if (this.activeFeature && !this.placeholderChanged) {\r\n const activeFeatureShowerPanCondition = this.activeFeature.metaData[\"ShowerPan\"];\r\n if (activeFeatureShowerPanCondition) {\r\n currentConditions.push({\r\n propName: \"ShowerPan\",\r\n propValue: activeFeatureShowerPanCondition\r\n });\r\n if (!this.placeholderFeature || this.placeholderFeature.notAvailableInVisualizer\r\n || (this.placeholderFeature && !this.placeholderFeature.matchesMetaForArrayOfConditions(currentConditions))) {\r\n this.setNewPlaceHolderFeature(currentConditions);\r\n }\r\n }\r\n }\r\n }\r\n\r\n setNewPlaceHolderFeature(newConditions) {\r\n // console.log('newConditions', newConditions);\r\n const filteredFeatures = this.features ? this.features.filter(f => f.matchesMetaForArrayOfConditions(newConditions)) : [];\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\"placeholder\");\r\n });\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n\r\n getArrayOfConditions(showerFloorIsActive) {\r\n const layout = this.getParent().layout;\r\n const showerComboParent = layout.parts[ShowerTubCombo.id];\r\n const showerParent = this.getParent();\r\n\r\n let showerDimensions = showerComboParent.showerTubComboIsActive\r\n ? showerComboParent.showerDimensions()\r\n : showerParent.showerDimensions();\r\n\r\n showerDimensions = getMetadataByDimensions(showerDimensions);\r\n\r\n const vanity = layout.parts[Vanity.id];\r\n let counterTopSize = vanity.counterTopSize();\r\n if (counterTopSize === '72in' && layout.type === 1 && (showerDimensions !== \"Full\" || showerDimensions !== \"Pony\")) {\r\n showerDimensions = \"Full\"\r\n }\r\n\r\n let showerSize = showerComboParent.showerTubComboIsActive\r\n ? showerComboParent.showerSize()\r\n : showerParent.showerSize();\r\n\r\n let compatibleValue = \"None\";\r\n if (showerComboParent.showerTubComboIsActive) {\r\n if (showerComboParent.bottomTub === ShowerComboTubType.bathtub_liner) {\r\n compatibleValue = \"BathtubLiner\"\r\n } else if (showerComboParent.bottomTub === ShowerComboTubType.replacement_tub) {\r\n compatibleValue = \"ReplacementTub\"\r\n } else if (showerComboParent.bottomTub === ShowerComboTubType.walk_in_tub) {\r\n compatibleValue = \"WalkInTub\"\r\n } else if (showerComboParent.bottomTub === ShowerComboTubType.jetted_tub) {\r\n compatibleValue = \"JettedTub\"\r\n }\r\n }\r\n const conditions = [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n },{\r\n propName: \"EX L\",\r\n propValue: showerDimensions\r\n },{\r\n propName: 'CompatibleTub',\r\n propValue: compatibleValue\r\n }];\r\n if (!showerComboParent.showerTubComboIsActive) {\r\n if (showerFloorIsActive) {\r\n conditions.push({\r\n propName: \"ShowerPan\",\r\n propValue: [\"Threshold\"]\r\n })\r\n } else if (showerParent.showerPanCombo && showerParent.showerPanCombo.activeFeature) {\r\n let showerPanCondition = showerParent.showerPanCombo.activeFeature.metaData[\"ShowerPan\"];\r\n // console.log('showerPanCondition', showerPanCondition);\r\n if (showerPanCondition) {\r\n conditions.push({\r\n propName: \"ShowerPan\",\r\n propValue: showerPanCondition\r\n })\r\n }\r\n }\r\n }\r\n return conditions\r\n }\r\n\r\n setDefault() {\r\n const shower = this.getParent();\r\n const currentActiveFeature = this.activeFeature;\r\n const currentConditions = this.getArrayOfConditions(shower.showerFloorIsActive)\r\n const filteredFeatures = this.features.filter(f => !f.notAvailableInVisualizer && f.matchesMetaForArrayOfConditions(currentConditions));\r\n if (!this.tryToSetTheSameFeature(filteredFeatures)) {\r\n this.setDefaultAccordingToPreviousSelect(shower, filteredFeatures, \"\", \"Placeholder\");\r\n }\r\n this.rememberPreviousSelection(shower, currentActiveFeature);\r\n // shower.showerFloorIsActive = !!(this.activeFeature && this.activeFeature.metaData[\"ShowerPan\"]\r\n // && this.activeFeature.metaData[\"ShowerPan\"].includes(\"Threshold\"));\r\n }\r\n\r\n tryToSetTheSameFeature(filteredFeatures) {\r\n if (this.activeFeature && this.activeFeature.partName) {\r\n const nameToFind = this.activeFeature.partName.replace(\" 30\", \"\").replace(\" 60\", \"\");\r\n this.activeFeature = !nameToFind.includes(\"laceholder\") && filteredFeatures.find(feature => {\r\n if (feature.partName) {\r\n const fName = feature.partName.replace(\" 30\", \"\").replace(\" 60\", \"\");\r\n return fName.includes(nameToFind)\r\n }\r\n });\r\n this.placeholderFeature = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\"placeholder\")\r\n });\r\n if (this.activeFeature) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.ShowerDoor;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {getMetadataByDimensions, iStartWith} from \"../../../../../misc/utils\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport store from \"../../../../../store\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {toggleNotCompatibleView} from \"../../../../../actions/selectionFunctions\";\r\n\r\nexport default class ShowerPanCombo extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_pan_combo';\r\n this.partName = 'Shower Pan';\r\n this.translateId = \"visualizer.bathroom.shower.shower_pan_combo\";\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.layerPriority = 8;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerPanCombo())\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n shower.showerFloorIsActive = false;\r\n if (shower.layout && shower.showerTubComboIsActive()) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const showerPanComboParent = this.getParent();\r\n const shower = showerPanComboParent.getParent();\r\n super.handleClick(ignoreLocked); // set active item & not in visualizer item\r\n\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n\r\n if ((shower.showerFloorIsActive || shower.showerTubComboIsActive()) && !window.location.hash.includes(\"visualizer\")) {\r\n store.dispatch(toggleNotCompatibleView(true));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n\r\n if (!this.matchesMetaForArrayOfConditions(this.getParent().getArrayOfConditions())) {\r\n const showerSizeValues = this.metaData[\"ShowerSize\"];\r\n const showerPanValues = this.metaData[\"ShowerPan\"];\r\n\r\n if (showerSizeValues && showerPanValues) {\r\n const showerDoorParent = shower.showerDoor;\r\n const showerDoorsThatFits = showerDoorParent.features.filter(showerDoorFeature => {\r\n const showerSizeValues2 = showerDoorFeature.metaData[\"ShowerSize\"];\r\n const showerPanValues2 = showerDoorFeature.metaData[\"ShowerPan\"];\r\n let showerSizePassed = showerSizeValues2 && showerSizeValues.some(condValue => {\r\n return showerSizeValues2.some(condValue2 => condValue === condValue2);\r\n });\r\n let showerPanPassed = showerPanValues2 && showerPanValues.some(condPanValue => {\r\n return showerPanValues2.some(condPanValue2 => condPanValue === condPanValue2);\r\n });\r\n return showerSizePassed && showerPanPassed\r\n });\r\n if (showerDoorsThatFits && showerDoorsThatFits.length) {\r\n const showerDimensions = getMetadataByDimensions(showerDoorParent.getParent().showerBody.activeFeature.showerDimensions);\r\n const sameWallFeatures = showerDoorsThatFits.filter((showerDoorsThatFit) => {\r\n const wallValue = showerDoorsThatFit.metaData[\"Wall\"] || showerDoorsThatFit.metaData[\"EX L\"];\r\n return wallValue && wallValue.some(val => val === showerDimensions)\r\n });\r\n\r\n showerDoorParent.activeFeature = sameWallFeatures.length ? sameWallFeatures[0] : showerDoorsThatFits[0];\r\n showerDoorParent.placeholderFeature = (sameWallFeatures.length ? sameWallFeatures : showerDoorsThatFits).find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n }\r\n }\r\n const showerBodyParent = this.getParent().getParent().showerBody;\r\n if (showerSizeValues) {\r\n const showerBodyThatFits = showerBodyParent.features.filter(showerBodyFeature => {\r\n const showerSizeValues2 = showerBodyFeature.metaData[\"ShowerSize\"];\r\n return showerSizeValues2 && showerSizeValues.some(condValue => {\r\n return showerSizeValues2.some(condValue2 => condValue === condValue2);\r\n });\r\n });\r\n if (showerBodyThatFits.length && showerBodyThatFits.every(shBody => shBody.partName !== showerBodyParent.activeFeature.partName)) {\r\n let showerBodyToSet = showerBodyThatFits.find(shBody => {\r\n return shBody.showerDimensions === showerBodyParent.activeFeature.showerDimensions\r\n }) || showerBodyThatFits[0];\r\n showerBodyParent.showerBodySelectedByUser = true;\r\n showerBodyParent.activeFeature = showerBodyToSet;\r\n }\r\n }\r\n this.featureClicked();\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent();\r\n\r\n if (showerParent.showerTubComboIsActive() || showerParent.showerFloorIsActive) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && !this.activeFeature.notAvailableInVisualizer\r\n && this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions(dontFilterByDoorPanMeta) {\r\n const showerParent = this.getParent();\r\n const showerSize = showerParent.showerSize();\r\n let showerDoorType = '';\r\n const showerDoor = showerParent.showerDoor;\r\n const showerDoorActiveFeature = showerDoor ? (showerDoor.activeFeature || showerDoor.placeholderFeature) : null;\r\n if (!dontFilterByDoorPanMeta && showerDoorActiveFeature) {\r\n const showerPanValues = showerDoorActiveFeature.metaData[\"ShowerPan\"];\r\n if (showerPanValues) {\r\n showerDoorType = showerPanValues;\r\n }\r\n }\r\n\r\n // console.log('showerDoorType', showerDoorType);\r\n // const showerDimensions = this.getParent().showerDimensions() === \"30X8\" ? \"Full\" : \"Half\";\r\n const conditions = [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }];\r\n if (!dontFilterByDoorPanMeta && showerDoorType) {\r\n conditions.push({\r\n propName: 'ShowerPan',\r\n propValue: showerDoorType\r\n })\r\n }\r\n return conditions;\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => !f.notAvailableInVisualizer && f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n let currentShowerPanMetadata = this.activeFeature && this.activeFeature.metaData[\"ShowerPan\"]\r\n ? [...this.activeFeature.metaData[\"ShowerPan\"]]\r\n : null;\r\n let previousFeature = null;\r\n if (this.activeFeature) {\r\n previousFeature = Object.assign({} , this.activeFeature);\r\n }\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n let featureToSet = null;\r\n if (currentShowerPanMetadata) {\r\n\r\n let currentColorArrayValue = null;\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const colorGroup = filterGroups.length && filterGroups.find(filterGroup => filterGroup.name === \"Color\");\r\n currentColorArrayValue = previousFeature.dbFeature.filterValueIDs\r\n && previousFeature.dbFeature.filterValueIDs[colorGroup.id];\r\n\r\n const existingPans = filteredFeatures.filter((feature) => {\r\n return feature.metaData[\"ShowerPan\"] && feature.metaData[\"ShowerPan\"].some((metaValue) => {\r\n return currentShowerPanMetadata.includes(metaValue)\r\n })\r\n });\r\n featureToSet = currentColorArrayValue\r\n ? existingPans.find(filteredFeature => {\r\n return filteredFeature.dbFeature.filterValueIDs\r\n && filteredFeature.dbFeature.filterValueIDs[colorGroup.id]\r\n && filteredFeature.dbFeature.filterValueIDs[colorGroup.id].some(filteredFeatureColor => {\r\n return currentColorArrayValue.some(col => col === filteredFeatureColor)\r\n })\r\n })\r\n : existingPans[0];\r\n if (!featureToSet) {\r\n let filteredByPan = [];\r\n if (currentShowerPanMetadata.includes(\"Low Threshold\")) {\r\n filteredByPan = super.getFeaturesWithMeta(filteredFeatures, \"ShowerPan\", \"Designer\")\r\n } else if (currentShowerPanMetadata.includes(\"Designer\")) {\r\n filteredByPan = super.getFeaturesWithMeta(filteredFeatures, \"ShowerPan\", \"Low Threshold\")\r\n } else if (currentShowerPanMetadata.includes(\"Custom\")) {\r\n filteredByPan = super.getFeaturesWithMeta(filteredFeatures, \"ShowerPan\", \"Standard\");\r\n if (!filteredByPan.length) {\r\n filteredByPan = super.getFeaturesWithMeta(filteredFeatures, \"ShowerPan\", \"Made In The USA\");\r\n }\r\n } else if (currentShowerPanMetadata.includes(\"Standard\")) {\r\n filteredByPan = super.getFeaturesWithMeta(filteredFeatures, \"ShowerPan\", \"Custom\");\r\n if (!filteredByPan.length) {\r\n filteredByPan = super.getFeaturesWithMeta(filteredFeatures, \"ShowerPan\", \"Made In The USA\");\r\n }\r\n } else if (currentShowerPanMetadata.includes(\"Made In The USA\")) {\r\n filteredByPan = super.getFeaturesWithMeta(filteredFeatures, \"ShowerPan\", \"Custom\");\r\n if (!filteredByPan.length) {\r\n filteredByPan = super.getFeaturesWithMeta(filteredFeatures, \"ShowerPan\", \"Standart\");\r\n }\r\n }\r\n if (filteredByPan.length && previousFeature) {\r\n\r\n if (colorGroup && previousFeature.dbFeature.filterValueIDs) {\r\n const currentColorArrayValue = previousFeature.dbFeature.filterValueIDs[colorGroup.id];\r\n if (currentColorArrayValue) {\r\n featureToSet = filteredByPan.find(filteredFeature => {\r\n return filteredFeature.dbFeature.filterValueIDs\r\n && filteredFeature.dbFeature.filterValueIDs[colorGroup.id]\r\n && filteredFeature.dbFeature.filterValueIDs[colorGroup.id].some(filteredFeatureColor => {\r\n return currentColorArrayValue.some(col => col === filteredFeatureColor)\r\n })\r\n });\r\n // console.log('featureToSet', featureToSet);\r\n }\r\n }\r\n }\r\n if (!featureToSet && filteredByPan.length) {\r\n featureToSet = filteredByPan[0]\r\n }\r\n }\r\n }\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return iStartWith(feature.dbFeature.displayName, 'Shower Pan - Placeholder');\r\n });\r\n this.activeFeature = featureToSet || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.ShowerPanCombo;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {ShowerComboTubType, LayoutAbbreviation} from \"../../constants\";\r\nimport {getMetadataByDimensions} from \"../../../../../misc/utils\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n\r\nexport default class ShowerDoorHandle extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_door_handle';\r\n this.partName = 'Handle';\r\n this.translateId = \"visualizer.bathroom.shower.shower_door_handle\";\r\n this.dbName = 'Shower Door Handle';\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.layerPriority = 9;\r\n if (isChild) {\r\n this.previouslySelectedFeatures = {\r\n LG: {},\r\n SM: {}\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const handle = this.load_(dbFeature, new ShowerDoorHandle());\r\n if (handle) {\r\n ShowerDoorHandle.setAdditionalMetaData(handle);\r\n }\r\n }\r\n\r\n static setAdditionalMetaData(handle) {\r\n const compatible = handle.metaData[\"CompatibleTub\"];\r\n const showerSize = handle.metaData[\"ShowerSize\"];\r\n if (!compatible) {\r\n handle.metaData[\"CompatibleTub\"] = [\"None\"];\r\n }\r\n if (!showerSize) {\r\n handle.metaData[\"ShowerSize\"] = [\"60in\"];\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const showerDoor = this.getParent().showerDoor;\r\n if (showerDoor) {\r\n showerDoor.disabled = this.disabled;\r\n }\r\n }\r\n\r\n handleClick() {\r\n super.handleClick();\r\n // this.getParent().getParent().setShowerTubCombo();\r\n //\r\n // let doorWithLiner = false;\r\n // if(this.metaData && this.metaData.length) {\r\n // const activeDoorMetadata = this.metaData.find(metaDataObject => metaDataObject.isFor);\r\n // const showerPanValues = activeDoorMetadata.conditions.find(condition => condition.name === \"BathtubLiner\");\r\n // if (showerPanValues) {\r\n // doorWithLiner = true;\r\n // }\r\n // }\r\n //\r\n // this.getParent().getParent().setLinerActive(doorWithLiner);\r\n // this.featureClicked();\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent();\r\n\r\n if (!showerParent.showerDoor || !showerParent.showerDoor.activeFeature ||\r\n (showerParent.showerDoor.activeFeature.metaData && showerParent.showerDoor.activeFeature.metaData[\"ShowerHandle\"]\r\n && showerParent.showerDoor.activeFeature.metaData[\"ShowerHandle\"][0] === \"None\")) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const layout = this.getParent().layout;\r\n const showerComboParent = layout.parts[ShowerTubCombo.id];\r\n const showerParent = this.getParent();\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n\r\n let showerSize = showerComboParent.showerTubComboIsActive\r\n ? showerComboParent.showerSize()\r\n : showerParent.showerSize();\r\n\r\n let compatibleValue = \"None\";\r\n if (showerComboParent.showerTubComboIsActive) {\r\n if (showerComboParent.bottomTub === ShowerComboTubType.bathtub_liner) {\r\n compatibleValue = \"BathtubLiner\"\r\n } else if (showerComboParent.bottomTub === ShowerComboTubType.replacement_tub) {\r\n compatibleValue = \"ReplacementTub\"\r\n } else if (showerComboParent.bottomTub === ShowerComboTubType.walk_in_tub) {\r\n compatibleValue = \"WalkInTub\"\r\n } else if (showerComboParent.bottomTub === ShowerComboTubType.jetted_tub) {\r\n compatibleValue = \"JettedTub\"\r\n }\r\n }\r\n\r\n const conditions = [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n },{\r\n propName: 'CompatibleTub',\r\n propValue: compatibleValue\r\n }];\r\n\r\n if (layoutAbr === LayoutAbbreviation.Large) {\r\n let showerDimensions = showerComboParent.showerTubComboIsActive\r\n ? showerComboParent.showerDimensions()\r\n : showerParent.showerDimensions();\r\n\r\n showerDimensions = getMetadataByDimensions(showerDimensions);\r\n\r\n const vanity = layout.parts[Vanity.id];\r\n let counterTopSize = vanity.counterTopSize();\r\n if (counterTopSize === '72in' && layout.type === 1 && (showerDimensions !== \"Full\" || showerDimensions !== \"Pony\")) {\r\n showerDimensions = \"Full\"\r\n }\r\n\r\n conditions.push({\r\n propName: \"EX L\",\r\n propValue: showerDimensions\r\n })\r\n }\r\n\r\n if (showerParent.showerDoor && showerParent.showerDoor.activeFeature) { // add shower pan condition only if it is shower\r\n const doorCondition = showerParent.showerDoor.activeFeature.metaData[\"ShowerDoor\"];\r\n const handleCondition = showerParent.showerDoor.activeFeature.metaData[\"ShowerHandle\"];\r\n // console.log('doorCondition', doorCondition);\r\n if (doorCondition) {\r\n conditions.push({\r\n propName: 'ShowerDoor',\r\n propValue: doorCondition\r\n })\r\n }\r\n if (handleCondition) {\r\n conditions.push({\r\n propName: 'ShowerHandle',\r\n propValue: handleCondition\r\n })\r\n }\r\n }\r\n\r\n if (!showerParent.showerTubComboIsActive()) {\r\n if (showerParent.showerFloorIsActive) {\r\n conditions.push({\r\n propName: \"ShowerPan\",\r\n propValue: \"Threshold\"\r\n })\r\n } else if (showerParent.showerPanCombo && showerParent.showerPanCombo.activeFeature) {\r\n conditions.push({\r\n propName: \"ShowerPan\",\r\n propValue: showerParent.showerPanCombo.activeFeature.metaData[\"ShowerPan\"]\r\n })\r\n }\r\n }\r\n // console.log('conditions', conditions);\r\n return conditions\r\n }\r\n\r\n setDefault() {\r\n const shower = this.getParent();\r\n const currentActiveFeature = this.activeFeature;\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n this.setDefaultAccordingToPreviousSelect(shower, filteredFeatures, \"Brantford\");\r\n }\r\n this.rememberPreviousSelection(shower, currentActiveFeature);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.ShowerDoorHandle;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {LayoutAbbreviation} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class PonyWallCap extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'pony_wall_cap';\r\n this.isPonyWallPart = true;\r\n this.visible = true;\r\n this.partName = 'Pony Wall Cap';\r\n this.translateId = \"visualizer.bathroom.shower.pony_wall_cap\";\r\n this.isStoneFeature = true;\r\n this.disableOnHomeSections = true;\r\n this.shadowName = \"Pony Wall Cap\";\r\n this.layerPriority = 11;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new PonyWallCap());\r\n }\r\n\r\n disabledClick() {\r\n\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.PonyWallCap;\r\n const zIndex2 = zIndexes.Shower.Custom60in.PonyWallCapShadow;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.shadowFeature) {\r\n this.shadowFeature.layer.zIndex = zIndex2;\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().getActiveShowerGroup();\r\n if (showerParent.showerDimensions() !== \"Pony\") {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if (!this.shadowFeature || (this.shadowFeature && !this.shadowFeature.matchesMetaForArrayOfConditions(conditions))) {\r\n this.setShadowFeature();\r\n }\r\n\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n const matchesByBindings = this.activeFeature && this.activeFeature.dbFeature && this.activeFeature.s3Bindings && this.activeFeature.dbFeature.s3Bindings.some(binding => {\r\n return binding.layout === LayoutAbbreviation.All || binding.layout === layoutAbr\r\n });\r\n if (matchesByBindings && (this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const parent = this.getParent();\r\n const layout = parent.layout;\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n if (layoutAbr === LayoutAbbreviation.Small){\r\n const activeShower = parent.showerTubComboIsActive()\r\n ? layout.parts[ShowerTubCombo.id]\r\n : layout.parts[Shower.id];\r\n const showerSize = activeShower.showerSize(); // 60in, 30in, ..\r\n // const showerDimensions = activeShower.showerDimensions(); // 15x4, Pony, ...\r\n return [{\r\n propName: 'Shower',\r\n propValue: 'Custom'\r\n }, {\r\n propName: 'Size',\r\n propValue: showerSize\r\n }];\r\n }\r\n\r\n return []\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, '', '', true)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName\r\n && feature.dbFeature.displayName.includesCI(\"Pony Wall Cap - Model[For=Shower=(Custom)=Size=(30in_60in)]\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\" - Placeholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n this.setShadowFeature();\r\n }\r\n }\r\n\r\n}\r\n","import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {LayoutAbbreviation} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\n\r\nexport default class PonyWallGlass extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'pony_wall_glass';\r\n this.isPonyWallPart = true;\r\n this.visible = true;\r\n this.partName = 'Pony Wall Glass';\r\n this.translateId = \"visualizer.bathroom.shower.pony_wall_glass\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n this.layerPriority = 10;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new PonyWallGlass());\r\n }\r\n\r\n disabledClick() {\r\n\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.PonyWallGlass;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().getActiveShowerGroup();\r\n if (showerParent.showerDimensions() !== \"Pony\") {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n const matchesByBindings = this.activeFeature && this.activeFeature.dbFeature.s3Bindings.some(binding => {\r\n return binding.layout === LayoutAbbreviation.All || binding.layout === layoutAbr\r\n });\r\n\r\n if (matchesByBindings && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n const layout = showerParent.layout;\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n\r\n if (layoutAbr === LayoutAbbreviation.Small) {\r\n const showerComboParent = this.getParent().layout.parts[ShowerTubCombo.id];\r\n let showerSize = showerComboParent.showerTubComboIsActive\r\n ? showerComboParent.showerSize()\r\n : showerParent.showerSize();\r\n return [{\r\n propName: 'Size',\r\n propValue: showerSize\r\n }]\r\n }\r\n\r\n return []\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Standard Pony Wall\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n}\r\n","import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {ShowerBodyType} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport store from \"../../../../../store\";\r\nimport {toggleNotCompatibleView} from \"../../../../../actions/selectionFunctions\";\r\n\r\nexport default class ShowerFloor extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_floor';\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.bathroom.shower.shower_floor\";\r\n this.homePageTitle = 'Shower Flooring';\r\n this.dbName = 'ShowerFloor';\r\n this.isStoneFeature = true;\r\n this.selectedByUser = false;\r\n this.shadowName = \"Floor\";\r\n this.layerPriority = 6;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerFloor())\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n shower.showerFloorIsActive = true;\r\n if (shower.layout && shower.showerTubComboIsActive()) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked);\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n if ((!shower.showerFloorIsActive || shower.showerTubComboIsActive()) && !window.location.hash.includes(\"visualizer\")) {\r\n store.dispatch(toggleNotCompatibleView(true));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n\r\n this.getParent().selectedByUser = true;\r\n const threshold = shower.threshold;\r\n if (threshold && !threshold.selectedByUser) {\r\n const thresholdAvailableFeatures = threshold.navigationSubItems();\r\n const currentFloorName = this.getSplittedFeatureName();\r\n const sameThreshold = thresholdAvailableFeatures.find(tr => tr.part.getSplittedFeatureName() === currentFloorName);\r\n if (sameThreshold) {\r\n super.handleClick.call(sameThreshold.part);\r\n threshold.selectedByUser = false;\r\n }\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n if (this.getParent().showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.getParent().customBodyType === ShowerBodyType.Door) {\r\n const showerDoorParent = this.getParent().showerDoor;\r\n if (showerDoorParent && showerDoorParent.activeFeature) {\r\n const currentShowerPanCondition = showerDoorParent.activeFeature.metaData[\"ShowerPan\"];\r\n if (!currentShowerPanCondition || (currentShowerPanCondition && !currentShowerPanCondition.includes(\"Threshold\"))) {\r\n super.hideLayers();\r\n return;\r\n }\r\n }\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if (!this.shadowFeature || (this.shadowFeature && !this.shadowFeature.matchesMetaForArrayOfConditions(conditions))) {\r\n this.setShadowFeature();\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: this.getParent().showerSize()\r\n }];\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Sahara Autumn Porcelain Tile\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n this.setShadowFeature();\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (this.getParent().activeSubType() === Shower.Type.Custom) {\r\n const zIndex = zIndexes.Shower.Custom60in.Floor;\r\n const zIndex2 = zIndexes.Shower.Custom60in.FloorShadow;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n if(zIndexes && this.shadowFeature) {\r\n this.shadowFeature.layer.zIndex = zIndex2;\r\n }\r\n }\r\n }\r\n}\r\n","import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {ShowerBodyType} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport { getMetadataByDimensions } from \"../../../../../misc/utils\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport store from \"../../../../../store\";\r\nimport {toggleNotCompatibleView} from \"../../../../../actions/selectionFunctions\";\r\n\r\nexport default class Threshold extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'threshold';\r\n this.partName = 'Threshold';\r\n this.translateId = \"visualizer.bathroom.shower.threshold\";\r\n this.homePageTitle = 'Threshold';\r\n this.dbName = 'ShowerPan';\r\n this.isStoneFeature = true;\r\n this.selectedByUser = false;\r\n this.shadowName = \"Pan\";\r\n this.layerPriority = 7;\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n shower.showerFloorIsActive = true;\r\n if (shower.layout && shower.showerTubComboIsActive()) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked);\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n if ((!shower.showerFloorIsActive || shower.showerTubComboIsActive()) && !window.location.hash.includes(\"visualizer\")) {\r\n store.dispatch(toggleNotCompatibleView(true));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n\r\n this.getParent().selectedByUser = true;\r\n const showerFloor = shower.showerFloor;\r\n if (showerFloor && !showerFloor.selectedByUser) {\r\n const showerFloorAvailableFeatures = showerFloor.navigationSubItems();\r\n const currentThresholdName = this.getSplittedFeatureName();\r\n const sameShowerFloor = showerFloorAvailableFeatures.find(navItemFloor => {\r\n return navItemFloor.part.getSplittedFeatureName() === currentThresholdName\r\n });\r\n if (sameShowerFloor) {\r\n super.handleClick.call(sameShowerFloor.part);\r\n showerFloor.selectedByUser = false;\r\n }\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData) {\r\n if(Array.isArray(dbFeature.metaData[\"EX L\"])) {\r\n if (dbFeature.metaData[\"EX L\"].includes(\"Full\") && !dbFeature.metaData[\"EX L\"].includes(\"Pony\")) {\r\n dbFeature.metaData[\"EX L\"].push(\"Pony\");\r\n } else if (dbFeature.metaData[\"EX L\"].includes(\"Pony\") && !dbFeature.metaData[\"EX L\"].includes(\"Full\")) {\r\n dbFeature.metaData[\"EX L\"].push(\"Full\");\r\n }\r\n } else if (!dbFeature.metaData[\"EX L\"] && Array.isArray(dbFeature.metaData[\"ShowerSize\"]) && dbFeature.metaData[\"ShowerSize\"][0] === \"30in\"\r\n && Array.isArray(dbFeature.s3Bindings) && dbFeature.s3Bindings[0] && dbFeature.s3Bindings[0].layout === \"SM\") {\r\n dbFeature.metaData[\"EX L\"] = [\"Full\", \"Pony\"];\r\n }\r\n }\r\n return super.load_(dbFeature, new Threshold())\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n if (this.getParent().showerTubComboIsActive() || !this.getParent().showerFloorIsActive) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.getParent().customBodyType === ShowerBodyType.Door) {\r\n const showerDoorParent = this.getParent().showerDoor;\r\n if (showerDoorParent && showerDoorParent.activeFeature) {\r\n const currentShowerPanCondition = showerDoorParent.activeFeature.metaData[\"ShowerPan\"];\r\n if (!currentShowerPanCondition || (currentShowerPanCondition && !currentShowerPanCondition.includes(\"Threshold\"))) {\r\n super.hideLayers();\r\n return;\r\n }\r\n }\r\n }\r\n const conditions = this.getArrayOfConditions();\r\n if (!this.shadowFeature || (this.shadowFeature && !this.shadowFeature.matchesMetaForArrayOfConditions(conditions))) {\r\n this.setShadowFeature();\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const layout = this.getParent().layout;\r\n const showerSize = this.getParent().showerSize();\r\n let showerDimensions = getMetadataByDimensions(this.getParent().showerDimensions());\r\n\r\n const vanity = layout.parts[Vanity.id];\r\n let counterTopSize = vanity.counterTopSize();\r\n if (counterTopSize === '72in' && layout.type === 1 && (showerDimensions !== \"Full\" || showerDimensions !== \"Pony\")) {\r\n showerDimensions = \"Full\"\r\n }\r\n\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }, {\r\n propName: 'EX L',\r\n propValue: showerDimensions\r\n }];\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Sahara Autumn Porcelain Tile\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n this.setShadowFeature();\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (this.getParent().activeSubType() === Shower.Type.Custom) {\r\n const zIndex = zIndexes.Shower.Custom60in.Threshold;\r\n const zIndex2 = zIndexes.Shower.Custom60in.ThresholdShadow;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n if(zIndexes && this.shadowFeature) {\r\n this.shadowFeature.layer.zIndex = zIndex2;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\n\r\nexport default class ShowerDrain extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_drain';\r\n this.partName = 'Shower Drain';\r\n this.translateId = \"visualizer.bathroom.shower.shower_drain\";\r\n this.homePageTitle = 'Shower Drain';\r\n this.visible = false;\r\n this.layerPriority = 14;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerDrain())\r\n }\r\n\r\n setLayers(layout) {\r\n const showerParent = this.getParent();\r\n if (!showerParent.showerFloorIsActive || showerParent.showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerSize = this.getParent().showerSize();\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }];\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n this.activeFeature = filteredFeatures[0];\r\n this.placeholderFeature = filteredFeatures[0];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.ShowerDrain;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class ShowerHead extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_head';\r\n this.translateId = \"visualizer.bathroom.shower.shower_head\";\r\n this.partName = 'Shower Head';\r\n this.layerPriority = 4;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.previouslySelectedFeatures = {\r\n LG: {},\r\n SM: {}\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerHead());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerTubCombo = this.getParent().layout.parts[ShowerTubCombo.id];\r\n\r\n if (this.getParent().showerTubComboIsActive() && showerTubCombo && showerTubCombo.walkInTub\r\n && showerTubCombo.bottomTub === showerTubCombo.walkInTub.bottomTubId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n const activeShowerPartId = showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n return [{\r\n propName: \"Shower\",\r\n propValue: showerParent.showerTubComboIsActive()\r\n ? [\"Tub\"]\r\n : showerParent.isComplete() ? \"Complete\" : \"Custom\"\r\n }, {\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }]\r\n }\r\n\r\n setDefault() {\r\n const shower = this.getParent();\r\n const currentActiveFeature = this.activeFeature;\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n this.setDefaultAccordingToPreviousSelect(shower, filteredFeatures, \"Brantford\");\r\n }\r\n this.rememberPreviousSelection(shower, currentActiveFeature);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const ShowerType = this.getParent().activeSubType() === Shower.Type.Custom || this.getParent().showerTubComboIsActive()\r\n ? 'Custom60in'\r\n : 'Steam60in';\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Shower[ShowerType].ShowerHead;\r\n }\r\n if(zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Shower[ShowerType].ShowerHead;\r\n }\r\n }\r\n}\r\n","import find from \"lodash/find\";\r\n\r\nimport {Part} from \"./part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {IntermediatePart} from \"./intermediatePart\";\r\n\r\nexport default class GlobalShadow extends Part {\r\n static id = 'Global Shadow';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Simple);\r\n this.partId = 'global_shadow';\r\n this.menuType = PartMenuType.Simple;\r\n this.partName = 'Global Shadow';\r\n }\r\n\r\n load(dbFeature) {\r\n let part = null;\r\n switch (dbFeature.groupName) {\r\n case \"Global Shadow\":\r\n part = new GlobalShadowBody();\r\n break;\r\n }\r\n if (part) {\r\n part.getParent = () => this;\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n part.load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setLayers(layout) {\r\n const layers = [];\r\n if (this.activeFeature) {\r\n this.activeFeature.setLayers(layout);\r\n this.activeFeature.layer.addTo(layers);\r\n }\r\n return layers;\r\n }\r\n\r\n setDefault() {\r\n this.activeFeature = this.features[0];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.setZIndex(zIndexes);\r\n }\r\n }\r\n\r\n}\r\n\r\nclass GlobalShadowBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n\r\n this.partName = 'Global Shadow Body';\r\n }\r\n\r\n load(dbFeature) {\r\n super.load_.call(this.getParent(), dbFeature, this, false);\r\n }\r\n\r\n setLayers(layout) {\r\n // const s3Binding = find(this.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this)});\r\n let s3Binding = find(this.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this), layout: layout.getCurrentLayoutAbbreviation()});\r\n if (!s3Binding) {\r\n s3Binding = find(this.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this)});\r\n }\r\n this.layer.fromS3Binding(s3Binding);\r\n }\r\n\r\n setDefault() {\r\n this.activeFeature = this.features[0];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes)\r\n this.layer.zIndex = zIndexes.Global_Shadow_Overlay;\r\n }\r\n}\r\n","import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {LayoutAbbreviation} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\n\r\nexport default class PonyWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'pony_wall';\r\n this.isPonyWallPart = true;\r\n this.visible = true;\r\n this.partName = 'Pony Wall';\r\n this.translateId = \"visualizer.bathroom.walls.pony_wall\";\r\n this.isStoneFeature = true;\r\n this.disableOnHomeSections = true;\r\n this.shadowName = \"Pony Wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new PonyWall());\r\n }\r\n\r\n disabledClick() {\r\n\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom) {\r\n super.handleClick(ignoreLocked);\r\n\r\n const wallParent = this.getParent().getParent();\r\n\r\n const layout = wallParent.layout;\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n\r\n if (layoutAbr === LayoutAbbreviation.Large) {\r\n if (clickFrom !== 'context' && clickFrom !== 'all_walls') {\r\n const wallExLFeature = wallParent.wallExL && wallParent.wallExL.features.find(feature => {\r\n return feature.partName === this.partName\r\n });\r\n if (wallExLFeature) {\r\n wallExLFeature.handleClick(ignoreLocked, 'context');\r\n }\r\n }\r\n }\r\n\r\n this.featureClicked();\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.PonyWall;\r\n const zIndex2 = zIndexes.Shower.Custom60in.PonyWallShadow;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.shadowFeature) {\r\n this.shadowFeature.layer.zIndex = zIndex2;\r\n }\r\n }\r\n\r\n getAvailableFeatures(filters) {\r\n const filteredAvailableFeatures = super.getFilteredFeaturesByFilters(filters);\r\n return super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n const shower = this.getParent().layout.parts[Shower.id];\r\n const showerParent = shower.getActiveShowerGroup();\r\n if (showerParent.showerDimensions() !== \"Pony\" || (!shower.showerTubComboIsActive()\r\n && shower.showerBody.disabled)) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (!this.shadowFeature\r\n || (this.shadowFeature && !this.shadowFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n this.setShadowFeature();\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const parent = this.getParent();\r\n const layout = parent.layout;\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n if (layoutAbr === LayoutAbbreviation.Small){\r\n const activeShower = parent.showerTubComboIsActive()\r\n ? layout.parts[ShowerTubCombo.id]\r\n : layout.parts[Shower.id];\r\n const showerSize = activeShower.showerSize(); // 60in, 30in, ..\r\n // const showerDimensions = activeShower.showerDimensions(); // 15x4, Pony, ...\r\n return [{\r\n propName: 'Shower',\r\n propValue: 'Custom'\r\n }, {\r\n propName: 'Size',\r\n propValue: showerSize\r\n }];\r\n }\r\n\r\n return []\r\n }\r\n\r\n setDefault(layout) {\r\n if (!layout)\r\n return ;\r\n\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, null, null, true)) {\r\n let hardCodedName = '';\r\n switch (layoutAbr) {\r\n case LayoutAbbreviation.Small:\r\n hardCodedName = 'Pony Wall - Demo Model';\r\n break;\r\n case LayoutAbbreviation.Large:\r\n hardCodedName = 'Pony Wall - Model[For=Shower=(Custom)=Size=(30in_60in)]';\r\n break;\r\n default:\r\n console.error('PonyWall - Unknown Layout Abr', layoutAbr);\r\n }\r\n\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName &&\r\n feature.dbFeature.displayName.includesCI(hardCodedName);\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\"placeholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n this.setShadowFeature();\r\n }\r\n }\r\n\r\n // changeLayout(layoutType) {\r\n changeLayout() {\r\n // this.activeFeature = null;\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\n\r\nexport default class WallA extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'wall_a';\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.partName = 'Wall A';\r\n this.translateId = \"visualizer.bathroom.walls.wall_a\";\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new WallA());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Wall_A;\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Wall_A;\r\n }\r\n }\r\n }\r\n\r\n // handleClick(clickFrom) {\r\n // if (clickFrom === 'simpleWall' || clickFrom === 'showerWall' || clickFrom === 'vanityWall') {\r\n // const parent = this.getParent();\r\n // if (clickFrom === 'simpleWall') {\r\n // parent.allWallsApplied = true;\r\n // }\r\n // parent.activeFeatureBeforeAllWalls = parent.activeFeature;\r\n // if (!parent.placeholderChanged) {\r\n // parent.rememberToRecoverPlaceholder = true;\r\n // }\r\n // }\r\n // super.handleClick();\r\n // }\r\n\r\n // unCheckAllWalls(clickFrom, navPart) {\r\n // if (clickFrom === 'simpleWall') {\r\n // this.allWallsApplied = false;\r\n // }\r\n // if (!(navPart instanceof WallA)) {\r\n // if (this.activeFeatureBeforeAllWalls) {\r\n // this.activeFeatureBeforeAllWalls.handleClick();\r\n // this.activeFeatureBeforeAllWalls = null;\r\n // }\r\n // if (this.rememberToRecoverPlaceholder) {\r\n // this.placeholderChanged = false;\r\n // this.rememberToRecoverPlaceholder = false;\r\n // }\r\n // }\r\n // }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\n\r\nexport default class WallB extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'wall_b';\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.partName = 'Wall B';\r\n this.translateId = \"visualizer.bathroom.walls.wall_b\";\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new WallB());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Wall_B;\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Wall_B;\r\n }\r\n }\r\n }\r\n\r\n // handleClick(clickFrom) {\r\n // if (clickFrom === 'simpleWall' || clickFrom === 'showerWall' || clickFrom === 'vanityWall') {\r\n // const parent = this.getParent();\r\n // if (clickFrom === 'simpleWall') {\r\n // parent.allWallsApplied = true;\r\n // }\r\n // parent.activeFeatureBeforeAllWalls = parent.activeFeature;\r\n // if (!parent.placeholderChanged) {\r\n // parent.rememberToRecoverPlaceholder = true;\r\n // }\r\n // }\r\n // super.handleClick();\r\n // }\r\n\r\n // unCheckAllWalls(clickFrom, navPart) {\r\n // if (clickFrom === 'simpleWall') {\r\n // this.allWallsApplied = false;\r\n // }\r\n // if (!(navPart instanceof WallB)) {\r\n // if (this.activeFeatureBeforeAllWalls) {\r\n // this.activeFeatureBeforeAllWalls.handleClick();\r\n // this.activeFeatureBeforeAllWalls = null;\r\n // }\r\n // if (this.rememberToRecoverPlaceholder) {\r\n // this.placeholderChanged = false;\r\n // this.rememberToRecoverPlaceholder = false;\r\n // }\r\n // }\r\n // }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\n\r\nexport default class WallC extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'wall_c';\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.partName = 'Wall C';\r\n this.translateId = \"visualizer.bathroom.walls.wall_c\";\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n this.homePageTitle = \"Walls\"\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.displayName.includes(\"laceholder\")) { // exclude ALL s3binding since WALL C can not be ALL (only LG or SM)\r\n const layoutAbr = this.getParent().layout.getCurrentLayoutAbbreviation();\r\n dbFeature.s3Bindings = dbFeature.s3Bindings && dbFeature.s3Bindings.filter(binding => {\r\n return (binding.layout !== \"ALL\") && (binding.layout === layoutAbr)\r\n });\r\n if (!dbFeature.s3Bindings || !dbFeature.s3Bindings.length) {\r\n return false\r\n }\r\n }\r\n return super.load_(dbFeature, new WallC());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Wall_C;\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Wall_C;\r\n }\r\n }\r\n }\r\n\r\n // handleClick(clickFrom) {\r\n // if (clickFrom === 'simpleWall' || clickFrom === 'showerWall' || clickFrom === 'vanityWall') {\r\n // const parent = this.getParent();\r\n // if (clickFrom === 'simpleWall') {\r\n // parent.allWallsApplied = true;\r\n // }\r\n // parent.activeFeatureBeforeAllWalls = parent.activeFeature;\r\n // if (!parent.placeholderChanged) {\r\n // parent.rememberToRecoverPlaceholder = true;\r\n // }\r\n // }\r\n // super.handleClick();\r\n // }\r\n\r\n // unCheckAllWalls(clickFrom, navPart) {\r\n // if (clickFrom === 'simpleWall') {\r\n // this.allWallsApplied = false;\r\n // }\r\n // if (!(navPart instanceof WallC)) {\r\n // if (this.activeFeatureBeforeAllWalls) {\r\n // this.activeFeatureBeforeAllWalls.handleClick();\r\n // this.activeFeatureBeforeAllWalls = null;\r\n // }\r\n // if (this.rememberToRecoverPlaceholder) {\r\n // this.placeholderChanged = false;\r\n // this.rememberToRecoverPlaceholder = false;\r\n // }\r\n // }\r\n // }\r\n\r\n}\r\n","import {LayoutAbbreviation} from \"../../constants\";\r\nimport {iIncludes} from \"../../../../../misc/utils\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport ExternallWall from \"./externallWall\";\r\n\r\nexport default class WallExR extends ExternallWall {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"right_shower_wall\";\r\n this.partName = \"Right Shower Wall\";\r\n this.translateId = \"visualizer.bathroom.walls.right_shower_wall\";\r\n this.wallName = \"ExtrusionWallRight\";\r\n this.shadowName = \"Popout\";\r\n this.dbName = \"EX R\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new WallExR());\r\n }\r\n\r\n getShadowConditions() {\r\n return this.getArrayOfConditions()\r\n }\r\n\r\n getDefaultFeature() {\r\n const layout = this.layout;\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n const filteredFeatures = this.getAvailableFeatures();\r\n\r\n let hardCodedName = '';\r\n switch (layoutAbr) {\r\n case LayoutAbbreviation.Small:\r\n hardCodedName = 'Rafter';\r\n break;\r\n case LayoutAbbreviation.Large:\r\n hardCodedName = 'Sahara Autumn Porcelain Tile';\r\n break;\r\n }\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return iIncludes(feature.dbFeature.displayName, hardCodedName);\r\n });\r\n return hardCodedDefault || filteredFeatures[0];\r\n }\r\n\r\n getArrayOfConditions() {\r\n\r\n const wallParent = this.getParent();\r\n const layout = wallParent.layout;\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n\r\n const activeShowerPartId = wallParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = wallParent.layout.parts[activeShowerPartId].showerSize();\r\n\r\n const conditions = [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }];\r\n\r\n if (layoutAbr === LayoutAbbreviation.Small) {\r\n let counterTopSize = layout.parts[Vanity.id].counterTopSize();\r\n conditions.push({\r\n propName: 'CountertopSize',\r\n propValue: counterTopSize\r\n });\r\n }\r\n\r\n return conditions;\r\n }\r\n}\r\n","import {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {LayoutAbbreviation} from \"../../constants\";\r\nimport {getMetadataByDimensions} from \"../../../../../misc/utils\";\r\nimport ExternallWall from \"./externallWall\";\r\n\r\nexport default class WallExL extends ExternallWall {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"left_shower_wall\";\r\n this.partName = \"Left Shower Wall\";\r\n this.translateId = \"visualizer.bathroom.walls.left_shower_wall\";\r\n this.wallName = \"ExtrusionWallLeft\";\r\n this.shadowName = \"Divider Wall\";\r\n this.shadowSmallRoomName = \"EX L\";\r\n this.dbName = \"EX L\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new WallExL());\r\n }\r\n\r\n getArrayOfConditions() {\r\n const parent = this.getParent();\r\n const layout = parent.layout;\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n\r\n const activeShower = parent.showerTubComboIsActive()\r\n ? layout.parts[ShowerTubCombo.id]\r\n : layout.parts[Shower.id];\r\n\r\n const showerSize = activeShower.showerSize();\r\n const showerDimensions = activeShower.showerDimensions();\r\n\r\n const showerValue = (showerSize === \"60in\" || showerSize === \"30in\") ? \"Custom\" : showerSize;\r\n let counterTopSize = layout.parts[Vanity.id].counterTopSize();\r\n\r\n counterTopSize = (counterTopSize === '72in' || showerDimensions === \"30X8\") ? '72in' : counterTopSize;\r\n\r\n if (layoutAbr === LayoutAbbreviation.Small) {\r\n let wallWidth = (showerDimensions === '30X8') ? 'Thick' : 'Half';\r\n return [{\r\n propName: 'Shower',\r\n propValue: showerSize\r\n }, {\r\n propName: 'Width',\r\n propValue: wallWidth\r\n }];\r\n }\r\n\r\n return [{\r\n propName: 'Shower',\r\n propValue: showerValue\r\n }, {\r\n propName: 'CountertopSize',\r\n propValue: counterTopSize\r\n }];\r\n\r\n }\r\n\r\n getShadowConditions() {\r\n const layout = this.getParent().layout;\r\n const conditions = this.getArrayOfConditions();\r\n const showerComboParent = layout.parts[ShowerTubCombo.id];\r\n const showerParent = layout.parts[Shower.id];\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n\r\n let showerDimensions = showerComboParent.showerTubComboIsActive\r\n ? showerComboParent.showerDimensions()\r\n : showerParent.showerDimensions();\r\n\r\n showerDimensions = getMetadataByDimensions(showerDimensions);\r\n\r\n if (!showerComboParent.showerTubComboIsActive && showerDimensions === \"Half\") {\r\n if (showerParent.showerFloorIsActive) {\r\n conditions.push({\r\n propName: \"ShowerPan\",\r\n propValue: [\"Threshold\"]\r\n })\r\n } else if (showerParent.showerPanCombo && showerParent.showerPanCombo.activeFeature && layoutAbr !== LayoutAbbreviation.Small) {\r\n let showerPanCondition = showerParent.showerPanCombo.activeFeature.metaData[\"ShowerPan\"];\r\n // console.log('showerPanCondition', showerPanCondition);\r\n conditions.push({\r\n propName: \"ShowerPan\",\r\n propValue: showerPanCondition\r\n })\r\n }\r\n }\r\n // console.log('shadow conditions', conditions);\r\n return conditions\r\n }\r\n\r\n setShadowFeature() {\r\n const parentGroup = this.getParent();\r\n\r\n let filteredAvailableFeatures = [];\r\n if (parentGroup.shadows && parentGroup.shadows.features && parentGroup.shadows.features.length) {\r\n const layout = parentGroup.layout;\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n const shadowName = (layoutAbr === LayoutAbbreviation.Small) ? this.shadowSmallRoomName : this.shadowName;\r\n\r\n const filteredFeatures = parentGroup.shadows.features.filter((shadow) => {\r\n return Array.isArray(shadow.dbFeature.s3Bindings) && shadow.dbFeature.s3Bindings.some(binding => {\r\n return binding.layout === LayoutAbbreviation.All || binding.layout === layoutAbr\r\n })\r\n });\r\n const compatibleFeatures = filteredFeatures.filter(shadowFeature => {\r\n return shadowFeature.partName && shadowName && shadowFeature.partName === shadowName\r\n });\r\n filteredAvailableFeatures = this.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), compatibleFeatures);\r\n }\r\n this.shadowFeature = filteredAvailableFeatures.length ? filteredAvailableFeatures[0] : null;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n\r\nexport default class VanityAccent extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"accent_wall\";\r\n this.partName = \"Accent Wall\";\r\n this.translateId = \"visualizer.bathroom.walls.accent_wall\";\r\n this.dbName = \"VanityAccent\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.selectedByUser = false;\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n this.allWallsApplied = false;\r\n this.isStoneFeature = true;\r\n this.disabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new VanityAccent());\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n return super.navigationSubItemsWithFilter('CountertopSize', this.getParent().layout.parts[Vanity.id].counterTopSize(), filteredAvailableFeatures);\r\n }\r\n\r\n handleClick() {\r\n const wallParent = this.getParent().getParent();\r\n const vanityParent = wallParent.layout.parts[Vanity.id];\r\n if (vanityParent.vanityBacksplash && vanityParent.vanityBacksplash.canBeDisabled && !vanityParent.vanityBacksplash.placeholderChanged) {\r\n vanityParent.vanityBacksplash.disabled = true;\r\n }\r\n super.handleClick()\r\n }\r\n\r\n // handleClick(clickFrom) {\r\n // if (clickFrom === 'fromAllWalls') {\r\n // if (!this.getParent().vanityAccentSelectedByUser) {\r\n // super.handleClick();\r\n // }\r\n // } else {\r\n // this.getParent().handleChildClick(this);\r\n // this.getParent().vanityAccentSelectedByUser = true;\r\n // }\r\n //\r\n // }\r\n\r\n // handleClick(clickFrom) {\r\n // const parent = this.getParent();\r\n // if (clickFrom === 'simpleWall' || clickFrom === 'showerWall' || clickFrom === 'vanityWall') {\r\n // parent.activeFeatureBeforeAllWalls = parent.activeFeature;\r\n // if (!parent.placeholderChanged) {\r\n // parent.rememberToRecoverPlaceholder = true;\r\n // }\r\n // if (!parent.selectedByUser) {\r\n // super.handleClick();\r\n // }\r\n // } else {\r\n // super.handleClick();\r\n // parent.selectedByUser = true;\r\n // const wallB = this.getParent().getParent().layout.parts[\"Walls\"][\"wallB\"];\r\n // if (wallB.placeholderChanged && wallB.activeFeature.partName === this.partName) {\r\n // parent.selectedByUser = false;\r\n // }\r\n // }\r\n // this.featureClicked();\r\n // }\r\n //\r\n // unCheckAllWalls() {\r\n // if (!this.selectedByUser) {\r\n // const tempSelectedByUser = this.selectedByUser;\r\n // if (this.activeFeatureBeforeAllWalls) {\r\n // this.activeFeatureBeforeAllWalls.handleChildClick(this);\r\n // this.activeFeatureBeforeAllWalls = null;\r\n // }\r\n // this.selectedByUser = tempSelectedByUser;\r\n // if (this.rememberToRecoverPlaceholder) {\r\n // this.placeholderChanged = false;\r\n // this.rememberToRecoverPlaceholder = false;\r\n // }\r\n // }\r\n // }\r\n\r\n setDefault(layout) {\r\n const counterTopSize = this.getParent().layout.parts[Vanity.id].counterTopSize();\r\n const filteredFeatures = this.features && this.features.filter(f => f.matchesMetaForCondition('CountertopSize', counterTopSize)) || [];\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Tan Hexagon\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || super.setDefault(layout) || null;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n const counterTopSize = this.getParent().layout.parts[Vanity.id].counterTopSize();\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForCondition('CountertopSize', counterTopSize)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n // this.activeFeature.layer.zIndex = Z.layouts.Large.Wall_A_Accent_Mask;\r\n this.activeFeature.layer.zIndex = zIndexes.Wall_A_Accent_Mask;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Wall_A_Accent_Mask;\r\n }\r\n }\r\n}\r\n","import snakeCase from \"lodash/snakeCase\";\r\n\r\nimport {Part} from \"./part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport NonVisualizerSubPart from \"../subparts/nonVisualizerSubPart\";\r\n\r\nexport default class Other extends Part {\r\n static id = 'Other';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Other';\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n // console.log(\"load other\", dbFeature.groupName);\r\n const partId = snakeCase(dbFeature.groupName);\r\n let relatedItem = this.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, dbFeature.groupName);\r\n this.relatedItems.push(relatedItem);\r\n }\r\n relatedItem.getParent = () => this;\r\n relatedItem.load(dbFeature);\r\n return true\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Other', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class LargeCornerSeat extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'large_corner_seat';\r\n this.partName = 'Large Corner Seat';\r\n this.translateId = \"visualizer.bathroom.accessories.large_corner_seat\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new LargeCornerSeat());\r\n }\r\n\r\n // handleClick() {\r\n // const accessoriesParent = this.getParent().getParent();\r\n // accessoriesParent.caddie_type = \"corner_caddie\";\r\n // super.handleClick();\r\n // }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n if (showerParent && showerParent.showerTubComboIsActive()) { // shower tub combo - remove\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if ((this.activeFeature && this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature && this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const accParent = this.getParent();\r\n const showerParent = accParent.layout.parts[Shower.id];\r\n const activeShowerPartId = showerParent && showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }]\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, '', '', true)) {\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\" - Placeholder\");\r\n });\r\n this.activeFeature = filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.LargeCornerSeat;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class SoapDish extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'soap_dish';\r\n this.partName = 'Soap Dish';\r\n this.translateId = \"visualizer.bathroom.accessories.soap_dish\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new SoapDish());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.SoapDish;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n const showerComboParent = layout.parts[ShowerTubCombo.id];\r\n\r\n if (showerParent && showerComboParent && showerParent.showerTubComboIsActive() && showerComboParent.bottomTub === \"walk_in_tub\") {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if ((this.activeFeature && this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature && this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const accParent = this.getParent();\r\n const showerParent = accParent.layout.parts[Shower.id];\r\n const activeShowerPartId = showerParent && showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n return [{\r\n propName: \"Shower\",\r\n propValue: showerParent.showerTubComboIsActive()\r\n ? [\"Tub\"]\r\n : showerParent.isComplete() ? \"Complete\" : \"Custom\"\r\n }, {\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }]\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, '', '', true)) {\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\" - Placeholder\");\r\n });\r\n this.activeFeature = filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class SmallCornerShelf extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'small_corner_shelf';\r\n this.partName = 'Small Corner Shelf';\r\n this.translateId = \"visualizer.bathroom.accessories.small_corner_shelf\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new SmallCornerShelf());\r\n }\r\n\r\n handleClick() {\r\n const accessoriesParent = this.getParent().getParent();\r\n accessoriesParent.caddie_type = this.partId;\r\n super.handleClick();\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const accessoriesParent = this.getParent();\r\n if (accessoriesParent.caddie_type !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if ((this.activeFeature && this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature && this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const accParent = this.getParent();\r\n const showerParent = accParent.layout.parts[Shower.id];\r\n const activeShowerPartId = showerParent && showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }]\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, '', '', true)) {\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\" - Placeholder\");\r\n });\r\n this.activeFeature = filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.SmallCornerShelf;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class CornerCaddie extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'corner_caddie';\r\n this.translateId = \"visualizer.bathroom.accessories.corner_caddie\";\r\n this.partName = 'Corner Caddie';\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new CornerCaddie());\r\n }\r\n\r\n handleClick() {\r\n const accessoriesParent = this.getParent().getParent();\r\n accessoriesParent.caddie_type = this.partId;\r\n super.handleClick();\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const accessoriesParent = this.getParent();\r\n if (accessoriesParent.caddie_type !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if ((this.activeFeature && this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature && this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const accParent = this.getParent();\r\n const showerParent = accParent.layout.parts[Shower.id];\r\n const activeShowerPartId = showerParent && showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }]\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, '', '', true)) {\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\" - Placeholder\");\r\n });\r\n this.activeFeature = filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.CornerCaddie;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class LargeCornerCaddie extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'large_corner_caddie';\r\n this.partName = 'Large Corner Caddie';\r\n this.translateId = \"visualizer.bathroom.accessories.large_corner_caddie\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new LargeCornerCaddie());\r\n }\r\n\r\n handleClick() {\r\n const accessoriesParent = this.getParent().getParent();\r\n accessoriesParent.caddie_type = this.partId;\r\n super.handleClick();\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.LargeCornerCaddie;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const accessoriesParent = this.getParent();\r\n if (accessoriesParent.caddie_type !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if ((this.activeFeature && this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature && this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const accParent = this.getParent();\r\n const showerParent = accParent.layout.parts[Shower.id];\r\n const activeShowerPartId = showerParent && showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }]\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, '', '', true)) {\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\" - Placeholder\");\r\n });\r\n this.activeFeature = filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n}\r\n","import uniqBy from \"lodash/uniqBy\";\r\n\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class GrabBar extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'grab_bar';\r\n this.partName = 'Grab Bar';\r\n this.translateId = \"visualizer.bathroom.accessories.grab_bar\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new GrabBar());\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return uniqBy(featuresToDisplay, (feature) => feature.dbFeature.id)\r\n .map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n // setLayers(layout) {\r\n //\r\n // const conditions = this.getArrayOfConditions();\r\n // if ((this.activeFeature && this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n // || (this.activeFeature && this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n // return super.setLayers(layout);\r\n // }\r\n //\r\n // this.setDefault();\r\n // return super.setLayers(layout);\r\n // }\r\n\r\n getArrayOfConditions() {\r\n const accParent = this.getParent();\r\n const showerParent = accParent.layout.parts[Shower.id];\r\n const activeShowerPartId = showerParent && showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }]\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.GrabBar;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n}\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport classNames from 'classnames';\r\nimport $ from 'jquery';\r\n\r\nimport {\r\n setVanityType,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex\r\n} from \"../../../actions/actionFunctions\";\r\nimport DesktopNavigationCommon from \"../../visComponents/navigation/desktopNavigationCommon\";\r\nimport Z from \"../core/parts/zIndex\";\r\nimport {Vanity} from \"../core/parts/vanity\";\r\nimport LockedView from \"../../common/lockedView\";\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport MobileMenuSelect from \"../../visComponents/navigation/mobile/mobileMenuSelect\";\r\nimport ContextMenu from \"./contextMenu\";\r\nimport {\r\n setActiveNavigationNames, setNavigationLoading,\r\n setNavigationViewType,\r\n toggleDesktopNavigation\r\n} from \"../../../actions/navigationFunctions\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {setVisualizerTutorialStep, showVisualizerTutorial} from \"../../../actions/tutorialFunctions\";\r\n\r\nclass DesktopNavigation extends DesktopNavigationCommon {\r\n\r\n bindCanvasClick = (event) => {\r\n const layout = getCurrentLayout();\r\n // const canvas = document.getElementById(this.props.canvasId);\r\n this.props.setHoveredLayer(event);\r\n\r\n if (document.hoveredLayer) {\r\n\r\n const layoutType = layout.getCurrentLayoutName();\r\n\r\n const hoveredZone = Z.getMenuByHoveredLayer(layoutType, document.hoveredLayer);\r\n\r\n // console.log('hoveredZone', hoveredZone);\r\n\r\n if (hoveredZone) {\r\n if ((hoveredZone === \"shower_custom\"\r\n || hoveredZone === \"vanity_custom\"\r\n || hoveredZone === \"bathtub_custom\"\r\n || hoveredZone === \"shower_combo\"\r\n || hoveredZone === \"shower_pony_wall\"\r\n || hoveredZone === \"wall_b_custom\"\r\n || hoveredZone === \"left_wall_custom\")\r\n && !this.state.showNavigation\r\n ) {\r\n if (this.state.contextMenuOpen) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n });\r\n } else {\r\n let contextMenuOpen = '';\r\n let ponyWallGroup = false;\r\n switch (hoveredZone) {\r\n case \"shower_custom\":\r\n case \"shower_combo\":\r\n case \"shower_pony_wall\": {\r\n const showerGroup = this.state.designNavigationItems.find(navItem => {\r\n return navItem.text === \"Shower\"\r\n });\r\n contextMenuOpen = showerGroup.part.showerTubComboIsActive() ? \"Shower Tub Combo\" : \"Shower\";\r\n if (hoveredZone === \"shower_pony_wall\") {\r\n ponyWallGroup = true;\r\n }\r\n break;\r\n }\r\n case \"vanity_custom\":\r\n contextMenuOpen = \"Vanity\";\r\n break;\r\n case \"bathtub_custom\":\r\n contextMenuOpen = \"Bathtub\";\r\n break;\r\n case \"left_wall_custom\":\r\n contextMenuOpen = \"Shower Body Selection\";\r\n break;\r\n case \"wall_b_custom\":\r\n contextMenuOpen = \"wall_b_custom\";\r\n break;\r\n }\r\n this.openContextMenu(contextMenuOpen, ponyWallGroup, event);\r\n }\r\n return false;\r\n } else if (this.state.contentType === 0) {\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.setNewActiveFeature();\r\n this.menuOpened();\r\n setTimeout(() => {\r\n $(document).on('click', this.handleWrapperBlur);\r\n }, 0)\r\n });\r\n }\r\n\r\n hoveredZone.child\r\n ? this.triggerOpenNavigationMenu(hoveredZone.child, hoveredZone.parent)\r\n : this.triggerOpenNavigationMenu(hoveredZone)\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n getShowerBodySelectionButtons = () => {\r\n const shower = this.state.designNavigationItems.find(desItem => desItem.text === \"Shower\");\r\n const currentShowerSize = shower.part.showerSize();\r\n const showerBody = shower && shower.part.showerBody;\r\n return (showerBody && showerBody.features.length) ? showerBody.features.filter((showerBodyFeature) => {\r\n return showerBodyFeature.partName.includes(currentShowerSize);\r\n }) : [1]\r\n };\r\n\r\n openContextMenu = (contextMenuOpen, ponyWallGroup, event) => {\r\n const hoveredParent = this.state.designNavigationItems.find(navItem => {\r\n return navItem.text === contextMenuOpen\r\n });\r\n let contextMenuButtons = [];\r\n if (contextMenuOpen === \"Shower Body Selection\") {\r\n contextMenuButtons = this.getShowerBodySelectionButtons()\r\n } else if (contextMenuOpen === \"wall_b_custom\") {\r\n contextMenuButtons = [1, 2, 3]\r\n } else {\r\n contextMenuButtons = hoveredParent.part.subParts();\r\n }\r\n if (contextMenuOpen === \"Shower\" || contextMenuOpen === \"Shower Tub Combo\") {\r\n contextMenuButtons = contextMenuButtons.filter(menuButton => {\r\n return ponyWallGroup ? menuButton.part.isPonyWallPart && menuButton.part.partId !== \"pony_wall\" : !menuButton.part.isPonyWallPart\r\n });\r\n }\r\n if (contextMenuOpen === \"Vanity\") {\r\n contextMenuButtons = contextMenuButtons.filter(menuButton => {\r\n return menuButton.part.partId !== \"vanity_mirror\" && menuButton.part.partId !== \"vanity_backsplash\";\r\n });\r\n }\r\n\r\n const isMobile = $(window).width() < 991;\r\n\r\n let left = isMobile ? '50%' : event.clientX - 50;\r\n let top = isMobile ? '50%' : event.clientY - 50;\r\n let right = 'auto';\r\n\r\n const maxAllowedWidth = contextMenuButtons.length > 2 ? 300 : 210;\r\n\r\n let maxAllowedHeight = 110;\r\n if (contextMenuButtons.length > 6) {\r\n maxAllowedHeight = 330;\r\n } else if (contextMenuButtons.length > 3) {\r\n maxAllowedHeight = 220;\r\n }\r\n if (!isMobile && (left > window.innerWidth - maxAllowedWidth)) {\r\n left = 'auto';\r\n right = 0\r\n }\r\n if (!isMobile && (top > window.innerHeight - maxAllowedHeight)) {\r\n let negativeMargin = 50;\r\n if (contextMenuButtons.length > 6) {\r\n negativeMargin = 250;\r\n } else if (contextMenuButtons.length > 3) {\r\n negativeMargin = 150;\r\n }\r\n top = top - negativeMargin;\r\n }\r\n this.setState({\r\n contextMenuPonyWall: ponyWallGroup,\r\n contextMenuOpen,\r\n hoveredLayer: document.hoveredLayer,\r\n contextMenuPosition: {\r\n left,\r\n right,\r\n top,\r\n }\r\n });\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false, featureIsLocked) => {\r\n const layout = getCurrentLayout();\r\n this.navigationItemClickCommon(item);\r\n\r\n const updateSideBarIds = [\"shower_body\", \"wall_configuration\", \"vanity_cabinet\"];\r\n if (updateSideBarIds.includes(item.part.partId)) {\r\n this.updateSideBar();\r\n }\r\n if (this.state.parentNavigationItem && this.state.parentNavigationItem.text === \"Shower Tub Combo\"\r\n && item.part.bottomTubId && (this.state.parentNavigationItem.part.bottomTub !== item.part.bottomTubId)) {\r\n this.updateSideBar();\r\n }\r\n\r\n // console.log('this.state.parentNavigationItem', this.state.parentNavigationItem);\r\n // console.log('this.state.parentNavigationItem.part.subParts()', this.state.parentNavigationItem && this.state.parentNavigationItem.part && this.state.parentNavigationItem.part.subParts());\r\n\r\n if (item.matchesMetaFailed) {\r\n const nonCompatibleWith = item.part.partId === \"vanity_faucet\" ? \"sink\" : \"vanity\";\r\n this.callMetaMathesFailedPopup(item, nonCompatibleWith);\r\n } else if (item.part.partId === \"vanity_sink\" && this.state.parentNavigationItem.part.faucet\r\n && this.state.parentNavigationItem.part.faucet.placeholderChanged\r\n && this.state.parentNavigationItem.part.faucet.activeFeature) {\r\n\r\n const sinkSizeConditionValue = item.part.metaData[\"SinkSize\"][0];\r\n\r\n if (this.state.parentNavigationItem.part.faucet.activeFeature.matchesMetaForCondition('SinkSize', sinkSizeConditionValue)) {\r\n this.itemClick(item, ignoreLocked)\r\n } else {\r\n this.callMetaMathesFailedPopup(item, 'faucet');\r\n }\r\n } else if (item.part.partId === \"toilet\") {\r\n const vanity = layout.parts[Vanity.id];\r\n const counterTopSize = vanity.counterTopSize();\r\n if (counterTopSize === \"60in\" || counterTopSize === \"72in\") {\r\n this.callToiletFailPopup('toilet', item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n } else if (item.part.partId === \"vanity_cabinet\") {\r\n // let toilet = layout.parts[Toilet.id];\r\n // if (toilet) {\r\n // toilet = toilet.toilet; // toiletBody\r\n // }\r\n // const counterTopSize = item.part.vanitySize + 'in';\r\n // const vanity = layout.parts[Vanity.id];\r\n // const currentCounterTopSize = vanity.counterTopSize();\r\n // if (toilet && toilet.placeholderChanged && (counterTopSize === \"60in\" || counterTopSize === \"72in\")\r\n // && (currentCounterTopSize !== \"60in\" && currentCounterTopSize !== \"72in\")) {\r\n // this.callToiletFailPopup('vanity', item, ignoreLocked)\r\n // } else {\r\n // this.itemClick(item, ignoreLocked);\r\n // }\r\n this.itemClick(item, ignoreLocked);\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n ) {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n }\r\n } else if (item.part.partId === \"shower_interior_wall\") {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n this.itemClick(item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n\r\n let useWizard = false;\r\n let wizardGroups = [];\r\n if (fabricatorSettings\r\n && (fabricatorSettings.wizardConsumers || (fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n && this.state.contentType === ContentType.Design && activeSubPart && activeSubPart.canUseWizard && activeSubPart.allFeaturesReceived) {\r\n if (activeSubPart.partId === \"shower_interior_wall\") {\r\n const featuresToDisplay = activeSubPart.navigationSubItems();\r\n const tilePatternFilterGroup = this.props.filterGroups.find(group => group.name.trim() === \"TilePattern\");\r\n const acrylicPatternFilterGroup = this.props.filterGroups.find(group => group.name.trim() === \"AcrylicPattern\");\r\n const tileID = tilePatternFilterGroup && tilePatternFilterGroup.id;\r\n const acrID = acrylicPatternFilterGroup && acrylicPatternFilterGroup.id;\r\n useWizard = featuresToDisplay.some(navItem => {\r\n return (tileID && (navItem.part.dbFeature.filterValueIDs[tileID] || navItem.part.dbFeature.fabFilterValueIDs[tileID]))\r\n || (acrID && (navItem.part.dbFeature.filterValueIDs[acrID] || navItem.part.dbFeature.fabFilterValueIDs[acrID]))\r\n })\r\n } else {\r\n useWizard = true;\r\n }\r\n wizardGroups = this.state[this.getWizardGroupsByPartId(activeSubPart.partId)];\r\n }\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = (activePart && activePart.partId === \"floor\" && activePart.allFeaturesReceived)\r\n || (activeSubPart && (this.isWallItem(activeSubPart) || activeSubPart.partId === \"accent_wall\"\r\n || activeSubPart.partId === \"shower_interior_wall_accent\") && activeSubPart.allFeaturesReceived);\r\n\r\n const showSmallRoomLayout = fabricatorSettings &&\r\n (fabricatorSettings.showSmallDesignForClients\r\n || (fabricatorSettings.showSmallDesignFromDashboard && document.kvConfig.isBackend));\r\n\r\n const availableNavButtons = showSmallRoomLayout\r\n ? [ContentType.Design, ContentType.Layout, ContentType.DisplayRoom]\r\n : [ContentType.Design, ContentType.DisplayRoom];\r\n\r\n return (\r\n
    \r\n \r\n
    this.navWrapper = node}>\r\n
    \r\n
    \r\n {this.content(useWizard, wizardGroups, useFilters, activePart, activeSubPart)}\r\n
    \r\n
    \r\n {this.navigationMenuButtons(availableNavButtons)}\r\n {useWizard ? null : (\r\n
    \r\n \r\n
    \r\n )}\r\n {/*
    */}\r\n {/*
    */}\r\n {/**/}\r\n {/*
    */}\r\n {/*
    */}\r\n
    \r\n {this.state.contextMenuOpen\r\n ? \r\n : null}\r\n
    \r\n {showLockedView\r\n ? \r\n : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {isPhoneNumberValidated, userIsLoggedIn} = store.userState;\r\n const {visualizerTutorialStep, visualizerTutorialIsOpened} = store.tutorialState;\r\n\r\n return {\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n visualizerTutorialIsOpened,\r\n visualizerTutorialStep,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n setVanityType,\r\n setDefaultSelectionGroup,\r\n setActiveNavigationNames,\r\n toggleDesktopNavigation,\r\n changeActivePartRelatedItemIndex,\r\n setNavigationLoading,\r\n setVisualizerTutorialStep,\r\n showVisualizerTutorial\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DesktopNavigation);\r\n","import React, {Component} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport {PartMenuType} from \"../../constants\";\r\nimport Config from \"../../../../config\";\r\n\r\nimport Filters from \"../newFilters/filters\";\r\nimport * as actions from \"../../../../actions/actionFunctions\";\r\nimport OnScreenKeyboard from \"../../../common/OnScreenKeyboard/keyboard\";\r\nimport {getFeatureGroupName, getPartThemeThumbnail} from \"../../../../misc/helpers\";\r\nimport {getSideBarSubParts} from \"../navUtils\";\r\nimport $ from \"jquery\";\r\nimport ActionTypes from \"../../../../misc/actionTypes\";\r\n\r\nclass SidebarClass extends Component {\r\n\r\n static propTypes = {\r\n part: PropTypes.object,\r\n onBackClick: PropTypes.func.isRequired,\r\n onSubTypeClick: PropTypes.func.isRequired,\r\n handleSearchInputChange: PropTypes.func.isRequired,\r\n searchText: PropTypes.string,\r\n onSubPartClick: PropTypes.func.isRequired,\r\n onSubPartHover: PropTypes.func.isRequired,\r\n activeChildNavigationItem: PropTypes.object,\r\n updateSidebarItems: PropTypes.bool\r\n };\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.updateSidebarItems) {\r\n this.forceUpdate();\r\n }\r\n }\r\n\r\n handleRefresh = () => {\r\n this.forceUpdate();\r\n };\r\n\r\n componentDidMount() {\r\n $(window).on(ActionTypes.UPDATE_ALL_ITEMS, this.handleRefresh);\r\n }\r\n componentWillUnmount() {\r\n $(window).off(ActionTypes.UPDATE_ALL_ITEMS, this.handleRefresh);\r\n }\r\n\r\n getSideBarContent = () => {\r\n const {part, onSubPartClick, onSubPartHover, activeChildNavigationItem, activeNavigationFilter, activeTheme} = this.props;\r\n if (part.menuType === PartMenuType.Simple) {\r\n return
    \r\n } else if (activeChildNavigationItem && activeChildNavigationItem.part.partId === \"top_cabinet\"\r\n && activeNavigationFilter === \"inlay_type\") {\r\n return
    \r\n }\r\n const subParts = getSideBarSubParts(part);\r\n return (\r\n
      \r\n {subParts.map((dni, dniIndex) => {\r\n // if (name === \"Island Countertop\") {\r\n // name = \"Countertop\"\r\n // }\r\n return (\r\n
    • onSubPartHover(dni)}\r\n key={dni.text}\r\n data-index={dniIndex}\r\n data-text={dni.text}\r\n onClick={() => onSubPartClick(dni)}>\r\n {getFeatureGroupName(dni.part, this.props.intl, this.props.fabricatorData)}\r\n
    • \r\n )\r\n })}\r\n
    \r\n )\r\n };\r\n\r\n render() {\r\n\r\n const {onBackClick, searchText, handleSearchInputChange, intl} = this.props;\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n 12 ? \" search-input--with-close\" : \"\")\r\n }\r\n value={searchText}\r\n onChange={handleSearchInputChange}\r\n placeholder={intl.formatMessage({id: \"mobileMenu.searchPlaceholder\"})}\r\n id=\"main-search\" />\r\n {searchText ?
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n {this.getSideBarContent()}\r\n
    \r\n \r\n
    \r\n );\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {navigationCount} = store.lookState;\r\n return {\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n selectedFilters: store.filterState.selectedFilters,\r\n activeTheme: store.serverState.activeTheme,\r\n fabricatorData: store.fabricatorState,\r\n navigationCount, // update when newLayout features received\r\n };\r\n};\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n showFiltersIfHidden: () => dispatch(actions.showFiltersIfHidden('sidebar'))\r\n };\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(SidebarClass)\r\n);\r\n","import React, {PureComponent} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport $ from 'jquery';\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport OnScreenKeyboard from '../../../common/OnScreenKeyboard/keyboard';\r\nimport { browserIsSafari } from '../../../../misc/helpers';\r\nimport Analytics from './../../../../analytics';\r\n\r\nclass FiltersSearch extends PureComponent {\r\n static propTypes = {\r\n searchText: PropTypes.string.isRequired,\r\n handleSearchInputChange: PropTypes.func.isRequired,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n searchVisible: false,\r\n };\r\n }\r\n\r\n handleToggleSearch = () => {\r\n Analytics.sendClickEvent('filter-search-' + (this.state.searchVisible ? 'hide' : 'show'));\r\n this.setState({searchVisible: !this.state.searchVisible}, () => this.state.searchVisible && $(this.searchInputNode).focus());\r\n };\r\n\r\n handleInputSearchFocus = () => {\r\n if (this.props.windowWidth < 991 && browserIsSafari()) { // scroll to the top of the window on mobile (Safari workarounds)\r\n window.scrollTo(0, 0);\r\n setTimeout(() => {\r\n window.scrollTo(0, 0);\r\n }, 0);\r\n setTimeout(() => {\r\n window.scrollTo(0, 0);\r\n }, 300)\r\n }\r\n };\r\n\r\n render() {\r\n const {intl} = this.props;\r\n return (\r\n
    this.handleToggleSearch()}>\r\n \r\n e.stopPropagation()}>\r\n this.searchInputNode = node}\r\n className=\"filters-header-input-search\"\r\n placeholder={intl.formatMessage({id: \"filterSelection.searchPlaceholder\"})}\r\n value={this.props.searchText}\r\n onFocus={this.handleInputSearchFocus}\r\n onChange={this.props.handleSearchInputChange}\r\n onClick={(e) => e.stopPropagation()}\r\n id=\"filter-search\"\r\n />\r\n this.props.handleSearchInputChange({target: {value: v}})}\r\n type=\"text\"\r\n prependTo=\".filters-container\"\r\n top=\"40px\"\r\n left=\"10px\"\r\n />\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n windowWidth: store.serverState.windowWidth,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n\r\n};\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(FiltersSearch)\r\n)\r\n","import React from \"react\";\r\nimport KeyType from \"./keyboardKeyType\";\r\nimport Analytics from './../../../analytics';\r\n\r\nexport default class KeyboardKey extends React.PureComponent {\r\n handleClick = (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n let key = this.props.keyValue;\r\n if (!this.props.raw && this.props.isUpperCase && this.props.keyValue2) {\r\n key = this.props.keyValue2;\r\n }\r\n Analytics.sendClickEvent('osk-keyboard-key');\r\n\r\n this.props.runKeyStroke(key);\r\n };\r\n\r\n render() {\r\n let enabled = true;\r\n if (this.props.isUpperCase) {\r\n if (!this.props.keyValue2) {\r\n enabled = false;\r\n }\r\n }\r\n\r\n let key = this.props.keyValue;\r\n switch (key) {\r\n case 'backspace':\r\n case \"|<\":\r\n case \"|>\":\r\n key = '';\r\n break;\r\n default:\r\n if (this.props.isUpperCase) {\r\n if (this.props.keyValue2) {\r\n key = this.props.keyValue2;\r\n } else if (this.props.type === KeyType.Types.RIGHT_PANEL) {\r\n key = key.toUpperCase();\r\n }\r\n }\r\n break;\r\n }\r\n\r\n let className = KeyType.className(this.props.type);\r\n if (this.props.type === KeyType.Types.NORMAL) {\r\n if (!enabled) {\r\n className += \" keyboard-keys-shifted-enabled\";\r\n } else if (this.props.isUpperCase) {\r\n className += \" keyboard-keys-shifted\";\r\n }\r\n\r\n if (this.props.keyValue === 'backspace') {\r\n className += \" keyboard-backspace-key\";\r\n }\r\n }\r\n\r\n switch (this.props.type) {\r\n case KeyType.Types.NUMERIC:\r\n case KeyType.Types.NUMERIC_EXTENDED:\r\n return (\r\n
    {key}
    \r\n );\r\n case KeyType.Types.RIGHT_PANEL:\r\n return (
    {key}
    );\r\n default: {\r\n let img = null;\r\n if (this.props.image) {\r\n img = (\"\");\r\n }\r\n return (

    {this.props.keyValue2}

    {key}

    {img}\r\n
    );\r\n }\r\n }\r\n }\r\n}\r\n","export default {\r\n Types: {\r\n NORMAL: 'NORMAL',\r\n NUMERIC: 'NUMERIC',\r\n NUMERIC_EXTENDED: 'NUMERIC_EXTENDED',\r\n BACKSPACE: 'BACKSPACE',\r\n NORMAL_3: 'NORMAL_3',\r\n NORMAL_5: 'NORMAL_5',\r\n NORMAL_2_5: 'NORMAL_2_5',\r\n RIGHT_PANEL: 'RIGHT_PANEL'\r\n },\r\n /**\r\n *\r\n * @param type {string}\r\n */\r\n className: function (type) {\r\n switch (type) {\r\n case this.Types.NUMERIC:\r\n return \"numberpad-keys\";\r\n case this.Types.NUMERIC_EXTENDED:\r\n return \"numberpad-keys-extended\";\r\n case this.Types.BACKSPACE:\r\n return \"numberpad-keys-extended-special keyboard-backspace-key\";\r\n case this.Types.NORMAL:\r\n return 'keyboard-keys';\r\n case this.Types.NORMAL_3:\r\n return \"keyboard-keys keyboard-keys-extended-3x\";\r\n case this.Types.NORMAL_5:\r\n return \"keyboard-keys keyboard-keys-extended-5x\";\r\n case this.Types.NORMAL_2_5:\r\n return \"keyboard-keys keyboard-keys-extended-2point5x\";\r\n case this.Types.RIGHT_PANEL:\r\n return \"keybard-right-panel-buttons\";\r\n }\r\n }\r\n};","import React, {Component} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../constants\";\r\nimport BodyPanel from \"./bodyPanel\";\r\nimport BodyItems from \"./bodyItems\";\r\nimport Analytics from \"../../../../analytics\";\r\nimport FilterSelection from \"../newFilters/filterSelection\";\r\nimport NavigationFilters from \"../newFilters/navigationFilters\";\r\nimport {CABINET_WIZARD_BUTTONS} from \"../../../kvComponent/core/constants\";\r\nimport NavigationFiltersSteps from \"../newFilters/navigationFiltersSteps\";\r\nimport {getCurrentLayout} from \"../../../appLayout\";\r\nimport Config from \"../../../../config\";\r\nimport {getPartThemeThumbnail} from \"../../../../misc/helpers\";\r\n\r\nclass BodyClass extends Component {\r\n\r\n static propTypes = {\r\n parentItem: PropTypes.instanceOf(DesignNavigationItem),\r\n childItem: PropTypes.instanceOf(DesignNavigationItem),\r\n navWidth: PropTypes.number,\r\n searchText: PropTypes.string,\r\n onItemClick: PropTypes.func.isRequired,\r\n toggleApplyWallsCheckbox: PropTypes.func,\r\n isWallItem: PropTypes.func,\r\n handleSubTypeClick: PropTypes.func,\r\n showMenu: PropTypes.bool,\r\n toggleUserPopup: PropTypes.func,\r\n activeFeature: PropTypes.object,\r\n wizardGroups: PropTypes.array,\r\n useWizard: PropTypes.bool,\r\n showFeatureWizard: PropTypes.bool,\r\n enableFeatureWizard: PropTypes.func,\r\n exitFeatureWizard: PropTypes.func,\r\n getFilterDisplayName: PropTypes.func.isRequired,\r\n useFilters: PropTypes.bool,\r\n removeFilterSelection: PropTypes.func,\r\n showFilterSelection: PropTypes.bool,\r\n toggleWizardFilterSelection: PropTypes.func,\r\n refreshCB: PropTypes.func,\r\n setStateActiveFeature: PropTypes.func\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n showLoader: false\r\n }\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.selectedFilters.length) {\r\n let updateComponent = false;\r\n if (nextProps.selectedFilters.length === this.props.selectedFilters.length) {\r\n updateComponent = nextProps.selectedFilters.some((filter, index) => {\r\n return filter.filterId !== this.props.selectedFilters[index].filterId\r\n || filter.filterGroupId !== this.props.selectedFilters[index].filterGroupId\r\n });\r\n }\r\n if (updateComponent) {\r\n this.refreshItems();\r\n }\r\n }\r\n if (this.props.navigationLoadingActive && !nextProps.navigationLoadingActive) {\r\n this.refreshItems();\r\n }\r\n }\r\n\r\n refreshItems = () => {\r\n this.setState({\r\n showLoader: true\r\n }, () => {\r\n this.setState({\r\n showLoader: false\r\n })\r\n })\r\n };\r\n\r\n itemsDispatcher = () => {\r\n const parentItem = this.props.parentItem;\r\n if (!parentItem) {\r\n return (\r\n
      \r\n {this.level1Items()}\r\n
    \r\n )\r\n }\r\n // if (parentItem && !childItem) {\r\n // if (parentItem.part.isSubTypeWithItems()) {\r\n // return this.level2ItemsNew(parentItem.part.navigationSubItems(selectedFilters, this.props.searchText)); // complete Vanity, complete Bathtub\r\n // }\r\n // return [];\r\n // }\r\n return this.level2ItemsNew();\r\n };\r\n\r\n level1Items = () => {\r\n const layout = getCurrentLayout();\r\n const {searchText, parentItem, selectedFilters, activeTheme} = this.props;\r\n const items = layout.designNavigationItems(parentItem, selectedFilters, searchText)\r\n .filter(item => {\r\n if (Config.showAllVisualizerGroups()) {\r\n return true\r\n }\r\n if (item.part.menuType === PartMenuType.Simple) {\r\n return layout.designNavigationItems(item).length\r\n } else {\r\n const subParts = item.part.subParts();\r\n return subParts.length && subParts.some(subPart => layout.hasNavItemsLength(subPart))\r\n }\r\n });\r\n return items.map(item => {\r\n const style = {\r\n backgroundImage: `url(${getPartThemeThumbnail(item.part.partThumbnail, activeTheme)})`,\r\n };\r\n if (item.part.partThumbnailSize) {\r\n style.backgroundSize = item.part.partThumbnailSize\r\n }\r\n return (\r\n
  • {\r\n Analytics.sendClickEvent('item-clicked');\r\n Analytics.sendClickEvent('item-clicked-' + item.part.partName);\r\n this.props.onItemClick(item)\r\n }}>\r\n
    \r\n \r\n
    \r\n
  • \r\n )\r\n })\r\n };\r\n\r\n updateComponent = () => {\r\n this.forceUpdate();\r\n };\r\n\r\n getFeatures = (layout) => {\r\n const {parentItem, childItem, searchText, selectedFilters} = this.props;\r\n const currentParent = (parentItem.part.menuType === PartMenuType.Simple) ? parentItem : childItem;\r\n if (!currentParent) {\r\n return []\r\n }\r\n return layout.designNavigationItems(currentParent, selectedFilters, searchText);\r\n };\r\n\r\n level2ItemsNew = () => {\r\n const layout = getCurrentLayout();\r\n const activePart = this.props.parentItem ? this.props.parentItem.part : null;\r\n const activeSubPart = this.props.childItem ? this.props.childItem.part : null;\r\n const currentPart = activeSubPart || activePart;\r\n const allFeaturesReceived = currentPart && currentPart.allFeaturesReceived\r\n && (!(currentPart.nextFeaturesPageToLoadArray && !currentPart.nextFeaturesPageToLoadArray[layout.getCurrentLayoutAbbreviation()].page));\r\n\r\n return ;\r\n };\r\n\r\n render() {\r\n\r\n const activePart = this.props.parentItem ? this.props.parentItem.part : null;\r\n const activeSubPart = this.props.childItem ? this.props.childItem.part : null;\r\n const activeNavPart = activeSubPart || activePart;\r\n\r\n const filterSelectionHasValues = (activeSubPart || activePart) && FilterSelection.getAvailableFilterValues(\r\n this.props.filterGroups, \"Material\", activeSubPart || activePart, this.props.fabricatorData\r\n ).length > 0;\r\n\r\n\r\n // const fabricatorSettings = this.props.fabricatorData.settings;\r\n // const useWizard = fabricatorSettings &&\r\n // (fabricatorSettings.wizardConsumers || (fabricatorSettings.wizardClients && document.kvConfig.isBackend));\r\n\r\n const useKVWizard = false; //TODO change it when BE is ready\r\n\r\n const showNavigationFilters = useKVWizard && this.props.activeNavigationFilter && activeNavPart\r\n && this.props.activeNavigationFilter !== CABINET_WIZARD_BUTTONS[0].buttonId\r\n && activeNavPart.canUseNavigationFilter && activeNavPart.canUseNavigationFilter();\r\n let showNavigationFiltersSteps = showNavigationFilters && this.props.activeNavigationFilter !== \"inlay_type\";\r\n\r\n if (useKVWizard && activeNavPart && activeNavPart.canUseNavigationFilterSteps\r\n && activeNavPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n return (\r\n
    \r\n {activePart\r\n ? \r\n : null}\r\n {this.props.useFilters && this.props.showFilterSelection && filterSelectionHasValues ? (\r\n \r\n ) : showNavigationFilters\r\n ? (\r\n \r\n ) : (\r\n this.state.showLoader\r\n ?
    \r\n : this.itemsDispatcher()\r\n // !this.state.showLoader\r\n // ? allFeaturesReceived\r\n // ? this.itemsDispatcher()\r\n // : (activeSubPart || activePart)\r\n // ? this.showLoadingItems(activeSubPart || activePart)\r\n // : this.itemsDispatcher()\r\n // :
    \r\n )}\r\n {showNavigationFiltersSteps ? (\r\n \r\n ) : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n filterGroups: store.filterState.filterGroups,\r\n filtersVisible: store.filterState.showFilters,\r\n selectedFilters: store.filterState.selectedFilters,\r\n navigationViewType: store.navigationState.navigationViewType,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n navigationLoadingActive: store.navigationState.navigationLoadingActive,\r\n activeTheme: store.serverState.activeTheme,\r\n };\r\n};\r\nconst mapDispatchToProps = () => {\r\n return {};\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BodyClass);\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport Analytics from \"../../../../analytics\";\r\n\r\nexport default class BodyPanelCheckbox extends Component {\r\n\r\n static propTypes = {\r\n activeSubPart: PropTypes.object.isRequired,\r\n toggleApplyWallsCheckbox: PropTypes.func.isRequired,\r\n };\r\n\r\n allWallsClick = () => {\r\n Analytics.sendClickEvent('all-walls-toggled');\r\n this.props.toggleApplyWallsCheckbox();\r\n setTimeout(() => {\r\n this.forceUpdate();\r\n }, 0)\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n )\r\n }\r\n}\r\n","import React, {Component} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport PropTypes from 'prop-types';\r\n\r\nclass BodyPanelWizardSteps extends Component {\r\n\r\n static propTypes = {\r\n availableSteps: PropTypes.array,\r\n featureWizardStep: PropTypes.number,\r\n setFeatureWizardStep: PropTypes.func,\r\n exitFeatureWizard: PropTypes.func,\r\n enableFeatureWizard: PropTypes.func,\r\n toggleWizardFilterSelection: PropTypes.func,\r\n getFilterDisplayName: PropTypes.func.isRequired,\r\n showFeatureWizard: PropTypes.bool,\r\n activeSubPart: PropTypes.object,\r\n };\r\n\r\n setFeatureWizardStep = (nextStep) => {\r\n switch (nextStep) {\r\n case \"back\":\r\n nextStep = this.props.featureWizardStep === 0 ? 0 : this.props.featureWizardStep - 1;\r\n break;\r\n case \"next\":\r\n if (this.props.featureWizardStep === (this.props.availableSteps.length - 1)) {\r\n this.props.exitFeatureWizard(this.state.availableSteps, this.props.featureWizardStep);\r\n } else {\r\n nextStep = this.props.featureWizardStep + 1;\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n const currentStep = this.props.availableSteps[nextStep - 1];\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const allStepsCompleted = this.props.availableSteps.filter(step => !step.hidden).every(step => step.selectedValueId);\r\n if ((nextStep > this.props.featureWizardStep) && currentStep && !allStepsCompleted\r\n && (!currentStep.selectedValueId || (fabricatorSettings.leadCapture && currentStep.selectedItemIsLocked && !this.props.isPhoneNumberValidated))) {\r\n return\r\n }\r\n if (this.props.showFeatureWizard) {\r\n this.props.setFeatureWizardStep(nextStep);\r\n if (nextStep === 0) {\r\n this.props.toggleWizardFilterSelection(false);\r\n }\r\n } else {\r\n this.props.enableFeatureWizard(nextStep);\r\n }\r\n };\r\n\r\n render() {\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const availableSteps = this.props.availableSteps.filter(step => !step.hidden);\r\n const allStepsCompleted = availableSteps.every(step => step.selectedValueId);\r\n\r\n const activeSubPart = this.props.activeSubPart;\r\n const itemIsSelected = (!fabricatorSettings.leadCapture\r\n || (activeSubPart.activeFeature && !activeSubPart.activeFeature.partName.includes(\"WizardPlaceholder\")\r\n && activeSubPart.firstClick[this.props.activeQuoteIndex] && activeSubPart.placeholderChanged));\r\n\r\n return (\r\n
    \r\n
      \r\n
    • this.props.exitFeatureWizard(availableSteps, this.props.featureWizardStep)}>\r\n {/**/}\r\n \r\n \r\n \r\n
    • \r\n {availableSteps.map((wizardButton, index) => {\r\n const prevStep = availableSteps[index - 1];\r\n const disabled = this.props.showFeatureWizard\r\n ? (index && !allStepsCompleted && (!prevStep.selectedValueId\r\n || (fabricatorSettings.leadCapture && prevStep.selectedItemIsLocked && !this.props.isPhoneNumberValidated)))\r\n : (index && !itemIsSelected && !availableSteps[index - 1].selectedValueId);\r\n return (\r\n
    • this.setFeatureWizardStep(index)}>\r\n \r\n \r\n {this.props.getFilterDisplayName(wizardButton.filterName, this.props.intl)}\r\n \r\n
    • \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n filterGroups: store.filterState.filterGroups,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n});\r\n\r\nconst mapDispatchToProps = () => ({});\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(BodyPanelWizardSteps)\r\n);\r\n","import React, {Component} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport PropTypes from 'prop-types';\r\n\r\nimport {\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setNavigationViewType\r\n} from \"../../../../actions/navigationFunctions\";\r\nimport {CABINET_WIZARD_BUTTONS, COUNTERTOP_WIZARD_BUTTONS} from \"../../../kvComponent/core/constants\";\r\nimport {setSelectedFilters} from \"../../../../actions/actionFunctions\";\r\n\r\nclass BodyPanelNavigationFiltersSteps extends Component {\r\n\r\n static propTypes = {\r\n activePart: PropTypes.object.isRequired,\r\n };\r\n\r\n setNavigationWizardStep = (buttonId, wizardButtonIndex) => {\r\n this.props.setActiveNavigationFilter(buttonId);\r\n this.props.setActiveNavigationFilterStepIndex(wizardButtonIndex);\r\n if (buttonId === COUNTERTOP_WIZARD_BUTTONS[2].buttonId) {\r\n this.props.setNavigationViewType(2)\r\n } else if (this.props.navigationViewType !== 3) {\r\n this.props.setNavigationViewType(3)\r\n }\r\n if (buttonId !== COUNTERTOP_WIZARD_BUTTONS[2].buttonId) {\r\n this.props.setSelectedFilters([]); // reset filters on stones & color step\r\n }\r\n };\r\n\r\n getAvailableSteps = () => {\r\n let wizardButtons = [];\r\n switch (this.props.activePart.partId) {\r\n case \"top_cabinet\":\r\n case \"bottom_cabinet\":\r\n wizardButtons = CABINET_WIZARD_BUTTONS.filter(wizardButton => wizardButton.buttonId !== \"inlay_type\");\r\n break;\r\n case \"countertop\":\r\n case \"edge_profile\":\r\n case \"backsplash\":\r\n wizardButtons = COUNTERTOP_WIZARD_BUTTONS;\r\n break;\r\n case \"center_island_countertop\":\r\n case \"center_island_edge\":\r\n wizardButtons = COUNTERTOP_WIZARD_BUTTONS.slice(0, 4);\r\n break;\r\n default:\r\n break;\r\n }\r\n return wizardButtons.map((wizardButton, wizardButtonIndex) => {\r\n wizardButton.onClick = () => this.setNavigationWizardStep(wizardButton.buttonId, wizardButtonIndex);\r\n return wizardButton\r\n })\r\n };\r\n\r\n render() {\r\n const countertopWizardPartIds = [\"countertop\", \"center_island_countertop\", \"edge_profile\", \"center_island_edge\", \"backsplash\"];\r\n let allowIcons = true;\r\n if (this.props.activePart.partId === \"backsplash\" && this.props.windowWidth < 1400) {\r\n allowIcons = false\r\n }\r\n\r\n return (\r\n
    \r\n
      \r\n {this.getAvailableSteps().map((wizardButton, index) => {\r\n const disabled = false;\r\n const buttonIcon = countertopWizardPartIds.includes(this.props.activePart.partId)\r\n && wizardButton.buttonId === \"all_products\" ? \"stones\" : wizardButton.buttonId;\r\n return (\r\n
    • {} : wizardButton.onClick}>\r\n {(buttonIcon !== CABINET_WIZARD_BUTTONS[0].buttonId) && allowIcons ? (\r\n \r\n ) : null}\r\n \r\n \r\n \r\n
    • \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n // fabricatorSettings: store.fabricatorState.settings,\r\n windowWidth: store.serverState.windowWidth,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n activeNavigationFilterStepIndex: store.navigationState.activeNavigationFilterStepIndex,\r\n moduleContextMenuModule: store.navigationState.moduleContextMenuModule,\r\n moduleContextMenuModulePart: store.navigationState.moduleContextMenuModulePart,\r\n navigationViewType: store.navigationState.navigationViewType,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setNavigationViewType,\r\n setSelectedFilters\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BodyPanelNavigationFiltersSteps);\r\n","import React, {useEffect, useRef, useState} from \"react\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\nimport {connect} from \"react-redux\";\r\n\r\nimport Switch from '@mui/material/Switch';\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\nimport Popper from \"@mui/material/Popper\";\r\nimport Grow from \"@mui/material/Grow\";\r\n\r\nimport {useIsMounted} from \"../../../../misc/helperHooks\";\r\nimport {featureInterface} from \"../../../../interfaces/featureInterface\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../config\";\r\n\r\n\r\nlet timeoutId = null;\r\n\r\nconst LookAllWallsRadioButtonSmall = (props) => {\r\n\r\n const {allWallsCheckboxClick, translateId, checked, viewType, lookActiveCategory, showTutorialToolTip, isMobile,\r\n lookFeature} = props;\r\n\r\n const [showTooltip, setShowTooltip] = useState(false);\r\n const anchorRef = useRef(null);\r\n const isMounted = useIsMounted();\r\n\r\n useEffect(() => {\r\n return () => clearTimeout(timeoutId);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (showTutorialToolTip) {\r\n timeoutId = setTimeout(() => {\r\n if (isMounted()) {\r\n setShowTooltip(true);\r\n }\r\n }, 0);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [isMounted, showTutorialToolTip]);\r\n\r\n const buttonClick = () => {\r\n setShowTooltip(true);\r\n clearTimeout(timeoutId);\r\n allWallsCheckboxClick();\r\n timeoutId = setTimeout(() => {\r\n if (isMounted()) {\r\n setShowTooltip(false);\r\n }\r\n }, 2000);\r\n }\r\n\r\n const placement = viewType !== 1 || showTutorialToolTip\r\n ? isMobile && IS_PRODUCT_JOURNEY ? \"left\" : \"right\"\r\n : \"bottom\";\r\n\r\n const getToolTipTranslate = () => {\r\n if (!showTutorialToolTip) {\r\n return translateId\r\n }\r\n switch (lookFeature ? lookFeature.partId : lookActiveCategory) {\r\n case \"countertop\":\r\n case \"center_island_countertop\":\r\n case \"vanity_countertop\":\r\n return \"look.allWallsOverlay.countertop.text\"\r\n case \"backsplash\":\r\n case \"vanity_backsplash\":\r\n return \"look.allWallsOverlay.backsplash.text\"\r\n case \"top_cabinet\":\r\n case \"bottom_cabinet\":\r\n case \"center_island_cabinet\":\r\n case \"fridge_enclosure\":\r\n return \"look.allWallsOverlay.cabinet.text\"\r\n case \"edge\":\r\n case \"edge_profile\":\r\n case \"center_island_edge\":\r\n return \"look.allWallsOverlay.edge.text\"\r\n default:\r\n return \"look.allWallsOverlay.text\"\r\n }\r\n }\r\n\r\n return (\r\n
    \r\n \r\n }\r\n />\r\n \r\n {({ TransitionProps }) => (\r\n \r\n
    \r\n \r\n \r\n : \r\n \r\n
    \r\n \r\n )}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nLookAllWallsRadioButtonSmall.propTypes = {\r\n translateId: PropTypes.string,\r\n checked: PropTypes.bool.isRequired,\r\n allWallsCheckboxClick: PropTypes.func.isRequired,\r\n viewType: PropTypes.number,\r\n showTutorialToolTip: PropTypes.bool,\r\n lookFeature: PropTypes.shape(featureInterface),\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveCategory} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n return {\r\n lookActiveCategory,\r\n isMobile,\r\n };\r\n};\r\n\r\nexport default (\r\n connect(mapStateToProps)(LookAllWallsRadioButtonSmall)\r\n)\r\n","import React, {Fragment} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {Grid} from 'react-virtualized';\r\nimport PropTypes from 'prop-types';\r\nimport $ from \"jquery\";\r\n\r\nimport NavigationItemsList from \"../navigationItemsList\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {UserPopupTypes} from \"../../constants\";\r\nimport {getActivePartsCounts} from \"../navUtils\";\r\nimport {\r\n changeActivePartRelatedItemIndex, setCameFromPage, setQtActiveCategory, toggleBathroomVisualizerOpen,\r\n toggleSelectionFeatureInfo, toggleSelectionWindow\r\n} from \"../../../../actions/actionFunctions\";\r\n\r\nimport BodySwipable from \"./bodySwipable\";\r\nimport LoadingSpinner from \"../../../ui/loadingSpinner\";\r\nimport {checkIfNeedToReceiveFeaturesIfFiltersApplied} from \"../../../../misc/filtersFunctions\";\r\n\r\nclass BodyItemsClass extends NavigationItemsList {\r\n\r\n static propTypes = {\r\n features: PropTypes.arrayOf(PropTypes.instanceOf(DesignNavigationItem)),\r\n parentItem: PropTypes.instanceOf(DesignNavigationItem),\r\n childItem: PropTypes.instanceOf(DesignNavigationItem),\r\n onItemClick: PropTypes.func,\r\n showMenu: PropTypes.bool,\r\n existInQtCategory: PropTypes.bool,\r\n toggleUserPopup: PropTypes.func,\r\n activeFeature: PropTypes.object,\r\n searchText: PropTypes.string,\r\n layoutName: PropTypes.string,\r\n parentUpdate: PropTypes.func\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n showPlaceHolders: document.bvConfig ? document.bvConfig.showPlaceholders : false,\r\n reorderedFeatures: [],\r\n showLoader: false,\r\n childItemText: \"\",\r\n parentItemText: \"\",\r\n additionalFeaturesLoading: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.reorderItems(this.props);\r\n const childItem = this.props.childItem && this.props.childItem.part;\r\n if (childItem && childItem.partId.includes(\"countertop\") && this.props.selectedFilters.length && !this.props.activeNavigationFilter) {\r\n const checkPassed = checkIfNeedToReceiveFeaturesIfFiltersApplied(this.props.selectedFilters, childItem);\r\n if (checkPassed) {\r\n this.getFeaturesFromBackendWithFilters(childItem, checkPassed.arrayOfNeededFiltersToReceive, 1);\r\n }\r\n }\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (\r\n (nextProps.childItem && (nextProps.childItem.text !== this.state.childItemText))\r\n || (nextProps.showMenu && !this.props.showMenu)\r\n || (!nextProps.childItem && nextProps.parentItem && (nextProps.parentItem.text !== this.state.parentItemText))\r\n || (this.props.selectedFilters.length !== nextProps.selectedFilters.length)\r\n || (this.props.searchText !== nextProps.searchText)\r\n || (nextProps.allFeaturesReceived && !this.props.allFeaturesReceived)\r\n || (nextProps.bvOpened && !this.props.bvOpened)\r\n || (this.props.features.length && nextProps.features.length && nextProps.features[0] && this.props.features[0]\r\n && nextProps.features[0].part.getParent && this.props.features[0].part.getParent\r\n && nextProps.features[0].part.getParent().partName !== this.props.features[0].part.getParent().partName)\r\n ) {\r\n this.setState({\r\n showLoader: true\r\n }, () => {\r\n this.reorderItems(nextProps);\r\n });\r\n }\r\n if (!nextProps.filtersVisible && this.props.filtersVisible) {\r\n setTimeout(() => {\r\n this.forceUpdate()\r\n }, 200);\r\n }\r\n if (this.needToUpdate && nextProps.features.length !== this.props.features.length) {\r\n this.reorderItems(nextProps);\r\n }\r\n if (nextProps.childItem && nextProps.selectedFilters.length) {\r\n const checkPassed = checkIfNeedToReceiveFeaturesIfFiltersApplied(nextProps.selectedFilters, nextProps.childItem.part);\r\n if (checkPassed) {\r\n this.setState({\r\n additionalFeaturesLoading: true\r\n })\r\n this.getFeaturesFromBackendWithFilters(nextProps.childItem.part, checkPassed.arrayOfNeededFiltersToReceive, 1);\r\n }\r\n }\r\n }\r\n\r\n reorderItems = (props) => {\r\n const selectedFirstItemIndex = this.getActiveItemIndex(props);\r\n const otherSelectedWallsIndexes = this.getSelectedWallIndexes(props.childItem, props.features, selectedFirstItemIndex); // this part is looking for the same stones that are already selected\r\n\r\n const selectedExist = (selectedFirstItemIndex || selectedFirstItemIndex === 0) && selectedFirstItemIndex > -1;\r\n const indexesToReplace = selectedExist ? [selectedFirstItemIndex, ...otherSelectedWallsIndexes] : [...otherSelectedWallsIndexes];\r\n\r\n // console.log('indexesToReplace', indexesToReplace);\r\n\r\n this.setState({\r\n childItemText: props.childItem ? props.childItem.text : \"\",\r\n parentItemText: props.parentItem ? props.parentItem.text : \"\",\r\n reorderedFeatures: this.getReorderedItems(indexesToReplace, props, selectedExist)\r\n }, () => {\r\n this.setState({\r\n showLoader: false\r\n });\r\n if (this.needToUpdate) {\r\n const $gridBody = $(\".categories-list .ReactVirtualized__Grid\");\r\n $gridBody.scrollLeft(this.needToUpdate);\r\n this.needToUpdate = false;\r\n }\r\n });\r\n };\r\n\r\n handleUserLoginClick = (userPopupType = UserPopupTypes.Unlock) => {\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n\r\n if (this.props.userIsLoggedIn) {\r\n if (fabricatorSettings.twoFA) {\r\n if (!this.props.isPhoneNumberValidated) {\r\n this.props.toggleUserPopup({\r\n userPopupOpened: true,\r\n userPopupType\r\n });\r\n } else {\r\n this.toggleMobileButton('userLogoutActive');\r\n }\r\n } else {\r\n this.toggleMobileButton('userLogoutActive');\r\n }\r\n } else {\r\n this.props.toggleUserPopup({\r\n userPopupOpened: true,\r\n userPopupType\r\n });\r\n if (userPopupType === UserPopupTypes.GetQuote) {\r\n window.allowClickLeadCapturePopup = false;\r\n }\r\n }\r\n };\r\n\r\n toggleMobileButton = (activeFeature) => {\r\n this.setState({\r\n [activeFeature]: !this.state[activeFeature]\r\n })\r\n };\r\n\r\n renderVirtualizedGrid = () => {\r\n\r\n const elements = this.getNavItemsList();\r\n const menuBody = document.querySelector(\".categories-list\");\r\n const navigationViewType = this.props.navigationViewType === 3 ? 2 : 1; // 2\r\n const columnsCount = Math.ceil(elements.length / navigationViewType); // for ex. 28/3 = 10 columns\r\n\r\n const list = [[]]; // making list for React Virtualized\r\n if (navigationViewType === 2) {\r\n list.push([]);\r\n elements.forEach((element, index) => {\r\n let rowIndex = (index % navigationViewType === 0) ? 0 : 1;\r\n list[rowIndex].push(React.cloneElement(element))\r\n });\r\n } else {\r\n elements.forEach((element) => list[0].push(React.cloneElement(element)));\r\n }\r\n\r\n // console.log('list', list);\r\n\r\n return menuBody ? (\r\n \r\n \r\n {\r\n return
    \r\n {list[rowIndex][columnIndex]}\r\n
    \r\n }}>\r\n
    \r\n
    \r\n
    \r\n ) : null\r\n };\r\n\r\n renderLoadingList = (activePart) => {\r\n if (!activePart.counts) {\r\n return
    \r\n }\r\n\r\n const counts = getActivePartsCounts(activePart, this.props.layoutName);\r\n\r\n if (!counts) {\r\n return
    \r\n }\r\n\r\n const navigationViewType = this.props.navigationViewType === 3 ? 2 : 1;\r\n\r\n const elements = [];\r\n for (let i = 0; i < Math.ceil(counts / navigationViewType); i++ ) { // for ex. 28/3 = 10 columns\r\n const innerElements = [];\r\n for (let j = 0; j < navigationViewType;j++ ) {\r\n const currentIndex = j+(i*navigationViewType);\r\n if (currentIndex < counts) {\r\n innerElements.push(\r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n }\r\n elements.push(\r\n
  • \r\n {innerElements}\r\n
  • \r\n );\r\n }\r\n\r\n return elements\r\n };\r\n\r\n render() {\r\n const activePart = this.props.parentItem ? this.props.parentItem.part : null;\r\n const activeSubPart = this.props.childItem ? this.props.childItem.part : null;\r\n\r\n return (\r\n
    \r\n {this.state.showLoader\r\n ? \r\n : this.props.allFeaturesReceived\r\n ? (\r\n \r\n {this.state.additionalFeaturesLoading || this.props.navigationLoadingActive ? this.getLoadingFeatures() : null}\r\n {this.renderVirtualizedGrid()}\r\n \r\n )\r\n : this.renderLoadingList(activeSubPart || activePart)\r\n }\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {isPhoneNumberValidated, userIsLoggedIn} = store.userState;\r\n return {\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n bvOpened: store.bathroomVisualizerState.bvOpened,\r\n filtersVisible: store.filterState.showFilters,\r\n selectedFilters: store.filterState.selectedFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n fabricatorData: store.fabricatorState,\r\n cartItems: store.cartState.cartItems,\r\n navigationViewType: store.navigationState.navigationViewType,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n navigationLoadingActive: store.navigationState.navigationLoadingActive,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n windowWidth: store.serverState.windowWidth, // re-render grid on resize\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n changeActivePartRelatedItemIndex,\r\n toggleSelectionWindow,\r\n toggleSelectionFeatureInfo,\r\n setCameFromPage,\r\n setQtActiveCategory,\r\n toggleBathroomVisualizerOpen\r\n};\r\n\r\nconst BodyItems = connect(mapStateToProps, mapDispatchToProps)(BodyItemsClass);\r\n\r\n\r\nexport default BodyItems;\r\n","import React from 'react';\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport classNames from 'classnames';\r\n\r\nimport {s3FeatureImagePath, THUMBNAIL_SIZES} from \"../../../misc/utils\";\r\nimport Analytics from \"../../../analytics\";\r\nimport {UserPopupTypes} from \"../constants\";\r\nimport {getFeatureIsLocked, toFixedFeatureCost} from '../../../misc/helpers';\r\nimport FeatureName from \"../featureName\";\r\nimport {isFeatureEnabled} from \"../../../misc/displayLogic\";\r\nimport {getPriceWithIncluded} from \"../../../misc/priceFunctions\";\r\n\r\nconst navigationItem = (props) => {\r\n\r\n if (!props.currentFeature) {\r\n return props.isMobile\r\n ?
  • \r\n :
    \r\n }\r\n\r\n const { fabricatorData, isPhoneNumberValidated, currentFeatureCartItemsCount } = props;\r\n\r\n const currentFeature = props.currentFeature.part;\r\n\r\n let styles = {};\r\n if (currentFeature.dbFeature.thumbnailUrl) {\r\n const size = props.isMobile\r\n ? THUMBNAIL_SIZES.small\r\n : props.largeThumbnail ? null : THUMBNAIL_SIZES.medium\r\n styles.backgroundImage = `url('${s3FeatureImagePath(currentFeature.dbFeature.thumbnailUrl, size)}')`;\r\n } else if (props.currentFeature && currentFeature.customThumbnail) {\r\n styles.backgroundImage = `url('${currentFeature.customThumbnail}')`;\r\n }\r\n\r\n const featureIsEnabledForQt = isFeatureEnabled(currentFeature, \"quotingTool\");\r\n\r\n const fabricatorSettings = fabricatorData.settings;\r\n const allPagesEnabled = !document.kvConfig.visualizerOnly;\r\n\r\n let showPrice = false;\r\n if (fabricatorSettings.showPricing && !fabricatorData.hideCheckoutBreakdownCost && !fabricatorData.hidePricesFromUser) {\r\n if (!featureIsEnabledForQt) {\r\n showPrice = false;\r\n } else if ((fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) && !currentFeature.dbFeature.unlocked) {\r\n if (props.isPhoneNumberValidated) {\r\n showPrice = true\r\n }\r\n } else {\r\n showPrice = true\r\n }\r\n }\r\n\r\n const featureIsLocked = getFeatureIsLocked(currentFeature);\r\n\r\n const getQuoteEnabled = fabricatorSettings.enableQuote && !featureIsLocked;\r\n const quoteOrUnlockButtonVisible = featureIsLocked || (getQuoteEnabled && !isPhoneNumberValidated);\r\n\r\n const isAddToCartButtonVisible = props.isActive && allPagesEnabled && fabricatorSettings.showPricing && featureIsEnabledForQt && (\r\n (fabricatorSettings.leadCapture && (currentFeature.dbFeature.unlocked || props.isPhoneNumberValidated))\r\n || !(fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)))\r\n && props.existInQtCategory && !quoteOrUnlockButtonVisible;\r\n\r\n const price = toFixedFeatureCost(currentFeature, 1);\r\n\r\n return props.isMobile ? (\r\n
  • \r\n
    Analytics.sendClickEvent('feature-clicked-' + currentFeature.partName)\r\n && props.onItemClick(props.currentFeature, featureIsLocked, event)}>\r\n {currentFeature.notAvailableInVisualizer ? (\r\n \r\n ) : null}\r\n {currentFeatureCartItemsCount > 0 ?\r\n {currentFeatureCartItemsCount} : null\r\n }\r\n
    \r\n {showPrice ? (\r\n \r\n {getPriceWithIncluded(price, currentFeature, fabricatorData, props.intl.messages)}\r\n \r\n ) : null}\r\n {featureIsLocked\r\n ? \r\n : }\r\n
    \r\n
    \r\n {props.isActive && !currentFeature.dbFeature.autoAddToCart ? (\r\n
    \r\n {isAddToCartButtonVisible ? (\r\n \r\n ) : null}\r\n {quoteOrUnlockButtonVisible ? (\r\n \r\n ) : null}\r\n {allPagesEnabled && props.existInQtCategory && !isAddToCartButtonVisible && !quoteOrUnlockButtonVisible && featureIsEnabledForQt ? (\r\n {\r\n Analytics.sendClickEvent('feature-clicked-show-feature-info') &&\r\n Analytics.sendClickEvent('feature-clicked-show-feature-info-' + currentFeature.partName) &&\r\n props.switchToFeatureInfo(props.currentFeature)\r\n }}/>\r\n ) : null}\r\n
    \r\n ) : null}\r\n
  • \r\n ) : (\r\n
    Analytics.sendClickEvent('feature-clicked')\r\n && Analytics.sendClickEvent('feature-clicked-' + currentFeature.partName)\r\n && props.onItemClick(props.currentFeature, featureIsLocked, event)}>\r\n\r\n {currentFeature.vanitySize ?\r\n {currentFeature.vanitySize}\" : null\r\n }\r\n {currentFeatureCartItemsCount > 0 ?\r\n {currentFeatureCartItemsCount} : null\r\n }\r\n {props.isActive && !currentFeature.dbFeature.autoAddToCart ? (\r\n
    \r\n {isAddToCartButtonVisible ? (\r\n \r\n ) : null}\r\n {quoteOrUnlockButtonVisible ? (\r\n \r\n ) : null}\r\n {allPagesEnabled && props.existInQtCategory && featureIsEnabledForQt ? (\r\n {\r\n Analytics.sendClickEvent('feature-clicked-show-feature-info') &&\r\n Analytics.sendClickEvent('feature-clicked-show-feature-info-' + currentFeature.partName) &&\r\n props.switchToFeatureInfo(props.currentFeature)\r\n }}/>\r\n ) : null}\r\n
    \r\n ) : null}\r\n {currentFeature.notAvailableInVisualizer ? (\r\n \r\n ) : null}\r\n
    \r\n {showPrice ? (\r\n \r\n {getPriceWithIncluded(price, currentFeature, fabricatorData, props.intl.messages)}\r\n \r\n ) : null}\r\n {!featureIsLocked ? : null}\r\n
    \r\n
    \r\n );\r\n}\r\n\r\nnavigationItem.displayName = \"navigationItem\";\r\nexport default injectIntl(navigationItem)\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Ceiling extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'walls_ceiling';\r\n this.partName = 'Ceiling';\r\n this.translateId = \"visualizer.kitchen.walls.walls_ceiling\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Ceiling());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Walls.Ceiling;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class LeftWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'left_wall';\r\n this.partName = 'Left Wall';\r\n this.translateId = \"visualizer.kitchen.walls.left_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new LeftWall());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Walls.LeftWall;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class RightWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'right_wall';\r\n this.partName = 'Right Wall';\r\n this.translateId = \"visualizer.kitchen.walls.right_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new RightWall());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Walls.RightWall;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class PopoutWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'popout_wall';\r\n this.partName = 'Popout Wall';\r\n this.translateId = \"visualizer.kitchen.walls.popout_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new PopoutWall());\r\n }\r\n\r\n setDefault() {\r\n if (!this.tryToSetTheSameFeature(this.features)) {\r\n const leftWall = this.getParent().leftWall;\r\n let sameWallAsLeftWall = null;\r\n if (leftWall && leftWall.activeFeature && leftWall.activeFeature.partName) {\r\n const leftWallName = leftWall.activeFeature.getSplittedFeatureName();\r\n sameWallAsLeftWall = this.features.find(wall => wall.getSplittedFeatureName() === leftWallName);\r\n }\r\n this.activeFeature = sameWallAsLeftWall || this.features[0]\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Walls.PopoutWall;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","// import $ from \"jquery\";\r\nimport uniqBy from \"lodash/uniqBy\";\r\n\r\nimport {IntermediatePart} from \"../../intermediatePart\";\r\nimport {BACKSPLASH_TYPES, LayoutAbbreviations} from \"../../constants\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\nimport {loaderDisable, loaderEnable} from \"../../../../ui/loaderView\";\r\nimport Navigation from \"../../../../visComponents/navigation/navigation\";\r\n// import ActionTypes from \"../../../../../misc/actionTypes\";\r\n\r\nexport default class Backsplash extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'backsplash';\r\n this.partName = 'Backsplash';\r\n this.translateId = \"visualizer.kitchen.walls.backsplash\";\r\n this.isStoneFeature = true;\r\n this.canBeDisabled = true;\r\n this.toggleSwitchedOffByUser = false;\r\n if (isChild) {\r\n this.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n this.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (Array.isArray(dbFeature.metaData[\"CabinetLayout\"])\r\n && dbFeature.metaData[\"CabinetLayout\"].includes(\"4\")\r\n && !dbFeature.metaData[\"CabinetLayout\"].includes(\"5\")) {\r\n dbFeature.metaData[\"CabinetLayout\"].push(\"5\");\r\n }\r\n // if (!(Array.isArray(dbFeature.metaData[\"backsplashType\"]) || Array.isArray(dbFeature.metaData[\"BacksplashType\"]))) {\r\n // if (dbFeature.description && dbFeature.description.includes(\"4in\")) {\r\n // dbFeature.metaData[\"BacksplashType\"] = [\"4in\"];\r\n // } else if (dbFeature.description && dbFeature.description.includes(\"6in\")) {\r\n // dbFeature.metaData[\"BacksplashType\"] = [\"6in\"];\r\n // } else if (dbFeature.metaData[\"CabinetLayout\"]) {\r\n // dbFeature.metaData[\"BacksplashType\"] = [\"18in\"];\r\n // }\r\n // console.log(\"backsplash custom\", dbFeature.sharedFeatureName, dbFeature.metaData[\"BacksplashType\"]);\r\n // }\r\n return super.load_(dbFeature, new Backsplash());\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n if (this.activeFeature) {\r\n // const withInches = BACKSPLASH_TYPES.filter(bType => bType.includes(\"in\"));\r\n // const filterByInchSize = withInches.find(bType => this.activeFeature.partName.includes(bType));\r\n featuresToDisplay = featuresToDisplay.filter(feature => {\r\n if (Array.isArray(this.activeFeature.metaData[\"BacksplashType\"]) && Array.isArray(feature.metaData[\"BacksplashType\"])) {\r\n return feature.metaData[\"BacksplashType\"].includes(this.activeFeature.metaData[\"BacksplashType\"][0])\r\n }\r\n return false\r\n // if (!feature.partName) {\r\n // return false\r\n // }\r\n // return filterByInchSize\r\n // ? feature.partName.includes(filterByInchSize)\r\n // : withInches.every(withInchesType => !feature.partName.includes(withInchesType))\r\n }); // filter by 4in, 6in, Full\r\n\r\n if (this.featureIsFullWall(this.activeFeature)) { // full backsplashes should be filtered by CabinetLayout metaData\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const cabinetLayoutMetaData = cabinetParent && cabinetParent.topCabinet && cabinetParent.topCabinet.activeFeature\r\n && cabinetParent.topCabinet.activeFeature.metaData && cabinetParent.topCabinet.activeFeature.metaData[\"CabinetLayout\"];\r\n if (cabinetLayoutMetaData) {\r\n featuresToDisplay = featuresToDisplay.filter(feature => feature.metaData && feature.metaData[\"CabinetLayout\"]\r\n && feature.metaData[\"CabinetLayout\"].includes(cabinetLayoutMetaData[0]))\r\n }\r\n }\r\n }\r\n\r\n return uniqBy(this.getUniqueFeatures(featuresToDisplay), (feature) => feature.dbFeature.id)\r\n .map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n getUniqueFeatures(featuresToDisplay) { // remove bathroom backsplashes (with the same name and not in visualizer)\r\n return featuresToDisplay.filter(feature => {\r\n const featureSplittedName = feature.getSplittedFeatureName();\r\n return !(feature.notAvailableInVisualizer && featuresToDisplay.some(countertop => {\r\n return countertop.getSplittedFeatureName() === featureSplittedName\r\n }));\r\n })\r\n }\r\n\r\n getFeatureByBacksplashType(neededType, featureName = \"\") {\r\n // const withInches = BACKSPLASH_TYPES.filter(bType => bType.includes(\"in\"));\r\n const matchingFeatures = this.features.filter(feature => {\r\n if (Array.isArray(feature.metaData[\"BacksplashType\"]) && feature.metaData[\"BacksplashType\"].includes(neededType)) {\r\n return true\r\n }\r\n // return feature.partName && (withInches.includes(neededType)\r\n // ? feature.partName.includes(\" \"+neededType)\r\n // : withInches.every(withInchesType => !feature.partName.includes(withInchesType)))\r\n });\r\n\r\n let currentPartName = featureName;\r\n if (!currentPartName && this.activeFeature) {\r\n // currentPartName = this.activeFeature.removeLayoutFromPartName(this.activeFeature.partName); // remove layout name\r\n // withInches.forEach(bType => currentPartName = currentPartName.split(\" \"+bType).join(\"\")); // 2) remove 6in or 4in\r\n // currentPartName = this.activeFeature.removeCabinetLayoutFromPartName(currentPartName);\r\n currentPartName = this.activeFeature.getCountertopGroupsSplittedFeatureName();\r\n }\r\n\r\n const matchByName = matchingFeatures.filter(feature => {\r\n // let featurePartName = feature.removeLayoutFromPartName(feature.partName); // remove layout name\r\n // withInches.forEach(bType => featurePartName = featurePartName.split(\" \"+bType).join(\"\")); // 2) remove 6in or 4in\r\n // featurePartName = feature.removeCabinetLayoutFromPartName(featurePartName);\r\n return feature.getCountertopGroupsSplittedFeatureName() === currentPartName\r\n });\r\n if (matchByName.length > 1) {\r\n const cabinetLayoutMetaData = this.getTopCabinetCabinetLayoutMetadata();\r\n const sameCabinetType = matchByName.find(feature => {\r\n if (this.featureIsFullWall(feature)) {\r\n return feature.matchesMetaForArrayOfConditions([\r\n {\r\n propName: 'CabinetLayout',\r\n propValue: cabinetLayoutMetaData\r\n }\r\n ])\r\n }\r\n });\r\n return sameCabinetType || matchByName[0];\r\n }\r\n return matchByName[0] || matchingFeatures[0];\r\n }\r\n\r\n featureIsFullWall = (feature) => {\r\n // const withInches = BACKSPLASH_TYPES.filter(bType => bType.includes(\"in\"));\r\n // return !withInches.some(bType => feature.partName.includes(bType))\r\n // || (Array.isArray(feature.metaData[\"BacksplashType\"]) && feature.metaData[\"BacksplashType\"][0] === \"18in\");\r\n return Array.isArray(feature.metaData[\"BacksplashType\"]) && feature.metaData[\"BacksplashType\"][0] === \"18in\"\r\n }\r\n\r\n getCurrentActiveFeatureType() {\r\n if (this.activeFeature && Array.isArray(this.activeFeature.metaData[\"BacksplashType\"])) {\r\n return this.activeFeature.metaData[\"BacksplashType\"][0]\r\n }\r\n return \"18in\"\r\n // const withInches = BACKSPLASH_TYPES.filter(bType => bType.includes(\"in\"));\r\n // return this.activeFeature && (withInches.find(bType => {\r\n // return this.activeFeature.partName.includes(bType)\r\n // }) || BACKSPLASH_TYPES[2])\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.getArrayOfConditions\r\n ? this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))\r\n : this.features;\r\n const matchingFeatureExist = this.tryToSetTheSameFeature(filteredFeatures, null);\r\n if (!matchingFeatureExist && !window.requestInProcess) {\r\n this.activeFeature = filteredFeatures[0];\r\n }\r\n if (this.setActiveFeatureParts) {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n }\r\n\r\n tryToSetTheSameFeature(filteredFeatures = [], partName = \"\") {\r\n if (this.activeFeature && this.activeFeature.partName) {\r\n this.activeFeature = this.findFeatureByPartName(\r\n partName || this.activeFeature.getCountertopGroupsSplittedFeatureName(),\r\n !partName,\r\n filteredFeatures\r\n );\r\n if (this.activeFeature) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n findFeatureByPartName(splittedName, alReadySplitted = true) {\r\n if (!alReadySplitted) {\r\n splittedName = this.removeLayoutFromPartName(splittedName);\r\n splittedName = this.removeCabinetLayoutFromPartName(splittedName);\r\n }\r\n const navFeature = this.navigationSubItems().find((feature) => {\r\n if (feature.part && feature.part.partName) {\r\n let currentFeatureSplittedName = feature.part.getCountertopGroupsSplittedFeatureName();\r\n return currentFeatureSplittedName === splittedName\r\n }\r\n });\r\n return navFeature && navFeature.part\r\n }\r\n\r\n setFeatureByName = async (passedName = \"\") => {\r\n window.requestInProcess = true;\r\n loaderEnable();\r\n const splittedName = passedName || this.activeFeature.getCountertopGroupsSplittedFeatureName();\r\n await Navigation.searchFeaturesByName(this, splittedName);\r\n const neededFeature = this.findFeatureByPartName(splittedName, true);\r\n if (neededFeature) {\r\n this.activeFeature = neededFeature;\r\n }\r\n window.requestInProcess = false;\r\n loaderDisable();\r\n // $(window).trigger(ActionTypes.CHANGE_LAYOUT); // update canvas\r\n return true\r\n };\r\n\r\n getTopCabinetCabinetLayoutMetadata() {\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n return cabinetParent && cabinetParent.topCabinet && cabinetParent.topCabinet.activeFeature\r\n && cabinetParent.topCabinet.activeFeature.metaData && cabinetParent.topCabinet.activeFeature.metaData[\"CabinetLayout\"];\r\n }\r\n\r\n getArrayOfConditions() {\r\n\r\n const conditions = [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n\r\n const cabinetLayoutMetaData = this.getTopCabinetCabinetLayoutMetadata();\r\n\r\n if (cabinetLayoutMetaData && this.activeFeature) {\r\n if (this.featureIsFullWall(this.activeFeature)) {\r\n conditions.push({\r\n propName: 'CabinetLayout',\r\n propValue: cabinetLayoutMetaData\r\n });\r\n }\r\n }\r\n return conditions;\r\n }\r\n\r\n removeBacksplashTypeFromPartName(partName) {\r\n BACKSPLASH_TYPES.forEach(abbr => {\r\n partName = partName.replace(\" \"+abbr, \"\")\r\n });\r\n return partName\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Walls.Backsplash;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n\r\n canUseNavigationFilterSteps() {\r\n return true\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {bottomCabinetModuleSystem} from \"./cabinetModuleSystem\";\r\n\r\nexport default class BottomCabinet extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'bottom_cabinet';\r\n this.partName = 'Bottom Cabinet';\r\n this.layerPriority = 4;\r\n this.translateId = \"visualizer.kitchen.cabinet.bottom_cabinet\";\r\n if (isChild) {\r\n this.moduleSystem = bottomCabinetModuleSystem;\r\n this.defaultInlayType = \"Wood\";\r\n this.inlayTypes = []; // array of objects, for ex. {name: \"Cascade\", moduleParts: [\"3_2\", \"7_56\"]}\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const parts = dbFeature.metaData && dbFeature.metaData[\"Parts\"];\r\n const module = dbFeature.metaData && dbFeature.metaData[\"Module\"];\r\n if (module && module[0] !== \"0\") {\r\n return super.load_(dbFeature, new BottomCabinet(false, null),true, 'moduleParts');\r\n } else if (parts) {\r\n dbFeature.displayName = dbFeature.displayName.replace(/M_0(.*?) /, \"M \").replace(/ Part1/, \"\");\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return super.load_(dbFeature, new BottomCabinet(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n return super.load_(dbFeature, new BottomCabinet());\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n featuresToDisplay = featuresToDisplay.filter((feature) => {\r\n if (feature.metaData[\"Module\"]) {\r\n return (feature.metaData[\"Module\"][0] === \"0\" && feature.metaData[\"Part\"][0] === \"1\")\r\n && feature.metaData[\"Appliance\"] && feature.metaData[\"Appliance\"].includes(\"Range\")\r\n }\r\n return true\r\n });\r\n\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n disabledClick() {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom = \"\") {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick(ignoreLocked, clickFrom);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.bottomCabinet.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n availableFeatures(cabinetFeatures) {\r\n return cabinetFeatures.filter(cabinetFeature => cabinetFeature.partNumber === 1)\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n this.checkIfFeaturePartIsMatching();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getActiveFeatureConditions(fromFeature = this.activeFeature) {\r\n const arrayOfConditions = this.getArrayOfConditions();\r\n const applianceType = fromFeature.metaData[\"Appliance\"] ? fromFeature.metaData[\"Appliance\"][0] : null;\r\n const cabinetLayout = fromFeature.metaData[\"CabinetLayout\"] ? fromFeature.metaData[\"CabinetLayout\"][0] : null;\r\n const doorSet = fromFeature.metaData[\"DoorSet\"] ? fromFeature.metaData[\"DoorSet\"][0] : null;\r\n if (applianceType) {\r\n arrayOfConditions.push({\r\n propName: 'Appliance',\r\n propValue: applianceType\r\n })\r\n }\r\n if (cabinetLayout) {\r\n arrayOfConditions.push({\r\n propName: 'CabinetLayout',\r\n propValue: cabinetLayout\r\n })\r\n }\r\n if (doorSet) {\r\n arrayOfConditions.push({\r\n propName: 'DoorSet',\r\n propValue: doorSet\r\n })\r\n }\r\n return arrayOfConditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Cabinet.BottomCabinet;\r\n const zIndex2 = zIndexes.Cabinet.BottomCabinet2;\r\n const zIndex3 = zIndexes.Cabinet.Peninsula;\r\n const zIndexBox = zIndexes.Cabinet.BottomCabinetModuleBox;\r\n // const zIndexBox2 = zIndexes.Cabinet.BottomCabinetModuleBox2;\r\n if (this.activeFeature) {\r\n if (this.activeFeature.metaData[\"Module\"] && this.activeFeature.metaData[\"Module\"][0] === \"0\") {\r\n this.activeFeature.layer.zIndex = zIndexBox;\r\n } else {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart, activeFeaturePartIndex) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n if (activeFeaturePart.metaData[\"Module\"] && !activeFeaturePart.metaData[\"Part\"]) {\r\n const module = activeFeaturePart.metaData[\"Module\"][0];\r\n const modulePart = activeFeaturePart.metaData[\"ModulePart\"][0];\r\n activeFeaturePart.layer.zIndex = zIndexes.Cabinet.BottomCabinetModules[module+\"_\"+modulePart];\r\n } else {\r\n activeFeaturePart.layer.zIndex = activeFeaturePartIndex === 0 ? zIndex2 : zIndex3;\r\n // if (activeFeaturePart.partName.includes(\"Part2\")) {\r\n // if (this.activeFeature.metaData[\"Module\"] && this.activeFeature.metaData[\"Module\"][0] === \"0\") {\r\n // activeFeaturePart.layer.zIndex = zIndexBox2;\r\n // } else {\r\n // activeFeaturePart.layer.zIndex = zIndex2;\r\n // }\r\n // } else if (activeFeaturePart.partName.includes(\"Part3\")) {\r\n // activeFeaturePart.layer.zIndex = zIndex3;\r\n // }\r\n }\r\n }\r\n });\r\n // go again & try to find the same zIndex, cause we might have 3_3 - 2 times...\r\n // this.activeFeatureParts\r\n // .filter(activeFeaturePart => activeFeaturePart && activeFeaturePart.layer)\r\n // .forEach((activeFeaturePart) => {\r\n // const hasTheSameZIndex = this.activeFeatureParts.some(testFeaturePart => {\r\n // return (testFeaturePart.layer.zIndex === activeFeaturePart.layer.zIndex)\r\n // && (testFeaturePart.partName !== activeFeaturePart.partName)\r\n // });\r\n // if (hasTheSameZIndex) {\r\n // activeFeaturePart.layer.zIndex++;\r\n // }\r\n // })\r\n }\r\n }\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n if (fromFeature && fromFeature.metaData[\"Module\"]) {\r\n const featureName = fromFeature.getModuleFeatureName();\r\n const availableFeatures = this.moduleParts.filter((currentFeature) => {\r\n // 1) filter by module names, e.g. \"Hudson Linen White\"\r\n return featureName === currentFeature.getModuleFeatureName();\r\n });\r\n for (let i = 1; i <= this.moduleSystem.length; i++ ) {\r\n const currentModuleSystemNumber = i - 1;\r\n for (let k = 0; k <= this.moduleSystem[currentModuleSystemNumber].length - 1; k++ ) {\r\n const modulePart = this.moduleSystem[currentModuleSystemNumber][k];\r\n const modulePartSplitted = modulePart.split(\"_\");\r\n const moduleMatchingPart = availableFeatures.find((feature) => {\r\n return feature.metaData[\"ModulePartWidth\"] && feature.metaData[\"ModulePartHeight\"]\r\n && +feature.metaData[\"Module\"][0] === i\r\n && feature.metaData[\"ModulePartWidth\"][0] === modulePartSplitted[0]\r\n && feature.metaData[\"ModulePartHeight\"][0] === modulePartSplitted[1]\r\n && feature.metaData[\"ModulePart\"][0] === modulePartSplitted[2]\r\n });\r\n if (moduleMatchingPart) {\r\n activeFeatureParts.push(moduleMatchingPart);\r\n // } else { // this is for debugging only - look for features which are not exist\r\n // console.log(\"this.moduleSystem[i]\", i);\r\n // console.log(\"modulePartIndex\", k);\r\n }\r\n }\r\n }\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n canUseNavigationFilter() {\r\n return this.activeFeature && this.activeFeature.metaData[\"Module\"]\r\n && this.activeFeature.metaData[\"Module\"][0] === \"0\";\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {topCabinetModuleSystem} from \"./cabinetModuleSystem\";\r\nimport store from \"../../../../../store\";\r\n\r\nexport default class TopCabinet extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'top_cabinet';\r\n this.partName = 'Top Cabinet';\r\n this.translateId = \"visualizer.kitchen.cabinet.top_cabinet\";\r\n this.canBeDisabled = true;\r\n this.layerPriority = 1;\r\n if (isChild) {\r\n this.moduleSystem = topCabinetModuleSystem;\r\n this.defaultInlayType = \"Wood\"; // Cascade or Wood\r\n this.inlayTypes = [{\r\n name: \"Cascade\",\r\n moduleParts: [\"2_4\", \"2_5\", \"5_4\", \"5_5\",\"7_4\", \"7_5\",]\r\n }]; // array of objects, for ex. {name: \"Cascade\", moduleParts: [\"3_2\", \"7_56\"]}\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const parts = dbFeature.metaData && dbFeature.metaData[\"Parts\"];\r\n const module = dbFeature.metaData && dbFeature.metaData[\"Module\"];\r\n if (module && module[0] !== \"0\") {\r\n return super.load_(dbFeature, new TopCabinet(false, null),true, 'moduleParts');\r\n } else if (parts) {\r\n dbFeature.displayName = dbFeature.displayName.replace(/M_0(.*?) /, \"M \").replace(/ Part1/, \"\");\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return super.load_(dbFeature, new TopCabinet(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n return super.load_(dbFeature, new TopCabinet());\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n const topCabinetApplianceType = this.getParent().getTopCabinetApplianceType();\r\n const allowedPorticos = [\r\n \"Portico White Chocolate S Hood Layout 2\",\r\n \"Portico White Chocolate L Hood Layout 2\",\r\n \"Portico White Chocolate SP Hood Layout 2\",\r\n \"Portico White Chocolate S Microwave Layout 2\",\r\n \"Portico White Chocolate L Microwave Layout 2\",\r\n \"Portico White Chocolate SP Microwave Layout 2\"\r\n ];\r\n featuresToDisplay = featuresToDisplay\r\n .filter((feature) => {\r\n return feature.metaData[\"Appliance\"] && feature.metaData[\"Appliance\"].includes(topCabinetApplianceType)\r\n })\r\n .filter((feature) => {\r\n if (feature.metaData[\"Module\"]) {\r\n return (feature.metaData[\"Module\"][0] === \"0\" && feature.metaData[\"Part\"][0] === \"1\")\r\n }\r\n return true\r\n })\r\n .filter((feature) => {\r\n if (feature.partName.includes(\"Portico White Chocolate\") && !allowedPorticos.includes(feature.partName)) {\r\n return false\r\n }\r\n return true\r\n });\r\n\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n changeLayout() {\r\n if (this.disabled) {\r\n this.disabled = false;\r\n this.disabledClick();\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const topHandle = this.getParent().topHandle;\r\n if (topHandle) {\r\n topHandle.disabled = this.disabled;\r\n }\r\n const crownMolding = this.getParent().crownMolding;\r\n if (crownMolding) {\r\n crownMolding.disabled = this.disabled;\r\n }\r\n }\r\n\r\n async handleClick(ignoreLocked, clickFrom = \"\") {\r\n const parent = this.getParent();\r\n const layout = parent.getParent().layout;\r\n const backsplash = layout.parts[\"Walls\"] && layout.parts[\"Walls\"].backsplash;\r\n const backsplashActiveFeature = backsplash ? backsplash.activeFeature : null;\r\n\r\n if (backsplashActiveFeature && backsplash.featureIsFullWall(backsplashActiveFeature) && this.metaData[\"CabinetLayout\"]) {\r\n const splittedName = backsplashActiveFeature.getCountertopGroupsSplittedFeatureName();\r\n const conditions = [{\r\n propName: 'CabinetLayout',\r\n propValue: this.metaData[\"CabinetLayout\"]\r\n }];\r\n if (!backsplashActiveFeature.matchesMetaForArrayOfConditions(conditions)) {\r\n const matchedByName = backsplash.findFeatureByPartName(splittedName);\r\n if (!matchedByName || !matchedByName.matchesMetaForArrayOfConditions(conditions)) {\r\n await backsplash.setFeatureByName(splittedName);\r\n }\r\n }\r\n }\r\n\r\n super.handleClick(ignoreLocked, clickFrom);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n\r\n this.featureClicked();\r\n }\r\n\r\n availableFeatures(cabinetFeatures) {\r\n return cabinetFeatures.filter(cabinetFeature => cabinetFeature.partNumber === 1)\r\n }\r\n\r\n getArrayOfConditions() {\r\n const cabinetParent = this.getParent();\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: cabinetParent.layout.getCurrentLayoutAbbreviation()\r\n // },{\r\n // propName: 'Appliance',\r\n // propValue: cabinetParent.getTopCabinetApplianceType()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Cabinet.TopCabinet;\r\n const zIndex2 = zIndexes.Cabinet.TopCabinet2;\r\n const zIndexBox = zIndexes.Cabinet.TopCabinetModuleBox;\r\n const zIndexBox2 = zIndexes.Cabinet.TopCabinetModuleBox2;\r\n if (this.activeFeature) {\r\n if (this.activeFeature.metaData[\"Module\"] && this.activeFeature.metaData[\"Module\"][0] === \"0\") {\r\n this.activeFeature.layer.zIndex = zIndexBox;\r\n } else {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n if (activeFeaturePart.metaData[\"Module\"] && !activeFeaturePart.metaData[\"Part\"]) {\r\n const module = activeFeaturePart.metaData[\"Module\"][0];\r\n const modulePart = activeFeaturePart.metaData[\"ModulePart\"][0];\r\n activeFeaturePart.layer.zIndex = zIndexes.Cabinet.TopCabinetModules[module+\"_\"+modulePart];\r\n } else if (this.activeFeature.metaData[\"Module\"] && this.activeFeature.metaData[\"Module\"][0] === \"0\") {\r\n activeFeaturePart.layer.zIndex = zIndexBox2;\r\n } else {\r\n activeFeaturePart.layer.zIndex = zIndex2;\r\n }\r\n }\r\n });\r\n // // go again & try to find the same zIndex, cause we might have 3_3 - 2 times...\r\n // this.activeFeatureParts\r\n // .filter(activeFeaturePart => activeFeaturePart && activeFeaturePart.layer)\r\n // .forEach((activeFeaturePart) => {\r\n // const hasTheSameZIndex = this.activeFeatureParts.some(testFeaturePart => {\r\n // return (testFeaturePart.layer.zIndex === activeFeaturePart.layer.zIndex)\r\n // && (testFeaturePart.partName !== activeFeaturePart.partName)\r\n // });\r\n // if (hasTheSameZIndex) {\r\n // activeFeaturePart.layer.zIndex++;\r\n // }\r\n // })\r\n }\r\n }\r\n }\r\n\r\n matchesInlayType(feature, module = \"1\", modulePart = \"1\") {\r\n\r\n const featureFilterValueIDs = feature.dbFeature.filterValueIDs;\r\n if (!featureFilterValueIDs) {\r\n return true\r\n }\r\n\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const filterGroup = filterGroups.find(group => group.name === \"Inlay Type\");\r\n if (!filterGroup) {\r\n return true\r\n }\r\n\r\n const modulePartJoined = module + \"_\" + modulePart;\r\n\r\n if (this.inlayTypes.length) {\r\n for (let i = 0; i <= this.inlayTypes.length - 1; i++) {\r\n const inlayTypeObject = this.inlayTypes[i];\r\n const fValue = filterGroup.values.find(val => {\r\n return (inlayTypeObject.moduleParts.includes(modulePartJoined))\r\n ? val.value === inlayTypeObject.name\r\n : val.value === this.defaultInlayType\r\n });\r\n // console.log(\"fValue\", fValue);\r\n // console.log(\"featureFilterValueIDs[filterGroup.id]\", featureFilterValueIDs[filterGroup.id]);\r\n return fValue && featureFilterValueIDs[filterGroup.id] && featureFilterValueIDs[filterGroup.id].includes(fValue.id)\r\n }\r\n } else {\r\n const fValue = filterGroup.values.find(val => val.value === this.defaultInlayType);\r\n return fValue && featureFilterValueIDs[filterGroup.id] && featureFilterValueIDs[filterGroup.id].includes(fValue.id)\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n this.checkIfFeaturePartIsMatching();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getActiveFeatureConditions(fromFeature = this.activeFeature) {\r\n const arrayOfConditions = this.getArrayOfConditions();\r\n const applianceType = fromFeature.metaData[\"Appliance\"] ? fromFeature.metaData[\"Appliance\"][0] : null;\r\n const cabinetLayout = fromFeature.metaData[\"CabinetLayout\"] ? fromFeature.metaData[\"CabinetLayout\"][0] : null;\r\n const doorSet = fromFeature.metaData[\"DoorSet\"] ? fromFeature.metaData[\"DoorSet\"][0] : null;\r\n if (applianceType) {\r\n arrayOfConditions.push({\r\n propName: 'Appliance',\r\n propValue: applianceType\r\n })\r\n }\r\n if (cabinetLayout) {\r\n arrayOfConditions.push({\r\n propName: 'CabinetLayout',\r\n propValue: cabinetLayout\r\n })\r\n }\r\n if (doorSet) {\r\n arrayOfConditions.push({\r\n propName: 'DoorSet',\r\n propValue: doorSet\r\n })\r\n }\r\n return arrayOfConditions\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n if (fromFeature && fromFeature.metaData[\"Module\"]) {\r\n activeFeatureParts = [...activeFeatureParts, ...this.findFeaturesByModuleSystem(fromFeature)];\r\n if (fromFeature.metaData[\"Appliance\"] && fromFeature.metaData[\"Appliance\"].includes(\"Hood\")) {\r\n activeFeatureParts = activeFeatureParts.filter(fPart => fPart.metaData[\"Module\"]\r\n && !fPart.metaData[\"Module\"].includes(\"6\"))\r\n }\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n findFeaturesByModuleSystem(fromFeature = this.activeFeature) {\r\n let activeFeatureParts = [];\r\n const featureName = fromFeature.getModuleFeatureName();\r\n const availableFeatures = this.moduleParts.filter((currentFeature) => {\r\n // 1) filter by module names, e.g. \"Hudson Linen White\"\r\n return featureName === currentFeature.getModuleFeatureName();\r\n });\r\n for (let i = 1; i <= this.moduleSystem.length; i++ ) {\r\n const currentModuleSystemNumber = i - 1;\r\n for (let k = 0; k <= this.moduleSystem[currentModuleSystemNumber].length - 1; k++ ) {\r\n const modulePart = this.moduleSystem[currentModuleSystemNumber][k];\r\n const modulePartSplitted = modulePart.split(\"_\");\r\n const moduleMatchingPart = availableFeatures.find((feature) => {\r\n return +feature.metaData[\"Module\"][0] === i\r\n && feature.metaData[\"ModulePartWidth\"][0] === modulePartSplitted[0]\r\n && feature.metaData[\"ModulePartHeight\"][0] === modulePartSplitted[1]\r\n && feature.metaData[\"ModulePart\"][0] === modulePartSplitted[2]\r\n && this.matchesInlayType(feature, feature.metaData[\"Module\"][0], modulePartSplitted[2])\r\n });\r\n if (moduleMatchingPart) {\r\n activeFeatureParts.push(moduleMatchingPart);\r\n // } else { // this is for debugging only - look for features which are not exist\r\n // console.log(\"this.moduleSystem[i]\", i);\r\n // console.log(\"modulePartIndex\", k);\r\n }\r\n }\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n getFilterGroupObjectByInlayType(inlayTypeName) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const filterGroup = filterGroups.find(group => group.name === \"Inlay Type\");\r\n return {\r\n filterGroup,\r\n fValue: filterGroup && filterGroup.values.find(val => val.value === inlayTypeName)\r\n };\r\n }\r\n\r\n findFeatureByModuleAndModulePart(modulePart = \"1_1\", inlayTypeName = \"Wood\") {\r\n const featureName = this.activeFeature.getModuleFeatureName();\r\n const availableFeatures = this.moduleParts.filter((currentFeature) => {\r\n // 1) filter by module names, e.g. \"Hudson Linen White\"\r\n return featureName === currentFeature.getModuleFeatureName();\r\n });\r\n const modulePartSplitted = modulePart.split(\"_\");\r\n const filterObject = this.getFilterGroupObjectByInlayType(inlayTypeName);\r\n\r\n for (let i = 1; i <= this.moduleSystem.length; i++ ) {\r\n const currentModuleSystemNumber = i - 1;\r\n for (let k = 0; k <= this.moduleSystem[currentModuleSystemNumber].length - 1; k++ ) {\r\n const moduleMatchingPart = availableFeatures.find((feature) => {\r\n\r\n if (!feature.dbFeature.filterValueIDs[filterObject.filterGroup.id]) {\r\n // console.log(\"No Inlay Type Filter\", feature);\r\n return false\r\n }\r\n\r\n return +feature.metaData[\"Module\"][0] === i\r\n && feature.metaData[\"ModulePartWidth\"][0] === modulePartSplitted[0]\r\n && feature.metaData[\"ModulePartHeight\"][0] === modulePartSplitted[1]\r\n && feature.metaData[\"ModulePart\"][0] === modulePartSplitted[2]\r\n && filterObject.filterGroup && filterObject.fValue &&\r\n feature.dbFeature.filterValueIDs[filterObject.filterGroup.id].includes(filterObject.fValue.id)\r\n });\r\n if (moduleMatchingPart) {\r\n return moduleMatchingPart\r\n }\r\n }\r\n }\r\n }\r\n\r\n canUseNavigationFilter() {\r\n return this.activeFeature && this.activeFeature.metaData[\"Module\"]\r\n && this.activeFeature.metaData[\"Module\"][0] === \"0\";\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\nimport Appliance from \"../../parts/appliance\";\r\nimport store from \"../../../../../store\";\r\n\r\nexport default class CrownMolding extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'crown_molding';\r\n this.partName = 'Crown Molding';\r\n this.canBeDisabled = true;\r\n this.layerPriority = 3;\r\n this.dbName = \"crown Molding\";\r\n this.translateId = \"visualizer.kitchen.cabinet.crown_molding\";\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"CabinetLayout\"]) {\r\n dbFeature.metaData[\"CabinetLayout\"] = [\"All\"]\r\n }\r\n if (!dbFeature.metaData[\"HoodType\"]) {\r\n dbFeature.metaData[\"HoodType\"] = [\"All\"]// it can be \"Wood\"\r\n }\r\n const parts = dbFeature.metaData && dbFeature.metaData[\"Parts\"];\r\n if (parts) {\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return super.load_(dbFeature, new CrownMolding(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n } else {\r\n return super.load_(dbFeature, new CrownMolding());\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const topCabinet = this.getParent().topCabinet;\r\n if (topCabinet && topCabinet.disabled && !this.disabled) {\r\n topCabinet.disabled = this.disabled;\r\n topCabinet.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const topHandle = this.getParent().topHandle;\r\n if (topHandle) {\r\n topHandle.disabled = this.disabled;\r\n }\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick(ignoreLocked);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.crownMolding.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n availableFeatures(cabinetFeatures) {\r\n return cabinetFeatures.filter(cabinetFeature => cabinetFeature.partNumber === 1)\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n featuresToDisplay = this.getFilteredFeaturesByTopCabinetFilters(featuresToDisplay);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n getFilteredFeaturesByTopCabinetFilters(filteredFeatures) {\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const topCabinet = cabinetParent.topCabinet;\r\n\r\n if (topCabinet && topCabinet.activeFeature && topCabinet.activeFeature.dbFeature && topCabinet.activeFeature.dbFeature.filterValueIDs) {\r\n const activeTopCabinetFilters = topCabinet.activeFeature.dbFeature.filterValueIDs;\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const woodTypeFilter = filterGroups.find(group => group.name === \"WoodType\");\r\n const stainColorFilter = filterGroups.find(group => group.name === \"StainColor\");\r\n\r\n return filteredFeatures.filter((currentFeature) => {\r\n return woodTypeFilter && stainColorFilter && this.featureIsMatchingFilters(currentFeature, activeTopCabinetFilters, [\r\n woodTypeFilter, stainColorFilter\r\n ])\r\n });\r\n }\r\n return filteredFeatures\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const topCabinet = this.getParent().topCabinet;\r\n if (topCabinet && (topCabinet.disabled || !topCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && this.matchesByMetaDataAndFilters()\r\n && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n this.checkIfFeaturePartIsMatching();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n matchesByMetaDataAndFilters() {\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const topCabinet = cabinetParent.topCabinet;\r\n\r\n if (topCabinet && topCabinet.activeFeature && topCabinet.activeFeature.dbFeature && topCabinet.activeFeature.dbFeature.filterValueIDs) {\r\n const activeTopCabinetFilters = topCabinet.activeFeature.dbFeature.filterValueIDs;\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const woodTypeFilter = filterGroups.find(group => group.name === \"WoodType\");\r\n const stainColorFilter = filterGroups.find(group => group.name === \"StainColor\");\r\n return woodTypeFilter && stainColorFilter && this.featureIsMatchingFilters(this.activeFeature, activeTopCabinetFilters, [\r\n woodTypeFilter, stainColorFilter\r\n ]) && this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n }\r\n return this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n const filteredFeaturesByTopCabinetFilters = this.getFilteredFeaturesByTopCabinetFilters(filteredFeatures);\r\n this.activeFeature = filteredFeaturesByTopCabinetFilters[0] || null;\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n\r\n getArrayOfConditions() {\r\n const cabinetParent = this.getParent();\r\n let cabinetLayout = [\"All\"];\r\n if (cabinetParent.topCabinet && cabinetParent.topCabinet.activeFeature) {\r\n if (cabinetParent.topCabinet.activeFeature.metaData[\"CabinetLayout\"]) {\r\n cabinetLayout = cabinetParent.topCabinet.activeFeature.metaData[\"CabinetLayout\"][0]\r\n }\r\n }\r\n return [{\r\n propName: 'CabinetLayout',\r\n propValue: cabinetLayout\r\n }, {\r\n propName: \"Appliance\",\r\n propValue: cabinetParent.getTopCabinetApplianceType()\r\n }, {\r\n propName: 'RoomLayout',\r\n propValue: cabinetParent.layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n let hoodType = [\"All\"];\r\n const cabinetParent = this.getParent();\r\n const isHood = cabinetParent.getTopCabinetApplianceType() === \"Hood\";\r\n const isMicrowave = cabinetParent.getTopCabinetApplianceType() === \"Microwave\";\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n if (isHood && applianceParent.hood && applianceParent.hood.activeFeature\r\n && applianceParent.hood.activeFeature.metaData && applianceParent.hood.activeFeature.metaData[\"HoodType\"]) {\r\n hoodType = applianceParent.hood.activeFeature.metaData[\"HoodType\"][0];\r\n }\r\n const conditions = this.getArrayOfConditions();\r\n conditions.push({\r\n propName: \"HoodType\",\r\n propValue: isMicrowave ? \"Wood\" : hoodType\r\n });\r\n return conditions\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Cabinet.CrownMolding;\r\n const zIndex2 = zIndexes.Cabinet.CrownMolding2;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if(activeFeaturePart && activeFeaturePart.layer) activeFeaturePart.layer.zIndex = zIndex2;\r\n })\r\n }\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Fridge extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'fridge';\r\n this.partName = 'Fridge';\r\n this.translateId = \"visualizer.kitchen.appliance.fridge\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Fridge());\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Appliances.Fridge;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class FridgeShadow extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'fridge_shadow';\r\n this.partName = 'Fridge Shadow';\r\n this.visible = false;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new FridgeShadow());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const fridge = this.getParent().fridge;\r\n if (fridge && fridge.disabled) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n this.activeFeature = filteredFeatures[0];\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Appliances.FridgeShadow;\r\n }\r\n }\r\n}","import uniqBy from \"lodash/uniqBy\";\r\n\r\nimport {IntermediatePart} from \"../../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\nimport store from \"../../../../../store\";\r\nimport {METADATA} from \"../../constants\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class Hood extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'hood';\r\n this.partName = 'Hood';\r\n this.canBeDisabled = true;\r\n this.translateId = \"visualizer.kitchen.appliance.hood\";\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData.Appliance = [\"Hood\"];\r\n if (!dbFeature.metaData[\"CabinetLayout\"]) {\r\n dbFeature.metaData[\"CabinetLayout\"] = [METADATA.ALL]\r\n }\r\n if (!dbFeature.metaData[\"Cabinet\"]) {\r\n dbFeature.metaData[\"Cabinet\"] = [METADATA.ALL]\r\n }\r\n return super.load_(dbFeature, new Hood());\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked); // 1) set hood\r\n if (!this.notAvailableInVisualizer && !getFeatureIsLocked(this, ignoreLocked)) {\r\n const parent = this.getParent();\r\n const applianceParent = parent.getParent();\r\n const cabinetParent = applianceParent.layout.parts[Cabinet.id];\r\n if (cabinetParent && cabinetParent.topCabinet && cabinetParent.topCabinet.activeFeature\r\n && cabinetParent.getTopCabinetApplianceType() !== \"Hood\") {\r\n const topCabinetConditions = cabinetParent.topCabinet.getArrayOfConditions();\r\n topCabinetConditions.push({\r\n propName: \"Appliance\",\r\n propValue: \"Hood\"\r\n });\r\n const matchingCabinets = super.navigationSubItemsWithFilterMultipleConditions(\r\n topCabinetConditions,\r\n cabinetParent.topCabinet.features\r\n );\r\n if (matchingCabinets.length) {\r\n const currentName = cabinetParent.topCabinet.activeFeature.partName.split(\" Microwave\")[0];\r\n const matchingCabinet = matchingCabinets.find(cabinet => {\r\n return cabinet.partName.split(\" Hood\")[0] === currentName\r\n });\r\n (matchingCabinet || matchingCabinets[0]).handleClick(ignoreLocked);\r\n }\r\n }\r\n this.featureClicked();\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n featuresToDisplay = [\r\n ...this.getFilteredFeaturesByTopCabinetFilters(featuresToDisplay),\r\n ...this.getFeaturesMatchingAllCabinets(featuresToDisplay)\r\n ];\r\n return uniqBy(featuresToDisplay, (feature) => feature.dbFeature.id)\r\n .map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n if (cabinetParent && cabinetParent.getTopCabinetApplianceType() === \"Microwave\") {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && ((\r\n this.matchesByMetaDataAndFilters() || this.getFeaturesMatchingAllCabinets()\r\n .some(feature => feature.dbFeature.id === this.activeFeature.dbFeature.id)\r\n ) || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n matchesByMetaDataAndFilters() {\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const topCabinet = cabinetParent.topCabinet;\r\n\r\n if (topCabinet && topCabinet.activeFeature && topCabinet.activeFeature.dbFeature && topCabinet.activeFeature.dbFeature.filterValueIDs) {\r\n const activeTopCabinetFilters = topCabinet.activeFeature.dbFeature.filterValueIDs;\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const woodTypeFilter = filterGroups.find(group => group.name === \"WoodType\");\r\n const stainColorFilter = filterGroups.find(group => group.name === \"StainColor\");\r\n return woodTypeFilter && stainColorFilter && this.featureIsMatchingFilters(this.activeFeature, activeTopCabinetFilters, [\r\n woodTypeFilter, stainColorFilter\r\n ])\r\n }\r\n return this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n const filteredFeaturesByTopCabinetFilters = this.getFilteredFeaturesByTopCabinetFilters(filteredFeatures);\r\n const featuresMatchingAllCabinets = this.getFeaturesMatchingAllCabinets(filteredFeatures);\r\n if (filteredFeaturesByTopCabinetFilters.length) {\r\n this.activeFeature = filteredFeaturesByTopCabinetFilters[0]\r\n } else {\r\n // const matchingFeatureExist = super.tryToSetTheSameFeature(filteredFeatures, null);\r\n // if (!matchingFeatureExist) {\r\n this.activeFeature = featuresMatchingAllCabinets[0] || filteredFeatures[0] || null;\r\n // }\r\n }\r\n }\r\n\r\n getFeaturesMatchingAllCabinets(filteredFeatures = this.features) {\r\n return filteredFeatures.filter((feature) => {\r\n return feature.dbFeature.metaData[\"CabinetLayout\"].includes(METADATA.ALL)\r\n || feature.dbFeature.metaData[\"Cabinet\"].includes(METADATA.ALL)\r\n });\r\n }\r\n\r\n getFilteredFeaturesByTopCabinetFilters(filteredFeatures) {\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const topCabinet = cabinetParent.topCabinet;\r\n\r\n if (topCabinet && topCabinet.activeFeature && topCabinet.activeFeature.dbFeature && topCabinet.activeFeature.dbFeature.filterValueIDs) {\r\n const activeTopCabinetFilters = topCabinet.activeFeature.dbFeature.filterValueIDs;\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const woodTypeFilter = filterGroups.find(group => group.name === \"WoodType\");\r\n const stainColorFilter = filterGroups.find(group => group.name === \"StainColor\");\r\n\r\n return filteredFeatures.filter((currentFeature) => {\r\n return woodTypeFilter && stainColorFilter && this.featureIsMatchingFilters(currentFeature, activeTopCabinetFilters, [\r\n woodTypeFilter, stainColorFilter\r\n ])\r\n });\r\n }\r\n return filteredFeatures\r\n }\r\n\r\n getArrayOfConditions(ignoreConditions) {\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const conditions = [{\r\n propName: \"Cabinet\",\r\n propValue: cabinetParent.getTopCabinetType()\r\n },{\r\n propName: 'CabinetLayout',\r\n propValue: cabinetParent.getTopCabinetShadowLayout()\r\n }];\r\n if (!ignoreConditions) {\r\n conditions.push({\r\n propName: \"Appliance\",\r\n propValue: cabinetParent.getTopCabinetApplianceType()\r\n })\r\n }\r\n return conditions;\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Appliances.Hood;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Dishwasher extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'dishwasher';\r\n this.partName = 'Dishwasher';\r\n this.translateId = \"visualizer.kitchen.appliance.dishwasher\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Dishwasher());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Appliances.Dishwasher;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\n\r\nexport default class Microwave extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'microwave';\r\n this.partName = 'Microwave';\r\n this.translateId = \"visualizer.kitchen.appliance.microwave\";\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData.Appliance = [\"Microwave\"];\r\n return super.load_(dbFeature, new Microwave());\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const parent = this.getParent();\r\n super.handleClick(ignoreLocked); // 1) set microwave\r\n\r\n const applianceParent = parent.getParent();\r\n const cabinetParent = applianceParent.layout.parts[Cabinet.id];\r\n if (cabinetParent && cabinetParent.topCabinet && cabinetParent.topCabinet.activeFeature\r\n && cabinetParent.getTopCabinetApplianceType() !== \"Microwave\") {\r\n const topCabinetConditions = cabinetParent.topCabinet.getArrayOfConditions();\r\n topCabinetConditions.push({\r\n propName: \"Appliance\",\r\n propValue: \"Microwave\"\r\n });\r\n const matchingCabinets = super.navigationSubItemsWithFilterMultipleConditions(\r\n topCabinetConditions,\r\n cabinetParent.topCabinet.features\r\n );\r\n if (matchingCabinets.length) {\r\n const currentName = cabinetParent.topCabinet.activeFeature.getSplittedFeatureName();\r\n const matchingCabinet = matchingCabinets.find(cabinet => {\r\n return cabinet.getSplittedFeatureName() === currentName\r\n });\r\n (matchingCabinet || matchingCabinets[0]).handleClick(ignoreLocked);\r\n }\r\n }\r\n\r\n if (cabinetParent && cabinetParent.topCabinet && cabinetParent.topCabinet.disabled && !this.disabled) {\r\n cabinetParent.topCabinet.disabled = this.disabled;\r\n cabinetParent.topCabinet.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const topHandle = cabinetParent.topHandle;\r\n if (topHandle) {\r\n topHandle.disabled = this.disabled;\r\n }\r\n }\r\n\r\n this.featureClicked();\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const topCabinet = cabinetParent && cabinetParent.topCabinet;\r\n if (topCabinet && (topCabinet.disabled || !topCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getArrayOfConditions(ignoreAppliance) {\r\n return ignoreAppliance\r\n ? []\r\n : [{\r\n propName: \"Appliance\",\r\n propValue: this.getParent().layout.parts[\"Cabinet\"].getTopCabinetApplianceType()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Appliances.Microwave;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../constants\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\n\r\nexport default class Range extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'range';\r\n this.partName = 'Range';\r\n this.translateId = \"visualizer.kitchen.appliance.range\";\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData && dbFeature.metaData[\"Placement\"]\r\n && !dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Countertop)) {\r\n return false\r\n }\r\n return super.load_(dbFeature, new Range());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n if (cabinetParent && cabinetParent.bottomCabinet && cabinetParent.bottomCabinet.activeFeature\r\n && cabinetParent.bottomCabinet.activeFeature.metaData[\"Appliance\"]\r\n && cabinetParent.bottomCabinet.activeFeature.metaData[\"Appliance\"].includes(\"None\")) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n return []\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Appliances.Range;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport Appliance from \"../../parts/appliance\";\r\n\r\nexport default class TopHandle extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'top_handle';\r\n this.partName = 'Top Handle';\r\n this.canBeDisabled = true;\r\n this.layerPriority = 2;\r\n this.translateId = \"visualizer.kitchen.cabinet.top_handle\";\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"HoodType\"]) {\r\n dbFeature.metaData[\"HoodType\"] = [\"All\"]// it can be \"Wood\"\r\n }\r\n if (!dbFeature.metaData[\"CabinetLayout\"]) {\r\n dbFeature.metaData[\"CabinetLayout\"] = [\"All\"]\r\n }\r\n if (!dbFeature.metaData[\"DoorSet\"]) {\r\n dbFeature.metaData[\"DoorSet\"] = [\"All\"]\r\n }\r\n const parts = dbFeature.metaData && dbFeature.metaData[\"Parts\"];\r\n if (parts) {\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return super.load_(dbFeature, new TopHandle(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n } else {\r\n return super.load_(dbFeature, new TopHandle());\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const topCabinet = this.getParent().topCabinet;\r\n if (topCabinet && topCabinet.disabled && !this.disabled) {\r\n topCabinet.disabled = this.disabled;\r\n topCabinet.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const crownMolding = this.getParent().crownMolding;\r\n if (crownMolding) {\r\n crownMolding.disabled = this.disabled;\r\n }\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n const topCabinet = this.getParent().topCabinet;\r\n if (topCabinet && topCabinet.activeFeature && topCabinet.activeFeature.partName.includes(\"Portico White Chocolate\")) {\r\n return []\r\n }\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const topCabinet = this.getParent().topCabinet;\r\n if (topCabinet && (topCabinet.disabled || !topCabinet.featureGroupEnabled)\r\n || (topCabinet && topCabinet.activeFeature && topCabinet.activeFeature.partName.includes(\"Portico White Chocolate\"))) {\r\n super.hideLayers();\r\n return\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n this.checkIfFeaturePartIsMatching();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n\r\n const cabinetParent = this.getParent();\r\n let cabinetLayout = [\"All\"];\r\n let doorSet = [\"All\"];\r\n if (cabinetParent.topCabinet && cabinetParent.topCabinet.activeFeature) {\r\n if (cabinetParent.topCabinet.activeFeature.metaData[\"CabinetLayout\"]) {\r\n cabinetLayout = cabinetParent.topCabinet.activeFeature.metaData[\"CabinetLayout\"][0]\r\n }\r\n if (cabinetParent.topCabinet.activeFeature.metaData[\"DoorSet\"]) {\r\n doorSet = cabinetParent.topCabinet.activeFeature.metaData[\"DoorSet\"][0];\r\n }\r\n }\r\n\r\n return [{\r\n propName: \"Appliance\",\r\n propValue: cabinetParent.getTopCabinetApplianceType()\r\n }, {\r\n propName: 'RoomLayout',\r\n propValue: cabinetParent.layout.getCurrentLayoutAbbreviation()\r\n },{\r\n propName: 'CabinetLayout',\r\n propValue: cabinetLayout\r\n },{\r\n propName: \"DoorSet\",\r\n propValue: doorSet\r\n }];\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n let hoodType = [\"All\"];\r\n const cabinetParent = this.getParent();\r\n const isHood = cabinetParent.getTopCabinetApplianceType() === \"Hood\";\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n if (isHood && applianceParent.hood && applianceParent.hood.activeFeature\r\n && applianceParent.hood.activeFeature.metaData && applianceParent.hood.activeFeature.metaData[\"HoodType\"]) {\r\n hoodType = applianceParent.hood.activeFeature.metaData[\"HoodType\"][0];\r\n }\r\n const conditions = this.getArrayOfConditions();\r\n conditions.push({\r\n propName: \"HoodType\",\r\n propValue: hoodType\r\n });\r\n return conditions\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n const matchingFeatureExist = this.tryToSetTheSameFeature(filteredFeatures, null);\r\n if (!matchingFeatureExist) {\r\n this.activeFeature = filteredFeatures[0];\r\n }\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n const zIndex = zIndexes.Cabinet.TopHandle;\r\n const zIndex2 = zIndexes.Cabinet.TopHandle2;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.zIndex = zIndex2;\r\n }\r\n })\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class BottomHandle extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'bottom_handle';\r\n this.partName = 'Bottom Handle';\r\n this.translateId = \"visualizer.kitchen.cabinet.bottom_handle\";\r\n this.canBeDisabled = true;\r\n this.layerPriority = 5;\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"CabinetLayout\"]) {\r\n dbFeature.metaData[\"CabinetLayout\"] = [\"All\"]\r\n }\r\n if (!dbFeature.metaData[\"DoorSet\"]) {\r\n dbFeature.metaData[\"DoorSet\"] = [\"All\"]\r\n }\r\n if (!dbFeature.metaData[\"Appliance\"]) {\r\n dbFeature.metaData[\"Appliance\"] = [\"All\"]\r\n }\r\n const parts = dbFeature.metaData && dbFeature.metaData[\"Parts\"];\r\n if (parts) {\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return super.load_(dbFeature, new BottomHandle(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n } else {\r\n return super.load_(dbFeature, new BottomHandle());\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const bottomCabinet = this.getParent().bottomCabinet;\r\n if (bottomCabinet && (bottomCabinet.disabled || !bottomCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n this.checkIfFeaturePartIsMatching();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const cabinetParent = this.getParent();\r\n let cabinetLayout = [\"All\"];\r\n let doorSet = [\"All\"];\r\n if (cabinetParent.bottomCabinet && cabinetParent.bottomCabinet.activeFeature) {\r\n if (cabinetParent.bottomCabinet.activeFeature.metaData[\"CabinetLayout\"]) {\r\n cabinetLayout = cabinetParent.bottomCabinet.activeFeature.metaData[\"CabinetLayout\"][0]\r\n }\r\n if (cabinetParent.bottomCabinet.activeFeature.metaData[\"DoorSet\"]) {\r\n doorSet = cabinetParent.bottomCabinet.activeFeature.metaData[\"DoorSet\"][0];\r\n }\r\n }\r\n return [{\r\n propName: \"Appliance\",\r\n propValue: cabinetParent.getBottomCabinetApplianceType()\r\n }, {\r\n propName: 'RoomLayout',\r\n propValue: cabinetParent.layout.getCurrentLayoutAbbreviation()\r\n },{\r\n propName: 'CabinetLayout',\r\n propValue: cabinetLayout\r\n },{\r\n propName: \"DoorSet\",\r\n propValue: doorSet\r\n }];\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n const matchingFeatureExist = this.tryToSetTheSameFeature(filteredFeatures, null);\r\n if (!matchingFeatureExist) {\r\n this.activeFeature = filteredFeatures[0];\r\n }\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions()\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n const zIndex = zIndexes.Cabinet.BottomHandle;\r\n const zIndex2 = zIndexes.Cabinet.BottomHandle2;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.zIndex = zIndex2;\r\n }\r\n })\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class TopCabinetShadow extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'top_cabinet_shadow';\r\n this.partName = 'Top Cabinet Shadow';\r\n this.visible = false;\r\n this.layerPriority = 6;\r\n }\r\n\r\n load(dbFeature) {\r\n const parts = dbFeature.metaData && dbFeature.metaData[\"Parts\"];\r\n if (parts) {\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return super.load_(dbFeature, new TopCabinetShadow(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n } else {\r\n return super.load_(dbFeature, new TopCabinetShadow());\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const topCabinet = this.getParent().topCabinet;\r\n if (topCabinet && (topCabinet.disabled || !topCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature) {\r\n const activeFeatureParts = fromFeature && fromFeature.partNumber ? this.featuresParts.filter((feature) => {\r\n const name1 = fromFeature.partName.split(\" Part\")[0];\r\n // console.log(\"name1\", name1);\r\n const name2 = feature.partName.split(\"Part2 \").join(\"\");\r\n // console.log(\"name2\", name2);\r\n return name1 === name2\r\n }) : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n return activeFeatureParts\r\n }\r\n\r\n getArrayOfConditions() {\r\n const cabinetParent = this.getParent();\r\n return [{\r\n propName: \"Appliance\",\r\n propValue: cabinetParent.getTopCabinetApplianceType()\r\n }, {\r\n propName: 'CabinetLayout',\r\n propValue: cabinetParent.getTopCabinetShadowLayout()\r\n }, {\r\n propName: 'RoomLayout',\r\n propValue: cabinetParent.layout.getCurrentLayoutAbbreviation()\r\n }, {\r\n propName: 'CrownMolding',\r\n propValue: cabinetParent && cabinetParent.crownMolding &&\r\n cabinetParent.crownMolding.activeFeature && !cabinetParent.crownMolding.disabled ? \"On\" : \"Off\"\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Cabinet.TopCabinetShadow;\r\n }\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.layer.zIndex = zIndexes.Cabinet.TopCabinetShadowPart2\r\n })\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class BottomCabinetShadow extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'bottom_cabinet_shadow';\r\n this.partName = 'Bottom Cabinet Shadow';\r\n this.visible = false;\r\n this.layerPriority = 7;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BottomCabinetShadow());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const bottomCabinet = this.getParent().bottomCabinet;\r\n if (bottomCabinet && (bottomCabinet.disabled || !bottomCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n this.activeFeature = filteredFeatures[0];\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Cabinet.BottomCabinetShadow;\r\n }\r\n }\r\n}","import store from \"../../../../../store\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\nimport {LayoutAbbreviations} from \"../../constants\";\r\nimport CountertopCommon from \"../countertopCommon\";\r\n\r\nexport default class Countertop extends CountertopCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'countertop';\r\n this.partName = 'Countertop';\r\n this.translateId = \"visualizer.kitchen.countertop.countertop\";\r\n this.isStoneFeature = true;\r\n this.toggleSwitchedOffByUser = false; // is used for returning toggle back when feature is found\r\n if (isChild) {\r\n this.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n this.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const parts = dbFeature.metaData && dbFeature.metaData[\"Parts\"];\r\n if (parts) {\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n if (partNumber === 3) {\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"N\"))) || [];\r\n }\r\n return super.load_(dbFeature, new Countertop(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n } else {\r\n return super.load_(dbFeature, new Countertop());\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom = \"\") {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick(ignoreLocked, clickFrom);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.countertop.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n availableFeatures(cabinetFeatures) {\r\n return cabinetFeatures.filter(cabinetFeature => cabinetFeature.partNumber === 1)\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const bottomCabinet = cabinetParent && cabinetParent.bottomCabinet;\r\n if (bottomCabinet && (bottomCabinet.disabled || !bottomCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CountertopGroup.Countertop;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if(activeFeaturePart && activeFeaturePart.layer && activeFeaturePart.dbFeature.metaData[\"Part\"]) {\r\n const partNumber = +activeFeaturePart.dbFeature.metaData[\"Part\"][0];\r\n activeFeaturePart.layer.zIndex = zIndexes.CountertopGroup[\"Countertop\"+partNumber];\r\n }\r\n })\r\n }\r\n }\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getCountertopGroupsSplittedFeatureName();\r\n const conditions = this.getArrayOfConditions();\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n const name2 = feature.getCountertopGroupsSplittedFeatureName();\r\n return (name1 === name2) && feature.matchesMetaForArrayOfConditions(conditions);\r\n });\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n const fromFeatureFilters = fromFeature.dbFeature.filterValueIDs;\r\n if (edgeFilterGroup && fromFeatureFilters && fromFeatureFilters[edgeFilterGroup.id]) {\r\n const edgeFilterGroupId = edgeFilterGroup.id;\r\n const realActiveFeaturePart = activeFeatureParts.find(activeFeaturePart => {\r\n return this.featureIsMatchingEdgeFilters(activeFeaturePart, fromFeatureFilters[edgeFilterGroupId], edgeFilterGroupId)\r\n });\r\n activeFeatureParts = realActiveFeaturePart ? [realActiveFeaturePart] : []\r\n }\r\n }\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n if(activeFeaturePart) {\r\n activeFeaturePart.disabled = this.disabled\r\n }\r\n });\r\n return activeFeatureParts\r\n }\r\n\r\n featureIsMatchingEdgeFilters(currentCheckFeature, activeEdgeFilter, edgeFilterGroupId) {\r\n const currentFeatureEdgeFilters = currentCheckFeature && currentCheckFeature.dbFeature\r\n && currentCheckFeature.dbFeature.filterValueIDs\r\n && currentCheckFeature.dbFeature.filterValueIDs[edgeFilterGroupId];\r\n return currentFeatureEdgeFilters && currentFeatureEdgeFilters.some(filterValueId => filterValueId === activeEdgeFilter[0]);\r\n }\r\n\r\n canUseNavigationFilterSteps() {\r\n const parent = this.getParent();\r\n return parent.edge // display filters only if edges exist\r\n }\r\n\r\n canUseNavigationFilter() {\r\n return true //TODO[Artem] add here features filters check\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../constants\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\n\r\nexport default class Faucet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'faucet';\r\n this.partName = 'Faucet';\r\n this.translateId = \"visualizer.kitchen.countertop.faucet\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData && dbFeature.metaData[\"Placement\"]\r\n && !dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Countertop)) {\r\n return false\r\n }\r\n return super.load_(dbFeature, new Faucet());\r\n }\r\n\r\n disabledClick() {\r\n const relatedSink = this.getParent().sink;\r\n if (relatedSink) {\r\n relatedSink.disabled = this.disabled;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const bottomCabinet = cabinetParent && cabinetParent.bottomCabinet;\r\n if (bottomCabinet && (bottomCabinet.disabled || !bottomCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CountertopGroup.Faucet;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../constants\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\n\r\nexport default class Sink extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'sink';\r\n this.partName = 'Sink';\r\n this.translateId = \"visualizer.kitchen.countertop.sink\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData && dbFeature.metaData[\"Placement\"]\r\n && !dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Countertop)) {\r\n return false\r\n }\r\n return super.load_(dbFeature, new Sink());\r\n }\r\n\r\n disabledClick() {\r\n const relatedFaucet = this.getParent().faucet;\r\n if (relatedFaucet) {\r\n relatedFaucet.disabled = this.disabled;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const bottomCabinet = cabinetParent && cabinetParent.bottomCabinet;\r\n if (bottomCabinet && (bottomCabinet.disabled || !bottomCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CountertopGroup.Sink;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../constants\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\n\r\nexport default class Stovetop extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'stovetop';\r\n this.partName = 'Stovetop';\r\n this.translateId = \"visualizer.kitchen.countertop.stovetop\";\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData && dbFeature.metaData[\"Placement\"]\r\n && !dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Countertop)) {\r\n return false\r\n }\r\n return super.load_(dbFeature, new Stovetop());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const bottomCabinet = cabinetParent && cabinetParent.bottomCabinet;\r\n if (bottomCabinet && (bottomCabinet.disabled || !bottomCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CountertopGroup.Stovetop;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Cutouts extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'cutouts';\r\n this.partName = 'Cutouts';\r\n this.translateId = \"visualizer.kitchen.countertop.cutouts\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Cutouts());\r\n }\r\n\r\n setZIndex() {\r\n\r\n }\r\n}\r\n","import EdgeCommon from \"../edgeCommon\";\r\n\r\nexport default class EdgeProfile extends EdgeCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'edge_profile';\r\n this.partName = 'Edge Profile';\r\n this.translateId = \"visualizer.kitchen.countertop.edge_profile\";\r\n // this.isStoneFeature = true;\r\n this.customClassName = \"edge\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new EdgeProfile());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Radius extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'radius';\r\n this.partName = 'Radius';\r\n this.translateId = \"visualizer.kitchen.countertop.radius\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Radius());\r\n }\r\n\r\n setZIndex() {\r\n\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Cabinet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.dbName = 'center Island';\r\n this.partId = 'center_island_cabinet';\r\n this.partName = 'Cabinet';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_cabinet\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n return super.load_(dbFeature, new Cabinet());\r\n }\r\n\r\n changeLayout() {\r\n const layoutAbbreviation = this.getParent().layout.getCurrentLayoutAbbreviation();\r\n if (layoutAbbreviation.includes(\"I\") && this.disabled) {\r\n this.disabled = false;\r\n this.disabledClick();\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n centerIslandParent.relatedItems.forEach(relItem => {\r\n relItem.disabled = this.disabled;\r\n });\r\n }\r\n\r\n setDefault() {\r\n\r\n if (!this.tryToSetTheSameFeature(this.features)) {\r\n const layout = this.getParent().layout;\r\n if (layout.selectedLayoutFeatures[layout.type] && layout.selectedLayoutFeatures[layout.type][this.partId]) {\r\n this.activeFeature = this.getFeatureByPartName(layout.selectedLayoutFeatures[layout.type][this.partId]);\r\n } else {\r\n const existInSomeLayout = Object.keys(layout.selectedLayoutFeatures).find(layoutType => {\r\n return layout.selectedLayoutFeatures[layoutType] && layout.selectedLayoutFeatures[layoutType][this.partId];\r\n });\r\n if (existInSomeLayout) {\r\n this.activeFeature = this.getFeatureByPartName(layout.selectedLayoutFeatures[existInSomeLayout][this.partId]);\r\n }\r\n }\r\n if (!this.activeFeature) {\r\n this.activeFeature = this.features[0];\r\n }\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CenterIsland.Cabinet;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import CountertopCommon from \"../countertopCommon\";\r\n\r\nexport default class Countertop extends CountertopCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_countertop';\r\n this.dbName = 'Center Island Countertop';\r\n this.partName = 'Island Countertop';\r\n this.homePageTitle = 'Center Island Countertop';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_countertop\";\r\n this.isStoneFeature = true;\r\n this.toggleSwitchedOffByUser = false; // is used for returning toggle back when feature is found\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n if (!this.disabled && centerIslandParent.cabinet.disabled) {\r\n centerIslandParent.cabinet.disabled = false;\r\n centerIslandParent.cabinet.disabledClick();\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n return super.load_(dbFeature, new Countertop());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinet = this.getParent().cabinet;\r\n if (cabinet && (cabinet.disabled || !cabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n return super.setLayers(layout);\r\n }\r\n\r\n setDefault() { // this is added because of the layout\r\n const layout = this.getParent && this.getParent().layout;\r\n if (layout && layout.getCurrentLayoutAbbreviation) {\r\n const currentLayoutAbbreviation = layout.getCurrentLayoutAbbreviation();\r\n if (currentLayoutAbbreviation && !currentLayoutAbbreviation.includes(\"I\")) {\r\n return null\r\n }\r\n }\r\n return super.setDefault()\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CenterIsland.Countertop;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n\r\n canUseNavigationFilterSteps() {\r\n const parent = this.getParent();\r\n return parent.edge // display filters only if edges exist\r\n }\r\n\r\n canUseNavigationFilter() {\r\n return true //TODO[Artem] add here features filters check\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Chairs extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_chairs';\r\n this.partName = 'Chairs';\r\n this.dbName = 'Chair';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_chairs\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n return super.load_(dbFeature, new Chairs());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinet = this.getParent().cabinet;\r\n if (cabinet && (cabinet.disabled || !cabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n return super.setLayers(layout);\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n if (!this.disabled && centerIslandParent.cabinet.disabled) {\r\n centerIslandParent.cabinet.disabled = false;\r\n centerIslandParent.cabinet.disabledClick();\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CenterIsland.Chairs;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../constants\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class Faucet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_faucet';\r\n this.partName = 'Faucet';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_faucet\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n if (dbFeature.metaData && dbFeature.metaData[\"Placement\"]\r\n && !dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) {\r\n return false\r\n }\r\n return super.load_(dbFeature, new Faucet());\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n if (!this.disabled && centerIslandParent.cabinet && centerIslandParent.cabinet.disabled) {\r\n centerIslandParent.cabinet.disabled = false;\r\n centerIslandParent.cabinet.disabledClick();\r\n }\r\n const relatedSink = centerIslandParent.sink;\r\n if (relatedSink) {\r\n relatedSink.disabled = this.disabled;\r\n }\r\n const stovetop = centerIslandParent.stovetop;\r\n if (stovetop && !this.disabled && !stovetop.disabled) {\r\n stovetop.disabled = true;\r\n }\r\n const range = centerIslandParent.range;\r\n if (range && !this.disabled && !range.disabled) {\r\n range.disabled = true;\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinet = this.getParent().cabinet;\r\n if (cabinet && (cabinet.disabled || !cabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const sink = this.getParent().sink;\r\n if (sink && sink.activeFeature) {\r\n return [{\r\n propName: \"FaucetPlacement\",\r\n propValue: sink.activeFeature.metaData[\"FaucetPlacement\"] || \"Moved\"\r\n }]\r\n }\r\n return [];\r\n }\r\n\r\n tryToSetTheSameFeature(filteredFeatures = [], partName = \"\") {\r\n if (this.activeFeature && this.activeFeature.partName) {\r\n const splittedName = (partName || this.activeFeature.partName).split(\" M\")[0];\r\n this.activeFeature = filteredFeatures.find(feature => {\r\n if (feature.partName) {\r\n const splittedCurrentName = feature.partName.split(\" M\")[0];\r\n return splittedCurrentName === splittedName\r\n }\r\n return false\r\n });\r\n // console.log('AF', filteredFeatures, this.activeFeature);\r\n if (this.activeFeature) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CenterIsland.Faucet;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../constants\";\r\n\r\nexport default class Sink extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_sink';\r\n this.partName = 'Sink';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_sink\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n if (dbFeature.metaData && dbFeature.metaData[\"Placement\"]\r\n && !dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) {\r\n return false\r\n }\r\n return super.load_(dbFeature, new Sink());\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n if (!this.disabled && centerIslandParent.cabinet && centerIslandParent.cabinet.disabled) {\r\n centerIslandParent.cabinet.disabled = false;\r\n centerIslandParent.cabinet.disabledClick();\r\n }\r\n const relatedFaucet = centerIslandParent.faucet;\r\n if (relatedFaucet) {\r\n relatedFaucet.disabled = this.disabled;\r\n }\r\n const stovetop = centerIslandParent.stovetop;\r\n if (stovetop && !this.disabled && !stovetop.disabled) {\r\n stovetop.disabled = true;\r\n }\r\n const range = centerIslandParent.range;\r\n if (range && !this.disabled && !range.disabled) {\r\n range.disabled = true;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinet = this.getParent().cabinet;\r\n if (cabinet && (cabinet.disabled || !cabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CenterIsland.Sink;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class Handle extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_handle';\r\n this.dbName = 'Center Island Handle';\r\n this.partName = 'Handle';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_handle\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n return super.load_(dbFeature, new Handle());\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n if (!this.disabled && centerIslandParent.cabinet.disabled) {\r\n centerIslandParent.cabinet.disabled = false;\r\n centerIslandParent.cabinet.disabledClick();\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinet = this.getParent().cabinet;\r\n if (cabinet && (cabinet.disabled || !cabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const cabinetType = this.getParent().getCabinetType();\r\n return [{\r\n propName: \"Cabinet\",\r\n propValue: cabinetType\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CenterIsland.Handle;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class CenterIslandShadow extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_shadow';\r\n this.partName = 'Center Island Shadow';\r\n this.visible = false;\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n return super.load_(dbFeature, new CenterIslandShadow());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinet = this.getParent().cabinet;\r\n if (cabinet && (cabinet.disabled || !cabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const cabinetType = this.getParent().getCabinetType();\r\n return [{\r\n propName: \"Cabinet\",\r\n propValue: cabinetType\r\n }, {\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.CenterIsland.CenterIslandShadow;\r\n }\r\n }\r\n}","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../constants\";\r\n\r\nexport default class Stovetop extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_stovetop';\r\n this.partName = 'Stovetop';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_stovetop\";\r\n this.canBeDisabled = true;\r\n this.defaultDisabled = true;\r\n this.disabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData && dbFeature.metaData[\"Placement\"]\r\n && !dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) {\r\n return false\r\n }\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n return super.load_(dbFeature, new Stovetop());\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n const cabinet = centerIslandParent.cabinet;\r\n\r\n if (!cabinet.featureGroupEnabled) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (!this.disabled && cabinet.disabled) {\r\n cabinet.disabled = false;\r\n cabinet.disabledClick();\r\n }\r\n const sink = centerIslandParent.sink;\r\n const range = centerIslandParent.range;\r\n if (sink && !this.disabled && !sink.disabled) {\r\n sink.disabled = true;\r\n sink.disabledClick();\r\n }\r\n if (range && !this.disabled && !range.disabled) {\r\n range.disabled = true;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const centerIslandParent = this.getParent();\r\n const sink = centerIslandParent.sink;\r\n const range = centerIslandParent.range;\r\n if ((sink && !sink.disabled) || (sink && !range.disabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CenterIsland.Stovetop;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../constants\";\r\n\r\nexport default class Range extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_range';\r\n this.partName = 'Range';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_range\";\r\n this.canBeDisabled = true;\r\n this.defaultDisabled = true;\r\n this.disabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if ((dbFeature.metaData && dbFeature.metaData[\"Placement\"]\r\n && !dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) || !dbFeature.metaData[\"Placement\"]) {\r\n return false\r\n }\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n return super.load_(dbFeature, new Range());\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n const sink = centerIslandParent.sink;\r\n const stovetop = centerIslandParent.stovetop;\r\n if (sink && !this.disabled && !sink.disabled) {\r\n sink.disabled = true;\r\n sink.disabledClick();\r\n }\r\n if (stovetop && !this.disabled && !stovetop.disabled) {\r\n stovetop.disabled = true;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n const centerIslandParent = this.getParent();\r\n const cabinet = centerIslandParent.cabinet;\r\n\r\n if (!cabinet.featureGroupEnabled) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (!this.disabled && cabinet.disabled) {\r\n cabinet.disabled = false;\r\n cabinet.disabledClick();\r\n }\r\n const sink = centerIslandParent.sink;\r\n const stovetop = centerIslandParent.stovetop;\r\n if ((sink && !sink.disabled) || (stovetop && !stovetop.disabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CenterIsland.Range;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import EdgeCommon from \"../edgeCommon\";\r\n\r\nexport default class Edge extends EdgeCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_edge';\r\n this.partName = 'Edge';\r\n this.dbName = 'Edge Profile';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_edge\";\r\n // this.isStoneFeature = true;\r\n this.customClassName = \"edge\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Edge());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class ChairsShadow extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_chairs_shadow';\r\n this.partName = 'Center Island Chairs Shadow';\r\n this.visible = false;\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n return super.load_(dbFeature, new ChairsShadow());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const chairs = this.getParent().chairs;\r\n if (!chairs || (chairs.disabled || !chairs.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const chairsType = this.getParent().getChairType();\r\n return [{\r\n propName: \"Chair\",\r\n propValue: chairsType\r\n }, {\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.CenterIsland.ChairsShadow;\r\n }\r\n }\r\n}\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport FeatureWizardBodyItem from \"./featureWizardBodyItem\";\r\nimport FeatureWizardSelection from \"./featureWizardSelection\";\r\nimport {s3FilterImagePath} from \"../../../../misc/utils\";\r\n\r\nclass FeatureWizardBody extends Component {\r\n\r\n static propTypes = {\r\n currentStep: PropTypes.object.isRequired,\r\n activeSubPart: PropTypes.object.isRequired,\r\n filterGroups: PropTypes.array.isRequired,\r\n features: PropTypes.array,\r\n onItemClick: PropTypes.func.isRequired,\r\n onItemClickDisabled: PropTypes.func.isRequired,\r\n availableSteps: PropTypes.array,\r\n featureWizardStep: PropTypes.number,\r\n isPhoneNumberValidated: PropTypes.bool,\r\n isMobile: PropTypes.bool,\r\n handleUserLoginClick: PropTypes.func,\r\n setFeatureWizardStep: PropTypes.func,\r\n showerWallWizardGroupsSelected: PropTypes.bool,\r\n searchText: PropTypes.string,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n currentValues: []\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.setCurrentValues();\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.currentStep && this.props.currentStep && (nextProps.currentStep.id !== this.props.currentStep.id)) {\r\n this.setCurrentValues(nextProps);\r\n }\r\n }\r\n\r\n setCurrentValues(nextProps = this.props) {\r\n const currentGroup = nextProps.filterGroups.find((filterGroup) => {\r\n return filterGroup.id === nextProps.currentStep.id\r\n });\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const filteredFeatures = nextProps.features.filter(feature => {\r\n return !feature.dbFeature.displayName.includes(\"laceholder\")\r\n });\r\n const selectedId = nextProps.currentStep.selectedValueId;\r\n const currentValues = nextProps.currentStep.values\r\n .map((wizardValueObject) => {\r\n const currentFilterValue = this.getFilterValueObjectById(currentGroup, wizardValueObject.filterValue);\r\n const itemIsLocked = this.getLockedPropertyValueObjectById(currentFilterValue, filteredFeatures, wizardValueObject.filterValue, fabricatorSettings, nextProps);\r\n wizardValueObject.itemIsLocked = itemIsLocked;\r\n // console.log('wizardValueObject', wizardValueObject);\r\n return wizardValueObject\r\n })\r\n .sort((a,b) => {\r\n const selectedA = selectedId === a.filterValue;\r\n const selectedB = selectedId === b.filterValue;\r\n if (selectedA < selectedB) {\r\n return 1\r\n } else if (selectedB < selectedA) {\r\n return - 1\r\n } else {\r\n if (a.selectionAvailable < b.selectionAvailable) {\r\n return 1\r\n } else if (b.selectionAvailable < a.selectionAvailable) {\r\n return - 1\r\n } else {\r\n return (a.itemIsLocked > b.itemIsLocked) ? 1 : ((b.itemIsLocked > a.itemIsLocked) ? -1 : 0)\r\n }\r\n }\r\n });\r\n this.setState({\r\n currentValues\r\n })\r\n }\r\n\r\n getFilterValueObjectById = (currentGroup, filterValueId) => {\r\n return currentGroup.values.find(currentGroupValue => {\r\n return currentGroupValue.id === filterValueId\r\n });\r\n };\r\n\r\n getLockedPropertyValueObjectById = (currentFilterValue, filteredFeatures, filterValueId, fabricatorSettings, nextProps = this.props) => {\r\n\r\n const {isBackend, jobId, canSaveQuote, visualizerManagement} = document.kvConfig;\r\n\r\n if (!fabricatorSettings.leadCapture\r\n || (fabricatorSettings.leadCapture && visualizerManagement)\r\n || (fabricatorSettings.leadCapture && nextProps.isPhoneNumberValidated)\r\n || (fabricatorSettings.leadCapture && (isBackend && jobId && canSaveQuote))){\r\n return false\r\n }\r\n\r\n return currentFilterValue.lockedInWizard || !filteredFeatures.some(feature => {\r\n // console.log('bject.keys(feature.dbFeature.filterValueIDs)', Object.keys(feature.dbFeature.filterValueIDs));\r\n const filterToFind = feature.dbFeature.filterValueIDs[nextProps.currentStep.id];\r\n return filterToFind && filterToFind.includes(filterValueId) && feature.dbFeature.unlocked;\r\n })\r\n };\r\n\r\n getFeatureBodyItemThumbnail = (currentFilterValue) => {\r\n const additionalImages = currentFilterValue.additionalImages;\r\n if (Array.isArray(additionalImages) && additionalImages.length) {\r\n // console.log('props.currentFilterValue', currentFilterValue);\r\n if (this.props.activeSubPart.partId === \"vanity_cabinet\" && this.props.currentStep.filterName === \"Color\") {\r\n const materialFilter = this.props.availableSteps.find(step => step.filterName === \"Material\");\r\n if (materialFilter && materialFilter.selectedValueId) {\r\n const neededImage = additionalImages.find(image => image.filterValueIds.includes(materialFilter.selectedValueId));\r\n if (neededImage && neededImage.imageUrl) {\r\n return neededImage.imageUrl\r\n }\r\n return additionalImages[0].imageUrl\r\n }\r\n }\r\n return additionalImages[0].imageUrl\r\n }\r\n return s3FilterImagePath(currentFilterValue.icon);\r\n };\r\n\r\n getFeatureWizardBodyItem = (currentFilterValue, currentGroup, wizardValueObject, filteredFeatures, fabricatorSettings, key) => {\r\n\r\n // const thumbNailPath = `${basePath}images/thumbnails/${parentGroup}/${props.isMobile ? \"100\" : \"400\"}/${featureName}.JPG`;\r\n // console.log('thumbNailPath', thumbNailPath);\r\n\r\n /*** image ***/\r\n const styles = {\r\n backgroundImage: \"url(\" + this.getFeatureBodyItemThumbnail(currentFilterValue) + \")\"\r\n };\r\n const bgFilterName = this.props.currentStep.filterName.replace(/ /g,\"\");\r\n const bgFilterNameFilters = [\"Material\", \"Color\", \"TilePattern\", \"AcrylicPattern\", \"AcrylicColor\"];\r\n const backGroundSizeCover = bgFilterNameFilters.includes(bgFilterName);\r\n\r\n // const parentGroup = props.currentStep.filterName.replace(/ /g,\"\");\r\n // let featureName = props.currentFilterValue.displayText.replace(/ /g,\"\");\r\n // if (parentGroup === \"Color\") {\r\n // const woodType = props.availableSteps.find(step => step.filterName === \"Material\");\r\n // featureName = woodType.selectedValueName.replace(/ /g,\"\") + \"_\" + featureName;\r\n // if (featureName === \"Alder_Eggshell\" || featureName === \"Alder_Graphite\" || featureName === \"Alder_White\" // temporary hardcode until we have BE for multi thumbnails ready\r\n // || featureName === \"Oak_Eggshell\" || featureName === \"Oak_Graphite\" || featureName === \"Oak_White\") {\r\n // featureName = \"custom/\" + featureName;\r\n // }\r\n // }\r\n\r\n /*** active ***/\r\n const isActive = currentFilterValue && (this.props.currentStep.selectedValueId === currentFilterValue.id);\r\n\r\n /*** locked ***/\r\n const itemIsLocked = this.getLockedPropertyValueObjectById(currentFilterValue, filteredFeatures, wizardValueObject.filterValue, fabricatorSettings);\r\n\r\n /*** pulsating ***/\r\n let isPulsating = false;\r\n if ((fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) && !this.props.isPhoneNumberValidated\r\n && !itemIsLocked) {\r\n if (!this.props.currentStep.selectedValueId) {\r\n isPulsating = true\r\n } else {\r\n const selectedFilterValue = this.getFilterValueObjectById(currentGroup, this.props.currentStep.selectedValueId);\r\n const selectedItemIsLocked = this.getLockedPropertyValueObjectById(selectedFilterValue, filteredFeatures, this.props.currentStep.selectedValueId, fabricatorSettings);\r\n if (selectedItemIsLocked) {\r\n isPulsating = true\r\n }\r\n }\r\n }\r\n\r\n /*** disabled ***/\r\n let disabled = (this.props.featureWizardStep === 0) ? false : !wizardValueObject.selectionAvailable;\r\n\r\n const getQuoteEnabled = fabricatorSettings.enableQuote;\r\n\r\n return (\r\n \r\n )\r\n\r\n };\r\n\r\n renderItemsList = (currentGroup, filteredFeatures, values, fabricatorSettings) => {\r\n const navigationViewType = this.props.navigationViewType === 3 ? 2 : 1;\r\n\r\n const elements = [];\r\n\r\n for (let i = 0; i < Math.ceil(values.length / navigationViewType); i++ ) { // for ex. 28/3 = 10 columns\r\n const innerElements = [];\r\n for (let j = 0; j < navigationViewType;j++ ) {\r\n\r\n const currentIndex = j+(i*navigationViewType);\r\n const wizardValueObject = values[currentIndex];\r\n\r\n if (!wizardValueObject) {\r\n innerElements.push(\r\n
    \r\n );\r\n } else {\r\n const currentFilterValue = this.getFilterValueObjectById(currentGroup, wizardValueObject.filterValue);\r\n innerElements.push(this.getFeatureWizardBodyItem(\r\n currentFilterValue,\r\n currentGroup,\r\n wizardValueObject,\r\n filteredFeatures,\r\n fabricatorSettings,\r\n \"item\"+j+i\r\n )\r\n );\r\n }\r\n }\r\n elements.push(\r\n
  • \r\n {innerElements}\r\n
  • \r\n );\r\n }\r\n // console.log('elements', elements);\r\n return elements\r\n };\r\n\r\n render() {\r\n // console.log('currentStep', this.props.currentStep);\r\n const currentGroup = this.props.filterGroups.find((filterGroup) => {\r\n return filterGroup.id === this.props.currentStep.id\r\n });\r\n const filteredFeatures = this.props.features.filter(feature => {\r\n return !feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n\r\n const interiorShowerWallWizard = this.props.activeSubPart.partId === \"shower_interior_wall\";\r\n if (interiorShowerWallWizard && !this.props.showerWallWizardGroupsSelected) {\r\n return (\r\n \r\n )\r\n }\r\n\r\n const values = this.props.searchText\r\n ? this.state.currentValues.filter((currentValue) => {\r\n const currentFilterValue = this.getFilterValueObjectById(currentGroup, currentValue.filterValue);\r\n return currentFilterValue && currentFilterValue.displayText.toLowerCase().includes(this.props.searchText.toLowerCase())\r\n })\r\n : this.state.currentValues;\r\n\r\n return this.props.isMobile ? (\r\n
    \r\n
      \r\n {values.map((wizardValueObject, filterValueIndex) => {\r\n const currentFilterValue = this.getFilterValueObjectById(currentGroup, wizardValueObject.filterValue);\r\n return this.getFeatureWizardBodyItem(\r\n currentFilterValue,\r\n currentGroup,\r\n wizardValueObject,\r\n filteredFeatures,\r\n fabricatorSettings,\r\n \"item\"+filterValueIndex\r\n )\r\n })}\r\n
    \r\n
    \r\n ) : (\r\n
      \r\n {this.renderItemsList(currentGroup, filteredFeatures, values, fabricatorSettings)}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n fabricatorSettings: store.fabricatorState.settings,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n navigationViewType: store.navigationState.navigationViewType\r\n});\r\n\r\nconst mapDispatchToProps = () => ({});\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(FeatureWizardBody);\r\n","import React from 'react';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\n// import { basePath } from \"../../core/assets\";\r\nimport Analytics from './../../../../analytics';\r\nimport {UserPopupTypes} from \"../../constants\";\r\n\r\nconst FeatureWizardBodyItem = (props) => {\r\n return props.isMobile ? (\r\n
  • \r\n
    (props.disabled && !props.itemIsLocked)\r\n ? props.onItemClickDisabled(props.currentFilterValue, props.itemIsLocked, props.currentStep.filterName)\r\n : props.onItemClick(props.currentFilterValue, props.itemIsLocked, props.currentStep.filterName)}\r\n style={props.styles}>\r\n
    \r\n {props.itemIsLocked\r\n ? \r\n : {props.currentFilterValue.displayText}}\r\n
    \r\n
    \r\n {props.isActive && (props.itemIsLocked || (!props.userIsLoggedIn && props.getQuoteEnabled)) ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n
  • \r\n ) : (\r\n
    (props.disabled && !props.itemIsLocked)\r\n ? props.onItemClickDisabled(props.currentFilterValue, props.itemIsLocked, props.currentStep.filterName)\r\n : props.onItemClick(props.currentFilterValue, props.itemIsLocked, props.currentStep.filterName)}>\r\n {props.isActive && (props.itemIsLocked || (!props.userIsLoggedIn && props.getQuoteEnabled)) ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n
    \r\n {props.itemIsLocked ? null : (\r\n {props.currentFilterValue.displayText}\r\n )}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nFeatureWizardBodyItem.displayName = 'FeatureWizardBodyItem';\r\n\r\nexport default FeatureWizardBodyItem;\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport FeatureWizardSelectionItem from \"./featureWizardSelectionItem\";\r\n\r\nexport default class FeatureWizardSelection extends Component {\r\n\r\n static propTypes = {\r\n toggleWizardFilterSelection: PropTypes.func.isRequired,\r\n getFilterValueObjectById: PropTypes.func.isRequired,\r\n onItemClick: PropTypes.func.isRequired,\r\n exitFeatureWizard: PropTypes.func.isRequired,\r\n setFeatureWizardStep: PropTypes.func.isRequired,\r\n currentStep: PropTypes.object.isRequired,\r\n isMobile: PropTypes.bool,\r\n };\r\n\r\n componentDidMount() {\r\n this.props.setFeatureWizardStep(0);\r\n }\r\n\r\n setWizardValue = (clickedFilterValue) => {\r\n this.props.toggleWizardFilterSelection(true);\r\n this.props.onItemClick(clickedFilterValue, false, this.props.currentStep.filterName);\r\n this.props.setFeatureWizardStep(1);\r\n };\r\n\r\n setAllItems = () => {\r\n setTimeout(() => {\r\n this.props.toggleWizardFilterSelection(true);\r\n }, 300);\r\n this.props.exitFeatureWizard();\r\n };\r\n\r\n render() {\r\n return (\r\n
    \r\n
      \r\n
    • \r\n \r\n
    • \r\n {this.props.currentStep.values.map((wizardValueObject, index) => {\r\n const currentFilterValue = this.props.getFilterValueObjectById(this.props.currentGroup, wizardValueObject.filterValue);\r\n return (\r\n \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n","import React from 'react';\r\n\r\nconst FeatureWizardSelectionItem = (props) => {\r\n return (\r\n
  • props.setWizardValue(props.currentFilterValue)}>\r\n {props.currentFilterValue.displayText}\r\n
  • \r\n );\r\n};\r\n\r\nFeatureWizardSelectionItem.displayName = 'FeatureWizardSelectionItem';\r\n\r\nexport default FeatureWizardSelectionItem;","import React, {useState} from \"react\";\r\nimport { connect } from \"react-redux\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport RoomSceneNavigationItem from \"./roomSceneNavigationItem\";\r\nimport {getAvailableRoomScenes} from \"./navUtils\";\r\n\r\nconst RoomSceneNavigation = () => {\r\n\r\n const layout = getCurrentLayout();\r\n const [activeScene, setActiveScene] = useState(layout.scene);\r\n\r\n const availableRoomScenes = getAvailableRoomScenes();\r\n // console.log(\"availableRoomScenes\", availableRoomScenes);\r\n\r\n return (\r\n
    \r\n
      \r\n {availableRoomScenes.map(roomScene => {\r\n return \r\n })}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = () => {\r\n return {};\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(RoomSceneNavigation)\r\n","import React, {useEffect, useState} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport $ from \"jquery\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {createFakeLayout, getCurrentLayout} from \"../../appLayout\";\r\nimport LoadingSpinner from \"../../ui/loadingSpinner\";\r\nimport ActionTypes from \"../../../misc/actionTypes\";\r\nimport {loaderDisable, loaderEnable} from \"../../ui/loaderView\";\r\nimport {getImagePromiseFromLayout} from \"../../../misc/getCanvasImageFromLayout\";\r\nimport {useIsMounted} from \"../../../misc/helperHooks\";\r\n\r\nconst RoomSceneNavigationItem = (props) => {\r\n\r\n const {roomScene, isActive, setActiveScene} = props;\r\n\r\n const [thumbnailUrl, setThumbnailUrl] = useState();\r\n const layout = getCurrentLayout();\r\n const isMounted = useIsMounted();\r\n\r\n useEffect(() => {\r\n if (!thumbnailUrl) {\r\n const getLayoutThumbnail = async () => {\r\n const fakeLayout = layout.scene === roomScene ? layout : createFakeLayout();\r\n if (!isActive) {\r\n await fakeLayout.selectLayout(layout.type, null, null, roomScene, null, true);\r\n }\r\n // console.log(\"layout.getLayers(showPlaceHolders)\", roomScene, fakeLayout, fakeLayout.getLayers(false));\r\n const imageResponse = await getImagePromiseFromLayout(fakeLayout);\r\n if (isMounted() && imageResponse) {\r\n setThumbnailUrl(imageResponse);\r\n }\r\n\r\n }\r\n getLayoutThumbnail();\r\n }\r\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n const roomSceneClick = async () => {\r\n if (!isActive) {\r\n loaderEnable();\r\n setActiveScene(roomScene);\r\n await layout.selectLayout(layout.type, null, null, roomScene);\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS); // update canvas\r\n loaderDisable();\r\n }\r\n };\r\n\r\n return (\r\n
  • roomSceneClick(roomScene)}\r\n style={{backgroundImage: `url(${thumbnailUrl})`}}>\r\n {thumbnailUrl ? null : }\r\n
  • \r\n )\r\n};\r\n\r\nRoomSceneNavigationItem.propTypes = {\r\n roomScene: PropTypes.string.isRequired,\r\n}\r\n\r\nconst mapStateToProps = () => {\r\n return {};\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(RoomSceneNavigationItem)\r\n","import React, {useEffect, useRef, useState} from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {getAvailableLayouts} from \"./navUtils\";\r\nimport LayoutNavigationItem from \"../layoutNavigationItem\";\r\n\r\nconst DesktopNavigationLayoutsContent = (props) => {\r\n\r\n const {handleLayoutItemClick, desktopNavigationOpened} = props;\r\n\r\n const [allowLoading, setAllowLoading] = useState(desktopNavigationOpened);\r\n const timeoutRef = useRef();\r\n\r\n useEffect(() => {\r\n timeoutRef.current = setTimeout(() => {\r\n setAllowLoading(true);\r\n }, allowLoading ? 300 : 400)\r\n return () => {\r\n clearTimeout(timeoutRef.current)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n if (!allowLoading) {\r\n return null\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n const layoutNames = getAvailableLayouts();\r\n return (\r\n
    \r\n
      \r\n {layoutNames.map(key => {\r\n return \r\n })}\r\n
    \r\n
    \r\n )\r\n}\r\n\r\nDesktopNavigationLayoutsContent.propTypes = {\r\n handleLayoutItemClick: PropTypes.func,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {desktopNavigationOpened} = store.navigationState;\r\n return {\r\n desktopNavigationOpened\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(DesktopNavigationLayoutsContent);\r\n","import React from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport MobileNavigationCommon from \"../../visComponents/navigation/mobileNavigationCommon\";\r\n\r\nimport {\r\n setVanityType,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex\r\n} from \"../../../actions/actionFunctions\";\r\n\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport {Vanity} from \"../core/parts/vanity\";\r\nimport Z from \"../core/parts/zIndex\";\r\n\r\nimport MobileNavigationButtons from '../../visComponents/navigation/mobile/mobileNavigationButtons';\r\nimport MobileNavigationAllWallsCheckbox from '../../visComponents/navigation/mobile/mobileNavigationAllWallsCheckbox';\r\nimport FeatureWizardSteps from \"../../visComponents/navigation/featureWizard/featureWizardSteps\";\r\n\r\nimport MobileMenuSelect from '../../visComponents/navigation/mobile/mobileMenuSelect';\r\nimport LockedView from \"../../common/lockedView\";\r\n\r\nimport Filters from \"../../visComponents/navigation/newFilters/filters\";\r\nimport BodyPanelRadio from \"../../visComponents/navigation/desktop/bodyPanelRadio\";\r\nimport ContextMenu from \"./contextMenu\";\r\nimport FilterSwitchers from \"../../visComponents/navigation/newFilters/filterSwitchers\";\r\nimport FilterSelection from \"../../visComponents/navigation/newFilters/filterSelection\";\r\nimport {setNavigationLoading, setNavigationViewType} from \"../../../actions/navigationFunctions\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nclass MobileNavigation extends MobileNavigationCommon {\r\n\r\n bindCanvasClick = (event) => {\r\n const layout = getCurrentLayout();\r\n // const canvas = document.getElementById(this.props.canvasId);\r\n\r\n if (!window.touchMove && !this.state.showNavigation && !this.state.contextMenuOpen) {\r\n this.props.setHoveredLayer(event);\r\n }\r\n\r\n if (document.hoveredLayer && !window.touchMove) {\r\n // $('.canvas-text').html(`CLICK3`);\r\n const layoutType = layout.getCurrentLayoutName();\r\n\r\n const hoveredZone = Z.getMenuByHoveredLayer(layoutType, document.hoveredLayer);\r\n let ponyWallGroup = false;\r\n\r\n if (hoveredZone) {\r\n if ((hoveredZone === \"shower_custom\" || hoveredZone === \"vanity_custom\" || hoveredZone === \"bathtub_custom\"\r\n || hoveredZone === \"shower_combo\" || hoveredZone === \"shower_pony_wall\" || hoveredZone === \"left_wall_custom\"\r\n || hoveredZone === \"wall_b_custom\") && !this.state.showNavigation) {\r\n if (this.state.contextMenuOpen) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n });\r\n document.removeEventListener('click', this.handleContextMenuBlur);\r\n } else {\r\n let contextMenuOpen = '';\r\n switch (hoveredZone) {\r\n case \"shower_custom\":\r\n case \"shower_combo\":\r\n case \"shower_pony_wall\": {\r\n const showerGroup = this.state.designNavigationItems.find(navItem => {\r\n return navItem.text === \"Shower\"\r\n });\r\n contextMenuOpen = showerGroup.part.showerTubComboIsActive() ? \"Shower Tub Combo\" : \"Shower\";\r\n if (hoveredZone === \"shower_pony_wall\") {\r\n ponyWallGroup = true;\r\n }\r\n break;\r\n }\r\n case \"vanity_custom\":\r\n contextMenuOpen = \"Vanity\";\r\n break;\r\n case \"bathtub_custom\":\r\n contextMenuOpen = \"Bathtub\";\r\n break;\r\n case \"left_wall_custom\":\r\n contextMenuOpen = \"Shower Body Selection\";\r\n break;\r\n case \"wall_b_custom\":\r\n contextMenuOpen = \"wall_b_custom\";\r\n break;\r\n }\r\n this.setState({\r\n contextMenuOpen,\r\n contextMenuPonyWall: ponyWallGroup,\r\n hoveredLayer: document.hoveredLayer\r\n }, () => {\r\n if (contextMenuOpen) {\r\n setTimeout(() => {\r\n document.addEventListener('click', this.handleContextMenuBlur);\r\n }, 0)\r\n }\r\n });\r\n }\r\n return false;\r\n } else if (this.state.contentType === 0) {\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass((hoveredZone.child || hoveredZone.parent || hoveredZone).toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n this.openMobileMenu();\r\n }\r\n\r\n hoveredZone.child\r\n ? this.triggerOpenNavigationMenu(hoveredZone.child, hoveredZone.parent, ponyWallGroup)\r\n : this.triggerOpenNavigationMenu(hoveredZone)\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false, featureIsLocked) => {\r\n const layout = getCurrentLayout();\r\n //console.log('item', item);\r\n if (item.matchesMetaFailed) {\r\n const nonCompatibleWith = item.part.partId === \"vanity_faucet\" ? \"sink\" : \"vanity\";\r\n this.callMetaMathesFailedPopup(item, nonCompatibleWith);\r\n } else if (item.part.partId === \"vanity_sink\" && this.state.parentNavigationItem.part.faucet.placeholderChanged\r\n && this.state.parentNavigationItem.part.faucet.activeFeature) {\r\n const sinkSizeConditionValue = item.part.metaData[\"SinkSize\"][0];\r\n if (this.state.parentNavigationItem.part.faucet.activeFeature.matchesMetaForCondition('SinkSize', sinkSizeConditionValue)) {\r\n this.itemClick(item, ignoreLocked)\r\n } else {\r\n this.callMetaMathesFailedPopup(item, 'faucet');\r\n }\r\n } else if (item.part.partId === \"toilet\") {\r\n const vanity = layout.parts[Vanity.id];\r\n const counterTopSize = vanity.counterTopSize();\r\n if (counterTopSize === \"60in\" || counterTopSize === \"72in\") {\r\n this.callToiletFailPopup('toilet', item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n } else if (item.part.partId === \"vanity_cabinet\") {\r\n // let toilet = layout.parts[Toilet.id];\r\n // if (toilet) {\r\n // toilet = toilet.toilet; // toiletBody\r\n // }\r\n // const counterTopSize = item.part.vanitySize + 'in';\r\n // const vanity = layout.parts[Vanity.id];\r\n // const currentCounterTopSize = vanity.counterTopSize();\r\n // if (toilet && toilet.placeholderChanged && (counterTopSize === \"60in\" || counterTopSize === \"72in\")\r\n // && (currentCounterTopSize !== \"60in\" && currentCounterTopSize !== \"72in\")) {\r\n // this.callToiletFailPopup('vanity', item, ignoreLocked)\r\n // } else {\r\n // this.itemClick(item, ignoreLocked)\r\n // }\r\n this.itemClick(item, ignoreLocked);\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n ) {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n }\r\n } else if (item.part.partId === \"shower_interior_wall\") {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n this.itemClick(item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n\r\n this.props.setActiveFeature(item.part);\r\n\r\n const canvasClass = this.state.childNavigationItem\r\n ? this.state.parentNavigationItem.text + '-' + this.state.childNavigationItem.text\r\n : this.state.parentNavigationItem.text;\r\n\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass(canvasClass.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n };\r\n\r\n handleSubPartClick = subNavigationItem => { // sidebar list item click\r\n const subItemPart = subNavigationItem.part;\r\n subItemPart.getParent().handleSubPartClick(subItemPart);\r\n this.setState({\r\n childNavigationItem: subNavigationItem,\r\n showFilterSelection: subItemPart.allFeaturesReceived, // show filters only if subItemPart has all features\r\n showerWallWizardGroupsSelected: false,\r\n searchText: \"\"\r\n }, () => {\r\n this.scrollContentToTop();\r\n this.rememberWallsSelection();\r\n this.checkIfAllFeaturesReceived(subNavigationItem, \"childNavigationItem\");\r\n });\r\n /*set new materials page subIndex*/\r\n this.setActivePartRelatedItemIndex(subNavigationItem);\r\n // console.log('subItemPart', subItemPart);\r\n if ((subItemPart.getParent() && subItemPart.getParent().partName === \"Walls\")\r\n || subItemPart.partName === \"Accent Wall\" && !window.canvasIsDragging) {\r\n this.props.setCanvasClass(subNavigationItem.text.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n this.setNewActiveFeature(subNavigationItem);\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n const allFeaturesReceived = (activeSubPart || activePart) && (activeSubPart || activePart).allFeaturesReceived;\r\n\r\n // console.log('activePart', activePart);\r\n // console.log('activeSubPart', activeSubPart);\r\n // console.log('activePart.subTypes()', activePart && activePart.subTypes());\r\n // console.log('this.state.childNavigationItemv1111', this.state.childNavigationItem);\r\n\r\n let useWizard = false;\r\n let wizardGroups = [];\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n && this.state.contentType === ContentType.Design && activeSubPart && activeSubPart.canUseWizard && activeSubPart.allFeaturesReceived) {\r\n useWizard = true;\r\n wizardGroups = this.state[this.getWizardGroupsByPartId(this.state.childNavigationItem.part.partId)];\r\n }\r\n\r\n const features = this.getFeatures(layout);\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n // console.log('featuresfeaturesfeatures', features);\r\n\r\n const useFilters = (activePart && activePart.partId === \"floor\" && activePart.allFeaturesReceived)\r\n || (activeSubPart && (this.isWallItem(activeSubPart) || activeSubPart.partId === \"accent_wall\"\r\n || activeSubPart.partId === \"shower_interior_wall_accent\") && activeSubPart.allFeaturesReceived);\r\n\r\n const filterSelectionHasValues = (activeSubPart || activePart) && FilterSelection.getAvailableFilterValues(\r\n this.props.filterGroups, \"Material\", activeSubPart || activePart, this.props.fabricatorData\r\n ).length;\r\n\r\n const itemIsSelected = (!this.props.fabricatorSettings.leadCapture\r\n || (activeSubPart && activeSubPart.activeFeature && activeSubPart.firstClick[this.props.activeQuoteIndex] && activeSubPart.placeholderChanged));\r\n\r\n return (\r\n
    \r\n
    \r\n {/*
    \r\n
    \r\n {this.state.contextMenuOpen\r\n ? \r\n : null}\r\n {showLockedView\r\n ? \r\n : null}\r\n \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n fabricatorData: store.fabricatorState,\r\n selectedFilters: store.filterState.selectedFilters,\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n userPopupOpened: store.userState.userPopupOpened,\r\n layoutParts: store.stepsState.layoutParts,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n setVanityType,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setNavigationLoading\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(MobileNavigation)\r\n);\r\n","import React, {Fragment} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport {Grid} from 'react-virtualized';\r\n\r\nimport NavigationItemsList from \"../navigationItemsList\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport UserLoginButton from \"../../../ui/userLoginButton\";\r\nimport {UserPopupTypes} from \"../../constants\";\r\nimport {CABINET_WIZARD_BUTTONS} from \"../../../kvComponent/core/constants\";\r\nimport NavigationFilters from \"../newFilters/navigationFilters\";\r\nimport {getActivePartsCounts} from \"../navUtils\";\r\nimport {\r\n changeActivePartRelatedItemIndex, setCameFromPage, setQtActiveCategory, toggleBathroomVisualizerOpen,\r\n toggleSelectionFeatureInfo, toggleSelectionWindow\r\n} from \"../../../../actions/actionFunctions\";\r\nimport {checkIfNeedToReceiveFeaturesIfFiltersApplied} from \"../../../../misc/filtersFunctions\";\r\n\r\nclass MobileNavigationBodyNewClass extends NavigationItemsList {\r\n\r\n static propTypes = {\r\n features: PropTypes.arrayOf(PropTypes.instanceOf(DesignNavigationItem)),\r\n parentItem: PropTypes.instanceOf(DesignNavigationItem),\r\n childItem: PropTypes.instanceOf(DesignNavigationItem),\r\n toggleUserPopup: PropTypes.func,\r\n onItemClick: PropTypes.func,\r\n userIsLoggedIn: PropTypes.bool,\r\n showMobileMenu: PropTypes.bool,\r\n isPhoneNumberValidated: PropTypes.bool,\r\n activeFeature: PropTypes.object,\r\n searchText: PropTypes.string,\r\n allFeaturesReceived: PropTypes.bool,\r\n existInQtCategory: PropTypes.bool,\r\n layoutName: PropTypes.string\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n showPlaceHolders: document.bvConfig ? document.bvConfig.showPlaceholders : false,\r\n itemClicked: false,\r\n reorderedFeatures: [],\r\n // showLoader: false,\r\n };\r\n this.childItemText = \"\";\r\n this.parentItemText = \"\";\r\n // this._isMounted = false;\r\n }\r\n\r\n componentDidMount() {\r\n this.reorderItems(this.props);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (\r\n (nextProps.childItem && (nextProps.childItem.text !== this.childItemText))\r\n || (nextProps.showMobileMenu && !this.props.showMobileMenu)\r\n || (!nextProps.childItem && nextProps.parentItem && (nextProps.parentItem.text !== this.parentItemText))\r\n || (this.props.selectedFilters.length !== nextProps.selectedFilters.length)\r\n || (this.props.searchText !== nextProps.searchText)\r\n || (nextProps.allFeaturesReceived && !this.props.allFeaturesReceived)\r\n || (nextProps.bvOpened && !this.props.bvOpened)\r\n || (this.props.features.length !== nextProps.features.length)\r\n || (this.props.features.length && nextProps.features.length && nextProps.features[0] && this.props.features[0] &&\r\n nextProps.features[0].part.getParent().partName !== this.props.features[0].part.getParent().partName)\r\n ) {\r\n // this.setState({\r\n // showLoader: true\r\n // }, () => {\r\n // this.reorderItems(nextProps);\r\n // });\r\n this.reorderItems(nextProps);\r\n }\r\n\r\n if (!nextProps.isPhoneNumberValidated && this.props.isPhoneNumberValidated) { // if user logged out\r\n const fabricatorSettings = nextProps.fabricatorData.settings;\r\n if (fabricatorSettings.leadCapture\r\n && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) {\r\n setTimeout(() => {\r\n this.reorderItems(nextProps);\r\n },0)\r\n }\r\n }\r\n\r\n if (this.needToUpdate && nextProps.features.length !== this.props.features.length) {\r\n this.reorderItems(nextProps);\r\n this.needToUpdate = false;\r\n }\r\n\r\n const childItem = nextProps.childItem && nextProps.childItem.part;\r\n if (childItem && nextProps.selectedFilters.length) {\r\n const checkPassed = checkIfNeedToReceiveFeaturesIfFiltersApplied(nextProps.selectedFilters, childItem);\r\n if (checkPassed) {\r\n this.getFeaturesFromBackendWithFilters(nextProps.childItem.part, checkPassed.arrayOfNeededFiltersToReceive, 1);\r\n }\r\n }\r\n\r\n }\r\n\r\n componentWillUnmount() {\r\n this._isMounted = false;\r\n }\r\n\r\n reorderItems = (props) => {\r\n const selectedFirstItemIndex = this.getActiveItemIndex(props);\r\n const otherSelectedWallsIndexes = this.getSelectedWallIndexes(props.childItem, props.features, selectedFirstItemIndex); // this part is looking for the same stones that are already selected\r\n\r\n const selectedExist = (selectedFirstItemIndex || selectedFirstItemIndex === 0) && selectedFirstItemIndex > -1;\r\n const indexesToReplace = selectedExist ? [selectedFirstItemIndex, ...otherSelectedWallsIndexes] : [...otherSelectedWallsIndexes];\r\n\r\n this.childItemText = props.childItem ? props.childItem.text : \"\";\r\n this.parentItemText = props.parentItem ? props.parentItem.text : \"\";\r\n this.setState({\r\n reorderedFeatures: this.getReorderedItems(indexesToReplace, props, selectedExist)\r\n // }, () => {\r\n // setTimeout(() => {\r\n // if (this._isMounted) {\r\n // this.setState({\r\n // showLoader: false\r\n // })\r\n // }\r\n // }, 50)\r\n });\r\n };\r\n\r\n handleUserLoginClick = (userPopupType = UserPopupTypes.Unlock) => {\r\n UserLoginButton.handleLoginClick({...this.props, userPopupType});\r\n };\r\n\r\n renderLoadingList = (activePart) => {\r\n if (!activePart.counts) {\r\n return
    \r\n }\r\n // console.log('ctivePart.counts', activePart.counts);\r\n const counts = getActivePartsCounts(activePart, this.props.layoutName);\r\n // console.log('counts', counts);\r\n\r\n if (!counts) {\r\n return
    \r\n }\r\n\r\n const elements = [];\r\n for (let i = 0; i < counts; i++ ) {\r\n elements.push(\r\n
  • \r\n
    \r\n
    \r\n
    \r\n
  • \r\n );\r\n }\r\n\r\n return elements\r\n };\r\n\r\n renderVirtualizedGrid = () => {\r\n\r\n const elements = this.getNavItemsList(true);\r\n\r\n const list = [[]]; // making list for React Virtualized\r\n let columnIndex = 0;\r\n elements.forEach((element, index) => {\r\n if (index % this.props.navigationViewType === 0 && (index !== 0)) {\r\n list.push([]);\r\n columnIndex++;\r\n }\r\n list[columnIndex].push(React.cloneElement(element))\r\n });\r\n // console.log('list', list);\r\n\r\n const menuBody = document.querySelector('.menu-body__content');\r\n const menuList = document.querySelector('.menu-list');\r\n return menuList ? (\r\n {\r\n cellRenderer={({columnIndex, key, rowIndex, style}) => {\r\n // if (isScrolling) {\r\n // return (
    \r\n // {this.emptyStone}\r\n // {this.emptyStone}\r\n //
    );\r\n //\r\n // // (
    {this.emptyStone}
    );\r\n // }\r\n // console.log('rowIndex:', rowIndex);\r\n // console.log('columnIndex:', columnIndex);\r\n // console.log('===================');\r\n // console.log('element', element);\r\n return
    \r\n {list[rowIndex][columnIndex]}\r\n
    \r\n }}>\r\n
    \r\n ) : null\r\n };\r\n\r\n render() {\r\n const activePart = this.props.parentItem ? this.props.parentItem.part : null;\r\n const activeSubPart = this.props.childItem ? this.props.childItem.part : null;\r\n const activeNavPart = activeSubPart || activePart;\r\n\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n const useWizard = fabricatorSettings &&\r\n (fabricatorSettings.wizardConsumers || (fabricatorSettings.wizardClients && document.kvConfig.isBackend));\r\n\r\n const showNavigationFilters = useWizard && this.props.activeNavigationFilter && activeNavPart\r\n && this.props.activeNavigationFilter !== CABINET_WIZARD_BUTTONS[0].buttonId\r\n && activeNavPart.canUseNavigationFilter && activeNavPart.canUseNavigationFilter();\r\n // const showNavigationFiltersSteps = showNavigationFilters && this.props.activeNavigationFilter !== \"inlay_type\";\r\n\r\n return (\r\n
      \r\n {/*{this.state.showLoader ? (*/}\r\n {/*
      */}\r\n {/*) : this.renderItemsList()}*/}\r\n {this.props.allFeaturesReceived\r\n ? showNavigationFilters\r\n ? \r\n : (\r\n \r\n {this.state.additionalFeaturesLoading || this.props.navigationLoadingActive ? this.getLoadingFeatures() : null}\r\n {this.renderVirtualizedGrid()}\r\n \r\n )\r\n : this.renderLoadingList(activeNavPart)\r\n }\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n bvOpened: store.bathroomVisualizerState.bvOpened,\r\n selectedFilters: store.filterState.selectedFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n fabricatorData: store.fabricatorState,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n navigationViewType: store.navigationState.navigationViewType,\r\n cartItems: store.cartState.cartItems,\r\n navigationLoadingActive: store.navigationState.navigationLoadingActive,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n});\r\nconst mapDispatchToProps = {\r\n changeActivePartRelatedItemIndex,\r\n toggleSelectionWindow,\r\n toggleSelectionFeatureInfo,\r\n setCameFromPage,\r\n setQtActiveCategory,\r\n toggleBathroomVisualizerOpen\r\n};\r\n\r\nconst MobileNavigationBodyNew = connect(mapStateToProps, mapDispatchToProps)(MobileNavigationBodyNewClass);\r\n\r\n\r\nexport default MobileNavigationBodyNew;\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport Analytics from \"../../../analytics\";\r\nimport {getFeatureGroupName} from \"../../../misc/helpers\";\r\n\r\nclass MobileParentNavigationItems extends Component {\r\n\r\n static propTypes = {\r\n onItemClick: PropTypes.func.isRequired\r\n };\r\n\r\n parentItemClick = (parentItemText) => {\r\n Analytics.sendClickEvent('mobile-category-clicked');\r\n Analytics.sendClickEvent('mobile-category-clicked-' + parentItemText);\r\n this.props.onItemClick(parentItemText)\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n const parentItems = layout.designNavigationItems(); // no params, all default\r\n\r\n const {intl, fabricatorData} = this.props;\r\n\r\n return (\r\n
      \r\n {parentItems.map((parentItem, parentItemIndex) => {\r\n const style = {\r\n backgroundImage: `url(${parentItem.part.partThumbnail})`,//TODO\r\n };\r\n if (parentItem.part.partThumbnailSize) {\r\n style.backgroundSize = Math.round(parentItem.part.partThumbnailSize.split(\"%\")[0]/1.5)+\"%\";\r\n style.backgroundPosition = \"top 30% center\";\r\n }\r\n if (parentItem.part.partThumbnail.includes(\"countertop\")\r\n || parentItem.part.partThumbnail.includes(\"toilet\")) {\r\n style.backgroundSize = \"80%\";\r\n }\r\n return (\r\n
    • this.parentItemClick(parentItem.text)}>\r\n
      \r\n
      \r\n \r\n {getFeatureGroupName(parentItem.part, intl, fabricatorData)}\r\n \r\n
      \r\n
      \r\n
    • \r\n )\r\n })}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState\r\n }\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, {})(MobileParentNavigationItems)\r\n);\r\n\r\n\r\n","import React, {Component} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport $ from \"jquery\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport Analytics from './../../analytics';\r\nimport UserLoginButton from './../ui/userLoginButton';\r\nimport {toggleUserPopup} from \"../../actions/actionFunctions\";\r\nimport {loaderDisable, loaderEnable} from \"../ui/loaderView\";\r\nimport {saveQuote} from \"../../api/server-api\";\r\nimport {QuoteRequestType, UserPopupTypes} from \"../visComponents/constants\";\r\nimport {showQuoteSavedNotification} from \"../ui/successNotification\";\r\n\r\nexport class QuoteButton extends Component {\r\n\r\n handleSaveQuote = () => {\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n const getQuoteEnabled = fabricatorSettings.enableQuote;\r\n if (!UserLoginButton.handleLoginClick({\r\n ...this.props,\r\n saveQuoteAfterLogin: true,\r\n userPopupType: UserPopupTypes.GetQuote\r\n })) {\r\n Analytics.sendClickEvent(getQuoteEnabled ? \"get-quote-button-show-login\" : \"quote-button-show-login\");\r\n } else {\r\n Analytics.sendClickEvent(getQuoteEnabled ? \"get-quote-button\" : \"quote-button\");\r\n this.saveQuoteSubmit();\r\n }\r\n };\r\n\r\n saveQuoteSubmit = () => {\r\n loaderEnable(\"loader.savingQuoteText\");\r\n $(document).trigger(ActionTypes.REMOVE_GREEN_ZONE_ON_CANVAS, () => {\r\n saveQuote({submit: true, yesNoConsultationRequest: false, quoteRequestType: QuoteRequestType.RequestQuote})\r\n .then((response) => {\r\n if (response) {\r\n let responseDataBase = response;\r\n if (response.data) {\r\n responseDataBase = response.data;\r\n }\r\n const responseData = typeof responseDataBase === 'object' ? responseDataBase : JSON.parse(responseDataBase);\r\n console.log('saveQuote response:', responseData);\r\n loaderDisable();\r\n }\r\n showQuoteSavedNotification(\"successNotification.titleQuoteRequested\");\r\n // downloadCanvasImageById(this.props.canvasId);\r\n }).catch((error) => {\r\n console.log('saveQuote error:', error);\r\n loaderDisable();\r\n })\r\n });\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n )\r\n }\r\n\r\n}\r\nconst mapStateToProps = (store) => ({\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n fabricatorData: store.fabricatorState\r\n});\r\nexport default connect(mapStateToProps, {\r\n toggleUserPopup,\r\n})(QuoteButton);\r\n","import React, {Component} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport $ from \"jquery\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport Analytics from './../../analytics';\r\nimport {toggleUserPopup, changeMessageBoxState} from \"../../actions/actionFunctions\";\r\n\r\n// import QuoteButton from \"./quoteButton\";\r\nimport ScheduleButton from \"./scheduleButton\";\r\nimport {ContentType} from \"../visComponents/constants\";\r\nimport {getShowOtherLayouts} from \"../visComponents/navigation/navUtils\";\r\n\r\nexport class DesignButton extends Component {\r\n\r\n static propTypes = {\r\n quoteEnabled: PropTypes.bool.isRequired,\r\n handleResetButtonClick: PropTypes.func.isRequired,\r\n };\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.visualizerTutorialStep === 2 && this.props.visualizerTutorialStep === 1) {\r\n this.toggleDesignList();\r\n }\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n designListOpened: false,\r\n };\r\n }\r\n\r\n handleWrapperBlur = (e) => {\r\n if (!e.target.closest('.des-list__item .mobilebutton') && !e.target.closest('.des')) {\r\n this.toggleDesignList();\r\n }\r\n };\r\n\r\n toggleDesignList = () => {\r\n if(!this.state.designListOpened)\r\n Analytics.sendClickEvent('design-list-toggle-opened');\r\n else\r\n Analytics.sendClickEvent('design-list-toggle-closed');\r\n\r\n this.setState({\r\n designListOpened: !this.state.designListOpened\r\n }, () => {\r\n if (this.state.designListOpened) {\r\n document.addEventListener('click', this.handleWrapperBlur);\r\n } else {\r\n document.removeEventListener('click', this.handleWrapperBlur);\r\n }\r\n })\r\n };\r\n\r\n handleDesignButtonClick = (analyticsEvent, contentType) => {\r\n Analytics.sendClickEvent(analyticsEvent);\r\n $(document).trigger(ActionTypes.OPEN_MOBILE_NAVIGATION); // open navigation\r\n $(document).trigger(ActionTypes.CHANGE_MOBILE_MENU_CONTENT_TYPE, [contentType]); // set navigation type\r\n this.toggleDesignList(); // close design buttons //\r\n };\r\n\r\n handleDesignResetClick = () => {\r\n Analytics.sendClickEvent(\"design-buttons-reset-button\");\r\n this.toggleDesignList(); // close design buttons\r\n this.props.handleResetButtonClick();\r\n };\r\n\r\n render() {\r\n\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n const showOtherLayouts = getShowOtherLayouts(fabricatorSettings);\r\n\r\n return (\r\n
    \r\n \r\n
      \r\n
    • \r\n \r\n
    • \r\n
    • \r\n \r\n
    • \r\n {showOtherLayouts ? (\r\n
    • \r\n \r\n
    • \r\n ) : null}\r\n
    • \r\n \r\n
    • \r\n \r\n {/*{this.props.quoteEnabled ? (*/}\r\n {/*
    • */}\r\n {/**/}\r\n {/*
    • */}\r\n {/*) : null}*/}\r\n
    \r\n
    \r\n )\r\n }\r\n\r\n}\r\nconst mapStateToProps = (store) => ({\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n fabricatorData: store.fabricatorState,\r\n visualizerTutorialStep: store.tutorialState.visualizerTutorialStep,\r\n visualizersLoadedLength: store.serverState.visualizersLoaded.length,\r\n});\r\nexport default connect(mapStateToProps, {\r\n toggleUserPopup,\r\n changeMessageBoxState\r\n})(DesignButton);\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport goToMaterialPage from \"./goToMaterialPage\";\r\nimport {showMaterialsTutorial} from \"../../actions/tutorialFunctions\";\r\nimport {toggleBathroomVisualizerOpen} from \"../../actions/actionFunctions\";\r\n\r\nclass MinimizeButton extends React.Component {\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.visualizerTutorialStep === 1 && !this.props.visualizerTutorialStep) {\r\n this.backToQuote();\r\n }\r\n }\r\n\r\n backToQuote = () => {\r\n goToMaterialPage('visualizer');\r\n this.props.toggleBathroomVisualizerOpen(false);\r\n if (!this.props.materialsTutorialFinished) {\r\n this.props.showMaterialsTutorial(true);\r\n }\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n visualizerTutorialStep: store.tutorialState.visualizerTutorialStep,\r\n materialsTutorialFinished: store.tutorialState.materialsTutorialFinished,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n toggleBathroomVisualizerOpen,\r\n showMaterialsTutorial\r\n})(MinimizeButton);\r\n","export function downloadCSV(data) {\r\n\r\n let csvRows = []; //https://gist.github.com/yangshun/01b81762e8d30f0d7f8f\r\n for (let i = 0; i < data.length; ++i) {\r\n // for (var j = 0; j < data[i].length; ++j) {\r\n // data[i][j] = '\\\"' + data[i][j] + '\\\"'; // Handle elements that contain commas\r\n // }\r\n csvRows.push(data[i].join(','));\r\n }\r\n\r\n const csvContent = csvRows.join('\\r\\n');\r\n\r\n// The download function takes a CSV string, the filename and mimeType as parameters\r\n// Scroll/look down at the bottom of this snippet to see how download is called\r\n const download = function(content) {\r\n const a = document.createElement('a');\r\n const fileName = 'download.csv';\r\n const blobConfig = {\r\n encoding: \"UTF-8\",\r\n type: \"text/plain;charset=UTF-8\" // 'application/octet-stream'; // 'text/csv;encoding:utf-8'\r\n };\r\n if (navigator.msSaveBlob) { // IE10\r\n navigator.msSaveBlob(new Blob([content], blobConfig), fileName);\r\n } else if (URL && 'download' in a) { //html5 A[download]\r\n a.href = URL.createObjectURL(new Blob([content], blobConfig));\r\n a.setAttribute('download', fileName);\r\n document.body.appendChild(a);\r\n a.click();\r\n document.body.removeChild(a);\r\n } else {\r\n location.href = 'data:application/octet-stream,' + encodeURIComponent(content); // only this mime type is supported\r\n }\r\n };\r\n\r\n download(csvContent);\r\n}\r\n","import React from \"react\";\r\n\r\nconst DemoPoint = (props) => (\r\n
    \r\n \r\n \r\n \r\n
    \r\n);\r\n\r\nDemoPoint.displayName = \"DemoPoint\";\r\nexport default DemoPoint","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\n\r\nimport COLOR_THEMES from \"../../../colorThemes\";\r\n\r\n\r\nconst ExclamationMarkIcon = (props) => {\r\n\r\n const {activeTheme} = props;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nconst mapStateToProps = store => {\r\n const {activeTheme} = store.serverState;\r\n return {\r\n activeTheme\r\n }\r\n};\r\n\r\nexport default connect(mapStateToProps)(ExclamationMarkIcon)\r\n","import uniq from \"lodash/uniq\";\r\n\r\nimport Config from \"../config\";\r\nimport store from \"../store\";\r\nimport {setCustomAddedDiscounts, setDiscountSections, setFinancePercentage} from \"../actions/priceWorksheetActions\";\r\nimport {getBvFeatures, getDiscounts} from \"./server-api\";\r\nimport {getArrayOfIdsFromBvState} from \"../misc/helpers\";\r\nimport {setActiveQuoteIndex, setQuotes} from \"../actions/roomsFunctions\";\r\nimport {objectWithoutProperties} from \"../misc/helpers\";\r\nimport {createFakeLayout, getCurrentLayout, getVisualizerTypeFromBvScene} from \"../bvcomponents/appLayout\";\r\nimport {\r\n changeUserInfo,\r\n setFirstLoadedPreset, setStonePricing,\r\n setUserPhoneNumberValidated,\r\n toggleUserPopup\r\n} from \"../actions/actionFunctions\";\r\nimport {getImagePromiseFromLayout} from \"../misc/getCanvasImageFromLayout\";\r\nimport Misc from \"../misc/misc\";\r\nimport {setAmazonImageUrl} from \"../actions/serverFunctions\";\r\nimport {restorePaymentInfo} from \"../actions/paymentFunctions\";\r\nimport Analytics from \"../analytics\";\r\nimport {restoreAllWizardSelectedValues, setWizardList} from \"../actions/wizardFunctions\";\r\nimport {getQuoteInfo} from \"../misc/quotesFunctions\";\r\nimport JsonApi from \"./jsonApi\";\r\nimport {getParsedWizardList} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\nimport {parseMarkUp} from \"../misc/priceFunctions\";\r\nimport {setMarkUpLogic} from \"../actions/shoppingCartFunctions\";\r\nimport {DISCOUNT_MAIN_TYPES} from \"../bvcomponents/priceWorksheet/discounstInterface\";\r\n\r\n/**\r\n * Sets noteText for loaded features\r\n * @param notesFeatures {Array.}\r\n * @param layout\r\n */\r\nconst setNotesToFeatures = (notesFeatures = [], layout) => {\r\n const parents = layout.getFeatures(true); // we need other groups too\r\n notesFeatures.forEach((notesFeature) => {\r\n parents.forEach(parent => {\r\n const subParts = parent.subParts();\r\n subParts.forEach(subPart => {\r\n Object.keys(subPart.part.featuresList).forEach(layoutName => {\r\n const featureFound = subPart.part.featuresList[layoutName].find(feature => {\r\n return feature.dbFeature.id === notesFeature.id\r\n })\r\n if (featureFound) {\r\n featureFound.notesList[notesFeature.currentQuote] = notesFeature.noteText;\r\n // console.log(\"featureFound\", featureFound);\r\n }\r\n })\r\n });\r\n })\r\n })\r\n};\r\n\r\n\r\n/**\r\n * checks if we need to do multiple features requests\r\n * @param records {Array<{}>}\r\n * @param fabricatorState {object}\r\n * @param serverState {object}\r\n * @returns boolean\r\n */\r\nconst hasMultipleVisualizers = (records, fabricatorState, serverState) => {\r\n console.log(\"serverState.initialVisualizerType\", serverState.initialVisualizerType);\r\n return fabricatorState.settings.allowVisualizerSwitching\r\n && records.some(room => {\r\n return room.data && room.data.visualizerType && (room.data.visualizerType !== serverState.initialVisualizerType)\r\n })\r\n}\r\n\r\n/**\r\n * when the new customer is created - the system creates a job for him with only one userState property\r\n * @param jobResponse {object}\r\n * @param bvState {object}\r\n * @returns {boolean}\r\n */\r\nexport const isNewlyCreatedJob = (jobResponse, bvState) => {\r\n\r\n if (jobResponse && !bvState) {\r\n if (Array.isArray(jobResponse.records) && jobResponse.records.length) {\r\n const records = jobResponse.records.filter(record => record && record.data);\r\n if (records.length === 1) {\r\n bvState = records[0].data;\r\n }\r\n } else { // whoa, nothing there, so it's probably a brand new job, let's load default preset\r\n return true\r\n }\r\n }\r\n\r\n return bvState && (Object.keys(bvState).length === 1) && bvState.userState\r\n}\r\n\r\n/**\r\n * loads features and notes and also stone pricings\r\n * @param records {Array<{}>}\r\n * @param activeQuoteIndex {number}\r\n * @returns {Promise} loaded features\r\n */\r\nconst loadFeaturesAndNotesForMultipleLayouts = async (records, activeQuoteIndex) => {\r\n let featuresToReturn = [];\r\n\r\n const differentVisualizers = {};\r\n records.forEach((record, recordIndex) => {\r\n if (!differentVisualizers[record.data.visualizerType]) {\r\n differentVisualizers[record.data.visualizerType] = {\r\n arrayOfFeaturesIds: [],\r\n notesFeatures: [],\r\n }\r\n }\r\n const currentObject = differentVisualizers[record.data.visualizerType];\r\n record.features.forEach((feature) => {\r\n if (feature.fabricatorFeature_id) {\r\n if (!currentObject.arrayOfFeaturesIds.includes(feature.fabricatorFeature_id)) {\r\n currentObject.arrayOfFeaturesIds.push(feature.fabricatorFeature_id);\r\n }\r\n if (feature.noteText) {\r\n currentObject.notesFeatures.push({\r\n id: feature.fabricatorFeature_id,\r\n noteText: feature.noteText,\r\n currentQuote: recordIndex\r\n })\r\n }\r\n }\r\n });\r\n currentObject.arrayOfFeaturesIds = uniq([\r\n ...currentObject.arrayOfFeaturesIds, // here we add all cartItems features\r\n ...getArrayOfIdsFromBvState(record.data) // and then we add all active features from the quotes\r\n ]);\r\n });\r\n for (const visualizerType of Object.keys(differentVisualizers)) {\r\n const currentObject = differentVisualizers[visualizerType];\r\n const forLayout = getCurrentLayout(visualizerType);\r\n const featuresFromJob = await getBvFeatures(currentObject.arrayOfFeaturesIds, null, false, visualizerType);\r\n if (featuresFromJob && featuresFromJob.data) {\r\n // console.log(\"featuresFromJob\", featuresFromJob.data);\r\n const nextBvState = records[activeQuoteIndex] ? records[activeQuoteIndex].data : null;\r\n forLayout.loadNewFeatures(featuresFromJob.data, null, true, nextBvState);\r\n if (visualizerType === document.kvConfig.visualizerType) {\r\n featuresToReturn = featuresFromJob.data;\r\n }\r\n }\r\n setNotesToFeatures(currentObject.notesFeatures, forLayout) // here we set notes\r\n\r\n // we also need stone pricing!! to be able to show correct price\r\n if (visualizerType !== document.kvConfig.visualizerType) { // skip current, it was already downloaded\r\n const mainResponse = await JsonApi.getBathroomVisualizerData(30, visualizerType);\r\n console.log(\"mainResponse for stonePricing\", mainResponse);\r\n if (mainResponse && mainResponse.data && mainResponse.data.stonePricing) {\r\n store.dispatch(setStonePricing(mainResponse.data.stonePricing)); // we need to set stone pricing for cart features\r\n }\r\n if (mainResponse && mainResponse.data && (mainResponse.data.wizardData || mainResponse.data.wizardDataV2)) {\r\n const wizardList = getParsedWizardList(mainResponse.data, false, visualizerType);\r\n store.dispatch(setWizardList(wizardList));\r\n }\r\n }\r\n }\r\n\r\n return featuresToReturn\r\n}\r\n\r\nconst getBvStateProperty = (responseData, activeQuoteIndex, property = \"\") => {\r\n if (!responseData.records || !Array.isArray(responseData.records) || !responseData.records.length) {\r\n return null\r\n }\r\n return responseData.records[0].data[property] ||\r\n responseData.records[activeQuoteIndex] && responseData.records[activeQuoteIndex].data\r\n ? responseData.records[activeQuoteIndex].data[property]\r\n : null;\r\n}\r\n\r\nexport const parseJobIdResponse = async (responseData, isDesignOnly = false) => {\r\n const {fabricatorState, serverState} = store.getState();\r\n const layout = getCurrentLayout();\r\n if (Config.isDevMode()) {\r\n console.log(`getJobId ${document.kvConfig.jobId}:`, responseData);\r\n }\r\n let activeQuoteIndex = 0;\r\n if (Array.isArray(responseData.records) && responseData.records.length) {\r\n responseData.records = responseData.records.filter(record => record && record.data);\r\n const firstRecord = responseData.records[0];\r\n if (firstRecord) {\r\n activeQuoteIndex = firstRecord.data.activeQuoteIndex || 0;\r\n let loadedFeaturesFromJob = [];\r\n if (hasMultipleVisualizers(responseData.records, fabricatorState, serverState)) {\r\n loadedFeaturesFromJob = await loadFeaturesAndNotesForMultipleLayouts(responseData.records, activeQuoteIndex);\r\n } else {\r\n let notesFeatures = [];\r\n let arrayOfFeaturesIds = [];\r\n responseData.records.forEach((rec, recIndex) => {\r\n if (Array.isArray(rec.features) && rec.features.length) {\r\n rec.features.forEach((feature) => {\r\n if (feature.fabricatorFeature_id) {\r\n arrayOfFeaturesIds.push(feature.fabricatorFeature_id)\r\n if (feature.noteText) {\r\n notesFeatures.push({\r\n id: feature.fabricatorFeature_id,\r\n noteText: feature.noteText,\r\n currentQuote: recIndex\r\n })\r\n }\r\n }\r\n })\r\n }\r\n });\r\n responseData.records.forEach((rec) => {\r\n arrayOfFeaturesIds = uniq([\r\n ...arrayOfFeaturesIds, // here we add all cartItems features\r\n ...getArrayOfIdsFromBvState(rec.data) // and then we add all active features from the quotes\r\n ])\r\n })\r\n const featuresFromJob = await getBvFeatures(arrayOfFeaturesIds);\r\n if (featuresFromJob && featuresFromJob.data) {\r\n loadedFeaturesFromJob = featuresFromJob.data;\r\n // console.log(\"featuresFromJob\", featuresFromJob.data);\r\n const nextBvState = responseData.records[activeQuoteIndex] ? responseData.records[activeQuoteIndex].data : null;\r\n layout.loadNewFeatures(featuresFromJob.data, null, true, nextBvState);\r\n }\r\n setNotesToFeatures(notesFeatures, layout) // here we set notes\r\n }\r\n\r\n // restore wizard before the cart! to make sure cart is restored with proper display logic items that need wizard selections\r\n const allWizardValues = getBvStateProperty(responseData, activeQuoteIndex, \"allWizardsValues\");\r\n if (allWizardValues) {\r\n await store.dispatch(restoreAllWizardSelectedValues([...allWizardValues]));\r\n delete firstRecord.data.allWizardsValues; // we don't need it anymore, prevent overwriting\r\n if (responseData.records[activeQuoteIndex] && responseData.records[activeQuoteIndex].data && responseData.records[activeQuoteIndex].data.allWizardsValues) {\r\n delete responseData.records[activeQuoteIndex].data.allWizardsValues\r\n }\r\n }\r\n\r\n if (responseData.records[activeQuoteIndex] && responseData.records[activeQuoteIndex].data) { // just in case\r\n const restoreCartFeatures = isDesignOnly ? false : loadedFeaturesFromJob\r\n const nextBvState = responseData.records[activeQuoteIndex].data;\r\n if (isNewlyCreatedJob(null, nextBvState)) {\r\n if (restoreCartFeatures) {\r\n layout.setCartStateAndUserStateFromBvState(nextBvState);\r\n }\r\n } else {\r\n layout.setActiveFeaturesFromObject(\r\n responseData.records[activeQuoteIndex].data,\r\n restoreCartFeatures,\r\n false,\r\n true,\r\n true,\r\n false\r\n ); // here we set bvState! and restore cart!!\r\n }\r\n }\r\n if (firstRecord.imageUrl) {\r\n store.dispatch(setAmazonImageUrl(firstRecord.imageUrl));\r\n }\r\n if (firstRecord.data.id) {\r\n store.dispatch(setFirstLoadedPreset(firstRecord.data.id));\r\n }\r\n }\r\n\r\n let newQuotes = [];\r\n for (const [recordIndex, record] of responseData.records.entries()) {\r\n //1) detect visualizer layout\r\n const visType = getVisualizerTypeFromBvScene(record.data, record);\r\n\r\n record.room = visType; // this might change coming incorrect visualizer!\r\n\r\n let image = \"\";\r\n if (responseData.records.length === 1 || (recordIndex === activeQuoteIndex)) {\r\n image = await getImagePromiseFromLayout(layout, null, 0.7, true);\r\n } else {\r\n let fakeLayout = createFakeLayout(getCurrentLayout(visType));\r\n let bvState = record.data;\r\n if (responseData.records.length === 1 && Object.keys(bvState).length <= 2) { // new created quote\r\n bvState = layout.getActiveFeaturesAsObject(false, false, true);\r\n }\r\n //2) set visualizer layout features\r\n await fakeLayout.setItemsFromBvState(bvState, false, null, true);\r\n //3) create quote image\r\n image = await getImagePromiseFromLayout(fakeLayout, null, 0.7, true);\r\n }\r\n\r\n //4) set quote other info\r\n let quoteObject = await getQuoteInfo(recordIndex, null, false, \"\", image);\r\n\r\n quoteObject.quoteId = record.id;\r\n quoteObject.data = objectWithoutProperties(record.data, [\"installations\", \"cartState\", \"userState\", \"allWizardsValues\"]);\r\n quoteObject.layoutType = record.data.layout_type;\r\n quoteObject.room = record.room;\r\n quoteObject.sqFtCalcData = record.sqFtCalcData;\r\n quoteObject.bvImage = image;\r\n newQuotes.push(quoteObject);\r\n }\r\n\r\n if (newQuotes.length) {\r\n store.dispatch(setQuotes([...newQuotes]));\r\n if (newQuotes[activeQuoteIndex]) {\r\n store.dispatch(setActiveQuoteIndex(activeQuoteIndex));\r\n }\r\n }\r\n }\r\n if (Array.isArray(responseData.discountSections) && responseData.discountSections.length && !isDesignOnly) {\r\n await getDiscounts();\r\n let allDiscountSections = store.getState().priceWorksheetState.discountSections;\r\n // console.log(\"allDiscountSections\", allDiscountSections);\r\n // console.log(\"responseData.discountSections\", responseData.discountSections);\r\n const priceWorkSheetLogic = getBvStateProperty(responseData, activeQuoteIndex, \"priceWorkSheetLogic\");\r\n if (priceWorkSheetLogic) {\r\n if (Array.isArray(priceWorkSheetLogic.customAddedDiscounts) && priceWorkSheetLogic.customAddedDiscounts.length) {\r\n store.dispatch(setCustomAddedDiscounts(priceWorkSheetLogic.customAddedDiscounts));\r\n }\r\n if (priceWorkSheetLogic.financePercentage) {\r\n store.dispatch(setFinancePercentage(priceWorkSheetLogic.financePercentage));\r\n }\r\n if (priceWorkSheetLogic.selectedDiscounts) {\r\n allDiscountSections = allDiscountSections.map((discountSection) => {\r\n discountSection.discounts = discountSection.discounts.map(discount => {\r\n const sameDiscountSaved = priceWorkSheetLogic.selectedDiscounts.find(dis => {\r\n return (discount.uuId === dis.uuId) || (discount.id === dis.id && (discountSection.id === dis.categoryId))\r\n });\r\n if (sameDiscountSaved) {\r\n discount.selected = true;\r\n if (discount.isRidged) {\r\n discount.name = sameDiscountSaved.name;\r\n discount.amount = sameDiscountSaved.amount;\r\n } else if (sameDiscountSaved.discountType === DISCOUNT_MAIN_TYPES.deposit) {\r\n discount.amount = sameDiscountSaved.amount;\r\n discount.type = sameDiscountSaved.type; // if it was percentage - we convert it to price\r\n } else if (sameDiscountSaved.discountType === DISCOUNT_MAIN_TYPES.finance) {\r\n discount.financeOptions = sameDiscountSaved.financeOptions\r\n }\r\n }\r\n return discount\r\n })\r\n return discountSection\r\n })\r\n }\r\n } else {\r\n responseData.discountSections.forEach((selectedDiscountSection) => {\r\n let discountSectionFound = false;\r\n allDiscountSections = allDiscountSections.map((discountSection) => {\r\n if (selectedDiscountSection.id === discountSection.id || selectedDiscountSection.name === discountSection.name) {\r\n selectedDiscountSection.discounts.forEach(selectedDiscount => {\r\n let discountFound = false;\r\n discountSection.discounts.map(discount => {\r\n if (selectedDiscount.id === discount.id\r\n || [\"name\", \"amount\"].every(property => selectedDiscount[property] === discount[property])\r\n || [\"isRidged\", \"mode\", \"order\", \"type\"].every(property => selectedDiscount[property] === discount[property])) {\r\n discount.selected = true;\r\n discountFound = true;\r\n if (discount.isRidged) {\r\n discount.name = selectedDiscount.name;\r\n discount.amount = selectedDiscount.amount;\r\n }\r\n }\r\n return discount\r\n });\r\n if (!discountFound) {\r\n console.log(\"No discount found! Pls call administrator\"); // haha funny. this happens when discounts are changed, and old quotes opened\r\n selectedDiscount.id = Misc.getRandomInt(0, 9999999999);\r\n selectedDiscount.oldDeleted = true;\r\n discountSection.discounts.push(selectedDiscount)\r\n }\r\n })\r\n discountSectionFound = true;\r\n }\r\n return discountSection\r\n });\r\n if (!discountSectionFound) {\r\n selectedDiscountSection.discounts.forEach(disc => {\r\n disc.oldDeleted = true;\r\n })\r\n allDiscountSections.push(selectedDiscountSection)\r\n }\r\n })\r\n }\r\n store.dispatch(setDiscountSections(allDiscountSections));\r\n }\r\n if (responseData.user && responseData.user.values && !isDesignOnly) { // update user state\r\n const savedCountry = responseData.records\r\n && responseData.records[activeQuoteIndex]\r\n && responseData.records[activeQuoteIndex].data\r\n && responseData.records[activeQuoteIndex].data.userState\r\n && responseData.records[activeQuoteIndex].data.userState.userInfo\r\n && responseData.records[activeQuoteIndex].data.userState.userInfo.shipping\r\n && responseData.records[activeQuoteIndex].data.userState.userInfo.shipping.country\r\n ? responseData.records[activeQuoteIndex].data.userState.userInfo.shipping.country\r\n : responseData.user.shippingAddress ? responseData.user.shippingAddress.country : \"\";\r\n const newUserInfo = Misc.parseUserResponse(responseData.user, savedCountry);\r\n if (Config.isDevMode()) {\r\n console.log(\"parseResponse newUserInfo\", newUserInfo);\r\n }\r\n store.dispatch(changeUserInfo(newUserInfo));\r\n store.dispatch(setUserPhoneNumberValidated(true));\r\n if (responseData.user.encodedUserId) {\r\n Analytics.setUserId(responseData.user.encodedUserId);\r\n store.dispatch(toggleUserPopup({\r\n encodedUserId: responseData.user.encodedUserId,\r\n }));\r\n }\r\n }\r\n if (responseData.user && (responseData.user.billingAddress || responseData.user.shippingAddress)) { // update user state\r\n store.dispatch(restorePaymentInfo(Misc.parseShippingAndBillingResponse(responseData.user)));\r\n }\r\n if (responseData.jobMarkUp) {// restore mark up\r\n const globalMarkUp = parseMarkUp(responseData.jobMarkUp);\r\n if (globalMarkUp) {\r\n store.dispatch(setMarkUpLogic(globalMarkUp)) // override cartState, because it was changed in the job board\r\n }\r\n }\r\n}\r\n","import uniqBy from \"lodash/uniqBy\";\r\n\r\nimport {Part} from \"../part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {floorThumbnail} from \"../assets\";\r\n\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\n\r\nexport default class Floor extends Part {\r\n static id = 'Floor';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.partId = 'kitchen_floor';\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Floor';\r\n this.homePageTitle = 'Flooring';\r\n this.translateId = \"visualizer.kitchen.kitchen_floor\";\r\n this.partThumbnail = floorThumbnail;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Floor\":\r\n relatedItemName = \"floorBody\";\r\n RelatedItemClass = FloorBody;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Floor', this)\r\n }\r\n}\r\n\r\nclass FloorBody extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.isStoneFeature = true;\r\n this.partId = 'kitchen_floor';\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.kitchen.kitchen_floor\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new FloorBody());\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const navSubItems = this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters), searchText)\r\n .map(_ => new DesignNavigationItem(_.featureName, _)); // 1) filter them by filters 2) filter them by search\r\n return uniqBy(navSubItems, (navItem) => navItem.part.dbFeature.sharedFeatureName)\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Floor;\r\n }\r\n }\r\n}\r\n","import {Part} from \"../part\";\r\nimport {wallsThumbnail} from \"../assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport Baseboard from \"../subparts/globals/baseboard\";\r\n// import CeilingHighlights from \"../subparts/globals/ceilingHighlights\";\r\nimport CeilingLights from \"../subparts/globals/ceilingLights\";\r\nimport GlobalShadow from \"../subparts/globals/globalShadow\";\r\nimport Decor1 from \"../subparts/globals/decor1\";\r\nimport Decor2 from \"../subparts/globals/decor2\";\r\nimport Decor3 from \"../subparts/globals/decor3\";\r\n\r\nexport default class Globals extends Part {\r\n static id = 'Globals';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Globals';\r\n this.partThumbnail = wallsThumbnail;\r\n\r\n // related items\r\n this.baseboard = null;\r\n this.ceilingHighlights = null;\r\n this.ceilingLights = null;\r\n this.globalShadow = null;\r\n this.decor1 = null;\r\n this.decor2 = null;\r\n this.decor3 = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Baseboard\":\r\n relatedItemName = \"baseboard\";\r\n RelatedItemClass = Baseboard;\r\n break;\r\n // case \"Ceiling Highlight\":\r\n // relatedItemName = \"ceilingHighlights\";\r\n // RelatedItemClass = CeilingHighlights;\r\n // break;\r\n case \"Ceiling Lights\":\r\n relatedItemName = \"ceilingLights\";\r\n RelatedItemClass = CeilingLights;\r\n break;\r\n case \"Global Shadow\":\r\n relatedItemName = \"globalShadow\";\r\n RelatedItemClass = GlobalShadow;\r\n break;\r\n case \"Decor\":\r\n if (dbFeature.displayName.includes(\"Part2\")) {\r\n relatedItemName = \"decor2\";\r\n RelatedItemClass = Decor2;\r\n } else if (dbFeature.displayName.includes(\"Island\")) {\r\n relatedItemName = \"decor3\";\r\n RelatedItemClass = Decor3;\r\n } else {\r\n relatedItemName = \"decor1\";\r\n RelatedItemClass = Decor1;\r\n }\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Globals', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Baseboard extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'baseboard';\r\n this.partName = 'Baseboard';\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Baseboard());\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.Baseboard;\r\n }\r\n }\r\n}","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class CeilingLights extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'ceiling_lights';\r\n this.partName = 'Ceiling Lights';\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new CeilingLights());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.CeilingLights;\r\n }\r\n }\r\n}","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class GlobalShadow extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'global_shadow';\r\n this.partName = 'Global Shadow';\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new GlobalShadow());\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.GlobalShadow;\r\n }\r\n }\r\n}","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\n\r\nexport default class Decor1 extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'decor_1';\r\n this.partName = 'Decor1';\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Decor1());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const bottomCabinet = cabinetParent && cabinetParent.bottomCabinet;\r\n if (bottomCabinet && (bottomCabinet.disabled || !bottomCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.Decor1;\r\n }\r\n }\r\n}","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport CountertopGroup from \"../../parts/countertopGroup\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\n\r\nexport default class Decor2 extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'decor_2';\r\n this.partName = 'Decor2';\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Sink\"]) {\r\n dbFeature.metaData[\"Sink\"] = [\"All\"]\r\n }\r\n return super.load_(dbFeature, new Decor2());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const bottomCabinet = cabinetParent && cabinetParent.bottomCabinet;\r\n if (bottomCabinet && (bottomCabinet.disabled || !bottomCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const countertopGroup = this.getParent().layout.parts[CountertopGroup.id];\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n },{\r\n propName: 'Sink',\r\n propValue: (countertopGroup && countertopGroup.sink && countertopGroup.sink.disabled) ? 'None' : 'All'\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.Decor2;\r\n }\r\n }\r\n}","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport CenterIsland from \"../../parts/centerIsland\";\r\n\r\nexport default class Decor3 extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'decor_3';\r\n this.partName = 'Decor3';\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Decor3());\r\n }\r\n\r\n setLayers(layout) {\r\n const centerIslandParent = this.getParent().layout.parts[CenterIsland.id];\r\n const cabinet = centerIslandParent.cabinet;\r\n\r\n if (cabinet && (cabinet.disabled || !cabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.Decor3;\r\n }\r\n }\r\n}","import snakeCase from \"lodash/snakeCase\";\r\nimport {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport NonVisualizerSubPart from \"../subparts/nonVisualizerSubPart\";\r\n\r\nconst alreadyExistingGroups = [\"Edge Profile\", \"Faucet\", \"Sink\", \"Stovetop\", \"Range\"];\r\n\r\nexport default class Other extends Part {\r\n static id = 'Other';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Other';\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n // console.log(\"load other\", dbFeature.groupName);\r\n if (alreadyExistingGroups.includes(dbFeature.groupName)) { // they should be loaded in their groups!\r\n return false\r\n }\r\n const partId = snakeCase(dbFeature.groupName);\r\n let relatedItem = this.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, dbFeature.groupName);\r\n this.relatedItems.push(relatedItem);\r\n }\r\n relatedItem.getParent = () => this;\r\n relatedItem.load(dbFeature);\r\n return true\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Other', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport classNames from 'classnames';\r\nimport $ from 'jquery';\r\n\r\nimport {\r\n toggleDesktopNavigation,\r\n setActiveNavigationNames,\r\n setModuleContextMenuType,\r\n setActiveNavigationFilter, setActiveNavigationFilterStepIndex, setNavigationViewType, setNavigationLoading\r\n} from \"../../../actions/navigationFunctions\";\r\nimport {setDefaultSelectionGroup, changeActivePartRelatedItemIndex} from \"../../../actions/actionFunctions\";\r\nimport DesktopNavigationCommon from \"../../visComponents/navigation/desktopNavigationCommon\";\r\nimport Z from \"../core/zIndex\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nimport LockedView from \"../../common/lockedView\";\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport ContextMenuSimple from \"./contextMenuSimple\";\r\nimport CabinetContextMenu from \"./cabinetContextMenu\";\r\nimport MobileMenuSelect from \"../../visComponents/navigation/mobile/mobileMenuSelect\";\r\nimport {CABINET_WIZARD_BUTTONS, COUNTERTOP_WIZARD_BUTTONS} from \"../core/constants\";\r\nimport {setVisualizerTutorialStep, showVisualizerTutorial} from \"../../../actions/tutorialFunctions\";\r\n\r\nclass DesktopNavigation extends DesktopNavigationCommon {\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.activeNavigationFilter !== this.props.activeNavigationFilter\r\n && COUNTERTOP_WIZARD_BUTTONS.some(btn => btn.buttonId === nextProps.activeNavigationFilter)) {\r\n if (this.state.parentNavigationItem && this.state.parentNavigationItem.part.partName === \"Countertop\") {\r\n const subParts = this.state.parentNavigationItem.part.subParts();\r\n let subPart = null;\r\n switch (nextProps.activeNavigationFilter) {\r\n case COUNTERTOP_WIZARD_BUTTONS[0].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[1].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[2].buttonId:\r\n subPart = subParts.find(sPart => sPart.part.partId === \"countertop\");\r\n break;\r\n case COUNTERTOP_WIZARD_BUTTONS[3].buttonId:\r\n subPart = subParts.find(sPart => sPart.part.partId === \"edge_profile\");\r\n break;\r\n case COUNTERTOP_WIZARD_BUTTONS[4].buttonId:\r\n if (!this.state.childNavigationItem\r\n || (this.state.childNavigationItem && this.state.childNavigationItem.part.partId !== \"backsplash\")) {\r\n this.triggerOpenNavigationMenu(\"Backsplash\", \"Walls\", nextProps.activeNavigationFilter);\r\n }\r\n break;\r\n }\r\n if (subPart && (!this.state.childNavigationItem\r\n || (this.state.childNavigationItem && this.state.childNavigationItem.part.partId !== subPart.part.partId))) {\r\n this.handleSubPartClick(subPart, nextProps.activeNavigationFilter)\r\n }\r\n } else if (this.state.parentNavigationItem && this.state.parentNavigationItem.part.partName === \"Walls\") {\r\n switch (nextProps.activeNavigationFilter) {\r\n case COUNTERTOP_WIZARD_BUTTONS[0].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[1].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[2].buttonId:\r\n if (!this.state.childNavigationItem\r\n || (this.state.childNavigationItem && this.state.childNavigationItem.part.partId !== \"countertop\")) {\r\n this.triggerOpenNavigationMenu(\"Countertop\", \"Countertop\", nextProps.activeNavigationFilter);\r\n }\r\n break;\r\n case COUNTERTOP_WIZARD_BUTTONS[3].buttonId:\r\n if (!this.state.childNavigationItem\r\n || (this.state.childNavigationItem && this.state.childNavigationItem.part.partId !== \"edge_profile\")) {\r\n this.triggerOpenNavigationMenu(\"Edge Profile\", \"Countertop\", nextProps.activeNavigationFilter);\r\n }\r\n break;\r\n }\r\n } else if (this.state.parentNavigationItem && this.state.parentNavigationItem.part.partName === \"CenterIsland\") {\r\n const subParts = this.state.parentNavigationItem.part.subParts();\r\n let subPart = null;\r\n switch (nextProps.activeNavigationFilter) {\r\n case COUNTERTOP_WIZARD_BUTTONS[0].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[1].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[2].buttonId:\r\n subPart = subParts.find(sPart => sPart.part.partId === \"center_island_countertop\");\r\n break;\r\n case COUNTERTOP_WIZARD_BUTTONS[3].buttonId:\r\n subPart = subParts.find(sPart => sPart.part.partId === \"center_island_edge\");\r\n break;\r\n }\r\n if (subPart && (!this.state.childNavigationItem\r\n || (this.state.childNavigationItem && this.state.childNavigationItem.part.partId !== subPart.part.partId))) {\r\n this.handleSubPartClick(subPart, nextProps.activeNavigationFilter)\r\n }\r\n }\r\n }\r\n this._componentWillReceiveProps(nextProps)\r\n }\r\n\r\n bindCanvasClick = (event) => {\r\n const layout = getCurrentLayout();\r\n // const canvas = document.getElementById(this.props.canvasId);\r\n this.props.setHoveredLayer(event);\r\n\r\n if (document.hoveredLayer) {\r\n\r\n const layoutType = layout.getCurrentLayoutName();\r\n\r\n const hoveredZone = Z.getMenuByHoveredLayer(layoutType, document.hoveredLayer);\r\n\r\n // console.log('hoveredZone', hoveredZone);\r\n\r\n if (hoveredZone) {\r\n if (hoveredZone.contextMenuPartId && !this.state.showNavigation) {\r\n if (this.state.contextMenuOpen) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n });\r\n } else {\r\n this.openContextMenu(hoveredZone, event);\r\n }\r\n return false;\r\n } else if (this.state.contentType === 0) {\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.setNewActiveFeature();\r\n this.menuOpened();\r\n setTimeout(() => {\r\n $(document).on('click', this.handleWrapperBlur);\r\n }, 0)\r\n });\r\n }\r\n\r\n hoveredZone.child\r\n ? this.triggerOpenNavigationMenu(hoveredZone.child, hoveredZone.parent)\r\n : this.triggerOpenNavigationMenu(hoveredZone)\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n openContextMenu = (contextMenuOpen, event) => {\r\n let contextMenuButtons = [];\r\n if (contextMenuOpen.contextMenuPartId === \"top_cabinet\") {\r\n // const hoveredParent = this.props.designNavigationItems.find(navItem => {\r\n // return navItem.text === \"Cabinet\"\r\n // });\r\n // if (hoveredParent) {\r\n //\r\n // }\r\n contextMenuButtons = [1, 2, 3, 4, 5]\r\n }\r\n // const receiveBackSplashes = () => {\r\n // const layout = getCurrentLayout();\r\n // const wallsParent = layout.parts[\"Walls\"];\r\n // const backsplashSubPart = wallsParent.subParts().find(subPart => subPart.part.partId === \"backsplash\");\r\n // this.checkIfAllFeaturesReceived(backsplashSubPart);\r\n // };\r\n switch (contextMenuOpen.contextMenuPartId) {\r\n case \"countertop_group_custom\":\r\n contextMenuOpen = \"Countertop\";\r\n break;\r\n case \"right_wall_custom\":\r\n contextMenuOpen = \"right_wall_custom\";\r\n break;\r\n case \"left_wall_custom\":\r\n contextMenuOpen = \"left_wall_custom\";\r\n break;\r\n case \"backsplash_custom_left\": {\r\n // receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_left\";\r\n break;\r\n }\r\n case \"backsplash_custom_right\": {\r\n // receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_right\";\r\n break;\r\n }\r\n case \"backsplash_custom\": {\r\n // receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom\";\r\n break;\r\n }\r\n case \"center_island_custom\":\r\n contextMenuOpen = \"Center Island\";\r\n break;\r\n default:\r\n break;\r\n }\r\n const isMobile = $(window).width() < 991;\r\n\r\n let left = isMobile ? '50%' : event.clientX - 50;\r\n let top = isMobile ? '50%' : event.clientY - 50;\r\n let right = 'auto';\r\n\r\n const maxAllowedWidth = contextMenuButtons.length > 2 ? 300 : 210;\r\n\r\n let maxAllowedHeight = 110;\r\n if (contextMenuButtons.length > 6) {\r\n maxAllowedHeight = 330;\r\n } else if (contextMenuButtons.length > 3) {\r\n maxAllowedHeight = 220;\r\n }\r\n if (!isMobile && (left > window.innerWidth - maxAllowedWidth)) {\r\n left = 'auto';\r\n right = 0\r\n }\r\n if (!isMobile && (top > window.innerHeight - maxAllowedHeight)) {\r\n let negativeMargin = 50;\r\n if (contextMenuButtons.length > 6) {\r\n negativeMargin = 250;\r\n } else if (contextMenuButtons.length > 3) {\r\n negativeMargin = 150;\r\n }\r\n top = top - negativeMargin;\r\n }\r\n this.setState({\r\n contextMenuOpen,\r\n hoveredLayer: document.hoveredLayer,\r\n contextMenuPosition: {\r\n left,\r\n right,\r\n top,\r\n }\r\n });\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false) => {\r\n this.navigationItemClickCommon(item);\r\n\r\n this.itemClick(item, ignoreLocked);\r\n\r\n const updateSideBarIds = [\"center_island_cabinet\", \"top_cabinet\"];\r\n if (updateSideBarIds.includes(item.part.partId)) {\r\n this.updateSideBar();\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n // const fabricatorSettings = this.props.fabricatorSettings;\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n // const activeNavPart = activeSubPart || activePart;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n\r\n const useWizard = false, wizardGroups = [];\r\n\r\n let showNavigationFiltersSteps = activeSubPart\r\n && this.props.activeNavigationFilter !== CABINET_WIZARD_BUTTONS[0].buttonId\r\n && this.props.activeNavigationFilter !== \"inlay_type\"\r\n && activeSubPart.canUseNavigationFilter && activeSubPart.canUseNavigationFilter() ;\r\n\r\n if (activeSubPart && activeSubPart.canUseNavigationFilterSteps\r\n && activeSubPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = false;\r\n const availableNavButtons = [ContentType.Design, ContentType.Layout, ContentType.DisplayRoom];\r\n\r\n return (\r\n
    \r\n \r\n
    this.navWrapper = node}>\r\n
    \r\n
    \r\n {this.content(useWizard, wizardGroups, useFilters, activePart, activeSubPart)}\r\n
    \r\n
    \r\n {this.navigationMenuButtons(availableNavButtons)}\r\n {showNavigationFiltersSteps ? null : (\r\n
    \r\n \r\n
    \r\n )}\r\n {/*
    */}\r\n {/*
    */}\r\n {/**/}\r\n {/*
    */}\r\n {/*
    */}\r\n
    \r\n {this.state.contextMenuOpen && this.state.contextMenuOpen.module\r\n ? \r\n : null}\r\n {this.state.contextMenuOpen && !this.state.contextMenuOpen.module\r\n ? \r\n : null}\r\n
    \r\n {showLockedView\r\n ? \r\n : null}\r\n
    \r\n )\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n visualizerTutorialStep: store.tutorialState.visualizerTutorialStep,\r\n visualizerTutorialIsOpened: store.tutorialState.visualizerTutorialIsOpened,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n toggleDesktopNavigation,\r\n setActiveNavigationNames,\r\n setModuleContextMenuType,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setVisualizerTutorialStep,\r\n showVisualizerTutorial,\r\n setNavigationLoading\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DesktopNavigation);\r\n","import React from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport MobileNavigationCommon from \"../../visComponents/navigation/mobileNavigationCommon\";\r\n\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport Z from \"../core/zIndex\";\r\n\r\nimport MobileNavigationButtons from '../../visComponents/navigation/mobile/mobileNavigationButtons';\r\nimport MobileNavigationAllWallsCheckbox from '../../visComponents/navigation/mobile/mobileNavigationAllWallsCheckbox';\r\nimport FeatureWizardSteps from \"../../visComponents/navigation/featureWizard/featureWizardSteps\";\r\n\r\nimport {changeActivePartRelatedItemIndex, setDefaultSelectionGroup} from \"../../../actions/actionFunctions\";\r\nimport {\r\n setActiveNavigationFilter,\r\n setModuleContextMenuType,\r\n setModuleContextMenuModule,\r\n setActiveNavigationFilterStepIndex, setNavigationViewType, setNavigationLoading\r\n} from \"../../../actions/navigationFunctions\";\r\n\r\nimport MobileMenuSelect from '../../visComponents/navigation/mobile/mobileMenuSelect';\r\nimport LockedView from \"../../common/lockedView\";\r\n\r\nimport Filters from \"../../visComponents/navigation/newFilters/filters\";\r\nimport BodyPanelRadio from \"../../visComponents/navigation/desktop/bodyPanelRadio\";\r\nimport ContextMenuSimple from \"./contextMenuSimple\";\r\nimport CabinetContextMenu from \"./cabinetContextMenu\";\r\nimport FilterSwitchers from \"../../visComponents/navigation/newFilters/filterSwitchers\";\r\nimport FilterSelection from \"../../visComponents/navigation/newFilters/filterSelection\";\r\n// import {CABINET_WIZARD_BUTTONS} from \"../core/constants\";\r\nimport NavigationFiltersSteps from \"../../visComponents/navigation/newFilters/navigationFiltersSteps\";\r\nimport {CABINET_GROUP, COUNTERTOP_GROUP, COUNTERTOP_WIZARD_BUTTONS} from \"../core/constants\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport CabinetSwitchers from \"./cabinetSwitchers\";\r\nimport CountertopSwitchers from \"./countertopSwitchers\";\r\nimport LookAllWallsRadioButton from \"../../look/lookNavigation/lookMain/lookAllWallsRadioButton\";\r\n\r\nclass MobileNavigation extends MobileNavigationCommon {\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.activeNavigationFilter !== this.props.activeNavigationFilter\r\n && COUNTERTOP_WIZARD_BUTTONS.some(btn => btn.buttonId === nextProps.activeNavigationFilter)) {\r\n if (this.state.parentNavigationItem && this.state.parentNavigationItem.part.partName === \"Countertop\") {\r\n const subParts = this.state.parentNavigationItem.part.subParts();\r\n let subPart = null;\r\n switch (nextProps.activeNavigationFilter) {\r\n case COUNTERTOP_WIZARD_BUTTONS[0].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[1].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[2].buttonId:\r\n subPart = subParts.find(sPart => sPart.part.partId === \"countertop\");\r\n break;\r\n case COUNTERTOP_WIZARD_BUTTONS[3].buttonId:\r\n subPart = subParts.find(sPart => sPart.part.partId === \"edge_profile\");\r\n break;\r\n case COUNTERTOP_WIZARD_BUTTONS[4].buttonId:\r\n if (!this.state.childNavigationItem\r\n || (this.state.childNavigationItem && this.state.childNavigationItem.part.partId !== \"backsplash\")) {\r\n this.triggerOpenNavigationMenu(\"Backsplash\", \"Walls\", nextProps.activeNavigationFilter);\r\n }\r\n break;\r\n }\r\n if (subPart && (!this.state.childNavigationItem\r\n || (this.state.childNavigationItem && this.state.childNavigationItem.part.partId !== subPart.part.partId))) {\r\n this.handleSubPartClick(subPart, nextProps.activeNavigationFilter)\r\n }\r\n } else if (this.state.parentNavigationItem && this.state.parentNavigationItem.part.partName === \"Walls\") {\r\n switch (nextProps.activeNavigationFilter) {\r\n case COUNTERTOP_WIZARD_BUTTONS[0].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[1].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[2].buttonId:\r\n if (!this.state.childNavigationItem\r\n || (this.state.childNavigationItem && this.state.childNavigationItem.part.partId !== \"countertop\")) {\r\n this.triggerOpenNavigationMenu(\"Countertop\", \"Countertop\", nextProps.activeNavigationFilter);\r\n }\r\n break;\r\n case COUNTERTOP_WIZARD_BUTTONS[3].buttonId:\r\n if (!this.state.childNavigationItem\r\n || (this.state.childNavigationItem && this.state.childNavigationItem.part.partId !== \"edge_profile\")) {\r\n this.triggerOpenNavigationMenu(\"Edge Profile\", \"Countertop\", nextProps.activeNavigationFilter);\r\n }\r\n break;\r\n }\r\n } else if (this.state.parentNavigationItem && this.state.parentNavigationItem.part.partName === \"CenterIsland\") {\r\n const subParts = this.state.parentNavigationItem.part.subParts();\r\n let subPart = null;\r\n switch (nextProps.activeNavigationFilter) {\r\n case COUNTERTOP_WIZARD_BUTTONS[0].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[1].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[2].buttonId:\r\n subPart = subParts.find(sPart => sPart.part.partId === \"center_island_countertop\");\r\n break;\r\n case COUNTERTOP_WIZARD_BUTTONS[3].buttonId:\r\n subPart = subParts.find(sPart => sPart.part.partId === \"center_island_edge\");\r\n break;\r\n }\r\n if (subPart && (!this.state.childNavigationItem\r\n || (this.state.childNavigationItem && this.state.childNavigationItem.part.partId !== subPart.part.partId))) {\r\n this.handleSubPartClick(subPart, nextProps.activeNavigationFilter)\r\n }\r\n }\r\n }\r\n this._componentWillReceiveProps(nextProps)\r\n }\r\n\r\n bindCanvasClick = (event) => {\r\n const layout = getCurrentLayout();\r\n // console.log(\"bindCanvasClick event\");\r\n\r\n const canvas = document.getElementById(this.props.canvasId);\r\n\r\n if (!window.touchMove && !this.state.showNavigation && !this.state.contextMenuOpen) {\r\n this.props.setHoveredLayer(event);\r\n }\r\n\r\n if (document.hoveredLayer && !window.touchMove) {\r\n // $('.canvas-text').html(`CLICK3`);\r\n const layoutType = layout.getCurrentLayoutName();\r\n\r\n let hoveredZone = Z.getMenuByHoveredLayer(layoutType, document.hoveredLayer, canvas);\r\n if (hoveredZone) {\r\n if (hoveredZone.contextMenuPartId && !this.state.showNavigation) {\r\n if (this.state.contextMenuOpen) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n });\r\n document.removeEventListener('click', this.handleContextMenuBlur);\r\n } else {\r\n let contextMenuOpen = \"\";\r\n\r\n const receiveBackSplashes = () => {\r\n const wallsParent = layout.parts[\"Walls\"];\r\n const backsplashSubPart = wallsParent.subParts().find(subPart => subPart.part.partId === \"backsplash\");\r\n this.checkIfAllFeaturesReceived(backsplashSubPart);\r\n };\r\n\r\n switch (hoveredZone.contextMenuPartId) {\r\n case \"countertop_group_custom\":\r\n contextMenuOpen = \"Countertop\";\r\n break;\r\n case \"right_wall_custom\":\r\n contextMenuOpen = \"right_wall_custom\";\r\n break;\r\n case \"left_wall_custom\":\r\n contextMenuOpen = \"left_wall_custom\";\r\n break;\r\n case \"backsplash_custom_left\": {\r\n receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_left\";\r\n break;\r\n }\r\n case \"backsplash_custom_right\": {\r\n receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_right\";\r\n break;\r\n }\r\n case \"backsplash_custom\": {\r\n receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom\";\r\n break;\r\n }\r\n case \"center_island_custom\":\r\n contextMenuOpen = \"Center Island\";\r\n break;\r\n default:\r\n break;\r\n }\r\n this.setState({\r\n contextMenuOpen: contextMenuOpen || hoveredZone,\r\n hoveredLayer: document.hoveredLayer\r\n }, () => {\r\n if (contextMenuOpen) {\r\n setTimeout(() => {\r\n document.addEventListener('click', this.handleContextMenuBlur);\r\n }, 0)\r\n }\r\n });\r\n }\r\n return false;\r\n } else if (this.state.contentType === 0) {\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass((hoveredZone.child || hoveredZone.parent || hoveredZone).toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n this.openMobileMenu();\r\n }\r\n\r\n hoveredZone.child\r\n ? this.triggerOpenNavigationMenu(hoveredZone.child, hoveredZone.parent, false)\r\n : this.triggerOpenNavigationMenu(hoveredZone)\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false) => {\r\n\r\n if (window.location.port === '9007' || document.kvConfig.kioskMode) {\r\n console.log('item', item);\r\n }\r\n this.itemClick(item, ignoreLocked);\r\n\r\n this.props.setActiveFeature(item.part);\r\n\r\n const canvasClass = this.state.childNavigationItem\r\n ? this.state.parentNavigationItem.text + '-' + this.state.childNavigationItem.text\r\n : this.state.parentNavigationItem.text;\r\n\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass(canvasClass.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n if (item.part.partId === \"top_cabinet\" && !item.part.metaData[\"Module\"]) {\r\n this.props.setModuleContextMenuModule(null)\r\n }\r\n };\r\n\r\n handleSubPartClick = (subNavigationItem, activeNavigationFilter = null) => { // sidebar list item click\r\n const subItemPart = subNavigationItem.part;\r\n const childNavigationItemPartId = subItemPart.partId;\r\n subItemPart.getParent().handleSubPartClick(subItemPart);\r\n this.setState({\r\n childNavigationItem: subNavigationItem,\r\n showFilterSelection: subItemPart.allFeaturesReceived, // show filters only if subItemPart has all features\r\n showerWallWizardGroupsSelected: false,\r\n searchText: \"\"\r\n }, () => {\r\n this.scrollContentToTop();\r\n this.rememberWallsSelection();\r\n this.checkIfAllFeaturesReceived(subNavigationItem, \"childNavigationItem\");\r\n });\r\n /*set new materials page subIndex*/\r\n this.setActivePartRelatedItemIndex(subNavigationItem);\r\n // console.log('subItemPart', subItemPart);\r\n if (!window.canvasIsDragging) {\r\n const canvasClass = this.state.parentNavigationItem.text + '-' + subNavigationItem.text\r\n .toLowerCase().replace(/ /g, \"-\");\r\n this.props.setCanvasClass(canvasClass);\r\n }\r\n this.setNewActiveFeature(subNavigationItem);\r\n\r\n this.setNavigationFilterIfTheChildWasChanged(childNavigationItemPartId, activeNavigationFilter);\r\n\r\n };\r\n\r\n backsplashSelectClick = () => {\r\n this.props.refreshCB(); // update canvas\r\n this.reRenderComponent(); // update nav items\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n const activeNavPart = activeSubPart || activePart;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n const allFeaturesReceived = activeNavPart && activeNavPart.allFeaturesReceived;\r\n\r\n // console.log('activePart', activePart);\r\n // console.log('activeSubPart', activeSubPart);\r\n // console.log('activePart.subTypes()', activePart && activePart.subTypes());\r\n // console.log('this.state.childNavigationItemv1111', this.state.childNavigationItem);\r\n\r\n let useWizard = false;\r\n let wizardGroups = [];\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n && this.state.contentType === ContentType.Design && activeSubPart && activeSubPart.canUseWizard && activeSubPart.allFeaturesReceived) {\r\n useWizard = true;\r\n wizardGroups = this.state[this.getWizardGroupsByPartId(this.state.childNavigationItem.part.partId)];\r\n }\r\n\r\n const features = this.getFeatures(layout);\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = (activePart && activePart.partId === \"kitchen_floor\" && activePart.allFeaturesReceived)\r\n || (activeSubPart && (this.isWallItem(activeSubPart) || activeSubPart.partId === \"accent_wall\"\r\n || activeSubPart.partId === \"shower_interior_wall_accent\") && activeSubPart.allFeaturesReceived);\r\n\r\n const filterSelectionHasValues = activeNavPart && FilterSelection.getAvailableFilterValues(\r\n this.props.filterGroups, \"Material\", activeNavPart, this.props.fabricatorData\r\n ).length;\r\n\r\n const itemIsSelected = (!this.props.fabricatorSettings.leadCapture\r\n || (activeSubPart && activeSubPart.activeFeature && activeSubPart.firstClick[this.props.activeQuoteIndex] && activeSubPart.placeholderChanged));\r\n\r\n const useKVWizard = false;\r\n //TODO change it when BE is ready\r\n\r\n const showNavigationFilters = useKVWizard &&activeNavPart\r\n // && this.props.activeNavigationFilter !== CABINET_WIZARD_BUTTONS[0].buttonId\r\n && activeNavPart.canUseNavigationFilter && activeNavPart.canUseNavigationFilter();\r\n\r\n let showNavigationFiltersSteps = false;\r\n if (useKVWizard && activeNavPart && activeNavPart.canUseNavigationFilterSteps\r\n && activeNavPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n const isCabinet = activeSubPart && CABINET_GROUP.includes(activeSubPart.partId);\r\n const isCountertop = activeSubPart && COUNTERTOP_GROUP.includes(activeSubPart.partId);\r\n\r\n return (\r\n
    \r\n
    \r\n {/*
    \r\n
    \r\n {this.state.contextMenuOpen && this.state.contextMenuOpen.module\r\n ? \r\n : null}\r\n {this.state.contextMenuOpen && !this.state.contextMenuOpen.module\r\n ? \r\n : null}\r\n {showLockedView\r\n ? \r\n : null}\r\n \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n fabricatorData: store.fabricatorState,\r\n selectedFilters: store.filterState.selectedFilters,\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n userPopupOpened: store.userState.userPopupOpened,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n newLayoutType: store.sqftState.newLayoutType,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n setModuleContextMenuType,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setModuleContextMenuModule,\r\n setNavigationLoading\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(MobileNavigation)\r\n);\r\n","import {Part} from \"../part\";\r\nimport {wallsThumbnail} from \"../../../bvComponent/core/assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\n\r\nimport Attachment from \"../subparts/globals/attachment\";\r\nimport Decor from \"../subparts/globals/decor\";\r\nimport {DECORS_MAX} from \"../constants\";\r\n\r\nexport default class Globals extends Part {\r\n static id = \"Globals\";\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = \"Globals\";\r\n this.partThumbnail = wallsThumbnail;\r\n\r\n // related items\r\n this.decor1 = null; // can be up to 10\r\n }\r\n\r\n load(dbFeature) {\r\n let\r\n relatedItemName = \"\",\r\n decorCount = 0,\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Decor\":\r\n case \"Decore\": {\r\n for (let i = 1; i <= DECORS_MAX; i++) {\r\n const currentDecorFeatureGroup = this[\"decor\" + i];\r\n if (!currentDecorFeatureGroup // we skipped all decors, but didn't find the same\r\n || dbFeature.sharedFeatureName === this[\"decor\" + i].decorName // decors are matching by name\r\n || (dbFeature.metaData[\"MountPosition\"] && this[\"decor\" + i].features.some(feature => { // decors are matching by name\r\n return feature.metaData[\"MountPosition\"] && feature.matchesMetaForCondition(\"MountPosition\", dbFeature.metaData[\"MountPosition\"])\r\n }))) {\r\n relatedItemName = \"decor\" + i;\r\n decorCount = i;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case \"Attachment\": {\r\n relatedItemName = \"attachment\";\r\n RelatedItemClass = Attachment;\r\n break;\r\n }\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n if (dbFeature.groupName === \"Decor\" || dbFeature.groupName === \"Decore\") {\r\n this[relatedItemName] = new Decor(true, decorCount, dbFeature);\r\n this[relatedItemName].decorName = dbFeature.sharedFeatureName;\r\n } else {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n }\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport isEqual from \"lodash/isEqual\";\r\n\r\nexport default class Attachment extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"attachment\";\r\n this.partName = \"Attachment\";\r\n this.hasAdditionalParts = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Attachment());\r\n }\r\n\r\n checkIfFeaturePartIsMatching() {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n\r\n setActiveFeatureParts() {\r\n const layout = this.getParent().layout;\r\n const activeFeatures = layout.getActiveFeatures(true, true);\r\n // console.log(\"activeFeatures\", activeFeatures);\r\n const matchingFeatures = this.features.filter(feature => {\r\n if (!feature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())) {\r\n return false\r\n }\r\n return feature.metaData[\"MatchingFeature\"] && activeFeatures.some(cartItem => {\r\n if (cartItem.partId === this.partId) { // remove attachment active feature\r\n return false\r\n }\r\n return !cartItem.featureGroup.disabled && cartItem.cartFeature.metaData[\"MatchingFeature\"]\r\n && isEqual(feature.metaData[\"MatchingFeature\"], cartItem.cartFeature.metaData[\"MatchingFeature\"])\r\n && isEqual(feature.metaData[\"Side\"], cartItem.cartFeature.metaData[\"Side\"])\r\n })\r\n })\r\n // console.log(\"matchingFeatures\", matchingFeatures);\r\n return matchingFeatures;\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n\r\n const getZIndex = (feature, partId = null) => {\r\n return feature.metaData[\"ZSorting\"] ? feature.metaData[\"ZSorting\"] * 1000 : zIndexes[partId || this.partId];\r\n }\r\n\r\n if (this.hasAdditionalParts && this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.layer.zIndex = getZIndex(activeFeaturePart, this.additionalPartPartId) - 1;\r\n });\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport CenterIsland from \"../../parts/centerIsland\";\r\n\r\nexport default class Decor extends IntermediatePart {\r\n constructor(isChild, decorCount, dbFeature) {\r\n super(isChild);\r\n this.decorCount = decorCount;\r\n this.partId = \"decor_\" + decorCount;\r\n this.partName = \"Decor \" + decorCount;\r\n if (dbFeature && dbFeature.metaData && dbFeature.metaData[\"CIShape\"]) {\r\n this.isCenterIslandDecor = true;\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Decor(false, this.decorCount));\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n if (this.isCenterIslandDecor) {\r\n const centerIslandParent = this.getParent().layout.parts[CenterIsland.id];\r\n if (centerIslandParent && centerIslandParent.cabinet) {\r\n if (centerIslandParent.cabinet.disabled) {\r\n conditions.push({\r\n propName: \"CIShape\",\r\n propValue: \"noCI\"\r\n })\r\n } else if (centerIslandParent.cabinet.activeFeature && centerIslandParent.cabinet.activeFeature.metaData[\"CIShape\"]) {\r\n conditions.push({\r\n propName: \"CIShape\",\r\n propValue: centerIslandParent.cabinet.activeFeature.metaData[\"CIShape\"][0]\r\n })\r\n }\r\n }\r\n }\r\n // console.log(\"conditions\", conditions);\r\n return conditions\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Cabinet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.dbName = 'Center Island Cabinet';\r\n this.partId = 'center_island_cabinet';\r\n this.partName = 'Cabinet';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_cabinet\";\r\n this.canBeDisabled = true;\r\n this.allWallsCanBeApplied = true;\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n centerIslandParent.relatedItems.forEach(featureGroup => {\r\n featureGroup.disabled = this.disabled;\r\n })\r\n const ponyWall = centerIslandParent.layout && centerIslandParent.layout.parts && centerIslandParent.layout.parts.Walls\r\n ? centerIslandParent.layout.parts.Walls.ponyWall\r\n : null;\r\n if (ponyWall) {\r\n ponyWall.disabled = this.disabled;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../constants\";\r\n\r\nexport default class Faucet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_faucet';\r\n this.partName = 'Faucet';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_faucet\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n // dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n if (dbFeature.s3Bindings && dbFeature.metaData && (!dbFeature.metaData[\"Placement\"]\r\n || !dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island))) {\r\n return false\r\n }\r\n return super.load_(dbFeature, new Faucet());\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n const relatedSink = centerIslandParent.sink;\r\n if (relatedSink) {\r\n relatedSink.disabled = this.disabled;\r\n }\r\n const stovetop = centerIslandParent.stovetop;\r\n if (stovetop && !this.disabled && !stovetop.disabled) {\r\n stovetop.disabled = true;\r\n }\r\n const range = centerIslandParent.range;\r\n if (range && !this.disabled && !range.disabled) {\r\n range.disabled = true;\r\n }\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const sink = this.getParent().sink;\r\n // if (sink && sink.activeFeature) {\r\n // return [{\r\n // propName: \"FaucetPlacement\",\r\n // propValue: sink.activeFeature.metaData[\"FaucetPlacement\"] || \"Moved\"\r\n // }]\r\n // }\r\n // return [];\r\n // }\r\n\r\n tryToSetTheSameFeature(filteredFeatures = [], partName = \"\") {\r\n if (this.activeFeature && this.activeFeature.partName) {\r\n const splittedName = (partName || this.activeFeature.partName).split(\" M\")[0];\r\n this.activeFeature = filteredFeatures.find(feature => {\r\n if (feature.partName) {\r\n const splittedCurrentName = feature.partName.split(\" M\")[0];\r\n return splittedCurrentName === splittedName\r\n }\r\n return false\r\n });\r\n // console.log('AF', filteredFeatures, this.activeFeature);\r\n if (this.activeFeature) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../constants\";\r\n\r\nexport default class Sink extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_sink';\r\n this.partName = 'Sink';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_sink\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n // dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n if (dbFeature.s3Bindings && dbFeature.metaData && (!dbFeature.metaData[\"Placement\"]\r\n || !dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island))) {\r\n return false\r\n }\r\n return super.load_(dbFeature, new Sink());\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n const relatedFaucet = centerIslandParent.faucet;\r\n if (relatedFaucet) {\r\n relatedFaucet.disabled = this.disabled;\r\n }\r\n const stovetop = centerIslandParent.stovetop;\r\n if (stovetop && !this.disabled && !stovetop.disabled) {\r\n stovetop.disabled = true;\r\n }\r\n const range = centerIslandParent.range;\r\n if (range && !this.disabled && !range.disabled) {\r\n range.disabled = true;\r\n }\r\n }\r\n}\r\n","import EdgeCommon from \"../edgeCommon\";\r\n\r\nexport default class Edge extends EdgeCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_edge';\r\n this.partName = 'Edge';\r\n this.dbName = 'Edge Profile';\r\n // this.isStoneFeature = true;\r\n this.customClassName = \"edge\";\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_edge\";\r\n this.hasNoVisualizerLayers = true;\r\n }\r\n\r\n}\r\n","import CountertopCommon from \"../countertopCommon\";\r\nimport {LayoutAbbreviations} from \"../../constants\";\r\n\r\nexport default class Countertop extends CountertopCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'center_island_countertop';\r\n this.dbName = 'Center Island Countertop';\r\n this.partName = 'Island Countertop';\r\n this.homePageTitle = 'Center Island Countertop';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_countertop\";\r\n this.isStoneFeature = true;\r\n this.toggleSwitchedOffByUser = false; // is used for returning toggle back when feature is found\r\n this.hasAdditionalParts = false;\r\n this.allWallsCanBeApplied = true;\r\n if (isChild) {\r\n this.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n this.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n if (!this.disabled && centerIslandParent.cabinet.disabled) {\r\n centerIslandParent.cabinet.disabled = false;\r\n centerIslandParent.cabinet.disabledClick();\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n this.fixEdgeMeta(dbFeature);\r\n if (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].includes(\"6\")) {\r\n if (!dbFeature.metaData[\"MountType\"]) {\r\n dbFeature.metaData[\"MountType\"] = [\"0\"]\r\n }\r\n }\r\n if (dbFeature.metaData[\"Part\"]) {\r\n const partNumber = (dbFeature.metaData[\"Part\"] && +dbFeature.metaData[\"Part\"][0]) === 1 ? 1 : 2;\r\n return super.load_(dbFeature, new Countertop(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n return super.load_(dbFeature, new Countertop())\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinet = this.getParent().cabinet;\r\n if (cabinet && (cabinet.disabled || !cabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const centerIslandParent = this.getParent();\r\n if (centerIslandParent.layout.type === 6) {\r\n if (centerIslandParent.sink && centerIslandParent.sink.activeFeature) {\r\n conditions.push({\r\n propName: \"MountType\",\r\n propValue: centerIslandParent.sink.activeFeature.metaData && Array.isArray(centerIslandParent.sink.activeFeature.metaData[\"MountType\"])\r\n && centerIslandParent.sink.activeFeature.metaData[\"MountType\"].includes(\"ST\") ? \"ST\" : \"0\"\r\n })\r\n }\r\n }\r\n // console.log(\"conditions\", conditions);\r\n return conditions;\r\n }\r\n\r\n canUseNavigationFilterSteps() {\r\n const parent = this.getParent();\r\n return parent.edge // display filters only if edges exist\r\n }\r\n\r\n canUseNavigationFilter() {\r\n return true //TODO[Artem] add here features filters check\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class IslandHood extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_hood';\r\n this.partName = 'Island Hood';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_hood\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new IslandHood());\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n if (!this.disabled && centerIslandParent.cabinet) {\r\n centerIslandParent.cabinet.disabled = false;\r\n centerIslandParent.cabinet.disabledClick();\r\n } else {\r\n const stovetop = centerIslandParent.stovetop;\r\n if (stovetop && !this.disabled && stovetop.disabled) {\r\n stovetop.disabled = false;\r\n }\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Stovetop extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_stovetop';\r\n this.partName = 'Stovetop';\r\n this.dbName = 'Island Stove'; // temporarily\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_stovetop\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Stovetop());\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n if (!this.disabled && centerIslandParent.cabinet) {\r\n centerIslandParent.cabinet.disabled = false;\r\n centerIslandParent.cabinet.disabledClick();\r\n } else {\r\n const islandHood = centerIslandParent.islandHood;\r\n if (islandHood) {\r\n islandHood.disabled = this.disabled;\r\n }\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Pendants extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_pendants';\r\n this.partName = 'Pendants';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_pendants\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Pendants());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class RightIsland extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_right_island';\r\n this.partName = 'Right Island';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_right_island\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new RightIsland());\r\n }\r\n}\r\n","import snakeCase from \"lodash/snakeCase\";\r\nimport {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport NonVisualizerSubPart from \"../subparts/nonVisualizerSubPart\";\r\n\r\nconst alreadyExistingGroups = [\"Edge Profile\", \"Faucet\", \"Sink\"];\r\n\r\nexport default class Other extends Part {\r\n static id = 'Other';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Other';\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n // console.log(\"load other\", dbFeature.groupName);\r\n if (alreadyExistingGroups.includes(dbFeature.groupName)) { // they should be loaded in their groups!\r\n return false\r\n }\r\n const partId = snakeCase(dbFeature.groupName);\r\n let relatedItem = this.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, dbFeature.groupName);\r\n this.relatedItems.push(relatedItem);\r\n }\r\n relatedItem.getParent = () => this;\r\n relatedItem.load(dbFeature);\r\n return true\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport BackgroundBG from \"../subparts/backgrounds/BackgroundBG\";\r\n\r\nexport default class Background extends Part {\r\n static id = 'Background';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Background';\r\n this.categoryEnabled = false;\r\n this.relatedGroupNames = [\"BG\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"BG\":\r\n relatedItemName = \"backgroundBG\";\r\n RelatedItemClass = BackgroundBG;\r\n break;\r\n default:\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class BackgroundBG extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'background_bg';\r\n this.partName = 'Background BG';\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BackgroundBG());\r\n }\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {floorThumbnail} from \"../../../kvComponent/core/assets\";\r\n\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\nimport CenterIsland from \"./centerIsland\";\r\nimport {METADATA} from \"../constants\";\r\n\r\nexport default class Floor extends Part {\r\n static id = 'Floor';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.partId = 'parent_floor';\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.kitchen.kitchen_floor\";\r\n this.partThumbnail = floorThumbnail;\r\n this.relatedGroupNames = [\"Floor\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Flor\":\r\n case \"Floor\":\r\n relatedItemName = \"floorBody\";\r\n RelatedItemClass = FloorBody;\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n}\r\n\r\nclass FloorBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'kitchen_floor';\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.kitchen.kitchen_floor\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"CIShape\"]) {\r\n // if floor has no metadata CIShape and island has no metadata CIShape - just show without the meta\r\n dbFeature.metaData[\"CIShape\"] = METADATA.FloorWithIsland\r\n }\r\n return super.load_(dbFeature, new FloorBody());\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const layout = this.getParent().layout;\r\n const centerIslandParent = layout.parts[CenterIsland.id];\r\n if (centerIslandParent && centerIslandParent.cabinet && (layout.type !== 4)) {\r\n if (centerIslandParent.cabinet.disabled) {\r\n conditions.push({\r\n propName: \"CIShape\",\r\n propValue: \"noCI\"\r\n })\r\n } else if (centerIslandParent.cabinet.activeFeature && centerIslandParent.cabinet.activeFeature.metaData[\"CIShape\"]) {\r\n conditions.push({\r\n propName: \"CIShape\",\r\n propValue: centerIslandParent.cabinet.activeFeature.metaData[\"CIShape\"][0]\r\n })\r\n } else {\r\n conditions.push({\r\n propName: \"CIShape\",\r\n propValue: METADATA.FloorWithIsland\r\n })\r\n }\r\n }\r\n // console.log(\"floor conditions\", conditions);\r\n return conditions\r\n }\r\n\r\n}\r\n\r\n\r\n","import {Part} from \"../part\";\r\nimport {wallsThumbnail} from \"../assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport store from \"../../../../store\";\r\nimport Backsplash from \"../subparts/walls/backsplash\";\r\nimport LeftWall from \"../subparts/walls/leftWall\";\r\nimport RightWall from \"../subparts/walls/rightWall\";\r\nimport CenterWall from \"../subparts/walls/centerWall\";\r\nimport FrontWall from \"../subparts/walls/frontWall\";\r\nimport PonyWall from \"../subparts/walls/ponyWall\";\r\nimport SplitWall from \"../subparts/walls/splitWall\";\r\n\r\nexport default class Walls extends Part {\r\n static id = 'Walls';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Walls';\r\n this.partThumbnail = wallsThumbnail;\r\n this.translateId = \"visualizer.kitchen.walls\";\r\n\r\n // related items\r\n this.leftWall = null;\r\n this.rightWall = null;\r\n this.centerWall = null;\r\n this.frontWall = null;\r\n this.ceiling = null;\r\n this.backsplash = null;\r\n this.splitWall = null;\r\n this.relatedGroupNames = [\"Backsplash\", \"Left Wall\", \"Right Wall\", \"Center Wall\", \"Front Wall\", \"Pony Wall\",\r\n \"Split Wall\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Backsplash\":\r\n case \"backsplash\":\r\n relatedItemName = \"backsplash\";\r\n RelatedItemClass = Backsplash;\r\n break;\r\n case \"Left Wall\":\r\n relatedItemName = \"leftWall\";\r\n RelatedItemClass = LeftWall;\r\n break;\r\n case \"Right Wall\":\r\n relatedItemName = \"rightWall\";\r\n RelatedItemClass = RightWall;\r\n break;\r\n case \"Center Wall\":\r\n relatedItemName = \"centerWall\";\r\n RelatedItemClass = CenterWall;\r\n break;\r\n case \"Front Wall\":\r\n relatedItemName = \"frontWall\";\r\n RelatedItemClass = FrontWall;\r\n break;\r\n case \"Pony Wall\":\r\n relatedItemName = \"ponyWall\";\r\n RelatedItemClass = PonyWall;\r\n break;\r\n case \"Split Wall\":\r\n relatedItemName = \"splitWall\";\r\n RelatedItemClass = SplitWall;\r\n break;\r\n // case \"Shower Shadow\":\r\n // if (\r\n // dbFeature.displayName.includes(\"Shower Shadow - Divider Wall\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - EX L\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - EX R\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - Popout\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - Pony Wall\")\r\n // ) {\r\n // relatedItemName = \"shadows\";\r\n // RelatedItemClass = Shadow;\r\n // }\r\n // break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts(withHidden = true) {\r\n return this.relatedItems\r\n .filter(item => this.filterRelatedItem(item, withHidden))\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n recoverPrevioslySelected(activeRelatedPart) {\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n this.relatedItems.forEach(relatedItem => {\r\n if (relatedItem.partId !== activeRelatedPart.partId && relatedItem.activeFeatureBeforeAllWalls) {\r\n if (relatedItem.activeFeatureBeforeAllWalls === \"placeholder\") {\r\n relatedItem.placeholderChanged = false;\r\n relatedItem.firstClick[activeQuoteIndex] = false;\r\n } else if (!relatedItem.selectedByUser) {\r\n relatedItem.activeFeatureBeforeAllWalls.clickFromAllWalls();\r\n }\r\n }\r\n });\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\nimport {LayoutAbbreviations} from \"../../constants\";\r\nimport {IS_LIXIL_UI} from \"../../../../../config\";\r\n\r\nexport default class Backsplash extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'backsplash';\r\n this.partName = 'Backsplash';\r\n this.translateId = \"visualizer.kitchen.walls.backsplash\";\r\n this.isStoneFeature = true;\r\n this.allWallsCanBeApplied = true;\r\n if (isChild) {\r\n this.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n this.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Backsplash());\r\n }\r\n\r\n alreadyAddedIndex(featureList, name) {\r\n return featureList.findIndex(feature => feature.getSplittedFeatureName() === name)\r\n }\r\n\r\n getBacksplashNavItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let availableFeatures = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n let featuresToDisplay = [];\r\n const activeType = this.getFeatureBacksplashType(this.activeFeature);\r\n let cabinetLayoutMetaData = null;\r\n if (this.activeFeature && this.featureIsFullWall(this.activeFeature)) { // full backsplashes should be filtered by CabinetLayout metaData\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n cabinetLayoutMetaData = cabinetParent && cabinetParent.topCabinet && cabinetParent.topCabinet.activeFeature\r\n && cabinetParent.topCabinet.activeFeature.metaData && cabinetParent.topCabinet.activeFeature.metaData[\"CabinetLayout\"];\r\n }\r\n for (let feature of availableFeatures) {\r\n const currentName = feature.getSplittedFeatureName();\r\n if (feature.notAvailableInVisualizer) {\r\n continue;\r\n }\r\n const alreadyAddedFeatureIndex = this.alreadyAddedIndex(featuresToDisplay, currentName);\r\n const matchByType = !activeType || (this.getFeatureBacksplashType(feature) === activeType);\r\n const matchByCabLayout = !cabinetLayoutMetaData || (feature.metaData && feature.metaData[\"CabinetLayout\"]\r\n && feature.metaData[\"CabinetLayout\"].includes(cabinetLayoutMetaData[0]));\r\n\r\n if (IS_LIXIL_UI) {\r\n if (alreadyAddedFeatureIndex > -1) {\r\n if (matchByType && matchByCabLayout) {\r\n featuresToDisplay.splice(alreadyAddedFeatureIndex, 1, feature);\r\n }\r\n } else {\r\n featuresToDisplay.push(feature);\r\n }\r\n } else if ((alreadyAddedFeatureIndex === -1) && matchByType && matchByCabLayout) {\r\n featuresToDisplay.push(feature);\r\n }\r\n }\r\n return featuresToDisplay\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const featuresToDisplay = this.getBacksplashNavItems(filters, searchText);\r\n return this.returnUniqueNavFeatures(featuresToDisplay);\r\n }\r\n\r\n getFeatureByBacksplashType(neededType, featureName = \"\", sameNameOnly = false) {\r\n const conditions = this.getArrayOfConditions();\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(conditions);\r\n const matchingFeatures = featuresToDisplay.filter(feature => this.getFeatureBacksplashType(feature) === neededType);\r\n\r\n let currentPartName = featureName;\r\n if (!currentPartName && this.activeFeature) {\r\n currentPartName = this.activeFeature.getSplittedFeatureName();\r\n }\r\n\r\n const matchByName = matchingFeatures.filter(feature => {\r\n return feature.getSplittedFeatureName() === currentPartName\r\n });\r\n if (matchByName.length > 1) {\r\n const cabinetLayoutMetaData = this.getTopCabinetCabinetLayoutMetadata();\r\n const sameCabinetType = matchByName.find(feature => {\r\n if (this.featureIsFullWall(feature)) {\r\n return feature.matchesMetaForArrayOfConditions([\r\n {\r\n propName: 'CabinetLayout',\r\n propValue: cabinetLayoutMetaData\r\n }\r\n ])\r\n }\r\n });\r\n return sameCabinetType || matchByName[0];\r\n }\r\n if (sameNameOnly) {\r\n return matchByName[0]\r\n }\r\n return matchByName[0] || matchingFeatures[0];\r\n }\r\n\r\n featureIsFullWall = (feature) => {\r\n return this.getFeatureBacksplashType(feature) === \"Full\"\r\n }\r\n\r\n getFeatureBacksplashType = (feature) => {\r\n return feature && Array.isArray(feature.metaData[\"BacksplashType\"]) ? feature.metaData[\"BacksplashType\"][0] : null\r\n }\r\n\r\n getCurrentActiveFeatureType() {\r\n return this.getFeatureBacksplashType(this.activeFeature)\r\n }\r\n\r\n // setFeatureByName = async () => {\r\n // window.requestInProcess = true;\r\n // loaderEnable();\r\n // const splittedName = this.activeFeature.getSplittedFeatureName();\r\n // await Navigation.searchFeaturesByName(this, splittedName);\r\n // const neededFeature = this.findFeatureByPartName(splittedName, true);\r\n // if (neededFeature) {\r\n // this.activeFeature = neededFeature;\r\n // }\r\n // window.requestInProcess = false;\r\n // loaderDisable();\r\n // $(window).trigger(ActionTypes.CHANGE_LAYOUT); // update canvas\r\n // };\r\n\r\n getTopCabinetCabinetLayoutMetadata() {\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n return cabinetParent && cabinetParent.topCabinet && cabinetParent.topCabinet.activeFeature\r\n && cabinetParent.topCabinet.activeFeature.metaData && cabinetParent.topCabinet.activeFeature.metaData[\"CabinetLayout\"];\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class LeftWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'left_wall';\r\n this.partName = 'Left Wall';\r\n this.translateId = \"visualizer.kitchen.walls.left_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new LeftWall());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class RightWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'right_wall';\r\n this.partName = 'Right Wall';\r\n this.translateId = \"visualizer.kitchen.walls.right_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new RightWall());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class CenterWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_wall';\r\n this.partName = 'Center Wall';\r\n this.translateId = \"visualizer.bathroom.walls.center_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new CenterWall());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class FrontWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'front_wall';\r\n this.partName = 'Front Wall';\r\n this.translateId = \"visualizer.bathroom.walls.front_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new FrontWall());\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class PonyWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'pony_wall';\r\n this.visible = true;\r\n this.partName = 'Pony Wall';\r\n this.translateId = \"visualizer.bathroom.walls.pony_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData[\"Part\"]) {\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return this.load_(dbFeature, new this.constructor(false, partNumber), true, partNumber === 0 ? 'features' : 'featuresParts');\r\n }\r\n return this.load_(dbFeature, new this.constructor());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class SplitWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'split_wall';\r\n this.partName = 'Split Wall';\r\n this.translateId = \"visualizer.bathroom.walls.split_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new SplitWall());\r\n }\r\n}\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport classNames from 'classnames';\r\nimport $ from 'jquery';\r\n\r\nimport {\r\n toggleDesktopNavigation,\r\n setActiveNavigationNames,\r\n setModuleContextMenuType,\r\n setActiveNavigationFilter, setActiveNavigationFilterStepIndex, setNavigationViewType, setNavigationLoading\r\n} from \"../../../actions/navigationFunctions\";\r\nimport {setDefaultSelectionGroup, changeActivePartRelatedItemIndex} from \"../../../actions/actionFunctions\";\r\nimport DesktopNavigationCommon from \"../../visComponents/navigation/desktopNavigationCommon\";\r\nimport Z from \"../core/zIndex\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nimport LockedView from \"../../common/lockedView\";\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport ContextMenuSimple from \"./contextMenuSimple\";\r\n// import CabinetContextMenu from \"./cabinetContextMenu\";\r\nimport MobileMenuSelect from \"../../visComponents/navigation/mobile/mobileMenuSelect\";\r\nimport {setVisualizerTutorialStep, showVisualizerTutorial} from \"../../../actions/tutorialFunctions\";\r\nimport CenterIsland from \"../core/parts/centerIsland\";\r\n\r\nclass DesktopNavigation extends DesktopNavigationCommon {\r\n\r\n bindCanvasClick = (event) => {\r\n const layout = getCurrentLayout();\r\n // const canvas = document.getElementById(this.props.canvasId);\r\n this.props.setHoveredLayer(event);\r\n\r\n if (document.hoveredLayer) {\r\n\r\n const layoutType = layout.getCurrentLayoutName();\r\n\r\n const hoveredZone = Z.getMenuByHoveredLayer(layoutType, document.hoveredLayer);\r\n\r\n // console.log('hoveredZone', hoveredZone);\r\n\r\n if (hoveredZone) {\r\n if (hoveredZone.contextMenuPartId && !this.state.showNavigation) {\r\n if (this.state.contextMenuOpen) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n });\r\n } else {\r\n this.openContextMenu(hoveredZone, event);\r\n }\r\n return false;\r\n } else if (this.state.contentType === 0) {\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.setNewActiveFeature();\r\n this.menuOpened();\r\n setTimeout(() => {\r\n $(document).on('click', this.handleWrapperBlur);\r\n }, 0)\r\n });\r\n }\r\n\r\n hoveredZone.child\r\n ? this.triggerOpenNavigationMenu(hoveredZone.child, hoveredZone.parent)\r\n : this.triggerOpenNavigationMenu(hoveredZone)\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n openContextMenu = (contextMenuOpen, event) => {\r\n let contextMenuButtons = [];\r\n if (contextMenuOpen.contextMenuPartId === \"top_cabinet\") {\r\n // const hoveredParent = this.props.designNavigationItems.find(navItem => {\r\n // return navItem.text === \"Cabinet\"\r\n // });\r\n // if (hoveredParent) {\r\n //\r\n // }\r\n contextMenuButtons = [1, 2, 3, 4, 5]\r\n }\r\n // const receiveBackSplashes = () => {\r\n // const layout = getCurrentLayout();\r\n // const wallsParent = layout.parts[\"Walls\"];\r\n // const backsplashSubPart = wallsParent.subParts().find(subPart => subPart.part.partId === \"backsplash\");\r\n // this.checkIfAllFeaturesReceived(backsplashSubPart);\r\n // };\r\n switch (contextMenuOpen.contextMenuPartId) {\r\n case \"countertop_group_custom\":\r\n contextMenuOpen = \"Countertop\";\r\n break;\r\n case \"right_wall_custom\":\r\n contextMenuOpen = \"right_wall_custom\";\r\n break;\r\n case \"left_wall_custom\":\r\n contextMenuOpen = \"left_wall_custom\";\r\n break;\r\n case \"backsplash_custom_left\": {\r\n // receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_left\";\r\n break;\r\n }\r\n case \"backsplash_custom_right\": {\r\n // receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_right\";\r\n break;\r\n }\r\n case \"backsplash_custom\": {\r\n // receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom\";\r\n break;\r\n }\r\n case \"center_island_custom\":\r\n contextMenuOpen = CenterIsland.id;\r\n break;\r\n default:\r\n break;\r\n }\r\n const isMobile = $(window).width() < 991;\r\n\r\n let left = isMobile ? '50%' : event.clientX - 50;\r\n let top = isMobile ? '50%' : event.clientY - 50;\r\n let right = 'auto';\r\n\r\n const maxAllowedWidth = contextMenuButtons.length > 2 ? 300 : 210;\r\n\r\n let maxAllowedHeight = 110;\r\n if (contextMenuButtons.length > 6) {\r\n maxAllowedHeight = 330;\r\n } else if (contextMenuButtons.length > 3) {\r\n maxAllowedHeight = 220;\r\n }\r\n if (!isMobile && (left > window.innerWidth - maxAllowedWidth)) {\r\n left = 'auto';\r\n right = 0\r\n }\r\n if (!isMobile && (top > window.innerHeight - maxAllowedHeight)) {\r\n let negativeMargin = 50;\r\n if (contextMenuButtons.length > 6) {\r\n negativeMargin = 250;\r\n } else if (contextMenuButtons.length > 3) {\r\n negativeMargin = 150;\r\n }\r\n top = top - negativeMargin;\r\n }\r\n this.setState({\r\n contextMenuOpen,\r\n hoveredLayer: document.hoveredLayer,\r\n contextMenuPosition: {\r\n left,\r\n right,\r\n top,\r\n }\r\n });\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false) => {\r\n this.navigationItemClickCommon(item);\r\n this.itemClick(item, ignoreLocked);\r\n\r\n const updateSideBarIds = [\"center_island_cabinet\", \"top_cabinet\"];\r\n if (updateSideBarIds.includes(item.part.partId)) {\r\n this.updateSideBar();\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n // const fabricatorSettings = this.props.fabricatorSettings;\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n // const activeNavPart = activeSubPart || activePart;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n\r\n const useWizard = false, wizardGroups = [];\r\n\r\n let showNavigationFiltersSteps = false;\r\n\r\n if (activeSubPart && activeSubPart.canUseNavigationFilterSteps\r\n && activeSubPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = false;\r\n const availableNavButtons = [ContentType.Design, ContentType.Layout, ContentType.RoomScene, ContentType.DisplayRoom];\r\n\r\n return (\r\n
    \r\n \r\n
    this.navWrapper = node}>\r\n
    \r\n
    \r\n {this.content(useWizard, wizardGroups, useFilters, activePart, activeSubPart)}\r\n
    \r\n
    \r\n {this.navigationMenuButtons(availableNavButtons)}\r\n {showNavigationFiltersSteps ? null : (\r\n
    \r\n \r\n
    \r\n )}\r\n {/*
    */}\r\n {/*
    */}\r\n {/**/}\r\n {/*
    */}\r\n {/*
    */}\r\n
    \r\n {this.state.contextMenuOpen && !this.state.contextMenuOpen.module\r\n ? \r\n : null}\r\n
    \r\n {showLockedView\r\n ? \r\n : null}\r\n
    \r\n )\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n visualizerTutorialStep: store.tutorialState.visualizerTutorialStep,\r\n visualizerTutorialIsOpened: store.tutorialState.visualizerTutorialIsOpened,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n fabricatorData: store.fabricatorState,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n toggleDesktopNavigation,\r\n setActiveNavigationNames,\r\n setModuleContextMenuType,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setVisualizerTutorialStep,\r\n showVisualizerTutorial,\r\n setNavigationLoading\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DesktopNavigation);\r\n","import React from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport MobileNavigationCommon from \"../../visComponents/navigation/mobileNavigationCommon\";\r\n\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport Z from \"../core/zIndex\";\r\n\r\nimport MobileNavigationButtons from '../../visComponents/navigation/mobile/mobileNavigationButtons';\r\nimport MobileNavigationAllWallsCheckbox from '../../visComponents/navigation/mobile/mobileNavigationAllWallsCheckbox';\r\nimport FeatureWizardSteps from \"../../visComponents/navigation/featureWizard/featureWizardSteps\";\r\n\r\nimport {changeActivePartRelatedItemIndex, setDefaultSelectionGroup} from \"../../../actions/actionFunctions\";\r\nimport {\r\n setActiveNavigationFilter,\r\n setModuleContextMenuType,\r\n setModuleContextMenuModule,\r\n setActiveNavigationFilterStepIndex, setNavigationViewType, setNavigationLoading\r\n} from \"../../../actions/navigationFunctions\";\r\n\r\nimport MobileMenuSelect from '../../visComponents/navigation/mobile/mobileMenuSelect';\r\nimport LockedView from \"../../common/lockedView\";\r\n\r\nimport Filters from \"../../visComponents/navigation/newFilters/filters\";\r\nimport BodyPanelRadio from \"../../visComponents/navigation/desktop/bodyPanelRadio\";\r\nimport FilterSwitchers from \"../../visComponents/navigation/newFilters/filterSwitchers\";\r\nimport FilterSelection from \"../../visComponents/navigation/newFilters/filterSelection\";\r\n// import {CABINET_WIZARD_BUTTONS} from \"../core/constants\";\r\nimport NavigationFiltersSteps from \"../../visComponents/navigation/newFilters/navigationFiltersSteps\";\r\nimport ContextMenuSimple from \"./contextMenuSimple\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport CabinetSwitchers from \"../../kvComponent/navigation/cabinetSwitchers\";\r\nimport CountertopSwitchers from \"../../kvComponent/navigation/countertopSwitchers\";\r\nimport CenterIsland from \"../core/parts/centerIsland\";\r\nimport LookAllWallsRadioButton from \"../../look/lookNavigation/lookMain/lookAllWallsRadioButton\";\r\n\r\nclass MobileNavigation extends MobileNavigationCommon {\r\n\r\n componentWillReceiveProps(nextProps) {\r\n this._componentWillReceiveProps(nextProps)\r\n }\r\n\r\n bindCanvasClick = (event) => {\r\n const layout = getCurrentLayout();\r\n // console.log(\"bindCanvasClick event\");\r\n\r\n const canvas = document.getElementById(this.props.canvasId);\r\n\r\n if (!window.touchMove && !this.state.showNavigation && !this.state.contextMenuOpen) {\r\n this.props.setHoveredLayer(event);\r\n }\r\n\r\n if (document.hoveredLayer && !window.touchMove) {\r\n // $('.canvas-text').html(`CLICK3`);\r\n const layoutType = layout.getCurrentLayoutName();\r\n\r\n let hoveredZone = Z.getMenuByHoveredLayer(layoutType, document.hoveredLayer, canvas);\r\n if (hoveredZone) {\r\n if (hoveredZone.contextMenuPartId && !this.state.showNavigation) {\r\n if (this.state.contextMenuOpen) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n });\r\n document.removeEventListener('click', this.handleContextMenuBlur);\r\n } else {\r\n let contextMenuOpen = \"\";\r\n\r\n const receiveBackSplashes = () => {\r\n const wallsParent = layout.parts[\"Walls\"];\r\n const backsplashSubPart = wallsParent.subParts().find(subPart => subPart.part.partId === \"backsplash\");\r\n this.checkIfAllFeaturesReceived(backsplashSubPart);\r\n };\r\n\r\n switch (hoveredZone.contextMenuPartId) {\r\n case \"countertop_group_custom\":\r\n contextMenuOpen = \"Countertop\";\r\n break;\r\n case \"right_wall_custom\":\r\n contextMenuOpen = \"right_wall_custom\";\r\n break;\r\n case \"left_wall_custom\":\r\n contextMenuOpen = \"left_wall_custom\";\r\n break;\r\n case \"backsplash_custom_left\": {\r\n receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_left\";\r\n break;\r\n }\r\n case \"backsplash_custom_right\": {\r\n receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_right\";\r\n break;\r\n }\r\n case \"backsplash_custom\": {\r\n receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom\";\r\n break;\r\n }\r\n case \"center_island_custom\":\r\n contextMenuOpen = CenterIsland.id;\r\n break;\r\n default:\r\n break;\r\n }\r\n this.setState({\r\n contextMenuOpen: contextMenuOpen || hoveredZone,\r\n hoveredLayer: document.hoveredLayer\r\n }, () => {\r\n if (contextMenuOpen) {\r\n setTimeout(() => {\r\n document.addEventListener('click', this.handleContextMenuBlur);\r\n }, 0)\r\n }\r\n });\r\n }\r\n return false;\r\n } else if (this.state.contentType === 0) {\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass((hoveredZone.child || hoveredZone.parent || hoveredZone).toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n this.openMobileMenu();\r\n }\r\n\r\n hoveredZone.child\r\n ? this.triggerOpenNavigationMenu(hoveredZone.child, hoveredZone.parent, false)\r\n : this.triggerOpenNavigationMenu(hoveredZone)\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false) => {\r\n\r\n if (window.location.port === '9007' || document.kvConfig.kioskMode) {\r\n console.log('item', item);\r\n }\r\n this.itemClick(item, ignoreLocked);\r\n\r\n this.props.setActiveFeature(item.part);\r\n\r\n const canvasClass = this.state.childNavigationItem\r\n ? this.state.parentNavigationItem.text + '-' + this.state.childNavigationItem.text\r\n : this.state.parentNavigationItem.text;\r\n\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass(canvasClass.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n if (item.part.partId === \"top_cabinet\" && !item.part.metaData[\"Module\"]) {\r\n this.props.setModuleContextMenuModule(null)\r\n }\r\n };\r\n\r\n handleSubPartClick = (subNavigationItem, activeNavigationFilter = null) => { // sidebar list item click\r\n const subItemPart = subNavigationItem.part;\r\n const childNavigationItemPartId = subItemPart.partId;\r\n subItemPart.getParent().handleSubPartClick(subItemPart);\r\n this.setState({\r\n childNavigationItem: subNavigationItem,\r\n showFilterSelection: subItemPart.allFeaturesReceived, // show filters only if subItemPart has all features\r\n showerWallWizardGroupsSelected: false,\r\n searchText: \"\"\r\n }, () => {\r\n this.scrollContentToTop();\r\n this.rememberWallsSelection();\r\n this.checkIfAllFeaturesReceived(subNavigationItem, \"childNavigationItem\");\r\n });\r\n /*set new materials page subIndex*/\r\n this.setActivePartRelatedItemIndex(subNavigationItem);\r\n // console.log('subItemPart', subItemPart);\r\n if (!window.canvasIsDragging) {\r\n const canvasClass = this.state.parentNavigationItem.text + '-' + subNavigationItem.text\r\n .toLowerCase().replace(/ /g, \"-\");\r\n this.props.setCanvasClass(canvasClass);\r\n }\r\n this.setNewActiveFeature(subNavigationItem);\r\n\r\n this.setNavigationFilterIfTheChildWasChanged(childNavigationItemPartId, activeNavigationFilter);\r\n\r\n };\r\n\r\n backsplashSelectClick = () => {\r\n this.props.refreshCB(); // update canvas\r\n this.reRenderComponent(); // update nav items\r\n };\r\n\r\n render() {\r\n const {fabricatorData} = this.props;\r\n const layout = getCurrentLayout();\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n const activeNavPart = activeSubPart || activePart;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n const allFeaturesReceived = activeNavPart && activeNavPart.allFeaturesReceived;\r\n\r\n // console.log('activePart', activePart);\r\n // console.log('activeSubPart', activeSubPart);\r\n // console.log('activePart.subTypes()', activePart && activePart.subTypes());\r\n // console.log('this.state.childNavigationItemv1111', this.state.childNavigationItem);\r\n\r\n let useWizard = false;\r\n let wizardGroups = [];\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n && this.state.contentType === ContentType.Design && activeSubPart && activeSubPart.canUseWizard && activeSubPart.allFeaturesReceived) {\r\n useWizard = true;\r\n wizardGroups = this.state[this.getWizardGroupsByPartId(this.state.childNavigationItem.part.partId)];\r\n }\r\n\r\n const features = this.getFeatures(layout);\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = (activePart && activePart.partId === \"kitchen_floor\" && activePart.allFeaturesReceived)\r\n || (activeSubPart && (this.isWallItem(activeSubPart) || activeSubPart.partId === \"accent_wall\"\r\n || activeSubPart.partId === \"shower_interior_wall_accent\") && activeSubPart.allFeaturesReceived);\r\n\r\n const filterSelectionHasValues = activeNavPart && FilterSelection.getAvailableFilterValues(\r\n this.props.filterGroups, \"Material\", activeNavPart, fabricatorData\r\n ).length;\r\n\r\n const itemIsSelected = (!this.props.fabricatorSettings.leadCapture\r\n || (activeSubPart && activeSubPart.activeFeature && activeSubPart.firstClick[this.props.activeQuoteIndex] && activeSubPart.placeholderChanged));\r\n\r\n const useKVWizard = false;\r\n //TODO change it when BE is ready\r\n\r\n const showNavigationFilters = useKVWizard &&activeNavPart\r\n // && this.props.activeNavigationFilter !== CABINET_WIZARD_BUTTONS[0].buttonId\r\n && activeNavPart.canUseNavigationFilter && activeNavPart.canUseNavigationFilter();\r\n\r\n let showNavigationFiltersSteps = false;\r\n if (useKVWizard && activeNavPart && activeNavPart.canUseNavigationFilterSteps\r\n && activeNavPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n const cabinetsPartIds = [\"top_cabinet\", \"bottom_cabinet\", \"center_island_cabinet\"];\r\n const isCabinet = activeSubPart && cabinetsPartIds.includes(activeSubPart.partId);\r\n const countertopPartIds = [\"countertop\", \"backsplash\", \"center_island_countertop\"];\r\n const isCountertop = activeSubPart && countertopPartIds.includes(activeSubPart.partId);\r\n\r\n return (\r\n
    \r\n
    \r\n {/*
    \r\n
    \r\n {this.state.contextMenuOpen && !this.state.contextMenuOpen.module\r\n ? \r\n : null}\r\n {showLockedView\r\n ? \r\n : null}\r\n \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n fabricatorData: store.fabricatorState,\r\n selectedFilters: store.filterState.selectedFilters,\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n userPopupOpened: store.userState.userPopupOpened,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n newLayoutType: store.sqftState.newLayoutType,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n setModuleContextMenuType,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setModuleContextMenuModule,\r\n setNavigationLoading\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(MobileNavigation)\r\n);\r\n","import snakeCase from \"lodash/snakeCase\";\r\nimport {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport NonVisualizerSubPart from \"../subparts/nonVisualizerSubPart\";\r\n\r\nexport default class Other extends Part {\r\n static id = 'Other';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Other';\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n // console.log(\"load other\", dbFeature.groupName);\r\n const partId = snakeCase(dbFeature.groupName);\r\n let relatedItem = this.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, dbFeature.groupName);\r\n this.relatedItems.push(relatedItem);\r\n }\r\n relatedItem.getParent = () => this;\r\n relatedItem.load(dbFeature);\r\n return true\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport BackgroundBG from \"../subparts/backgrounds/BackgroundBG\";\r\n\r\nexport default class Background extends Part {\r\n static id = 'Background';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Background';\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Background\":\r\n switch (true) {\r\n case dbFeature.displayName.includes(\"BG \"):\r\n relatedItemName = \"backgroundBG\";\r\n RelatedItemClass = BackgroundBG;\r\n break;\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerAccessories} from \"../../parts/showerAccessories\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {IS_BATHROOM_OLD_BV_SCENE} from \"../../../../../config\";\r\n\r\nexport default class BackgroundBG extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'background_bg';\r\n this.partName = 'Background BG';\r\n this.windowNeededLayouts = [1];\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BackgroundBG());\r\n }\r\n\r\n getArrayOfConditions() {\r\n const layout = this.getParent().layout;\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerAccessoriesParent = layout.parts[ShowerAccessories.id];\r\n const showerParent = layout.parts[Shower.id];\r\n\r\n const windowBody = showerAccessoriesParent.windowBody;\r\n if (windowBody && this.windowNeededLayouts.includes(layout.type) && document.kvConfig.toolVersion !== 5) {\r\n conditions.push({\r\n propName: \"Window\",\r\n propValue: (windowBody && windowBody.activeFeature && windowBody.disabled) ? \"Off\" : \"On\"\r\n })\r\n }\r\n\r\n if (showerParent && showerParent.showerSize() && !IS_BATHROOM_OLD_BV_SCENE) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n })\r\n }\r\n\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Background.BackgroundBG;\r\n }\r\n }\r\n}\r\n","import {Shower} from \"../../parts/shower\";\r\nimport {SIDE_POSITIONS} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class LargeCornerSeat extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'large_corner_seat';\r\n this.partName = 'Large Corner Seat';\r\n this.translateId = \"visualizer.bathroom.accessories.large_corner_seat\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {\r\n [SIDE_POSITIONS[0]]: null,\r\n [SIDE_POSITIONS[1]]: null,\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === SIDE_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new LargeCornerSeat(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n disabledClick() {\r\n Object.keys(this.layerPositions).forEach(position => {\r\n if (this.layerPositions[position] && this.layerPositions[position].metaData[\"layerPosition\"]) {\r\n this.checkRelatedFeatureGroupPositions(this.layerPositions[position].metaData[\"layerPosition\"]);\r\n }\r\n })\r\n }\r\n\r\n handleClick() {\r\n const parent = this.getParent();\r\n // const accessoriesParent = parent.getParent(); // it is removing corner shelf! but it shouldn't\r\n // accessoriesParent.caddie_type = this.partId;\r\n parent.checkRelatedFeatureGroupPositions(this.metaData[\"layerPosition\"]);\r\n super.handleClick();\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n if (showerParent && showerParent.showerTubComboIsActive()) { // shower tub combo - remove\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n // this.checkIfFeaturePartIsMatching();\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.zIndex = zIndexes.Accessories.LargeCornerSeat + keyIndex*10;\r\n }\r\n })\r\n }\r\n }\r\n\r\n}\r\n\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class BathTubLiner extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"bathtub_liner\";\r\n this.bottomTubId = \"bathtub_liner\";\r\n this.visible = true;\r\n this.partName = \"Tub Liner\";\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.bathtub_liner\";\r\n this.dbName = \"Bathtub Liner\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BathTubLiner());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.TubCombo.Liner;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class ReplacementTub extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'replacement_tub';\r\n this.bottomTubId = \"replacement_tub\";\r\n this.visible = true;\r\n this.partName = 'Replacement Tub';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.replacement_tub\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n if (isChild) {\r\n this.oneLayerPosition = true;\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n return super.load_(dbFeature, new ReplacementTub());\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationSubItemsWithSides(filters, searchText);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.TubCombo.ReplacementTub;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class WalkInTub extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'walk_in_tub';\r\n this.bottomTubId = \"walk_in_tub\";\r\n this.visible = true;\r\n this.partName = 'Walk In Tub';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.walk_in_tub\";\r\n this.isStoneFeature = false;\r\n if (isChild) {\r\n this.oneLayerPosition = true;\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n return super.load_(dbFeature, new WalkInTub());\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationSubItemsWithSides(filters, searchText);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.TubCombo.WalkInTub;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class JettedTub extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'jetted_tub';\r\n this.bottomTubId = \"jetted_tub\";\r\n this.visible = true;\r\n this.partName = 'Jetted Tub';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.jetted_tub\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new JettedTub());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.TubCombo.JettedTub;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class WallConfiguration extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'wall_configuration';\r\n this.partName = 'Wall Configuration';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.wall_configuration\";\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n this.createdManually = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new WallConfiguration())\r\n }\r\n\r\n // setLayers(layout) {\r\n // this.activeFeature = this.features.find((feature) => {\r\n // return feature.partName === this.getParent().showerBody.activeFeature.partName // set the same glass as Body\r\n // });\r\n // return super.setLayers(layout);\r\n // }\r\n\r\n handleClick() {\r\n super.handleClick();\r\n const showerTubComboParent = this.getParent().getParent();\r\n showerTubComboParent.setShowerTubCombo();\r\n showerTubComboParent.setShowerSize(this.leftShowerWallType, this.showerComboSize);\r\n this.featureClicked();\r\n }\r\n\r\n setZIndex() {}\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport store from \"../../../../../store\";\r\nimport {toggleNotCompatibleView} from \"../../../../../actions/selectionFunctions\";\r\nimport {PAN_POSITIONS, ShowerComboTubType} from \"../../constants\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class ShowerFixture extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'shower_fixture';\r\n this.partName = 'Fixture';\r\n this.translateId = \"visualizer.bathroom.shower.shower_fixture\";\r\n this.homePageTitle = 'Shower Fixtures';\r\n this.dbName = 'Shower Fixture';\r\n this.layerPriority = 4;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {\r\n [PAN_POSITIONS[0]]: null,\r\n [PAN_POSITIONS[1]]: null,\r\n [PAN_POSITIONS[2]]: null,\r\n };\r\n // this.defaultLayerLayoutPositions = {\r\n // [LayoutType.Layout1]: \"L\",\r\n // [LayoutType.Layout4]: \"C\",\r\n // };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.id === 79104774 || dbFeature.id === 79104772) { // Modern 4 & townsend disabled\r\n return false\r\n }\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === PAN_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new ShowerFixture(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n const filteredAvailableFeatures2 = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters, this.featuresParts), searchText);\r\n let featuresToDisplay2 = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures2);\r\n featuresToDisplay2.forEach(feature2 => {\r\n if (featuresToDisplay.every(feature => feature.dbFeature.sharedFeatureName !== feature2.dbFeature.sharedFeatureName)) {\r\n featuresToDisplay.push(feature2)\r\n }\r\n })\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerTubCombo = this.getParent().layout.parts[ShowerTubCombo.id];\r\n\r\n if (this.getParent().showerTubComboIsActive() && showerTubCombo && showerTubCombo.walkInTub\r\n && showerTubCombo.bottomTub === showerTubCombo.walkInTub.bottomTubId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n if (shower.layout && shower.showerTubComboIsActive()\r\n && shower.layout.parts[ShowerTubCombo.id].bottomTub === ShowerComboTubType.walk_in_tub) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n comboPart.bottomTub = ShowerComboTubType.bathtub_liner;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked); // set active item & not in visualizer item\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n\r\n const showerFixtureParent = this.getParent();\r\n const shower = showerFixtureParent.getParent();\r\n if (shower.showerTubComboIsActive() && shower.layout.parts[ShowerTubCombo.id].bottomTub === ShowerComboTubType.walk_in_tub\r\n && !window.location.hash.includes(\"visualizer\")) {\r\n store.dispatch(toggleNotCompatibleView(true));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerParent = this.getParent();\r\n conditions.push({\r\n propName: \"Shower\",\r\n propValue: showerParent.showerTubComboIsActive() ? \"Tub\" : \"Shower\"\r\n });\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.zIndex = zIndexes.Shower.ShowerFixture + keyIndex*10;\r\n }\r\n })\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerBodyType} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class ShowerGlass extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_glass';\r\n this.partName = 'Glass';\r\n this.translateId = \"visualizer.bathroom.shower.shower_glass\";\r\n this.visible = false;\r\n this.layerPriority = 12;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerGlass())\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n if (this.getParent().showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.getParent().customBodyType === ShowerBodyType.Door) {\r\n this.disabled = true;\r\n }\r\n this.activeFeature = this.features.find((feature) => {\r\n const showerBodyActiveFeature = this.getParent().showerBody.activeFeature;\r\n return showerBodyActiveFeature && feature.partName === showerBodyActiveFeature.partName // set the same glass as Body\r\n });\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType() === Shower.Type.Custom && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Shower.Glass;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n\r\nimport {LayoutType} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {\r\n custom30in15X4Shower,\r\n custom30in30X8Shower,\r\n custom30inPonyShower,\r\n custom60in15X4Shower,\r\n custom60in30X8Shower,\r\n custom60inPonyShower\r\n} from \"../../../../bvComponent/core/assets\";\r\n\r\nexport default class ShowerBody extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partId = 'shower_body';\r\n this.partName = 'Shower Body';\r\n this.translateId = \"visualizer.bathroom.shower.shower_body\";\r\n this.homePageTitle = 'Shower Doors & Glass';\r\n this.partNumber = partNumber;\r\n this.activeFeatureParts = [];\r\n this.canBeDisabled = false;\r\n this.placeholderChanged = true; // never show placeholder to body\r\n this.firstClick = {\r\n \"0\": true // never show placeholder to body\r\n }\r\n this.layerPriority = 1;\r\n this.createdManually = true;\r\n }\r\n\r\n load(dbFeature) {\r\n const loadedShowerBody = super.load_(dbFeature, new ShowerBody());\r\n if (loadedShowerBody) { // it can be false (just skip it)\r\n const featureName = loadedShowerBody.dbFeature.sharedFeatureName;\r\n loadedShowerBody.featureName = featureName;\r\n loadedShowerBody.showerBodyType = 'Custom';\r\n loadedShowerBody.showerDimensions = this.loadShowerDimensions(featureName);\r\n loadedShowerBody.metaData = this.loadShowerMetaData(featureName, loadedShowerBody.showerDimensions);\r\n loadedShowerBody.showerBodyId = featureName.toLowerCase().replace(/ /gi, \"-\");\r\n loadedShowerBody.notAvailableInVisualizer = false;\r\n if (!loadedShowerBody.dbFeature.thumbnailUrl) {\r\n loadedShowerBody.customThumbnail = this.loadThumbnail(featureName)\r\n }\r\n }\r\n return loadedShowerBody\r\n }\r\n\r\n loadShowerDimensions(featureName = this.activeFeature.featureName) {\r\n switch (true) {\r\n case featureName.includes(\"15X4\"):\r\n return \"15X4\"\r\n case featureName.includes(\"Pony\"):\r\n return \"Pony\"\r\n case featureName.includes(\"30X8\"):\r\n default:\r\n return \"30X8\"\r\n }\r\n }\r\n\r\n loadShowerMetaData(featureName = this.activeFeature.featureName, showerDimensions) {\r\n const featureNameSplitted = featureName.split(\"in\")[0];\r\n return {\r\n \"ShowerSize\": featureNameSplitted.length > 1 ? [featureNameSplitted.substr(featureNameSplitted.length - 2)] : ['60'],\r\n \"CountertopSize\": showerDimensions === \"30X8\" ? [\"72in\"] : [\"20in\", \"24in\", \"30in\", \"36in\", \"48in\", \"60in\"]\r\n }\r\n }\r\n\r\n loadThumbnail(featureName = this.activeFeature.featureName) {\r\n switch (true) {\r\n case featureName.includes(\"15X4\"):\r\n return featureName.includes(\"30in\") ? custom30in15X4Shower : custom60in15X4Shower\r\n case featureName.includes(\"Pony\"):\r\n return featureName.includes(\"30in\") ? custom30inPonyShower : custom60inPonyShower\r\n case featureName.includes(\"30X8\"):\r\n default:\r\n return featureName.includes(\"30in\") ? custom30in30X8Shower : custom60in30X8Shower\r\n }\r\n }\r\n\r\n handleClick() {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick();\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.showerBody.activeFeature = this;\r\n }\r\n this.getParent().showerBodySelectedByUser = true;\r\n const shower = this.getParent().layout ? this.getParent() : this.getParent().getParent(); // workaround for complete & custom click\r\n if (shower.showerTubComboIsActive) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n disabledClick() {\r\n const showerParent = this.getParent();\r\n showerParent.relatedItems.forEach((relItem) => {\r\n relItem.disabled = this.disabled;\r\n if (relItem.activeFeatureParts && relItem.activeFeatureParts.length) {\r\n relItem.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart) {\r\n activeFeaturePart.disabled = this.disabled\r\n }\r\n });\r\n }\r\n });\r\n if (showerParent.layout && showerParent.showerTubComboIsActive) {\r\n const comboPart = showerParent.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const wallParent = showerParent.layout.parts.Walls;\r\n wallParent.wallExL.disabled = this.disabled;\r\n // wallParent.wallExR.disabled = this.disabled;\r\n\r\n const bathtubParent = showerParent.layout.parts.Bathtub;\r\n\r\n if (showerParent.layout.type === LayoutType.Small && !this.disabled && bathtubParent) { // switch off all bathtub features\r\n if (bathtubParent.bathTubBody) {\r\n bathtubParent.bathTubBody.disabled = true;\r\n }\r\n if (bathtubParent.bathTubBody) {\r\n bathtubParent.bathTubBase.disabled = true;\r\n bathtubParent.bathTubBase.disabledClick();\r\n }\r\n }\r\n }\r\n\r\n availableFeatures(filters) {\r\n const layout = this.getParent().layout;\r\n const filteredAvailableFeatures = filters ? super.getFilteredFeaturesByFilters(filters) : this.features;\r\n const counterTopSize = layout.parts[Vanity.id].counterTopSize();\r\n return filteredAvailableFeatures.filter((feature) => {\r\n if (counterTopSize === '72in' && layout.type === 1) {\r\n return feature.showerDimensions === \"30X8\" || feature.showerDimensions === \"Pony\"\r\n }\r\n return true\r\n })\r\n }\r\n\r\n getArrayOfConditions() {\r\n return []\r\n }\r\n\r\n setActiveFeatureParts() {\r\n const activeFeatureParts = (this.activeFeature && this.activeFeature.partNumber) ? this.featuresParts.filter((feature) => {\r\n return feature.partName === this.activeFeature.partName\r\n }) : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n return activeFeatureParts\r\n }\r\n\r\n setDefault() {\r\n const availableFeatures = this.availableFeatures();\r\n const layout = this.getParent().layout;\r\n let hardCodedDefault = availableFeatures.find((feature) => {\r\n return feature.partName === \"Custom B 60in 15X4\";\r\n });\r\n const counterTopSize = layout.parts[Vanity.id].counterTopSize();\r\n if (counterTopSize === '72in' && layout.type === 1 && this.activeFeature) {\r\n hardCodedDefault = availableFeatures.find((feature) => {\r\n return this.activeFeature.partName.includes(\"60in\")\r\n ? feature.partName.includes(\"60in\")\r\n : feature.partName.includes(\"30in\")\r\n });\r\n }\r\n this.activeFeature = hardCodedDefault || availableFeatures[0];\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.getParent().showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n super.setLayers(layout);\r\n }\r\n\r\n setZIndex() {}\r\n\r\n changeLayout(layoutType) {\r\n if (layoutType === 1 && this.disabled) {\r\n this.disabled = false;\r\n this.disabledClick();\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class CompleteVanity extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity';\r\n this.partName = 'Vanity';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity\";\r\n this.homePageTitle = 'Complete Vanities';\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new CompleteVanity());\r\n }\r\n\r\n setDefault(layout) {\r\n const availableCompleteFeatures = this.features.filter(feature => {\r\n return feature.metaData[\"Vanity\"] && feature.metaData[\"Vanity\"].includes(\"Complete\")\r\n });\r\n const hardCodedDefault = this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Buffalo Complete Sand 987SANBLK17VK24\");\r\n });\r\n // const placeholderDefault =\r\n // (\r\n // this.getParent().vanityCabinet\r\n // && this.getParent().vanityCabinet.features\r\n // && this.getParent().vanityCabinet.features.length\r\n // && this.getParent().vanityCabinet.features.find((feature) => +feature.vanitySize === 24 && feature.dbFeature.displayName.includes(\"laceholder\"))\r\n // ) || this.features.find((feature) => {\r\n // return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Placeholder S\");\r\n // });\r\n const placeholderDefault = this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Placeholder S\");\r\n });\r\n // console.log('this.features', this.features);\r\n // console.log('placeholderDefault', placeholderDefault);\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || availableCompleteFeatures[0];\r\n this.placeholderFeature = placeholderDefault || super.setDefault(layout) || null;\r\n }\r\n\r\n // setLayers(layout) {\r\n // // const s3Binding = find(this.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this)});\r\n // if (!this.activeFeature) {\r\n // this.setDefault(layout);\r\n // }\r\n //\r\n // let s3Binding = find(this.activeFeature.dbFeature.s3Bindings, {\r\n // entityID: this.getParent().featureDefinitionId(this),\r\n // layout: layout.getCurrentLayoutAbbreviation()\r\n // });\r\n // if (!s3Binding) {\r\n // s3Binding = find(this.activeFeature.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this)});\r\n // }\r\n // this.activeFeature.layer.fromS3Binding(s3Binding);\r\n // }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Complete.Cabinet;\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Vanity.Complete.Cabinet;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n\r\nexport default class VanityHandle extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_handle';\r\n this.partName = 'Handle';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_handle\";\r\n this.dbName = \"Vanity Handle\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new VanityHandle())\r\n }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const vanityParent = this.getParent();\r\n conditions.push({\r\n propName: \"VanitySize\",\r\n propValue: vanityParent.getCounterTopSize()\r\n })\r\n return conditions\r\n }\r\n\r\n getAvailableFeatures() {\r\n return this.features && this.features.filter(f => f.matchesMetaForCondition('VanitySize', this.getParent().counterTopSize())) || [];\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const vanityPedestal = this.getParent().vanityCabinet;\r\n if (vanityPedestal && vanityPedestal.activeFeature) {\r\n const handleMeta = vanityPedestal.activeFeature.metaData[\"VanityHandle\"];\r\n const hardCodedWizardConditions = vanityPedestal.activeFeature.partName.includes(\"WizardPlaceholder\") &&\r\n (\r\n vanityPedestal.activeFeature.partName.includes(\"WizardPlaceholder52 in36 S\")\r\n || (handleMeta && handleMeta.includes(\"true\")) // WizardPlaceholder QC Liberty\r\n );\r\n if (handleMeta && handleMeta.includes(\"None\") || hardCodedWizardConditions) {\r\n super.hideLayers();\r\n return;\r\n }\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType_ === Vanity.Types.Custom) {\r\n const zIndex = zIndexes.Vanity.Handle;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport store from \"../../../../../store\";\r\nimport {Layout} from \"../../layout\";\r\n\r\nexport default class VanityCabinet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_cabinet';\r\n this.partName = 'Cabinet';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_cabinet\";\r\n this.dbName = \"Vanity\";\r\n this.homePageTitle = 'Vanity Bases';\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n this.canUseWizard = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new VanityCabinet())\r\n }\r\n\r\n // navigationSubItems() {\r\n // return super.navigationSubItemsWithFilter('VanitySize', this.getParent().counterTopSize());\r\n // }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n setActiveFeatureByFilter(filterName, filterValue) {\r\n\r\n // console.log('filterName', filterName);\r\n // console.log('filterValue', filterValue);\r\n\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const group = filterGroups.find(group => group.name === filterName);\r\n const groupId = group.id;\r\n const filterValueId = Layout.getfilterValueIdByValue(groupId, filterValue);\r\n const filteredFeatures = this.features.filter(\r\n feature => feature.dbFeature && feature.dbFeature.filterValueIDs[groupId] && feature.dbFeature.filterValueIDs[groupId].includes(filterValueId)\r\n ); // find among all features only those, who have filter with value === props size\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, null, \"ustom\")) {\r\n this.activeFeature = filteredFeatures[0];\r\n const placeholderAvailableFeatures = filteredFeatures.filter(feature => {\r\n return feature.dbFeature.displayName.includes(\"laceholder\") && feature.dbFeature.displayName.includes(\"ustom\")\r\n });\r\n this.placeholderFeature = placeholderAvailableFeatures[0];\r\n }\r\n }\r\n\r\n // getAvailableFeatures() {\r\n // return this.features.filter(f => f.vanitySize+'in' === this.getParent().counterTopSize());\r\n // }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Cabinet;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Vanity.Cabinet;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n// import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n// import uniqBy from \"lodash/uniqBy\";\r\n\r\nexport default class VanityCountertop extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_countertop';\r\n this.partName = 'Countertop';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_countertop\";\r\n this.homePageTitle = 'Countertops';\r\n this.visible = [Vanity.Types.Custom];\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new VanityCountertop())\r\n }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const vanityParent = this.getParent();\r\n conditions.push({\r\n propName: \"VanitySize\",\r\n propValue: vanityParent.getCounterTopSize()\r\n })\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType_ === Vanity.Types.Custom) {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.CounterTop;\r\n }\r\n if(this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Vanity.CounterTop;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n\r\nexport default class VanityBacksplash extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_backsplash';\r\n this.partName = 'Backsplash';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_backsplash\";\r\n this.dbName = 'Backsplash';\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new VanityBacksplash())\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const vanityParent = this.getParent();\r\n conditions.push({\r\n propName: \"VanitySize\",\r\n propValue: vanityParent.getCounterTopSize()\r\n })\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n const zIndex = zIndexes.Vanity.VanityBacksplash;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n\r\nexport default class Mirror extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_mirror';\r\n this.partName = 'Mirror';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_mirror\";\r\n this.homePageTitle = 'Mirrors';\r\n this.visible = [Vanity.Types.Complete, Vanity.Types.Custom];\r\n this.canBeDisabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Mirror())\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n // if ((this.getParent().activeSubType_ === Vanity.Types.Custom) && this.activeFeature) {\r\n if (zIndexes && this.activeFeature) {\r\n // this.activeFeature.layer.zIndex = Z.layouts.Large.Vanity.Mirror;\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Mirror;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Config from \"../../../../../config\";\r\nimport { Vanity } from \"../../parts/vanity\";\r\nimport {METADATA} from \"../../constants\";\r\n\r\nexport default class Sink extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_sink';\r\n this.partName = 'Sink';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_sink\";\r\n this.homePageTitle = 'Sinks';\r\n this.visible = [Vanity.Types.Custom];\r\n if (Config.isDevMode()) {\r\n this.canBeDisabled = true;\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"SinkSize\"]) {\r\n dbFeature.metaData[\"SinkSize\"] = [METADATA.Inner]\r\n }\r\n return super.load_(dbFeature, new Sink())\r\n }\r\n //\r\n // navigationSubItems(filters, searchText) {\r\n // const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n // return super.navigationSubItemsWithFilterWithInactive('VanitySize', this.getParent().counterTopSize(), filteredAvailableFeatures);\r\n // }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const counterTopSize = this.getParent().counterTopSize();\r\n // return [{\r\n // propName: 'VanitySize',\r\n // propValue: counterTopSize\r\n // }];\r\n // }\r\n\r\n handleChangeParent(nonCompatibleWith) {\r\n if (nonCompatibleWith === \"faucet\") {\r\n // some additional logic if needed\r\n } else {\r\n this.getParent().getParent().vanityCabinet.setActiveFeatureByFilter(\"Size\", this.metaData[\"VanitySize\"] ? this.metaData[\"VanitySize\"][0] : null); // \"60in\", etc.\r\n }\r\n }\r\n\r\n setActiveFeatureByFilter(filterName, filterValue) {\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions());\r\n const filteredFeatures = featuresToDisplay.filter((feature) => {\r\n return feature.metaData[filterName] && feature.metaData[filterName].includes(filterValue);\r\n });\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n this.activeFeature = filteredFeatures.find(feature => !feature.dbFeature.displayName.includes(\"laceholder\")) || filteredFeatures[0];\r\n const placeholderAvailableFeatures = filteredFeatures.filter(feature => {\r\n return feature.dbFeature.displayName.includes(\"laceholder\")\r\n });\r\n this.placeholderFeature = placeholderAvailableFeatures[0];\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType_ === Vanity.Types.Custom) {\r\n if(this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Sink;\r\n }\r\n if(this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Vanity.Sink;\r\n }\r\n }\r\n }\r\n}\r\n","import filter from 'lodash/filter';\r\n\r\nimport {IntermediatePart} from \"../../intermediatePart\";\r\nimport Config from \"../../../../../config\";\r\nimport { Vanity } from \"../../parts/vanity\";\r\nimport {METADATA} from \"../../constants\";\r\n\r\nexport default class VanityFaucet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_faucet';\r\n this.partName = 'Faucet';\r\n this.homePageTitle = 'Faucets';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_faucet\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.useMatchesFailedNavigation = true;\r\n if (Config.isDevMode()) {\r\n this.canBeDisabled = true;\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"SinkSize\"]) {\r\n dbFeature.metaData[\"SinkSize\"] = [METADATA.Inner]\r\n } else if(dbFeature.metaData[\"SinkSize\"].includes(METADATA.Outer) && !dbFeature.metaData[\"SinkSize\"].includes(METADATA.Inner)) (\r\n dbFeature.metaData[\"SinkSize\"].push(METADATA.Inner)\r\n )\r\n return this.load_(dbFeature, new VanityFaucet());\r\n }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n getCurrentSinkSize() {\r\n const sinkParent = this.getParent().sink;\r\n if (sinkParent && sinkParent.activeFeature) {\r\n const sinkMeta = sinkParent.activeFeature.metaData[\"SinkSize\"];\r\n if (sinkMeta) {\r\n return Array.isArray(sinkMeta) ? sinkMeta[0] : sinkMeta\r\n } else if (sinkParent.activeFeature.partName.includes(\"Placeholder\")) {\r\n return \"Outer\"\r\n }\r\n }\r\n return null\r\n }\r\n\r\n getArrayOfConditions(withSinkSize = true) {\r\n // const counterTopSize = this.getParent().counterTopSize();\r\n // const conditions = [{\r\n // propName: 'VanitySize',\r\n // propValue: counterTopSize\r\n // }];\r\n const conditions = super.getArrayOfConditions();\r\n if (withSinkSize && this.getCurrentSinkSize()) {\r\n conditions.push({\r\n propName: 'SinkSize',\r\n propValue: this.getCurrentSinkSize()\r\n })\r\n }\r\n const vanityParent = this.getParent();\r\n const countertopSize = vanityParent.getCounterTopSize();\r\n if (countertopSize) {\r\n conditions.push({\r\n propName: \"VanitySize\",\r\n propValue: countertopSize && countertopSize[0] && (countertopSize[0] === \"32\") ? \"48\" : countertopSize\r\n })\r\n }\r\n const sinkType = vanityParent.sink && vanityParent.sink.activeFeature && vanityParent.sink.activeFeature.metaData[\"SinkType\"]\r\n if (sinkType) {\r\n conditions.push({\r\n propName: \"SinkType\",\r\n propValue: vanityParent.sink.activeFeature.metaData[\"SinkType\"]\r\n })\r\n }\r\n // console.log(\"conditions\", conditions);\r\n return conditions;\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions(true)))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getAvailableFeatures() {\r\n return filter(this.features, f => f.matchesMetaForCondition('VanitySize', this.getParent().counterTopSize()));\r\n }\r\n\r\n handleChangeParent(nonCompatibleWith) {\r\n if (nonCompatibleWith === \"sink\") {\r\n this.getParent().getParent().sink.setActiveFeatureByFilter(\"SinkSize\", \"Inner\")\r\n } else {\r\n this.getParent().getParent().vanityCabinet.setActiveFeatureByFilter(\"Size\", this.metaData[\"VanitySize\"] ? this.metaData[\"VanitySize\"][0] : null); // \"60in\", etc.\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType_ === Vanity.Types.Custom) {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Faucet;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {ShowerComboTubType} from \"../../constants\";\r\n\r\nexport default class ShowerWall extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_interior_wall';\r\n this.partName = 'Shower Walls';\r\n this.translateId = \"visualizer.bathroom.shower.shower_interior_wall\";\r\n this.homePageTitle = 'Interior Shower Walls';\r\n this.dbName = \"Shower Wall\";\r\n this.isStoneFeature = true;\r\n this.canUseWizard = true;\r\n this.layerPriority = 2;\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Shower\"]) {\r\n dbFeature.metaData[\"Shower\"] = [\"Shower\"];\r\n }\r\n return super.load_(dbFeature, new ShowerWall());\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const parent = this.getParent();\r\n super.handleClick(ignoreLocked);\r\n const shower = parent.getParent();\r\n if (shower.showerInteriorWallAccent && shower.showerInteriorWallAccent.canBeDisabled\r\n && !shower.showerInteriorWallAccent.placeholderChanged && !getFeatureIsLocked(this)) {\r\n shower.showerInteriorWallAccent.disabled = true;\r\n shower.showerInteriorWallAccent.disabledClick();\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n availableFeatures(wallFeatures) {\r\n return wallFeatures.filter(wallFeature => wallFeature.partNumber === 1)\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerParent = this.getParent();\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n const showerCondition = showerParent.showerTubComboIsActive() && showerParent.layout.parts[ShowerTubCombo.id]\r\n && (showerParent.layout.parts[ShowerTubCombo.id].bottomTub === ShowerComboTubType.walk_in_tub)\r\n ? \"Tub\"\r\n : \"Shower\";\r\n conditions.push({\r\n propName: \"Shower\",\r\n propValue: showerCondition\r\n });\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Background.ShowerWall;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class ShowerWallAccent extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"shower_wall_accent\";\r\n this.partName = \"Shower Walls Accent\";\r\n this.translateId = \"visualizer.bathroom.shower.shower_interior_wall_accent\";\r\n this.dbName = \"Shower Wall Accent\";\r\n this.homePageTitle = 'Interior Shower Walls';\r\n this.isStoneFeature = true;\r\n this.canUseWizard = true;\r\n this.layerPriority = 2;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerWallAccent());\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const parent = this.getParent();\r\n super.handleClick(ignoreLocked);\r\n const shower = parent.getParent();\r\n if (shower.showerWallAccent && shower.showerWallAccent.canBeDisabled\r\n && !shower.showerWallAccent.placeholderChanged && !getFeatureIsLocked(this)) {\r\n shower.showerWallAccent.disabled = true;\r\n shower.showerWallAccent.disabledClick();\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerParent = this.getParent();\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.ShowerWallAccent;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport {LayoutType, ShowerComboTubType} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {IS_BATHROOM_OLD_BV_SCENE} from \"../../../../../config\";\r\nimport {ShowerAccessories} from \"../../parts/showerAccessories\";\r\n\r\nexport default class ShowerDoor extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_door';\r\n this.partName = 'Shower Door';\r\n this.translateId = \"visualizer.bathroom.shower.shower_door\";\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.canBeDisabled = true;\r\n this.layerPriority = 5;\r\n\r\n /* only shower door properties */\r\n if (isChild) {\r\n this.previouslySelectedFeatures = {};\r\n this.oneLayerPosition = true;\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this.previouslySelectedFeatures[layoutName] = {};\r\n })\r\n }\r\n this.currentShowerBodyId = \"\"; // for example \"custom-a-60in-30x8\"\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n return super.load_(dbFeature, new ShowerDoor());\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationSubItemsWithSides(filters, searchText);\r\n }\r\n\r\n disabledClick() {\r\n const showerParent = this.getParent();\r\n const showerDoorHandle = showerParent.showerDoorHandle;\r\n if (showerDoorHandle) {\r\n showerDoorHandle.disabled = this.disabled;\r\n }\r\n const accParent = showerParent.layout.parts[ShowerAccessories.id]\r\n if (!this.disabled && accParent && accParent.showerRod && !accParent.showerRod.disabled) {\r\n accParent.showerRod.disabled = true\r\n }\r\n }\r\n\r\n handleClick() {\r\n super.handleClick();\r\n if (!this.notAvailableInVisualizer && !getFeatureIsLocked(this)) {\r\n // this.getParent().getParent().setShowerTubCombo();\r\n // let doorWithLiner = false;\r\n // if(this.metaData && this.metaData.length) {\r\n // const activeDoorMetadata = this.metaData.find(metaDataObject => metaDataObject.isFor);\r\n // const showerPanValues = activeDoorMetadata.conditions.find(condition => condition.name === \"BathtubLiner\");\r\n // if (showerPanValues) {\r\n // doorWithLiner = true;\r\n // }\r\n // }\r\n // this.getParent().getParent().setLinerActive(doorWithLiner);\r\n const shower = this.getParent().getParent();\r\n const showerPanCondition = this.metaData[\"ShowerPan\"];\r\n if (!shower.showerTubComboIsActive()) {\r\n shower.showerFloorIsActive = showerPanCondition && showerPanCondition.includes(\"Threshold\");\r\n }\r\n const accParent = shower.layout.parts[ShowerAccessories.id]\r\n if (accParent && accParent.showerRod && !accParent.showerRod.disabled) {\r\n accParent.showerRod.disabled = true\r\n }\r\n if(!this.matchesMetaForArrayOfConditions(this.getParent().getArrayOfConditions())) {\r\n const showerSizeValues = this.metaData[\"ShowerSize\"];\r\n const showerBodyParent = this.getParent().getParent().showerBody;\r\n if (showerSizeValues) {\r\n const showerBodyThatFits = showerBodyParent.features.filter(showerBodyFeature => {\r\n const showerSizeValues2 = showerBodyFeature.metaData[\"ShowerSize\"];\r\n return showerSizeValues.some(condValue => {\r\n return showerSizeValues2.some(condValue2 => condValue === condValue2);\r\n });\r\n });\r\n if (showerBodyThatFits.length && showerBodyThatFits.every(shBody => shBody.partName !== showerBodyParent.activeFeature.partName)) {\r\n let showerBodyToSet = showerBodyThatFits.find(shBody => {\r\n return shBody.showerDimensions === showerBodyParent.activeFeature.showerDimensions\r\n }) || showerBodyThatFits[0];\r\n showerBodyParent.showerBodySelectedByUser = true;\r\n showerBodyParent.activeFeature = showerBodyToSet;\r\n }\r\n }\r\n }\r\n this.featureClicked();\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n const showerParent = this.getParent();\r\n const comboParent = showerParent.layout.parts[ShowerTubCombo.id];\r\n if (showerParent.showerTubComboIsActive() && comboParent.bottomTub === ShowerComboTubType.walk_in_tub) {\r\n super.hideLayers();\r\n return;\r\n }\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n const comboParent = showerParent.layout.parts[ShowerTubCombo.id];\r\n const showerTubComboIsActive = showerParent.showerTubComboIsActive();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n conditions.push({\r\n propName: IS_BATHROOM_OLD_BV_SCENE ? \"Type\" : \"Shower\",\r\n propValue: showerTubComboIsActive\r\n ? comboParent.bottomTub === ShowerComboTubType.walk_in_tub ? \"WalkInTub\" : \"Tub\" // WalkInTub removes items from nav\r\n : \"Pan\"\r\n })\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n })\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Shower.ShowerDoor;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\n\r\nexport default class ShowerPanCombo extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_pan_combo';\r\n this.partName = 'Shower Pan';\r\n this.translateId = \"visualizer.bathroom.shower.shower_pan_combo\";\r\n this.dbName = \"Shower Pans\"; // americanstandard2020 // lowesdemo // bucket5\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.layerPriority = 8;\r\n if (isChild) {\r\n this.oneLayerPosition = true;\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n return super.load_(dbFeature, new ShowerPanCombo())\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n shower.showerFloorIsActive = false;\r\n if (shower.layout && shower.showerTubComboIsActive()) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked); // set active item & not in visualizer item\r\n this.applyFeatureIfNotCompatible();\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationSubItemsWithSides(filters, searchText);\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent();\r\n\r\n if (showerParent.showerTubComboIsActive() || showerParent.showerFloorIsActive) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && !this.activeFeature.notAvailableInVisualizer\r\n && this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.ShowerPanCombo;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n getMatchingPositionFeature = (position = \"\", forFeature = this.activeFeature) => {\r\n if (forFeature) { //just in case\r\n let arrayOfConditions = this.getArrayOfConditions();\r\n if (forFeature.metaData[\"SkuName\"]) {\r\n arrayOfConditions.push({\r\n propName: \"SkuName\",\r\n propValue: forFeature.metaData[\"SkuName\"]\r\n })\r\n }\r\n return this.features.find((feature) => {\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions) && feature.metaData[\"layerPosition\"] === position\r\n });\r\n }\r\n return null\r\n };\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerParent = this.getParent();\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n return conditions\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class ShowerDoorHandle extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_door_handle';\r\n this.partName = 'Handle';\r\n this.translateId = \"visualizer.bathroom.shower.shower_door_handle\";\r\n this.dbName = 'Shower Door Handle';\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.layerPriority = 9;\r\n if (isChild) {\r\n this.previouslySelectedFeatures = {\r\n Layout1: {},\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const handle = this.load_(dbFeature, new ShowerDoorHandle());\r\n if (handle) {\r\n ShowerDoorHandle.setAdditionalMetaData(handle);\r\n }\r\n }\r\n\r\n static setAdditionalMetaData(handle) {\r\n const compatible = handle.metaData[\"CompatibleTub\"];\r\n const showerSize = handle.metaData[\"ShowerSize\"];\r\n if (!compatible) {\r\n handle.metaData[\"CompatibleTub\"] = [\"None\"];\r\n }\r\n if (!showerSize) {\r\n handle.metaData[\"ShowerSize\"] = [\"60in\"];\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const showerDoor = this.getParent().showerDoor;\r\n if (showerDoor) {\r\n showerDoor.disabled = this.disabled;\r\n }\r\n }\r\n\r\n handleClick() {\r\n super.handleClick();\r\n // this.getParent().getParent().setShowerTubCombo();\r\n //\r\n // let doorWithLiner = false;\r\n // if(this.metaData && this.metaData.length) {\r\n // const activeDoorMetadata = this.metaData.find(metaDataObject => metaDataObject.isFor);\r\n // const showerPanValues = activeDoorMetadata.conditions.find(condition => condition.name === \"BathtubLiner\");\r\n // if (showerPanValues) {\r\n // doorWithLiner = true;\r\n // }\r\n // }\r\n //\r\n // this.getParent().getParent().setLinerActive(doorWithLiner);\r\n // this.featureClicked();\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent();\r\n\r\n if (!showerParent.showerDoor || !showerParent.showerDoor.activeFeature ||\r\n (showerParent.showerDoor.activeFeature.metaData && showerParent.showerDoor.activeFeature.metaData[\"ShowerHandle\"]\r\n && showerParent.showerDoor.activeFeature.metaData[\"ShowerHandle\"][0] === \"None\")) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const layout = this.getParent().layout;\r\n // const showerComboParent = layout.parts[ShowerTubCombo.id];\r\n // const showerParent = this.getParent();\r\n // const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n //\r\n // let showerSize = showerComboParent.showerTubComboIsActive\r\n // ? showerComboParent.showerSize()\r\n // : showerParent.showerSize();\r\n //\r\n // let compatibleValue = \"None\";\r\n // if (showerComboParent.showerTubComboIsActive) {\r\n // if (showerComboParent.bottomTub === ShowerComboTubType.bathtub_liner) {\r\n // compatibleValue = \"BathtubLiner\"\r\n // } else if (showerComboParent.bottomTub === ShowerComboTubType.replacement_tub) {\r\n // compatibleValue = \"ReplacementTub\"\r\n // } else if (showerComboParent.bottomTub === ShowerComboTubType.walk_in_tub) {\r\n // compatibleValue = \"WalkInTub\"\r\n // } else if (showerComboParent.bottomTub === ShowerComboTubType.jetted_tub) {\r\n // compatibleValue = \"JettedTub\"\r\n // }\r\n // }\r\n //\r\n // const conditions = [{\r\n // propName: 'ShowerSize',\r\n // propValue: showerSize\r\n // },{\r\n // propName: 'CompatibleTub',\r\n // propValue: compatibleValue\r\n // }];\r\n //\r\n // if (layoutAbr === LayoutAbbreviation.Large) {\r\n // let showerDimensions = showerComboParent.showerTubComboIsActive\r\n // ? showerComboParent.showerDimensions()\r\n // : showerParent.showerDimensions();\r\n //\r\n // showerDimensions = getMetadataByDimensions(showerDimensions);\r\n //\r\n // const vanity = layout.parts[Vanity.id];\r\n // let counterTopSize = vanity.counterTopSize();\r\n // if (counterTopSize === '72in' && layout.type === 1 && (showerDimensions !== \"Full\" || showerDimensions !== \"Pony\")) {\r\n // showerDimensions = \"Full\"\r\n // }\r\n //\r\n // conditions.push({\r\n // propName: \"EX L\",\r\n // propValue: showerDimensions\r\n // })\r\n // }\r\n //\r\n // if (showerParent.showerDoor && showerParent.showerDoor.activeFeature) { // add shower pan condition only if it is shower\r\n // const doorCondition = showerParent.showerDoor.activeFeature.metaData[\"ShowerDoor\"];\r\n // const handleCondition = showerParent.showerDoor.activeFeature.metaData[\"ShowerHandle\"];\r\n // // console.log('doorCondition', doorCondition);\r\n // if (doorCondition) {\r\n // conditions.push({\r\n // propName: 'ShowerDoor',\r\n // propValue: doorCondition\r\n // })\r\n // }\r\n // if (handleCondition) {\r\n // conditions.push({\r\n // propName: 'ShowerHandle',\r\n // propValue: handleCondition\r\n // })\r\n // }\r\n // }\r\n //\r\n // if (!showerParent.showerTubComboIsActive()) {\r\n // if (showerParent.showerFloorIsActive) {\r\n // conditions.push({\r\n // propName: \"ShowerPan\",\r\n // propValue: \"Threshold\"\r\n // })\r\n // } else if (showerParent.showerPanCombo && showerParent.showerPanCombo.activeFeature) {\r\n // conditions.push({\r\n // propName: \"ShowerPan\",\r\n // propValue: showerParent.showerPanCombo.activeFeature.metaData[\"ShowerPan\"]\r\n // })\r\n // }\r\n // }\r\n // // console.log('conditions', conditions);\r\n // return conditions\r\n // }\r\n\r\n setDefault() {\r\n const shower = this.getParent();\r\n const currentActiveFeature = this.activeFeature;\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n this.setDefaultAccordingToPreviousSelect(shower, filteredFeatures, \"Brantford\");\r\n }\r\n this.rememberPreviousSelection(shower, currentActiveFeature);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.ShowerDoorHandle;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {LayoutAbbreviation} from \"../../constants\";\r\n\r\nexport default class PonyWallCap extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'pony_wall_cap';\r\n this.isPonyWallPart = true;\r\n this.visible = true;\r\n this.partName = 'Pony Wall Cap';\r\n this.translateId = \"visualizer.bathroom.shower.pony_wall_cap\";\r\n this.isStoneFeature = true;\r\n this.disableOnHomeSections = true;\r\n this.layerPriority = 11;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new PonyWallCap());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.PonyWallCap;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().getActiveShowerGroup();\r\n if (showerParent.showerDimensions() !== \"Pony\") {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n const matchesByBindings = this.activeFeature && this.activeFeature.dbFeature && this.activeFeature.s3Bindings && this.activeFeature.dbFeature.s3Bindings.some(binding => {\r\n return binding.layout === LayoutAbbreviation.All || binding.layout === layoutAbr\r\n });\r\n if (matchesByBindings && (this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const parent = this.getParent();\r\n // const layout = parent.layout;\r\n // const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n // if (layoutAbr === LayoutAbbreviation.Small){\r\n // const activeShower = parent.showerTubComboIsActive()\r\n // ? layout.parts[ShowerTubCombo.id]\r\n // : layout.parts[Shower.id];\r\n // const showerSize = activeShower.showerSize(); // 60in, 30in, ..\r\n // // const showerDimensions = activeShower.showerDimensions(); // 15x4, Pony, ...\r\n // return [{\r\n // propName: 'Shower',\r\n // propValue: 'Custom'\r\n // }, {\r\n // propName: 'Size',\r\n // propValue: showerSize\r\n // }];\r\n // }\r\n //\r\n // return []\r\n // }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, '', '', true)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName\r\n && feature.dbFeature.displayName.includesCI(\"Pony Wall Cap - Model[For=Shower=(Custom)=Size=(30in_60in)]\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\" - Placeholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {LayoutAbbreviation} from \"../../constants\";\r\n\r\nexport default class PonyWallGlass extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'pony_wall_glass';\r\n this.isPonyWallPart = true;\r\n this.visible = true;\r\n this.partName = 'Pony Wall Glass';\r\n this.translateId = \"visualizer.bathroom.shower.pony_wall_glass\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n this.layerPriority = 10;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new PonyWallGlass());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.PonyWallGlass;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().getActiveShowerGroup();\r\n if (showerParent.showerDimensions() !== \"Pony\") {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n const matchesByBindings = this.activeFeature && this.activeFeature.dbFeature.s3Bindings.some(binding => {\r\n return binding.layout === LayoutAbbreviation.All || binding.layout === layoutAbr\r\n });\r\n\r\n if (matchesByBindings && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const showerParent = this.getParent();\r\n // const layout = showerParent.layout;\r\n // const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n //\r\n // if (layoutAbr === LayoutAbbreviation.Small) {\r\n // const showerComboParent = this.getParent().layout.parts[ShowerTubCombo.id];\r\n // let showerSize = showerComboParent.showerTubComboIsActive\r\n // ? showerComboParent.showerSize()\r\n // : showerParent.showerSize();\r\n // return [{\r\n // propName: 'Size',\r\n // propValue: showerSize\r\n // }]\r\n // }\r\n //\r\n // return []\r\n // }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Standard Pony Wall\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerBodyType} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport store from \"../../../../../store\";\r\nimport {toggleNotCompatibleView} from \"../../../../../actions/selectionFunctions\";\r\n\r\nexport default class ShowerFloor extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_floor';\r\n this.translateId = \"visualizer.bathroom.shower.shower_floor\";\r\n this.partName = 'Floor';\r\n this.homePageTitle = 'Shower Flooring';\r\n this.dbName = 'ShowerFloor';\r\n this.isStoneFeature = true;\r\n this.selectedByUser = false;\r\n this.layerPriority = 6;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerFloor())\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n shower.showerFloorIsActive = true;\r\n if (shower.layout && shower.showerTubComboIsActive()) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked);\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n if ((!shower.showerFloorIsActive || shower.showerTubComboIsActive()) && !window.location.hash.includes(\"visualizer\")) {\r\n store.dispatch(toggleNotCompatibleView(true));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n\r\n this.getParent().selectedByUser = true;\r\n const threshold = shower.threshold;\r\n if (threshold && !threshold.selectedByUser) {\r\n const thresholdAvailableFeatures = threshold.navigationSubItems();\r\n const currentFloorName = this.getSplittedFeatureName();\r\n const sameThreshold = thresholdAvailableFeatures.find(tr => tr.part.getSplittedFeatureName() === currentFloorName);\r\n if (sameThreshold) {\r\n super.handleClick.call(sameThreshold.part);\r\n threshold.selectedByUser = false;\r\n }\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n if (this.getParent().showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.getParent().customBodyType === ShowerBodyType.Door) {\r\n const showerDoorParent = this.getParent().showerDoor;\r\n if (showerDoorParent && showerDoorParent.activeFeature) {\r\n const currentShowerPanCondition = showerDoorParent.activeFeature.metaData[\"ShowerPan\"];\r\n if (!currentShowerPanCondition || (currentShowerPanCondition && !currentShowerPanCondition.includes(\"Threshold\"))) {\r\n super.hideLayers();\r\n return;\r\n }\r\n }\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerParent = this.getParent();\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n return conditions\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Sahara Autumn Porcelain Tile\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (this.getParent().activeSubType() === Shower.Type.Custom) {\r\n const zIndex = zIndexes.Shower.Floor;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerBodyType} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport store from \"../../../../../store\";\r\nimport {toggleNotCompatibleView} from \"../../../../../actions/selectionFunctions\";\r\n\r\nexport default class Threshold extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'threshold';\r\n this.partName = 'Threshold';\r\n this.translateId = \"visualizer.bathroom.shower.threshold\";\r\n this.homePageTitle = 'Threshold';\r\n this.dbName = 'ShowerPan';\r\n this.isStoneFeature = true;\r\n this.selectedByUser = false;\r\n this.layerPriority = 7;\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n shower.showerFloorIsActive = true;\r\n if (shower.layout && shower.showerTubComboIsActive()) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked);\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n if ((!shower.showerFloorIsActive || shower.showerTubComboIsActive()) && !window.location.hash.includes(\"visualizer\")) {\r\n store.dispatch(toggleNotCompatibleView(true));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n\r\n this.getParent().selectedByUser = true;\r\n const showerFloor = shower.showerFloor;\r\n if (showerFloor && !showerFloor.selectedByUser) {\r\n const showerFloorAvailableFeatures = showerFloor.navigationSubItems();\r\n const currentThresholdName = this.getSplittedFeatureName();\r\n const sameShowerFloor = showerFloorAvailableFeatures.find(navItemFloor => {\r\n return navItemFloor.part.getSplittedFeatureName() === currentThresholdName\r\n });\r\n if (sameShowerFloor) {\r\n super.handleClick.call(sameShowerFloor.part);\r\n showerFloor.selectedByUser = false;\r\n }\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Threshold())\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n if (this.getParent().showerTubComboIsActive() || !this.getParent().showerFloorIsActive) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.getParent().customBodyType === ShowerBodyType.Door) {\r\n const showerDoorParent = this.getParent().showerDoor;\r\n if (showerDoorParent && showerDoorParent.activeFeature) {\r\n const currentShowerPanCondition = showerDoorParent.activeFeature.metaData[\"ShowerPan\"];\r\n if (!currentShowerPanCondition || (currentShowerPanCondition && !currentShowerPanCondition.includes(\"Threshold\"))) {\r\n super.hideLayers();\r\n return;\r\n }\r\n }\r\n }\r\n const conditions = this.getArrayOfConditions();\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const layout = this.getParent().layout;\r\n // const showerSize = this.getParent().showerSize();\r\n // let showerDimensions = getMetadataByDimensions(this.getParent().showerDimensions());\r\n //\r\n // const vanity = layout.parts[Vanity.id];\r\n // let counterTopSize = vanity.counterTopSize();\r\n // if (counterTopSize === '72in' && layout.type === 1 && (showerDimensions !== \"Full\" || showerDimensions !== \"Pony\")) {\r\n // showerDimensions = \"Full\"\r\n // }\r\n //\r\n // return [{\r\n // propName: 'ShowerSize',\r\n // propValue: showerSize\r\n // }, {\r\n // propName: 'EX L',\r\n // propValue: showerDimensions\r\n // }];\r\n // }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerParent = this.getParent();\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (this.getParent().activeSubType() === Shower.Type.Custom) {\r\n const zIndex = zIndexes.Shower.Threshold;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class ShowerDrain extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_drain';\r\n this.partName = 'Shower Drain';\r\n this.translateId = \"visualizer.bathroom.shower.shower_drain\";\r\n this.homePageTitle = 'Shower Drain';\r\n this.visible = false;\r\n this.layerPriority = 14;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerDrain())\r\n }\r\n\r\n setLayers(layout) {\r\n const showerParent = this.getParent();\r\n if (!showerParent.showerFloorIsActive || showerParent.showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n })\r\n return conditions\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n this.activeFeature = filteredFeatures[0];\r\n this.placeholderFeature = filteredFeatures[0];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.ShowerDrain;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {IS_BATHROOM_OLD_BV_SCENE} from \"../../../../../config\";\r\n\r\nexport default class ShowerHead extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_head';\r\n this.partName = 'Shower Head';\r\n this.translateId = \"visualizer.bathroom.shower.shower_head\";\r\n this.layerPriority = 4;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.previouslySelectedFeatures = {\r\n Layout1: {},\r\n Layout4: {},\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerHead());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerTubCombo = this.getParent().layout.parts[ShowerTubCombo.id];\r\n\r\n if (this.getParent().showerTubComboIsActive() && showerTubCombo && showerTubCombo.walkInTub\r\n && showerTubCombo.bottomTub === showerTubCombo.walkInTub.bottomTubId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const showerParent = this.getParent();\r\n // const activeShowerPartId = showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n // const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n // return [{\r\n // propName: \"Shower\",\r\n // propValue: showerParent.showerTubComboIsActive()\r\n // ? [\"Tub\"]\r\n // : showerParent.isComplete() ? \"Complete\" : \"Custom\"\r\n // }, {\r\n // propName: 'ShowerSize',\r\n // propValue: showerSize\r\n // }]\r\n // }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerParent = this.getParent();\r\n if (!IS_BATHROOM_OLD_BV_SCENE) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Shower.ShowerHead;\r\n }\r\n }\r\n}\r\n","import {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {METADATA, PAN_POSITIONS} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class SoapDish extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'soap_dish';\r\n this.partName = 'Soap Dish';\r\n this.translateId = \"visualizer.bathroom.accessories.soap_dish\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {\r\n [PAN_POSITIONS[0]]: null,\r\n [PAN_POSITIONS[1]]: null,\r\n [PAN_POSITIONS[2]]: null,\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : METADATA.LeftSide;\r\n if (Array.isArray(dbFeature.metaData[\"ShowerSize\"])\r\n && (dbFeature.metaData[\"ShowerSize\"].includes('30')\r\n || dbFeature.metaData[\"ShowerSize\"].includes('30in')\r\n || dbFeature.metaData[\"ShowerSize\"].includes('36')\r\n || dbFeature.metaData[\"ShowerSize\"].includes('36in'))) {\r\n // we don't have L uploaded for small Shower sizes, only C, but we show L features in the navigation\r\n dbFeature.metaData[\"Side\"] = [METADATA.LeftSide];\r\n dbFeature.metaData[\"layerPosition\"] = METADATA.LeftSide;\r\n }\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === PAN_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new SoapDish(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n disabledClick() {\r\n if (!this.disabled && this.activeFeature) {\r\n this.activeFeature.handleClick() // check soapDish\r\n }\r\n }\r\n\r\n availableFeatures(features) {\r\n return features.filter(feature => feature.partNumber === 1)\r\n }\r\n\r\n handleClick() { // \"this\" is feature!! not the feature group\r\n super.handleClick();\r\n const parent = this.getParent();\r\n const accessoriesParent = parent.getParent();\r\n const showerParent = accessoriesParent.layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if ((showerSize === \"30\" || showerSize === \"36\") && parent.activeFeature) {\r\n parent.layerPositions[parent.activeFeature.metaData[\"layerPosition\"]] = parent.activeFeature;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n const showerComboParent = layout.parts[ShowerTubCombo.id];\r\n\r\n if (showerParent && showerComboParent && showerParent.showerTubComboIsActive() && showerComboParent.bottomTub === \"walk_in_tub\") {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if ((this.activeFeature && this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature && this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.zIndex = zIndexes.Accessories.SoapDish + keyIndex*10;\r\n }\r\n })\r\n }\r\n }\r\n}\r\n","import {SIDE_POSITIONS} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class CornerCaddie extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'corner_caddie';\r\n this.partName = 'Corner Caddie';\r\n this.translateId = \"visualizer.bathroom.accessories.corner_caddie\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {\r\n [SIDE_POSITIONS[0]]: null,\r\n [SIDE_POSITIONS[1]]: null,\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === SIDE_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new CornerCaddie(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n availableFeatures(features) {\r\n return features.filter(feature => feature.partNumber === 1)\r\n }\r\n\r\n handleClick() {\r\n const accessoriesParent = this.getParent().getParent();\r\n accessoriesParent.caddie_type = this.partId;\r\n super.handleClick();\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const accessoriesParent = this.getParent();\r\n if (accessoriesParent.caddie_type !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n // this.checkIfFeaturePartIsMatching();\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.zIndex = zIndexes.Accessories.CornerCaddie + keyIndex*10;\r\n }\r\n })\r\n }\r\n }\r\n}\r\n","import {SIDE_POSITIONS} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class LargeCornerCaddie extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'large_corner_caddie';\r\n this.partName = 'Large Corner Caddie';\r\n this.translateId = \"visualizer.bathroom.accessories.large_corner_caddie\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {\r\n [SIDE_POSITIONS[0]]: null,\r\n [SIDE_POSITIONS[1]]: null,\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === SIDE_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new LargeCornerCaddie(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n handleClick() {\r\n const accessoriesParent = this.getParent().getParent();\r\n accessoriesParent.caddie_type = this.partId;\r\n super.handleClick();\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const accessoriesParent = this.getParent();\r\n if (accessoriesParent.caddie_type !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n // this.checkIfFeaturePartIsMatching();\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.zIndex = zIndexes.Accessories.LargeCornerCaddie + keyIndex*10;\r\n }\r\n })\r\n }\r\n }\r\n\r\n}\r\n","import {METADATA, PAN_POSITIONS, SIDE_POSITIONS} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n// import {Shower} from \"../../parts/shower\";\r\n\r\nexport default class GrabBar extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'grab_bar';\r\n this.partName = 'Grab Bar';\r\n this.translateId = \"visualizer.bathroom.accessories.grab_bar\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {\r\n [PAN_POSITIONS[0]]: null,\r\n [PAN_POSITIONS[1]]: null,\r\n [PAN_POSITIONS[2]]: null,\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Shower\"]) {\r\n dbFeature.metaData[\"Shower\"] = [\"Shower\"];\r\n }\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : METADATA.LeftSide;\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === PAN_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new GrabBar(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n disabledClick() {\r\n if (!this.disabled && this.activeFeature) {\r\n this.activeFeature.handleClick() // check soapDish\r\n }\r\n }\r\n\r\n availableFeatures(features) {\r\n return features.filter(feature => feature.partNumber === 1)\r\n }\r\n\r\n handleClick(ignoreLocked) { // \"this\" is feature!! not the feature group\r\n super.handleClick(ignoreLocked);\r\n // const parent = this.getParent();\r\n // const accessoriesParent = parent.getParent();\r\n // const showerParent = accessoriesParent.layout.parts[Shower.id];\r\n // const showerSize = showerParent.showerSize();\r\n // if (showerSize !== \"60\" && parent.activeFeature) {\r\n // parent.layerPositions[parent.activeFeature.metaData[\"layerPosition\"]] = parent.activeFeature;\r\n // }\r\n // parent.checkRelatedFeatureGroupPositions(this.metaData[\"layerPosition\"]);\r\n }\r\n\r\n checkCurrentPositions(position) {\r\n const feature = this.layerPositions[position];\r\n if (!feature) {\r\n return\r\n }\r\n const nameSplitted = feature.dbFeature.sharedFeatureName.split(\" \");\r\n const size = nameSplitted[nameSplitted.length - 1] ? nameSplitted[nameSplitted.length - 1].replace(\"in\", \"\") : \"\";\r\n const newPosition = position === SIDE_POSITIONS[0] ? SIDE_POSITIONS[1] : SIDE_POSITIONS[0];\r\n if (!size || !this.layerPositions[newPosition]) {\r\n return\r\n }\r\n if (this.layerPositions[newPosition]) {\r\n const nameSplitted2 = this.layerPositions[newPosition].dbFeature.sharedFeatureName.split(\" \");\r\n const size2 = nameSplitted2[nameSplitted2.length - 1] ? nameSplitted2[nameSplitted2.length - 1].replace(\"in\", \"\") : \"\";\r\n if (!size || (+size2 === 12 && +size === 12)) { // last chance to keep other side layer\r\n return;\r\n }\r\n }\r\n this.layerPositions[newPosition] = null;\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.zIndex = zIndexes.Accessories.GrabBar + keyIndex*10;\r\n }\r\n })\r\n }\r\n }\r\n\r\n // showLayerPositionsModal() {\r\n // const showerParent = this.getParent().layout.parts[Shower.id];\r\n // return showerParent.showerSize() === \"60\"\r\n // }\r\n\r\n}\r\n","import {CORNER_SHELVES_POSITIONS} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class CornerShelf extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = \"corner_shelf\";\r\n this.partName = \"Corner Shelf\";\r\n this.translateId = \"visualizer.bathroom.accessories.corner_shelf\";\r\n this.dbName = \"Small Corner Shelf\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {};\r\n CORNER_SHELVES_POSITIONS.forEach(pos => {\r\n this.layerPositions[pos] = null\r\n })\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = (dbFeature.metaData[\"Side\"] && dbFeature.metaData[\"Part\"])\r\n ? dbFeature.metaData[\"Side\"][0] + dbFeature.metaData[\"Part\"][0]\r\n : \"\"\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === CORNER_SHELVES_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new CornerShelf(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n handleClick() {\r\n const accessoriesParent = this.getParent().getParent();\r\n accessoriesParent.caddie_type = this.partId;\r\n super.handleClick();\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const accessoriesParent = this.getParent();\r\n if (accessoriesParent.caddie_type !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n // this.checkIfFeaturePartIsMatching();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n\r\n // if (this.layerPositions) {\r\n // const windowParent = this.getParent().layout.parts.Window;\r\n // if (windowParent && windowParent.windowKits && !windowParent.windowKits.disabled) {\r\n // Object.keys(this.layerPositions).forEach(key => {\r\n // if (!key.includes(\"3\") && this.layerPositions[key]) {\r\n // this.layerPositions[key].layer.src = '';\r\n // }\r\n // })\r\n // }\r\n // }\r\n\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.zIndex = zIndexes.Accessories.CornerShelf1 + keyIndex*10;\r\n }\r\n })\r\n }\r\n }\r\n\r\n showLayerPositionsModal() {\r\n return true\r\n }\r\n\r\n}\r\n","import AccessoryCommon from \"./accessoryCommon\";\r\n// import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class ShowerPod extends AccessoryCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_pod';\r\n this.partName = 'Shower Pod';\r\n this.translateId = \"visualizer.bathroom.accessories.shower_pod\";\r\n this.dbName = document.kvConfig.userId === 157639 ? 'Storage Pods' : 'Storage Pod'; // window.location.href.includes(\"american_standard_website\")\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n handleClick() { // \"this\" is feature!! not the feature group\r\n const parent = this.getParent();\r\n const accessoriesParent = parent.getParent();\r\n if (accessoriesParent && accessoriesParent.largeShelf && !accessoriesParent.largeShelf.disabled) {\r\n accessoriesParent.largeShelf.disabled = true;\r\n }\r\n super.handleClick();\r\n }\r\n\r\n load(dbFeature) {\r\n if (document.kvConfig.userId !== 157639 && dbFeature.groupName !== 'Storage Pod') {\r\n return false\r\n }\r\n return super.load_(dbFeature, new ShowerPod());\r\n }\r\n\r\n // navigationSubItems(filters, searchText) {\r\n // const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n // const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n // const parent = this.getParent();\r\n // featuresToDisplay.forEach(feature => {\r\n // if (parent.layout.parts.Window && parent.layout.parts.Window.windowKits && !parent.layout.parts.Window.windowKits.disabled) {\r\n // feature.matchesMetaFailed = true;\r\n // } else if (feature.matchesMetaFailed) {\r\n // feature.matchesMetaFailed = false;\r\n // }\r\n // });\r\n // return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n // }\r\n\r\n handleChangeParent(nonCompatibleWith) {\r\n if (nonCompatibleWith === \"Window Kit\") {\r\n const showerPodParent = this.getParent();\r\n const accessoriesParent = showerPodParent.getParent();\r\n accessoriesParent.layout.parts.Window.windowKits.disabled = true;\r\n showerPodParent.disabled = false;\r\n this.handleClick();\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const accessoriesParent = this.getParent();\r\n const windowParent = accessoriesParent.layout.parts.Window;\r\n if (windowParent && windowParent.windowKits && !windowParent.windowKits.disabled) {\r\n windowParent.windowKits.disabled = true;\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Accessories.ShowerPod;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n}\r\n","import AccessoryCommon from \"./accessoryCommon\";\r\nimport {SIDE_POSITIONS} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\n\r\nexport default class Seats extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'shower_seats';\r\n this.partName = 'Seats';\r\n this.dbName = 'Flip-Up Seat';\r\n this.translateId = \"visualizer.bathroom.accessories.shower_seats\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {\r\n [SIDE_POSITIONS[0]]: null,\r\n [SIDE_POSITIONS[1]]: null,\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.groupName !== \"Flip-Up Seat\") {\r\n return false\r\n }\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === SIDE_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new Seats(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n disabledClick() {\r\n Object.keys(this.layerPositions).forEach(position => {\r\n if (this.layerPositions[position] && this.layerPositions[position].metaData[\"layerPosition\"]) {\r\n this.checkRelatedFeatureGroupPositions(this.layerPositions[position].metaData[\"layerPosition\"]);\r\n }\r\n })\r\n }\r\n\r\n handleClick() { // \"this\" is feature!! not the feature group\r\n super.handleClick();\r\n const parent = this.getParent();\r\n const showerComboParent = parent.getParent().layout.parts[ShowerTubCombo.id]\r\n if (showerComboParent.showerTubComboIsActive) {\r\n showerComboParent.showerTubComboIsActive = false;\r\n }\r\n parent.checkRelatedFeatureGroupPositions(this.metaData[\"layerPosition\"]);\r\n }\r\n\r\n setLayers(layout) {\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n if (showerParent && showerParent.showerTubComboIsActive()) { // shower tub combo - remove\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.zIndex = zIndexes.Accessories.Seats + keyIndex*10;\r\n }\r\n })\r\n }\r\n }\r\n\r\n}\r\n","import AccessoryCommon from \"./accessoryCommon\";\r\nimport {Shower} from \"../../parts/shower\";\r\n// import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class ShowerRod extends AccessoryCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_rod';\r\n this.partName = 'Shower Rod';\r\n this.translateId = \"visualizer.bathroom.accessories.shower_rod\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerRod());\r\n }\r\n\r\n handleClick(ignoreLocked = false) {\r\n const parent = this.getParent()\r\n const showerParent = parent.getParent().layout.parts[Shower.id];\r\n if (showerParent && showerParent.showerDoor && !showerParent.showerDoor.disabled) { // shower tub combo - remove\r\n showerParent.showerDoor.disabled = true\r\n }\r\n super.handleClick(ignoreLocked);\r\n }\r\n\r\n // navigationSubItems(filters, searchText) {\r\n // const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n // const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n // const parent = this.getParent();\r\n // featuresToDisplay.forEach(feature => {\r\n // if (parent.layout.parts.Window && parent.layout.parts.Window.windowKits && !parent.layout.parts.Window.windowKits.disabled) {\r\n // feature.matchesMetaFailed = true;\r\n // } else if (feature.matchesMetaFailed) {\r\n // feature.matchesMetaFailed = false;\r\n // }\r\n // });\r\n // return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n // }\r\n\r\n // handleChangeParent(nonCompatibleWith) {\r\n // if (nonCompatibleWith === \"Window Kit\") {\r\n // const showerRodParent = this.getParent();\r\n // const accessoriesParent = showerRodParent.getParent();\r\n // accessoriesParent.layout.parts.Window.windowKits.disabled = true;\r\n // showerRodParent.disabled = false;\r\n // this.handleClick();\r\n // }\r\n // }\r\n\r\n disabledClick() {\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n if (!this.disabled && showerParent && showerParent.showerDoor && !showerParent.showerDoor.disabled) { // shower tub combo - remove\r\n showerParent.showerDoor.disabled = true\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Accessories.ShowerRod;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class WindowBody extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'window_body';\r\n this.partName = 'Window';\r\n this.translateId = \"visualizer.bathroom.window\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new WindowBody());\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Accessories.WindowBody;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Shower} from \"../../parts/shower\";\r\n// import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {ShowerAccessories} from \"../../parts/showerAccessories\";\r\nimport {CORNER_SHELVES_POSITIONS} from \"../../constants\";\r\n\r\nexport default class WindowKits extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"window_kits\";\r\n this.dbName = \"Window Kit\";\r\n this.partName = \"Window Kits\";\r\n this.translateId = \"visualizer.bathroom.window.kits\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new WindowKits());\r\n }\r\n\r\n // navigationSubItems(filters, searchText) {\r\n // const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n // const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n // const windowParent = this.getParent();\r\n // const accessoriesParent = windowParent.layout.parts[ShowerAccessories.id];\r\n // featuresToDisplay.forEach(feature => {\r\n // if (accessoriesParent && accessoriesParent.showerPod && !accessoriesParent.showerPod.disabled) {\r\n // feature.matchesMetaFailed = \"shower_pod\";\r\n // } else if (accessoriesParent.cornerShelf && !accessoriesParent.cornerShelf.disabled\r\n // && CORNER_SHELVES_POSITIONS.some(pos => accessoriesParent.cornerShelf.layerPositions[pos] && !pos.includes(\"3\"))) {\r\n // feature.matchesMetaFailed = \"corner_shelf\";\r\n // } else if (feature.matchesMetaFailed) {\r\n // feature.matchesMetaFailed = false;\r\n // }\r\n // });\r\n // return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n // }\r\n\r\n // handleChangeParent(nonCompatibleWith) {\r\n // if (nonCompatibleWith === \"Shower Pod\") {\r\n //\r\n // }\r\n // }\r\n handleChangeParent() {\r\n // this.removeInterferingParts();\r\n this.getParent().disabled = false;\r\n this.handleClick();\r\n }\r\n\r\n removeInterferingParts = () => {\r\n const kitsParent = this.getParent();\r\n const windowParent = kitsParent.getParent();\r\n const accessoriesParent = windowParent.layout.parts[ShowerAccessories.id];\r\n if (accessoriesParent) {\r\n if (accessoriesParent.showerPod) {\r\n accessoriesParent.showerPod.disabled = true;\r\n }\r\n if (accessoriesParent.cornerShelf) {\r\n CORNER_SHELVES_POSITIONS.forEach(pos => {\r\n if (accessoriesParent.cornerShelf.layerPositions[pos] && !pos.includes(\"3\")) {\r\n accessoriesParent.cornerShelf.layerPositions[pos] = null;\r\n }\r\n })\r\n }\r\n }\r\n }\r\n\r\n // disabledClick() {\r\n // if (!this.disabled) {\r\n // this.removeInterferingParts();\r\n // }\r\n // }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const windowParent = this.getParent();\r\n const layout = windowParent.layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n // if (windowBody && this.windowNeededLayouts.includes(layout.type) && document.kvConfig.toolVersion !== 5) {\r\n // conditions.push({\r\n // propName: \"Window\",\r\n // propValue: (windowBody && windowBody.activeFeature && windowBody.disabled) ? \"Off\" : \"On\"\r\n // })\r\n // }\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Accessories.WindowKits;\r\n }\r\n }\r\n}\r\n","import AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class LargeShelf extends AccessoryCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'large_shelf';\r\n this.partName = 'Large Shelf';\r\n this.translateId = \"visualizer.bathroom.accessories.large_shelf\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new LargeShelf());\r\n }\r\n\r\n handleClick() { // \"this\" is feature!! not the feature group\r\n const parent = this.getParent();\r\n const accessoriesParent = parent.getParent();\r\n if (accessoriesParent && accessoriesParent.showerPod && !accessoriesParent.showerPod.disabled) {\r\n accessoriesParent.showerPod.disabled = true;\r\n }\r\n super.handleClick();\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Accessories.LargeShelf;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class TowelBar extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'towel_bar';\r\n this.partName = 'Towel Bar';\r\n this.translateId = \"visualizer.bathroom.accessories.towel_bar\";\r\n this.canBeDisabled = true;\r\n // if (isChild) {\r\n // createParentPositions(this);\r\n // }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Accessories.TowelBar;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class ShampooShelf extends AccessoryCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shampoo_shelf';\r\n this.partName = 'Shampoo Shelf';\r\n this.translateId = \"visualizer.bathroom.accessories.shampoo_shelf\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShampooShelf());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Accessories.ShampooShelf;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {toiletThumbnail} from '../../../bvComponent/core/assets';\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\nimport {Shower} from \"./shower\";\r\nimport {IS_BATHROOM_OLD_BV_SCENE} from \"../../../../config\";\r\n\r\nexport class Toilet extends Part {\r\n static id = 'Toilet';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Toilet';\r\n this.translateId = \"visualizer.bathroom.toilet\";\r\n this.homePageTitle = 'Toilets';\r\n this.partThumbnail = toiletThumbnail;\r\n this.toilet = null;\r\n this.paperHolder = null;\r\n this.relatedItems = [];\r\n\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Toilet\": {\r\n relatedItemName = \"toilet\";\r\n RelatedItemClass = ToiletBody;\r\n break;\r\n }\r\n case \"Paper Holder\": {\r\n relatedItemName = \"paperHolder\";\r\n RelatedItemClass = PaperHolder;\r\n break;\r\n }\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts() {\r\n return this.relatedItems.map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n return this.subParts()[0]\r\n }\r\n\r\n setDefault(layout) {\r\n this.relatedItems.forEach(_ => _.setDefault(layout));\r\n }\r\n}\r\n\r\nclass ToiletBody extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'toilet';\r\n this.partName = 'Toilet';\r\n this.translateId = \"visualizer.bathroom.toilet\";\r\n this.homePageTitle = 'Toilets';\r\n this.canBeDisabled = true;\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize && !IS_BATHROOM_OLD_BV_SCENE) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Toilet;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Toilet;\r\n }\r\n }\r\n}\r\n\r\n\r\nclass PaperHolder extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'paper_holder';\r\n this.partName = 'Paper Holder';\r\n this.translateId = \"visualizer.bathroom.accessories.paper_holder\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.PaperHolder;\r\n }\r\n }\r\n}\r\n\r\n\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {floorThumbnail} from \"../../../kvComponent/core/assets\";\r\n\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\nimport {Shower} from \"./shower\";\r\n\r\nexport default class Floor extends Part {\r\n static id = 'Floor';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.partId = 'bathroom_floor';\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.bathroom.floor\";\r\n this.partThumbnail = floorThumbnail;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Floor\":\r\n relatedItemName = \"floorBody\";\r\n RelatedItemClass = FloorBody;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n}\r\n\r\nclass FloorBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'bathroom_floor';\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.bathroom.floor\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new FloorBody());\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize && layout.type !== 4) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Background.Floor;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n\r\n\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {LayoutType} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class LeftWall extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'left_wall';\r\n this.partName = 'Left Wall';\r\n this.translateId = \"visualizer.bathroom.walls.left_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n this.partsLayouts = [LayoutType.Layout4];\r\n }\r\n\r\n load(dbFeature) {\r\n const partsRoomLayouts = this.partsLayouts.map(pl => \"Layout\"+pl);\r\n const isPartFeature = !dbFeature.metaData[\"RoomLayout\"] || partsRoomLayouts.some(layoutType => {\r\n return dbFeature.metaData[\"RoomLayout\"].includes(layoutType)\r\n });\r\n if (isPartFeature) {\r\n const part1 = dbFeature.metaData[\"LayerType\"] && dbFeature.metaData[\"MirrorSize\"];\r\n const partNumber = part1 ? 1 : 2;\r\n return super.load_(dbFeature, new LeftWall(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n return super.load_(dbFeature, new LeftWall(false, 1, true, \"features\"));\r\n }\r\n\r\n availableFeatures(features) {\r\n return features.filter(feature => feature.partNumber === 1)\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n this.checkIfFeaturePartIsMatching();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions(); // roomLayout\r\n const shower = this.getParent().layout.parts[Shower.id];\r\n if (shower && shower.showerSize()) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: shower.showerSize()\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const layout = this.getParent().layout;\r\n const isPartsLayout = this.partsLayouts.includes(layout.type);\r\n if (zIndexes) {\r\n const zIndex = isPartsLayout ? zIndexes.Walls.LeftWall : zIndexes.Background.LeftWall;\r\n const zIndex2 = zIndexes.Background.LeftWall;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.zIndex = zIndex2;\r\n }\r\n })\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {LayoutType} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {IS_BATHROOM_OLD_BV_SCENE} from \"../../../../../config\";\r\n\r\nexport default class RightWall extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'right_wall';\r\n this.partName = 'Right Wall';\r\n this.translateId = \"visualizer.bathroom.walls.right_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n this.partsLayouts = [LayoutType.Layout1];\r\n }\r\n\r\n load(dbFeature) {\r\n const partsRoomLayouts = this.partsLayouts.map(pl => \"Layout\"+pl);\r\n const isPartFeature = !dbFeature.metaData[\"RoomLayout\"] || partsRoomLayouts.some(layoutType => {\r\n return dbFeature.metaData[\"RoomLayout\"].includes(layoutType)\r\n });\r\n if (isPartFeature) {\r\n const part1 = dbFeature.metaData[\"LayerType\"] && dbFeature.metaData[\"MirrorSize\"];\r\n const partNumber = part1 ? 1 : 2;\r\n return super.load_(dbFeature, new RightWall(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n return super.load_(dbFeature, new RightWall(false, 1, true, \"features\"));\r\n }\r\n\r\n availableFeatures(cabinetFeatures) {\r\n return cabinetFeatures.filter(cabinetFeature => cabinetFeature.partNumber === 1)\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n this.checkIfFeaturePartIsMatching();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const wallsParent = this.getParent();\r\n const layout = wallsParent.layout;\r\n const mirror = layout.parts[Vanity.id] && layout.parts[Vanity.id].mirror;\r\n if (this.partsLayouts.includes(layout.type) && mirror && mirror.activeFeature && mirror.activeFeature.dbFeature.metaData[\"MirrorSize\"]) {\r\n conditions.push({\r\n propName: \"MirrorSize\",\r\n propValue: IS_BATHROOM_OLD_BV_SCENE\r\n ? mirror.activeFeature.dbFeature.metaData[\"MirrorSize\"][0]\r\n : mirror.activeFeature.dbFeature.metaData[\"MirrorSize\"][0] === \"32\" ? \"48\" : mirror.activeFeature.dbFeature.metaData[\"MirrorSize\"][0]\r\n })\r\n }\r\n const shower = this.getParent().layout.parts[Shower.id];\r\n if (shower && shower.showerSize()) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: shower.showerSize()\r\n })\r\n }\r\n return conditions;\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const layout = this.getParent().layout;\r\n const isPartsLayout = this.partsLayouts.includes(layout.type);\r\n if (zIndexes) {\r\n const zIndex = isPartsLayout ? zIndexes.Walls.RightWall : zIndexes.Background.RightWall;\r\n const zIndex2 = zIndexes.Background.RightWall;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.zIndex = zIndex2;\r\n }\r\n })\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class CenterWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_wall';\r\n this.partName = 'Center Wall';\r\n this.translateId = \"visualizer.bathroom.walls.center_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new CenterWall());\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions(); // roomLayout\r\n const shower = this.getParent().layout.parts[Shower.id];\r\n if (shower && shower.showerSize()) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: shower.showerSize()\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Background.CenterWall;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {Shower} from \"../../parts/shower\";\r\nimport {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class CeilingPanels extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'ceiling_panels';\r\n this.partName = 'Ceiling Panels';\r\n this.translateId = \"visualizer.bathroom.ceiling_panels\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData && dbFeature.metaData[\"Coords\"]) {\r\n dbFeature.metaData[\"Coords\"] = null;\r\n }\r\n return super.load_(dbFeature, new CeilingPanels());\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions(); // roomLayout\r\n const shower = this.getParent().layout.parts[Shower.id];\r\n if (shower && shower.showerSize()) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: shower.showerSize()\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Walls.CeilingPanels;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {wallsThumbnail} from \"../../../bvComponent/core/assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\n\r\n// import ToiletPaper from \"../subparts/globals/toiletPaper\";\r\n// import Towel from \"../subparts/globals/towel\";\r\nimport LightFixture from \"../subparts/globals/lightFixture\";\r\nimport DecorWindow from \"../subparts/globals/decorWindow\";\r\nimport DecorSeat from \"../subparts/globals/decorSeat\";\r\n// import ToiletPaperHolder from \"../subparts/globals/toiletPaperHolder\";\r\nimport LampFixture from \"../subparts/globals/lampFixture\";\r\nimport Attachment from \"../subparts/globals/attachment\";\r\n\r\nexport default class Globals extends Part {\r\n static id = \"Globals\";\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = \"Globals\";\r\n this.partThumbnail = wallsThumbnail;\r\n\r\n // related items\r\n // this.toiletPaper = null;\r\n this.towel = null;\r\n this.lightFixture = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Attachment\": {\r\n relatedItemName = \"attachment\";\r\n RelatedItemClass = Attachment;\r\n break;\r\n }\r\n case \"Decore\": {\r\n // if (dbFeature.displayName.includes(\"Towel\")) {\r\n // relatedItemName = \"towel\";\r\n // RelatedItemClass = Towel;\r\n // } else if (dbFeature.displayName.includes(\"Toilet Paper\")) {\r\n // relatedItemName = \"toiletPaper\";\r\n // RelatedItemClass = ToiletPaper;\r\n // } else if (dbFeature.displayName.includes(\"Toilet Paper Holder\")) {\r\n // relatedItemName = \"toiletPaperHolder\";\r\n // RelatedItemClass = ToiletPaperHolder;\r\n // } else\r\n if (dbFeature.displayName.includes(\"Light Fixture\")) {\r\n relatedItemName = \"lightFixture\";\r\n RelatedItemClass = LightFixture;\r\n } else if (dbFeature.displayName.includes(\"Lamp fixture\")) {\r\n relatedItemName = \"lampFixture\";\r\n RelatedItemClass = LampFixture;\r\n } else if (dbFeature.displayName.includes(\"Seat\")) {\r\n relatedItemName = \"lightFixture\";\r\n RelatedItemClass = DecorSeat;\r\n } else if (dbFeature.displayName.includes(\"Window\")) {\r\n relatedItemName = \"decorWindow\";\r\n RelatedItemClass = DecorWindow;\r\n }\r\n break;\r\n }\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {}\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class LightFixture extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"light_fixture\";\r\n this.partName = \"Light Fixture\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new LightFixture());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.LightFixture;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {LayoutType} from \"../../constants\";\r\n\r\nexport default class DecorWindow extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"decor_window\";\r\n this.partName = \"Decor Window\";\r\n if (isChild) {\r\n this.showOnLayouts = [LayoutType.Layout4];\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new DecorWindow());\r\n }\r\n\r\n setLayers(layout) {\r\n if (!this.showOnLayouts.includes(layout.type)) {\r\n super.hideLayers();\r\n return;\r\n }\r\n super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.DecorWindow;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class DecorSeat extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"decor_seat\";\r\n this.partName = \"Decor Seat\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new DecorSeat());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.DecorSeat;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class LampFixture extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"lamp_fixture\";\r\n this.partName = \"Lamp Fixture\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new LampFixture());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.LampFixture;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport isEqual from \"lodash/isEqual\";\r\nimport {METADATA} from \"../../constants\";\r\n\r\nexport default class Attachment extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"attachment\";\r\n this.partName = \"Attachment\";\r\n this.hasAdditionalParts = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Side\"] && dbFeature.sharedFeatureName.includes(\"ountertop\")) {\r\n dbFeature.metaData[\"Side\"] = [METADATA.LeftSide];\r\n }\r\n return super.load(dbFeature);\r\n }\r\n\r\n checkIfFeaturePartIsMatching() {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.Towel;\r\n }\r\n let increase = 0;\r\n if (this.hasAdditionalParts && this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.layer.zIndex = zIndexes.Globals.Towel + increase;\r\n increase = increase + 0.000001;\r\n });\r\n // console.log(\"this.activeFeatureParts\", this.activeFeatureParts);\r\n }\r\n }\r\n\r\n setActiveFeatureParts() {\r\n const layout = this.getParent().layout;\r\n const activeFeatures = layout.getActiveFeatures(true, true);\r\n let matchingFeatures = [];\r\n const currentConditions = this.getArrayOfConditions();\r\n const selectFrom = this.features.filter(attFeature => attFeature.matchesMetaForArrayOfConditions(currentConditions));\r\n // console.log(\"selectFrom\", selectFrom);\r\n activeFeatures.forEach(cartItem => {\r\n if (!cartItem.cartFeature || cartItem.featureGroup.disabled || !cartItem.cartFeature.metaData[\"MatchingFeature\"]\r\n || (cartItem.partId === this.partId)) {\r\n return\r\n }\r\n selectFrom.forEach(attFeature => {\r\n if (isEqual(attFeature.metaData[\"MatchingFeature\"], cartItem.cartFeature.metaData[\"MatchingFeature\"])\r\n && isEqual(attFeature.metaData[\"Side\"], cartItem.cartFeature.metaData[\"Side\"])\r\n && !matchingFeatures.some(alreadyAddedFeature => {\r\n return isEqual(attFeature.metaData[\"MatchingFeature\"], alreadyAddedFeature.metaData[\"MatchingFeature\"])\r\n && isEqual(attFeature.metaData[\"Side\"], alreadyAddedFeature.metaData[\"Side\"])\r\n })) {\r\n matchingFeatures.push(attFeature)\r\n }\r\n })\r\n })\r\n return matchingFeatures;\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\n// import {BathTubType, LayoutType} from \"../constants\";\r\nimport {bathTubThumbnail} from \"../../../bvComponent/core/assets\";\r\n\r\nimport BathTubBody from \"../subparts/bathTub/bathTubBody\";\r\nimport BathTubFixture from \"../subparts/bathTub/bathTubFixture\";\r\n\r\nexport class Bathtub extends Part {\r\n static id = 'Bathtub';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Bathtub';\r\n this.translateId = \"visualizer.bathroom.bathtub\";\r\n this.partThumbnail = bathTubThumbnail;\r\n this.bathTubBody = null;\r\n this.bathTubFixture = null;\r\n this.relatedItems = [];\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Bathtub\":\r\n relatedItemName = \"bathTubBody\";\r\n RelatedItemClass = BathTubBody;\r\n break;\r\n case \"Bathtub Fixture\":\r\n relatedItemName = \"bathTubFixture\";\r\n RelatedItemClass = BathTubFixture;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n changeLayout() {\r\n // changeLayout(layoutType) {\r\n // if (layoutType === LayoutType.Layout1 && this.bathTubBody) {\r\n // // this.activeSubType_ = BathTubType.Custom60in;\r\n // // this.bathTubType_ = BathTubType.Custom60in;\r\n // if (!this.layout.parts.Shower.showerBody.disabled) { // disable bathtub if shower is active\r\n // if (this.bathTubBody) {\r\n // this.bathTubBody.disabled = true;\r\n // }\r\n // }\r\n // } else {\r\n // if (this.bathTubBody) {\r\n // this.bathTubBody.disabled = false;\r\n // }\r\n // }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class BathTubBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"bathtub_body\";\r\n this.partName = 'Bathtub';\r\n this.translateId = \"visualizer.bathroom.bathtub.bathtub\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BathTubBody());\r\n }\r\n\r\n disabledClick() {\r\n const bathTubFixture = this.getParent().bathTubFixture;\r\n if (bathTubFixture) {\r\n bathTubFixture.disabled = this.disabled;\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Bathtub.BathTubBody;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class BathTubFixture extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"bathtub_fixture\";\r\n this.partName = \"Fixture\";\r\n this.translateId = \"visualizer.bathroom.bathtub.bathtub_fixture\";\r\n this.dbName = \"Bathtub Fixture\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BathTubFixture());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Bathtub.BathTubFixture;\r\n }\r\n }\r\n}\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport classNames from 'classnames';\r\nimport $ from 'jquery';\r\n\r\nimport {\r\n toggleDesktopNavigation,\r\n setActiveNavigationNames,\r\n setModuleContextMenuType,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setNavigationViewType,\r\n setNavigationLoading,\r\n toggleNavItemPositionModal\r\n} from \"../../../actions/navigationFunctions\";\r\nimport {setDefaultSelectionGroup, changeActivePartRelatedItemIndex} from \"../../../actions/actionFunctions\";\r\nimport DesktopNavigationCommon from \"../../visComponents/navigation/desktopNavigationCommon\";\r\nimport Z from \"../core/zIndex\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nimport LockedView from \"../../common/lockedView\";\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport ContextMenu from \"./contextMenu\";\r\n// import CabinetContextMenu from \"./cabinetContextMenu\";\r\nimport MobileMenuSelect from \"../../visComponents/navigation/mobile/mobileMenuSelect\";\r\nimport {setVisualizerTutorialStep, showVisualizerTutorial} from \"../../../actions/tutorialFunctions\";\r\nimport {Vanity} from \"../core/parts/vanity\";\r\nimport NavItemPositionModal from \"../../visComponents/navigation/navItemPositionModal\";\r\n\r\nclass DesktopNavigation extends DesktopNavigationCommon {\r\n\r\n bindCanvasClick = (event) => {\r\n const layout = getCurrentLayout();\r\n // const canvas = document.getElementById(this.props.canvasId);\r\n this.props.setHoveredLayer(event);\r\n\r\n if (document.hoveredLayer) {\r\n\r\n const layoutType = layout.getCurrentLayoutName();\r\n\r\n const hoveredZone = Z.getMenuByHoveredLayer(layoutType, document.hoveredLayer);\r\n\r\n // console.log('hoveredZone', hoveredZone);\r\n\r\n if (hoveredZone) {\r\n if ((hoveredZone === \"shower_custom\"\r\n || hoveredZone === \"vanity_custom\"\r\n || hoveredZone === \"bathtub_custom\"\r\n || hoveredZone === \"shower_combo\"\r\n || hoveredZone === \"shower_pony_wall\"\r\n || hoveredZone === \"wall_b_custom\"\r\n || hoveredZone === \"left_wall_custom\")\r\n && !this.state.showNavigation\r\n ) {\r\n if (this.state.contextMenuOpen) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n });\r\n } else {\r\n let contextMenuOpen = '';\r\n let ponyWallGroup = false;\r\n switch (hoveredZone) {\r\n case \"shower_custom\":\r\n case \"shower_combo\":\r\n case \"shower_pony_wall\": {\r\n const showerGroup = this.state.designNavigationItems.find(navItem => {\r\n return navItem.text === \"Shower\"\r\n });\r\n contextMenuOpen = showerGroup.part.showerTubComboIsActive() ? \"Shower Tub Combo\" : \"Shower\";\r\n if (hoveredZone === \"shower_pony_wall\") {\r\n ponyWallGroup = true;\r\n }\r\n break;\r\n }\r\n case \"vanity_custom\":\r\n contextMenuOpen = \"Vanity\";\r\n break;\r\n case \"bathtub_custom\":\r\n contextMenuOpen = \"Bathtub\";\r\n break;\r\n case \"left_wall_custom\":\r\n contextMenuOpen = \"Shower Body Selection\";\r\n break;\r\n case \"wall_b_custom\":\r\n contextMenuOpen = \"wall_b_custom\";\r\n break;\r\n }\r\n this.openContextMenu(contextMenuOpen, ponyWallGroup, event);\r\n }\r\n return false;\r\n } else if (this.state.contentType === 0) {\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.setNewActiveFeature();\r\n this.menuOpened();\r\n setTimeout(() => {\r\n $(document).on('click', this.handleWrapperBlur);\r\n }, 0)\r\n });\r\n }\r\n\r\n hoveredZone.child\r\n ? this.triggerOpenNavigationMenu(hoveredZone.child, hoveredZone.parent)\r\n : this.triggerOpenNavigationMenu(hoveredZone)\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n openContextMenu = (contextMenuOpen, ponyWallGroup, event) => {\r\n const hoveredParent = this.state.designNavigationItems.find(navItem => {\r\n return navItem.text === contextMenuOpen\r\n });\r\n let contextMenuButtons = [];\r\n if (contextMenuOpen === \"Shower Body Selection\") {\r\n contextMenuButtons = this.getShowerBodySelectionButtons()\r\n } else if (contextMenuOpen === \"wall_b_custom\") {\r\n contextMenuButtons = [1, 2, 3]\r\n } else {\r\n contextMenuButtons = hoveredParent.part.subParts();\r\n }\r\n if (contextMenuOpen === \"Shower\" || contextMenuOpen === \"Shower Tub Combo\") {\r\n contextMenuButtons = contextMenuButtons.filter(menuButton => {\r\n return ponyWallGroup ? menuButton.part.isPonyWallPart && menuButton.part.partId !== \"pony_wall\" : !menuButton.part.isPonyWallPart\r\n });\r\n }\r\n if (contextMenuOpen === \"Vanity\") {\r\n contextMenuButtons = contextMenuButtons.filter(menuButton => {\r\n return menuButton.part.partId !== \"vanity_mirror\" && menuButton.part.partId !== \"vanity_backsplash\";\r\n });\r\n }\r\n\r\n const isMobile = $(window).width() < 991;\r\n\r\n let left = isMobile ? '50%' : event.clientX - 50;\r\n let top = isMobile ? '50%' : event.clientY - 50;\r\n let right = 'auto';\r\n\r\n const maxAllowedWidth = contextMenuButtons.length > 2 ? 300 : 210;\r\n\r\n let maxAllowedHeight = 110;\r\n if (contextMenuButtons.length > 6) {\r\n maxAllowedHeight = 330;\r\n } else if (contextMenuButtons.length > 3) {\r\n maxAllowedHeight = 220;\r\n }\r\n if (!isMobile && (left > window.innerWidth - maxAllowedWidth)) {\r\n left = 'auto';\r\n right = 0\r\n }\r\n if (!isMobile && (top > window.innerHeight - maxAllowedHeight)) {\r\n let negativeMargin = 50;\r\n if (contextMenuButtons.length > 6) {\r\n negativeMargin = 250;\r\n } else if (contextMenuButtons.length > 3) {\r\n negativeMargin = 150;\r\n }\r\n top = top - negativeMargin;\r\n }\r\n this.setState({\r\n contextMenuPonyWall: ponyWallGroup,\r\n contextMenuOpen,\r\n hoveredLayer: document.hoveredLayer,\r\n contextMenuPosition: {\r\n left,\r\n right,\r\n top,\r\n }\r\n });\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false, featureIsLocked, event) => {\r\n\r\n if (this.state.childNavigationItem\r\n && this.state.childNavigationItem.part.activeFeature\r\n && Array.isArray(this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"])\r\n && this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"][0]\r\n && Array.isArray(item.part.metaData[\"SkuName\"])\r\n && (this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"][0] === item.part.metaData[\"SkuName\"][0])) {\r\n this.showPositionsPopup(item, event); // move modal to new position\r\n return false // don't change L to R // redundant click\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n this.navigationItemClickCommon(item); // set active feature\r\n\r\n const showPositionPopup = this.showPositionsPopup(item, event);\r\n if (showPositionPopup) {\r\n return // don't click on feature!! we are clicking inside the modal window\r\n }\r\n\r\n const updateSideBarIds = [\"shower_body\", \"wall_configuration\", \"vanity_cabinet\"];\r\n if (updateSideBarIds.includes(item.part.partId)) {\r\n this.updateSideBar();\r\n }\r\n if (this.state.parentNavigationItem && this.state.parentNavigationItem.text === \"Shower Tub Combo\"\r\n && item.part.bottomTubId && (this.state.parentNavigationItem.part.bottomTub !== item.part.bottomTubId)) {\r\n this.updateSideBar();\r\n }\r\n\r\n // console.log('this.state.parentNavigationItem', this.state.parentNavigationItem);\r\n // console.log('this.state.parentNavigationItem.part.subParts()', this.state.parentNavigationItem && this.state.parentNavigationItem.part && this.state.parentNavigationItem.part.subParts());\r\n\r\n if (item.matchesMetaFailed) {\r\n let nonCompatibleWith = \"\";\r\n switch (item.part.partId) {\r\n case \"vanity_faucet\":\r\n nonCompatibleWith = \"sink\";\r\n break;\r\n case \"sink\":\r\n nonCompatibleWith = \"vanity\";\r\n break;\r\n case \"shower_pod\":\r\n nonCompatibleWith = \"Window Kit\";\r\n break;\r\n case \"window_kits\":\r\n nonCompatibleWith = item.matchesMetaFailed === \"shower_pod\" ? \"Shower Pod\" : \"Corner Shelf\";\r\n break;\r\n default:\r\n break;\r\n }\r\n this.callMetaMathesFailedPopup(item, nonCompatibleWith);\r\n } else if (item.part.partId === \"vanity_sink\" && this.state.parentNavigationItem.part.faucet\r\n && this.state.parentNavigationItem.part.faucet.placeholderChanged\r\n && this.state.parentNavigationItem.part.faucet.activeFeature) {\r\n\r\n const sinkSizeConditionValue = item.part.metaData[\"SinkSize\"][0];\r\n\r\n if (this.state.parentNavigationItem.part.faucet.activeFeature.matchesMetaForCondition('SinkSize', sinkSizeConditionValue)) {\r\n this.itemClick(item, ignoreLocked)\r\n } else {\r\n this.callMetaMathesFailedPopup(item, 'faucet');\r\n }\r\n } else if (item.part.partId === \"toilet\") {\r\n const vanity = layout.parts[Vanity.id];\r\n const counterTopSize = vanity.counterTopSize();\r\n if (counterTopSize === \"60in\" || counterTopSize === \"72in\") {\r\n this.callToiletFailPopup('toilet', item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n } else if (item.part.partId === \"vanity_cabinet\") {\r\n // let toilet = layout.parts[Toilet.id];\r\n // if (toilet) {\r\n // toilet = toilet.toilet; // toiletBody\r\n // }\r\n // const counterTopSize = item.part.vanitySize + 'in';\r\n // const vanity = layout.parts[Vanity.id];\r\n // const currentCounterTopSize = vanity.counterTopSize();\r\n // if (toilet && toilet.placeholderChanged && (counterTopSize === \"60in\" || counterTopSize === \"72in\")\r\n // && (currentCounterTopSize !== \"60in\" && currentCounterTopSize !== \"72in\")) {\r\n // this.callToiletFailPopup('vanity', item, ignoreLocked)\r\n // } else {\r\n // this.itemClick(item, ignoreLocked);\r\n // }\r\n this.itemClick(item, ignoreLocked);\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n ) {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n }\r\n } else if (item.part.partId === \"shower_interior_wall\") {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n this.itemClick(item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n // const fabricatorSettings = this.props.fabricatorSettings;\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n // const activeNavPart = activeSubPart || activePart;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n\r\n const useWizard = false, wizardGroups = [];\r\n\r\n let showNavigationFiltersSteps = false;\r\n\r\n if (activeSubPart && activeSubPart.canUseNavigationFilterSteps\r\n && activeSubPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = false;\r\n const availableNavButtons = [ContentType.Design, ContentType.Layout, ContentType.DisplayRoom];\r\n if (window.location.href.includes(\"new_bathroom_2021.quotesflooring\") || document.kvConfig.userId === 140045) {\r\n availableNavButtons.push(ContentType.RoomScene)\r\n }\r\n\r\n return (\r\n
    \r\n \r\n
    this.navWrapper = node}>\r\n
    \r\n
    \r\n {this.content(useWizard, wizardGroups, useFilters, activePart, activeSubPart)}\r\n
    \r\n
    \r\n {this.navigationMenuButtons(availableNavButtons)}\r\n {showNavigationFiltersSteps ? null : (\r\n
    \r\n \r\n
    \r\n )}\r\n {/*
    */}\r\n {/*
    */}\r\n {/**/}\r\n {/*
    */}\r\n {/*
    */}\r\n
    \r\n {this.state.contextMenuOpen && !this.state.contextMenuOpen.module\r\n ? \r\n : null}\r\n
    \r\n {this.props.bvOpened ? : null}\r\n {showLockedView\r\n ? \r\n : null}\r\n
    \r\n )\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n bvOpened: store.bathroomVisualizerState.bvOpened,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n visualizerTutorialStep: store.tutorialState.visualizerTutorialStep,\r\n visualizerTutorialIsOpened: store.tutorialState.visualizerTutorialIsOpened,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n navItemPositionModal: store.navigationState.navItemPositionModal,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n toggleDesktopNavigation,\r\n setActiveNavigationNames,\r\n setModuleContextMenuType,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setVisualizerTutorialStep,\r\n showVisualizerTutorial,\r\n setNavigationLoading,\r\n toggleNavItemPositionModal\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DesktopNavigation);\r\n","import React, {useEffect, useState} from \"react\";\r\nimport $ from \"jquery\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport {CORNER_SHELVES_POSITIONS, PAN_POSITIONS, SIDE_POSITIONS} from \"../../bvSceneComponent/core/constants\";\r\nimport ActionTypes from \"../../../misc/actionTypes\";\r\nimport {getFeatureIsLocked} from \"../../../misc/helpers\";\r\nimport {changeMessageBoxState, updateCanvasCount} from \"../../../actions/actionFunctions\";\r\nimport {featureInterface} from \"../../../interfaces/featureInterface\";\r\n\r\nconst getPositionName = (position) => {\r\n switch (position) {\r\n case CORNER_SHELVES_POSITIONS[0]:\r\n case CORNER_SHELVES_POSITIONS[3]:\r\n return \"modalCheckboxPosition.top\"\r\n case CORNER_SHELVES_POSITIONS[1]:\r\n case CORNER_SHELVES_POSITIONS[4]:\r\n return \"modalCheckboxPosition.center\"\r\n case CORNER_SHELVES_POSITIONS[2]:\r\n case CORNER_SHELVES_POSITIONS[5]:\r\n return \"modalCheckboxPosition.bottom\"\r\n case SIDE_POSITIONS[0]:\r\n case PAN_POSITIONS[0]:\r\n return \"modalCheckboxPosition.left\"\r\n case SIDE_POSITIONS[1]:\r\n case PAN_POSITIONS[2]:\r\n return \"modalCheckboxPosition.right\"\r\n case PAN_POSITIONS[1]:\r\n return \"modalCheckboxPosition.center\"\r\n }\r\n return \"\"\r\n};\r\n\r\nconst NavItemPositionModalButton = (props) => {\r\n\r\n const {position, parent, checkboxesUpdated, updateCheckboxes, changeMessageBoxState, intl, updateCanvasCount,\r\n activeFeature} = props;\r\n const [checked, setChecked] = useState(false);\r\n const positionName = getPositionName(position);\r\n\r\n const updateChecked = () => {\r\n const matchingPositionFeature = parent.getMatchingPositionFeature(position, activeFeature);\r\n const isChecked = parent.oneLayerPosition\r\n ? !parent.disabled && (parent.activeFeature && (parent.activeFeature.dbFeature.metaData[\"layerPosition\"] === position))\r\n && matchingPositionFeature && (matchingPositionFeature.getSplittedFeatureName() === parent.activeFeature.getSplittedFeatureName())\r\n : !parent.disabled && parent.layerPositions && !!parent.layerPositions[position] && matchingPositionFeature\r\n && (matchingPositionFeature.getSplittedFeatureName() === parent.layerPositions[position].getSplittedFeatureName())\r\n\r\n setChecked(isChecked)\r\n };\r\n\r\n useEffect(() => {\r\n updateChecked();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [checkboxesUpdated, position, activeFeature]);\r\n\r\n const buttonClick = (event, fromConflictingPopup = false) => {\r\n if (parent.conflictingPositions && !fromConflictingPopup) { // shower_seats & valve_trim\r\n const conflictingPositions = parent.checkConflictingPosition(position, activeFeature);\r\n if (conflictingPositions.length) {\r\n callConflictingPopup(conflictingPositions);\r\n return\r\n }\r\n }\r\n if (parent.disabled) {\r\n parent.disabled = false;\r\n parent.disabledClick(); // disable also related parts\r\n if (!parent.oneLayerPosition) {\r\n Object.keys(parent.layerPositions).forEach(key => {\r\n if (key !== position) {\r\n parent.layerPositions[key] = null; // it can be only on one side on enable (if old feature exist and we clicked on another one)\r\n }\r\n })\r\n }\r\n }\r\n const matchingPositionFeature = parent.getMatchingPositionFeature(position, activeFeature);\r\n if (parent.oneLayerPosition) {\r\n matchingPositionFeature.handleClick(true); // to apply not compatible and so on // ignore locked as we it should be visible if clicked feature is unlocked\r\n } else {\r\n if (parent.isShowerCommonGroup && matchingPositionFeature && !checked) {\r\n if (parent.partId === \"shower_arm\") {\r\n parent.checkForSameMountPosition(matchingPositionFeature); // this removes different mount position features\r\n }\r\n matchingPositionFeature.handleClick(true); // set active feature and shower head type\r\n } else if (parent.partId === \"shower_fixture\" && matchingPositionFeature && !checked && parent.getParent().setShowerHeadType) {\r\n // parent.getParent().setShowerHeadType(ShowerHeadTypes.shower_fixture);\r\n matchingPositionFeature.handleClick(true); // set active feature and shower head type\r\n } else if (parent.partId === \"replacement_tub_fixture\") {\r\n matchingPositionFeature.handleClick(true); // set tub combo // ignore locked as we it should be visible if clicked feature is unlocked\r\n }\r\n parent.layerPositions[position] = checked ? null : matchingPositionFeature;\r\n if (parent.isShowerCommonGroup) { // tool version 6 for now only\r\n if (parent.partId === \"shower_head\") {\r\n parent.togglePosition(position, \"shower_arm\");\r\n } else if (parent.partId === \"shower_arm\") {\r\n parent.togglePosition(position, \"shower_head\");\r\n } else if (parent.partId === \"hand_shower_only\") {\r\n parent.togglePosition(position, \"hand_shower_holder\");\r\n parent.togglePosition(position, \"shower_hose\");\r\n parent.togglePosition(position, \"wall_union\");\r\n } else if (parent.partId === \"shower_hose\") {\r\n parent.togglePosition(position, \"hand_shower_holder\");\r\n parent.togglePosition(position, \"hand_shower_only\");\r\n parent.togglePosition(position, \"wall_union\");\r\n } else if (parent.partId === \"hand_shower_holder\") {\r\n parent.togglePosition(position, \"hand_shower_only\");\r\n parent.togglePosition(position, \"shower_hose\");\r\n parent.togglePosition(position, \"wall_union\");\r\n } else if (parent.partId === \"wall_union\") {\r\n parent.togglePosition(position, \"hand_shower_only\");\r\n parent.togglePosition(position, \"shower_hose\");\r\n parent.togglePosition(position, \"hand_shower_holder\");\r\n }\r\n }\r\n // && (!matchingPositionFeature || (parent.layerPositions[position].dbFeature.id === matchingPositionFeature.dbFeature.id))) { //already selected\r\n }\r\n // const checkRelatedFeatureGroups = [\"grab_bar\", \"soap_dish\", \"shower_seats\", \"large_corner_seat\"];\r\n const checkRelatedFeatureGroups = [\"shower_seats\", \"large_corner_seat\"];\r\n if (checkRelatedFeatureGroups.includes(parent.partId)) {\r\n parent.checkRelatedFeatureGroupPositions(position);\r\n // if (parent.partId === \"grab_bar\") {\r\n // parent.checkCurrentPositions(position);\r\n // }\r\n }\r\n if (parent.partId === \"grab_bar\" && parent.checkCenterGrabWall) {\r\n parent.checkCenterGrabWall(position);\r\n }\r\n updateCheckboxes();\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS); // update footer items\r\n updateCanvasCount();\r\n };\r\n\r\n let checkboxDisabled = false;\r\n // if (parent.partId === \"corner_shelf\") { // disable top & center\r\n // const windowParent = parent.getParent().layout.parts.Window;\r\n // if (windowParent && windowParent.windowKits && !windowParent.windowKits.disabled && !position.includes(\"3\")) {\r\n // checkboxDisabled = true;\r\n // }\r\n // }\r\n if (parent.partId === \"shower_head\") { // disable top & center\r\n const showerArm = parent.getParent().showerArm;\r\n if (showerArm && !showerArm.disabled && showerArm.layerPositions && !showerArm.getMatchingPositionFeature(position)) {\r\n // we can't use !showerArm.layerPositions[position] because if we disable in modal ope position - it becomes disabled\r\n checkboxDisabled = true;\r\n }\r\n }\r\n\r\n const callConflictingPopup = (conflictingPositions) => {\r\n const message = {\r\n id: \"messageBox.metaDataMatchesFailed\",\r\n featureGroup: activeFeature.partId === \"shower_seats\" ? \"Seat\" : activeFeature.getParent().partName,\r\n featureName: activeFeature.getFeatureName(),\r\n nonCompatibleWith: conflictingPositions[0].getParent().partName,\r\n };\r\n changeMessageBoxState({\r\n visible: true,\r\n message,\r\n buttons: [{\r\n text: \"messageBox.buttonNo\",\r\n color: \"blue\",\r\n click: () => {\r\n changeMessageBoxState({visible:false});\r\n }\r\n }, {\r\n text: \"messageBox.buttonYes\",\r\n color: 'green',\r\n click: () => {\r\n parent.applyConflictingPosition(position, activeFeature);\r\n buttonClick({}, true);\r\n changeMessageBoxState({visible:false});\r\n }\r\n }]\r\n })\r\n }\r\n\r\n const disabledCheckboxClick = () => {\r\n if (parent.partId === \"corner_shelf\") { // disable top & center\r\n const matchingPositionFeature = parent.getMatchingPositionFeature(position, activeFeature);\r\n\r\n const featureIsLocked = getFeatureIsLocked(matchingPositionFeature);\r\n if (!featureIsLocked) {\r\n const message = {\r\n id: \"messageBox.metaDataMatchesFailed\",\r\n featureGroup: matchingPositionFeature.getParent().partName,\r\n featureName: intl.formatMessage({id: positionName}) + \" \" + matchingPositionFeature.getFeatureName(),\r\n nonCompatibleWith: \"Window Kit\"\r\n };\r\n changeMessageBoxState({\r\n visible: true,\r\n message,\r\n buttons: [{\r\n text: \"messageBox.buttonYes\",\r\n color: 'green',\r\n click: () => {\r\n const windowParent = parent.getParent().layout.parts.Window;\r\n windowParent.windowKits.disabled = true;\r\n buttonClick();\r\n changeMessageBoxState({visible:false});\r\n }\r\n },{\r\n text: \"messageBox.buttonNo\",\r\n color: \"blue\",\r\n click: () => {\r\n changeMessageBoxState({visible:false});\r\n }\r\n }]\r\n });\r\n }\r\n }\r\n }\r\n\r\n return (\r\n \r\n )\r\n};\r\n\r\nNavItemPositionModalButton.propTypes = {\r\n position: PropTypes.string.isRequired,\r\n parent: PropTypes.object.isRequired,\r\n checkboxesUpdated: PropTypes.bool.isRequired,\r\n updateCheckboxes: PropTypes.func.isRequired,\r\n activeFeature: PropTypes.shape(featureInterface),\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n navItemPositionModal: store.navigationState.navItemPositionModal\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n changeMessageBoxState,\r\n updateCanvasCount,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(NavItemPositionModalButton)\r\n)\r\n","import React from \"react\";\r\nimport $ from \"jquery\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport ActionTypes from \"../../../misc/actionTypes\";\r\nimport {updateCanvasCount} from \"../../../actions/actionFunctions\";\r\nimport {featureInterface} from \"../../../interfaces/featureInterface\";\r\nimport {SLAT_WALL_POSITIONS} from \"../../commonVisualizer/core/constants\";\r\n\r\nconst NavItemPositionModalSlatWall = (props) => {\r\n\r\n const {parent, updateCheckboxes, updateCanvasCount, styles, triangleStyles, isWizard, activeFeature} = props;\r\n\r\n let checkboxDisabled = false;\r\n\r\n const isCurrentFeatureActive = parent.activeFeature && activeFeature\r\n && (activeFeature.getSplittedFeatureName() === parent.activeFeature.getSplittedFeatureName());\r\n\r\n const buttonClick = (position) => {\r\n if (checkboxDisabled) {\r\n return\r\n }\r\n if (parent.disabled) {\r\n parent.disabled = false;\r\n parent.disabledClick(); // disable also related parts\r\n }\r\n if (!isCurrentFeatureActive && activeFeature) {\r\n activeFeature.handleClick(); // to apply not compatible and so on\r\n }\r\n parent.slatWallType = position;\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n updateCheckboxes();\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS); // update footer items\r\n updateCanvasCount();\r\n };\r\n\r\n const getSlatWallButton = (position) => {\r\n const checkboxDisabled = false;\r\n const checked = isCurrentFeatureActive && (parent.slatWallType === position);\r\n return (\r\n \r\n )\r\n }\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n
    \r\n

    Side

    \r\n
    \r\n {SLAT_WALL_POSITIONS.slice(0, 2).map((position) => getSlatWallButton(position))}\r\n
    \r\n
    \r\n
    \r\n
    \r\n {SLAT_WALL_POSITIONS.slice(2, 4).map((position) => getSlatWallButton(position))}\r\n
    \r\n
    \r\n
    \r\n
    \r\n )\r\n};\r\n\r\nNavItemPositionModalSlatWall.propTypes = {\r\n styles: PropTypes.object,\r\n triangleStyles: PropTypes.object,\r\n parent: PropTypes.object.isRequired,\r\n isWizard: PropTypes.bool,\r\n checkboxesUpdated: PropTypes.bool.isRequired,\r\n updateCheckboxes: PropTypes.func.isRequired,\r\n activeFeature: PropTypes.shape(featureInterface),\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n navItemPositionModal: store.navigationState.navItemPositionModal\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n updateCanvasCount,\r\n};\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(NavItemPositionModalSlatWall)\r\n)\r\n","import React from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport MobileNavigationCommon from \"../../visComponents/navigation/mobileNavigationCommon\";\r\n\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport Z from \"../core/zIndex\";\r\n\r\nimport MobileNavigationButtons from '../../visComponents/navigation/mobile/mobileNavigationButtons';\r\nimport MobileNavigationAllWallsCheckbox from '../../visComponents/navigation/mobile/mobileNavigationAllWallsCheckbox';\r\nimport FeatureWizardSteps from \"../../visComponents/navigation/featureWizard/featureWizardSteps\";\r\n\r\nimport {changeActivePartRelatedItemIndex, setDefaultSelectionGroup} from \"../../../actions/actionFunctions\";\r\nimport {\r\n setActiveNavigationFilter,\r\n setModuleContextMenuType,\r\n setModuleContextMenuModule,\r\n setActiveNavigationFilterStepIndex, setNavigationViewType, setNavigationLoading, toggleNavItemPositionModal\r\n} from \"../../../actions/navigationFunctions\";\r\n\r\nimport MobileMenuSelect from '../../visComponents/navigation/mobile/mobileMenuSelect';\r\nimport LockedView from \"../../common/lockedView\";\r\n\r\nimport Filters from \"../../visComponents/navigation/newFilters/filters\";\r\nimport BodyPanelRadio from \"../../visComponents/navigation/desktop/bodyPanelRadio\";\r\nimport FilterSwitchers from \"../../visComponents/navigation/newFilters/filterSwitchers\";\r\nimport FilterSelection from \"../../visComponents/navigation/newFilters/filterSelection\";\r\n// import {CABINET_WIZARD_BUTTONS} from \"../core/constants\";\r\nimport NavigationFiltersSteps from \"../../visComponents/navigation/newFilters/navigationFiltersSteps\";\r\nimport ContextMenu from \"./contextMenu\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {COUNTERTOP_GROUP_BATHROOM} from \"../core/constants\";\r\nimport CountertopSwitchers from \"../../kvComponent/navigation/countertopSwitchers\";\r\nimport {Vanity} from \"../core/parts/vanity\";\r\nimport NavItemPositionModal from \"../../visComponents/navigation/navItemPositionModal\";\r\nimport LookAllWallsRadioButton from \"../../look/lookNavigation/lookMain/lookAllWallsRadioButton\";\r\n\r\nclass MobileNavigation extends MobileNavigationCommon {\r\n\r\n componentWillReceiveProps(nextProps) {\r\n this._componentWillReceiveProps(nextProps)\r\n }\r\n\r\n bindCanvasClick = (event) => {\r\n const layout = getCurrentLayout();\r\n // const canvas = document.getElementById(this.props.canvasId);\r\n\r\n if (!window.touchMove && !this.state.showNavigation && !this.state.contextMenuOpen) {\r\n this.props.setHoveredLayer(event);\r\n }\r\n\r\n if (document.hoveredLayer && !window.touchMove) {\r\n // $('.canvas-text').html(`CLICK3`);\r\n const layoutType = layout.getCurrentLayoutName();\r\n\r\n const hoveredZone = Z.getMenuByHoveredLayer(layoutType, document.hoveredLayer);\r\n let ponyWallGroup = false;\r\n\r\n if (hoveredZone) {\r\n if ((hoveredZone === \"shower_custom\" || hoveredZone === \"vanity_custom\" || hoveredZone === \"bathtub_custom\"\r\n || hoveredZone === \"shower_combo\" || hoveredZone === \"shower_pony_wall\" || hoveredZone === \"left_wall_custom\"\r\n || hoveredZone === \"wall_b_custom\") && !this.state.showNavigation) {\r\n if (this.state.contextMenuOpen) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n });\r\n document.removeEventListener('click', this.handleContextMenuBlur);\r\n } else {\r\n let contextMenuOpen = '';\r\n switch (hoveredZone) {\r\n case \"shower_custom\":\r\n case \"shower_combo\":\r\n case \"shower_pony_wall\": {\r\n const showerGroup = this.state.designNavigationItems.find(navItem => {\r\n return navItem.text === \"Shower\"\r\n });\r\n contextMenuOpen = showerGroup.part.showerTubComboIsActive() ? \"Shower Tub Combo\" : \"Shower\";\r\n if (hoveredZone === \"shower_pony_wall\") {\r\n ponyWallGroup = true;\r\n }\r\n break;\r\n }\r\n case \"vanity_custom\":\r\n contextMenuOpen = \"Vanity\";\r\n break;\r\n case \"bathtub_custom\":\r\n contextMenuOpen = \"Bathtub\";\r\n break;\r\n case \"left_wall_custom\":\r\n contextMenuOpen = \"Shower Body Selection\";\r\n break;\r\n case \"wall_b_custom\":\r\n contextMenuOpen = \"wall_b_custom\";\r\n break;\r\n }\r\n this.setState({\r\n contextMenuOpen,\r\n contextMenuPonyWall: ponyWallGroup,\r\n hoveredLayer: document.hoveredLayer\r\n }, () => {\r\n if (contextMenuOpen) {\r\n setTimeout(() => {\r\n document.addEventListener('click', this.handleContextMenuBlur);\r\n }, 0)\r\n }\r\n });\r\n }\r\n return false;\r\n } else if (this.state.contentType === 0) {\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass((hoveredZone.child || hoveredZone.parent || hoveredZone).toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n this.openMobileMenu();\r\n }\r\n\r\n hoveredZone.child\r\n ? this.triggerOpenNavigationMenu(hoveredZone.child, hoveredZone.parent, ponyWallGroup)\r\n : this.triggerOpenNavigationMenu(hoveredZone)\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false, featureIsLocked, event) => {\r\n const layout = getCurrentLayout();\r\n //console.log('item', item);\r\n\r\n if (this.state.childNavigationItem\r\n && this.state.childNavigationItem.part.activeFeature\r\n && Array.isArray(this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"])\r\n && this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"][0]\r\n && Array.isArray(item.part.metaData[\"SkuName\"])\r\n && (this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"][0] === item.part.metaData[\"SkuName\"][0])) {\r\n this.showPositionsPopup(item, event); // move modal to new position\r\n return false // don't change L to R // redundant click\r\n }\r\n\r\n const showPositionPopup = this.showPositionsPopup(item, event);\r\n if (showPositionPopup) {\r\n this.props.setActiveFeature(item.part); // set feature for modal\r\n return // don't click on feature!! we are clicking inside the modal window\r\n }\r\n\r\n if (item.matchesMetaFailed) {\r\n let nonCompatibleWith = \"\";\r\n switch (item.part.partId) {\r\n case \"vanity_faucet\":\r\n nonCompatibleWith = \"sink\";\r\n break;\r\n case \"sink\":\r\n nonCompatibleWith = \"vanity\";\r\n break;\r\n case \"shower_pod\":\r\n nonCompatibleWith = \"Window Kit\";\r\n break;\r\n case \"window_kits\":\r\n nonCompatibleWith = item.matchesMetaFailed === \"shower_pod\" ? \"Shower Pod\" : \"Corner Shelf\";\r\n break;\r\n default:\r\n break;\r\n }\r\n this.callMetaMathesFailedPopup(item, nonCompatibleWith);\r\n } else if (item.part.partId === \"vanity_sink\" && this.state.parentNavigationItem.part.faucet.placeholderChanged\r\n && this.state.parentNavigationItem.part.faucet.activeFeature) {\r\n const sinkSizeConditionValue = item.part.metaData[\"SinkSize\"][0];\r\n if (this.state.parentNavigationItem.part.faucet.activeFeature.matchesMetaForCondition('SinkSize', sinkSizeConditionValue)) {\r\n this.itemClick(item, ignoreLocked)\r\n } else {\r\n this.callMetaMathesFailedPopup(item, 'faucet');\r\n }\r\n } else if (item.part.partId === \"toilet\") {\r\n const vanity = layout.parts[Vanity.id];\r\n const counterTopSize = vanity.counterTopSize();\r\n if (counterTopSize === \"60in\" || counterTopSize === \"72in\") {\r\n this.callToiletFailPopup('toilet', item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n } else if (item.part.partId === \"vanity_cabinet\") {\r\n // let toilet = layout.parts[Toilet.id];\r\n // if (toilet) {\r\n // toilet = toilet.toilet; // toiletBody\r\n // }\r\n // const counterTopSize = item.part.vanitySize + 'in';\r\n // const vanity = layout.parts[Vanity.id];\r\n // const currentCounterTopSize = vanity.counterTopSize();\r\n // if (toilet && toilet.placeholderChanged && (counterTopSize === \"60in\" || counterTopSize === \"72in\")\r\n // && (currentCounterTopSize !== \"60in\" && currentCounterTopSize !== \"72in\")) {\r\n // this.callToiletFailPopup('vanity', item, ignoreLocked)\r\n // } else {\r\n // this.itemClick(item, ignoreLocked)\r\n // }\r\n this.itemClick(item, ignoreLocked);\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n ) {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n }\r\n } else if (item.part.partId === \"shower_interior_wall\") {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n this.itemClick(item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n\r\n this.props.setActiveFeature(item.part);\r\n\r\n const canvasClass = this.state.childNavigationItem\r\n ? this.state.parentNavigationItem.text + '-' + this.state.childNavigationItem.text\r\n : this.state.parentNavigationItem.text;\r\n\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass(canvasClass.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n };\r\n\r\n handleSubPartClick = subNavigationItem => { // sidebar list item click\r\n const subItemPart = subNavigationItem.part;\r\n subItemPart.getParent().handleSubPartClick(subItemPart);\r\n this.setState({\r\n childNavigationItem: subNavigationItem,\r\n showFilterSelection: subItemPart.allFeaturesReceived, // show filters only if subItemPart has all features\r\n showerWallWizardGroupsSelected: false,\r\n searchText: \"\"\r\n }, () => {\r\n this.scrollContentToTop();\r\n this.rememberWallsSelection();\r\n this.checkIfAllFeaturesReceived(subNavigationItem, \"childNavigationItem\");\r\n });\r\n /*set new materials page subIndex*/\r\n this.setActivePartRelatedItemIndex(subNavigationItem);\r\n // console.log('subItemPart', subItemPart);\r\n if ((subItemPart.getParent() && subItemPart.getParent().partName === \"Walls\")\r\n || subItemPart.partName === \"Accent Wall\" && !window.canvasIsDragging) {\r\n this.props.setCanvasClass(subNavigationItem.text.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n this.setNewActiveFeature(subNavigationItem);\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n const activeNavPart = activeSubPart || activePart;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n const allFeaturesReceived = activeNavPart && activeNavPart.allFeaturesReceived;\r\n\r\n // console.log('activePart', activePart);\r\n // console.log('activeSubPart', activeSubPart);\r\n // console.log('activePart.subTypes()', activePart && activePart.subTypes());\r\n // console.log('this.state.childNavigationItemv1111', this.state.childNavigationItem);\r\n\r\n let useWizard = false;\r\n let wizardGroups = [];\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n && this.state.contentType === ContentType.Design && activeSubPart && activeSubPart.canUseWizard && activeSubPart.allFeaturesReceived) {\r\n useWizard = true;\r\n wizardGroups = this.state[this.getWizardGroupsByPartId(this.state.childNavigationItem.part.partId)];\r\n }\r\n\r\n const features = this.getFeatures(layout);\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = (activePart && activePart.partId === \"kitchen_floor\" && activePart.allFeaturesReceived)\r\n || (activeSubPart && (this.isWallItem(activeSubPart) || activeSubPart.partId === \"accent_wall\"\r\n || activeSubPart.partId === \"shower_wall_accent\") && activeSubPart.allFeaturesReceived);\r\n\r\n const filterSelectionHasValues = activeNavPart && FilterSelection.getAvailableFilterValues(\r\n this.props.filterGroups, \"Material\", activeNavPart, this.props.fabricatorData\r\n ).length;\r\n\r\n const itemIsSelected = (!this.props.fabricatorSettings.leadCapture\r\n || (activeSubPart && activeSubPart.activeFeature && activeSubPart.firstClick[this.props.activeQuoteIndex] && activeSubPart.placeholderChanged));\r\n\r\n const useKVWizard = false;\r\n //TODO change it when BE is ready\r\n\r\n const showNavigationFilters = useKVWizard &&activeNavPart\r\n // && this.props.activeNavigationFilter !== CABINET_WIZARD_BUTTONS[0].buttonId\r\n && activeNavPart.canUseNavigationFilter && activeNavPart.canUseNavigationFilter();\r\n\r\n let showNavigationFiltersSteps = false;\r\n if (useKVWizard && activeNavPart && activeNavPart.canUseNavigationFilterSteps\r\n && activeNavPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n const isCountertop = activeSubPart && COUNTERTOP_GROUP_BATHROOM.includes(activeSubPart.partId);\r\n // console.log(\"isCountertop\", isCountertop);\r\n\r\n return (\r\n
    \r\n
    \r\n {/*
    \r\n
    \r\n {this.state.contextMenuOpen && !this.state.contextMenuOpen.module\r\n ? \r\n : null}\r\n {showLockedView\r\n ? \r\n : null}\r\n \r\n {this.props.bvOpened ? : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n fabricatorData: store.fabricatorState,\r\n selectedFilters: store.filterState.selectedFilters,\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n bvOpened: store.bathroomVisualizerState.bvOpened,\r\n userPopupOpened: store.userState.userPopupOpened,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n newLayoutType: store.sqftState.newLayoutType,\r\n countertopsApplyTo: store.navigationState.countertopsApplyTo,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n navItemPositionModal: store.navigationState.navItemPositionModal,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n setModuleContextMenuType,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setModuleContextMenuModule,\r\n setNavigationLoading,\r\n toggleNavItemPositionModal\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(MobileNavigation)\r\n);\r\n","import React from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {injectIntl} from \"react-intl\";\r\nimport $ from \"jquery\";\r\n\r\nimport MobileNavigationCommon from \"../../visComponents/navigation/mobileNavigationCommon\";\r\n\r\nimport {ContentType} from \"../../visComponents/constants\";\r\n\r\nimport MobileNavigationButtons from '../../visComponents/navigation/mobile/mobileNavigationButtons';\r\nimport MobileNavigationAllWallsCheckbox from '../../visComponents/navigation/mobile/mobileNavigationAllWallsCheckbox';\r\nimport FeatureWizardSteps from \"../../visComponents/navigation/featureWizard/featureWizardSteps\";\r\n\r\nimport {changeActivePartRelatedItemIndex, setDefaultSelectionGroup} from \"../../../actions/actionFunctions\";\r\nimport {\r\n setActiveNavigationFilter,\r\n setModuleContextMenuType,\r\n setModuleContextMenuModule,\r\n setActiveNavigationFilterStepIndex, setNavigationViewType, setNavigationLoading, toggleNavItemPositionModal\r\n} from \"../../../actions/navigationFunctions\";\r\n\r\nimport MobileMenuSelect from '../../visComponents/navigation/mobile/mobileMenuSelect';\r\nimport LockedView from \"../../common/lockedView\";\r\n\r\nimport Filters from \"../../visComponents/navigation/newFilters/filters\";\r\nimport BodyPanelRadio from \"../../visComponents/navigation/desktop/bodyPanelRadio\";\r\nimport FilterSwitchers from \"../../visComponents/navigation/newFilters/filterSwitchers\";\r\nimport FilterSelection from \"../../visComponents/navigation/newFilters/filterSelection\";\r\n// import {CABINET_WIZARD_BUTTONS} from \"../core/constants\";\r\nimport NavigationFiltersSteps from \"../../visComponents/navigation/newFilters/navigationFiltersSteps\";\r\nimport ContextMenuQKB from \"./contextMenuQKB\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {COUNTERTOP_GROUP_BATHROOM} from \"../core/constants\";\r\nimport CountertopSwitchers from \"../../kvComponent/navigation/countertopSwitchers\";\r\nimport {Vanity} from \"../core/parts/vanity\";\r\nimport LookAllWallsRadioButton from \"../lookNavigation/lookMain/lookAllWallsRadioButton\";\r\nimport NavItemPositionModal from \"../../visComponents/navigation/navItemPositionModal\";\r\nimport {setLookContextMenu} from \"../../../actions/lookFunctions\";\r\nimport {checkForContextMenuCommon} from \"../lookNavigation/lookFunctions\";\r\n\r\nclass MobileNavigation extends MobileNavigationCommon {\r\n\r\n componentWillReceiveProps(nextProps) {\r\n this._componentWillReceiveProps(nextProps)\r\n }\r\n\r\n checkForContextMenu = (hoveredLayer, event) => {\r\n if (this.props.contextMenu.opened) {\r\n this.props.setLookContextMenu({\r\n opened: false\r\n })\r\n return true\r\n }\r\n if (!hoveredLayer || this.state.showNavigation) {\r\n return false\r\n }\r\n\r\n const {showButtons} = checkForContextMenuCommon(hoveredLayer.partId, hoveredLayer.layerPosition);\r\n if ((showButtons.length > 1) && !(hoveredLayer.partId && hoveredLayer.partId === \"vanity_legs\")) {\r\n this.props.setLookContextMenu({\r\n opened: true,\r\n partId: hoveredLayer.partId,\r\n layerPosition: hoveredLayer.layerPosition, // if needed\r\n position: {\r\n x: event.clientX,\r\n y: event.clientY,\r\n }\r\n });\r\n return true\r\n } else if (showButtons.length === 1 && showButtons[0].includes(\"_wizard\")) {\r\n // const wizardId = showButtons[0].split(\"-\")[1];\r\n // setWizardActiveItem(wizardList.find(wizardItem => wizardItem.id === wizardId));\r\n //\r\n // history.push(`${getLookIdUrl(false) + ROUTES.wizard}/${wizardId}`);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n handleContextMenuClick = (featureToClick, partId) => {\r\n const layout = getCurrentLayout();\r\n let clickedParent = \"\", clickedButton = \"\";\r\n const featureGroup = layout.getFeatureGroupByPartId(partId);\r\n if (featureGroup) {\r\n clickedButton = featureGroup.partName;\r\n clickedParent = featureGroup.getParent().partName;\r\n }\r\n //\r\n // console.log('clickedButton', clickedButton);\r\n // console.log('clickedParent', clickedParent);\r\n if (!clickedButton) {\r\n return\r\n }\r\n // console.log('menuItem', menuItem);\r\n // if (clickedParent === \"Walls\" && (clickedButton === \"Left Shower Wall\" || clickedButton === \"Pony Wall\")) {\r\n // this.ponyWallAndLeftWallClick(menuItem);\r\n // }\r\n\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.menuOpened();\r\n this.triggerOpenNavigationMenu(clickedButton, clickedParent);\r\n $(document).on('click', this.handleWrapperBlur);\r\n this.setNewActiveFeature();\r\n if (featureToClick && !isBacksplash) {\r\n featureToClick.handleClick();\r\n }\r\n });\r\n };\r\n\r\n bindCanvasClick = (event) => {\r\n // const canvas = document.getElementById(this.props.canvasId);\r\n\r\n if (!window.touchMove && !this.state.showNavigation && !this.props.contextMenu.opened) {\r\n this.props.setHoveredLayer(event);\r\n }\r\n\r\n if (document.hoveredLayer && !window.touchMove) {\r\n // $('.canvas-text').html(`CLICK3`);\r\n\r\n if (this.checkForContextMenu(document.hoveredLayer, event)) {\r\n return false\r\n }\r\n\r\n const hoveredPartId = document.hoveredLayer.partId;\r\n\r\n if (hoveredPartId) {\r\n if (this.state.contentType === 0) {\r\n this.openMobileMenu();\r\n }\r\n const layout = getCurrentLayout();\r\n const featureGroup = layout.getFeatureGroupByPartId(hoveredPartId);\r\n if (featureGroup) {\r\n this.triggerOpenNavigationMenu(featureGroup.partName, featureGroup.getParent().partName)\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass(featureGroup.partName.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false, featureIsLocked, event) => {\r\n const layout = getCurrentLayout();\r\n //console.log('item', item);\r\n\r\n if (this.state.childNavigationItem\r\n && this.state.childNavigationItem.part.activeFeature\r\n && Array.isArray(this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"])\r\n && this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"][0]\r\n && Array.isArray(item.part.metaData[\"SkuName\"])\r\n && (this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"][0] === item.part.metaData[\"SkuName\"][0])) {\r\n this.showPositionsPopup(item, event); // move modal to new position\r\n return false // don't change L to R // redundant click\r\n }\r\n\r\n const showPositionPopup = this.showPositionsPopup(item, event);\r\n if (showPositionPopup) {\r\n this.props.setActiveFeature(item.part); // set feature for modal\r\n return // don't click on feature!! we are clicking inside the modal window\r\n }\r\n\r\n if (item.matchesMetaFailed) {\r\n let nonCompatibleWith = \"\";\r\n switch (item.part.partId) {\r\n case \"vanity_faucet\":\r\n nonCompatibleWith = \"sink\";\r\n break;\r\n case \"sink\":\r\n nonCompatibleWith = \"vanity\";\r\n break;\r\n case \"shower_pod\":\r\n nonCompatibleWith = \"Window Kit\";\r\n break;\r\n case \"window_kits\":\r\n nonCompatibleWith = item.matchesMetaFailed === \"shower_pod\" ? \"Shower Pod\" : \"Corner Shelf\";\r\n break;\r\n default:\r\n break;\r\n }\r\n this.callMetaMathesFailedPopup(item, nonCompatibleWith);\r\n } else if (item.part.partId === \"vanity_sink\" && this.state.parentNavigationItem.part.faucet.placeholderChanged\r\n && this.state.parentNavigationItem.part.faucet.activeFeature) {\r\n const sinkSizeConditionValue = item.part.metaData[\"SinkSize\"] ? item.part.metaData[\"SinkSize\"][0] : null;\r\n if (sinkSizeConditionValue && !this.state.parentNavigationItem.part.faucet.activeFeature.matchesMetaForCondition('SinkSize', sinkSizeConditionValue)) {\r\n this.callMetaMathesFailedPopup(item, 'faucet');\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n } else if (item.part.partId === \"toilet\") {\r\n const vanity = layout.parts[Vanity.id];\r\n const counterTopSize = vanity.counterTopSize(item.part);\r\n if (counterTopSize === \"60in\" || counterTopSize === \"72in\") {\r\n this.callToiletFailPopup('toilet', item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n } else if (item.part.partId === \"vanity_cabinet\") {\r\n // let toilet = layout.parts[Toilet.id];\r\n // if (toilet) {\r\n // toilet = toilet.toilet; // toiletBody\r\n // }\r\n // const counterTopSize = item.part.vanitySize + 'in';\r\n // const vanity = layout.parts[Vanity.id];\r\n // const currentCounterTopSize = vanity.counterTopSize(item.part);\r\n // if (toilet && toilet.placeholderChanged && (counterTopSize === \"60in\" || counterTopSize === \"72in\")\r\n // && (currentCounterTopSize !== \"60in\" && currentCounterTopSize !== \"72in\")) {\r\n // this.callToiletFailPopup('vanity', item, ignoreLocked)\r\n // } else {\r\n // this.itemClick(item, ignoreLocked)\r\n // }\r\n this.itemClick(item, ignoreLocked);\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n ) {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n }\r\n } else if (item.part.partId === \"shower_interior_wall\") {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n this.itemClick(item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n\r\n this.props.setActiveFeature(item.part);\r\n\r\n const canvasClass = this.state.childNavigationItem\r\n ? this.state.parentNavigationItem.text + '-' + this.state.childNavigationItem.text\r\n : this.state.parentNavigationItem.text;\r\n\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass(canvasClass.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n };\r\n\r\n handleSubPartClick = subNavigationItem => { // sidebar list item click\r\n const subItemPart = subNavigationItem.part;\r\n subItemPart.getParent().handleSubPartClick(subItemPart);\r\n this.setState({\r\n childNavigationItem: subNavigationItem,\r\n showFilterSelection: subItemPart.allFeaturesReceived, // show filters only if subItemPart has all features\r\n showerWallWizardGroupsSelected: false,\r\n searchText: \"\"\r\n }, () => {\r\n this.scrollContentToTop();\r\n this.rememberWallsSelection();\r\n this.checkIfAllFeaturesReceived(subNavigationItem, \"childNavigationItem\");\r\n });\r\n /*set new materials page subIndex*/\r\n this.setActivePartRelatedItemIndex(subNavigationItem);\r\n // console.log('subItemPart', subItemPart);\r\n if ((subItemPart.getParent() && subItemPart.getParent().partName === \"Walls\")\r\n || subItemPart.partName === \"Accent Wall\" && !window.canvasIsDragging) {\r\n this.props.setCanvasClass(subNavigationItem.text.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n this.setNewActiveFeature(subNavigationItem);\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n const activeNavPart = activeSubPart || activePart;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n const allFeaturesReceived = activeNavPart && activeNavPart.allFeaturesReceived;\r\n\r\n // console.log('activePart', activePart);\r\n // console.log('activeSubPart', activeSubPart);\r\n // console.log('activePart.subTypes()', activePart && activePart.subTypes());\r\n // console.log('this.state.childNavigationItemv1111', this.state.childNavigationItem);\r\n\r\n let useWizard = false;\r\n let wizardGroups = [];\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n && this.state.contentType === ContentType.Design && activeSubPart && activeSubPart.canUseWizard && activeSubPart.allFeaturesReceived) {\r\n useWizard = true;\r\n wizardGroups = this.state[this.getWizardGroupsByPartId(this.state.childNavigationItem.part.partId)];\r\n }\r\n\r\n const features = this.getFeatures(layout);\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = (activePart && activePart.partId === \"kitchen_floor\" && activePart.allFeaturesReceived)\r\n || (activeSubPart && (this.isWallItem(activeSubPart) || activeSubPart.partId === \"accent_wall\"\r\n || activeSubPart.partId === \"shower_wall_accent\") && activeSubPart.allFeaturesReceived);\r\n\r\n const filterSelectionHasValues = activeNavPart && FilterSelection.getAvailableFilterValues(\r\n this.props.filterGroups, \"Material\", activeNavPart, this.props.fabricatorData\r\n ).length;\r\n\r\n const itemIsSelected = (!this.props.fabricatorSettings.leadCapture\r\n || (activeSubPart && activeSubPart.activeFeature && activeSubPart.firstClick[this.props.activeQuoteIndex] && activeSubPart.placeholderChanged));\r\n\r\n const useKVWizard = false;\r\n //TODO change it when BE is ready\r\n\r\n const showNavigationFilters = useKVWizard &&activeNavPart\r\n // && this.props.activeNavigationFilter !== CABINET_WIZARD_BUTTONS[0].buttonId\r\n && activeNavPart.canUseNavigationFilter && activeNavPart.canUseNavigationFilter();\r\n\r\n let showNavigationFiltersSteps = false;\r\n if (useKVWizard && activeNavPart && activeNavPart.canUseNavigationFilterSteps\r\n && activeNavPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n const isCountertop = activeSubPart && COUNTERTOP_GROUP_BATHROOM.includes(activeSubPart.partId);\r\n // console.log(\"isCountertop\", isCountertop);\r\n\r\n return (\r\n
    \r\n
    \r\n {/*
    \r\n
    \r\n \r\n {showLockedView\r\n ? \r\n : null}\r\n \r\n {this.props.bvOpened ? : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {contextMenu} = store.lookState;\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n selectedFilters: store.filterState.selectedFilters,\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n bvOpened: store.bathroomVisualizerState.bvOpened,\r\n userPopupOpened: store.userState.userPopupOpened,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n newLayoutType: store.sqftState.newLayoutType,\r\n countertopsApplyTo: store.navigationState.countertopsApplyTo,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n navItemPositionModal: store.navigationState.navItemPositionModal,\r\n contextMenu,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n setModuleContextMenuType,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setModuleContextMenuModule,\r\n setNavigationLoading,\r\n toggleNavItemPositionModal,\r\n setLookContextMenu,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(MobileNavigation)\r\n);\r\n","import React, {useRef, useState} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\nimport {withRouter} from \"react-router-dom\";\r\n\r\n// import IconButton from \"@mui/material/IconButton\";\r\n\r\nimport {setLookContextMenu} from \"../../../actions/lookFunctions\";\r\n\r\nimport {\r\n CONTEXT_MENU_VANITY_BUTTONS,\r\n CONTEXT_MENU_VANITY_ONLY,\r\n // CONTEXT_MENU_SHOWER_ALL,\r\n // CONTEXT_MENU_SHOWER_OTHER,\r\n LOOK_ROOM_TYPES,\r\n} from \"../core/constants\";\r\nimport {getCurrentLayout, getCurrentRoomType} from \"../../appLayout\";\r\n// import {getLookIdUrl} from \"./lookFunctions2\";\r\n// import {ROUTES} from \"../../../routes\";\r\nimport {getCommonVisualizerType} from \"../../../config\";\r\nimport {checkIfLookFeaturesReceived} from \"../../../api/look-api\";\r\nimport {loaderDisable, loaderEnable} from \"../../ui/loaderView\";\r\nimport {checkForContextMenuCommon} from \"../lookNavigation/lookFunctions\";\r\nimport goToMaterialPage from \"../../common/goToMaterialPage\";\r\n\r\n\r\nconst needToRequestFeatureGroupsOnClick = [\"vanity_washstand\", \"vanity_console\", \"shower_arm\", \"shower_head\"];\r\n\r\nconst ContextMenuQKBButtons = (props) => {\r\n\r\n const {contextMenu, setLookContextMenu, buttons, setButtons, handleContextMenuClick, activeQuoteIndex,\r\n renderGreenLayerByZindex} = props;\r\n\r\n const {partId, layerPosition} = contextMenu;\r\n const anchorRef = useRef(null);\r\n const [vanitySubMenuOpened, setVanitySubMenuOpened] = useState(false);\r\n const layout = getCurrentLayout();\r\n\r\n const {allButtons} = checkForContextMenuCommon(partId, layerPosition);\r\n const isBathroom = getCommonVisualizerType() === \"bathroom\";\r\n const isVanity = isBathroom && CONTEXT_MENU_VANITY_BUTTONS.includes(partId);\r\n // const isShower = isBathroom && (CONTEXT_MENU_SHOWER_ALL.includes(partId) || CONTEXT_MENU_SHOWER_OTHER.includes(partId));\r\n\r\n const contextButtonClick = async (clickedButton) => {\r\n // console.log(\"currentPartId\", currentPartId);\r\n\r\n const {partId, isWizard, wizardId, hasSubMenu} = clickedButton;\r\n\r\n if (((isVanity && CONTEXT_MENU_VANITY_ONLY.includes(partId)) || hasSubMenu) && !vanitySubMenuOpened) {\r\n setVanitySubMenuOpened(true);\r\n if (isVanity) {\r\n const vanButtons = allButtons.filter(button => CONTEXT_MENU_VANITY_ONLY.includes(button.partId));\r\n if (vanButtons.length && vanButtons.length > 1) {\r\n setButtons(vanButtons);\r\n return false\r\n }\r\n } else if (partId === \"accessories\") {\r\n const {showButtons} = checkForContextMenuCommon(\"grab_bar\", layerPosition);\r\n setButtons(showButtons);\r\n return false\r\n }\r\n } else if (vanitySubMenuOpened) {\r\n // setVanitySubMenuOpened(false);\r\n }\r\n\r\n setLookContextMenu({\r\n opened: false,\r\n layerPosition: \"\",\r\n clickedOnItem: partId,\r\n });\r\n\r\n let openPartId = partId;\r\n let clickedFeature = null;\r\n\r\n if (isVanity && (getCurrentRoomType(layout) === LOOK_ROOM_TYPES.as) && (partId === \"vanity_pedestal_sink\" || partId === \"vanity_sink\")) {\r\n openPartId = \"vanity_sink\";\r\n const sinkParent = layout.getFeatureGroupByPartId(openPartId);\r\n if (sinkParent) {\r\n const navItems = layout.designNavigationItems({part: sinkParent}, null, null, sinkParent.activeFeature);\r\n if (partId === \"vanity_pedestal_sink\") {\r\n const pedestalSink = navItems.find(navItem => {\r\n return navItem.part.metaData[\"MountType\"] && navItem.part.metaData[\"MountType\"].includes(\"ST\")\r\n });\r\n if (pedestalSink) {\r\n clickedFeature = pedestalSink.part;\r\n }\r\n } else {\r\n const isPedestal = sinkParent.activeFeature && sinkParent.activeFeature.metaData[\"MountType\"] && sinkParent.activeFeature.metaData[\"MountType\"].includes(\"ST\");\r\n if (isPedestal) {\r\n const regularSink = navItems.find(navItem => {\r\n return !navItem.part.metaData[\"MountType\"] || !navItem.part.metaData[\"MountType\"].includes(\"ST\")\r\n });\r\n if (regularSink) {\r\n clickedFeature = regularSink.part;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (isWizard) {\r\n goToMaterialPage(\"visualizer\", false, null, \"\",\r\n {wizardItemId: wizardId, quoteIndex: activeQuoteIndex});\r\n return false\r\n }\r\n\r\n const featureGroup = layout.getFeatureGroupByPartId(openPartId);\r\n if (featureGroup && !featureGroup.allFeaturesReceived && needToRequestFeatureGroupsOnClick.includes(openPartId)) {\r\n loaderEnable();\r\n await checkIfLookFeaturesReceived(featureGroup);\r\n loaderDisable();\r\n }\r\n\r\n // console.log(\"zoomedFeature\", clickedFeature);\r\n handleContextMenuClick(clickedFeature, openPartId);\r\n };\r\n\r\n const onMouseOver = (button) => {\r\n if (renderGreenLayerByZindex) {\r\n const featureGroup = layout.getFeatureGroupByPartId(button.partId);\r\n if (featureGroup && featureGroup.activeFeature && featureGroup.activeFeature.layer) {\r\n renderGreenLayerByZindex(featureGroup.activeFeature.layer.zIndex, button.partId);\r\n }\r\n }\r\n }\r\n\r\n let contextMenuStyles = buttons.length === 14 ? {maxWidth:\"210px\"} : null;\r\n\r\n console.log(\"buttons\", buttons);\r\n\r\n return (\r\n
    \r\n
    \r\n {buttons.map(button => {\r\n const isVanityParent = isVanity && CONTEXT_MENU_VANITY_ONLY.includes(button.partId);\r\n return (\r\n \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nContextMenuQKBButtons.propTypes = {\r\n handleContextMenuClick: PropTypes.func,\r\n setButtons: PropTypes.func,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {contextMenu} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n const {wizardList} = store.wizardState;\r\n const fabricatorData = store.fabricatorState;\r\n const {activeQuoteIndex} = store.quotesState;\r\n\r\n return {\r\n contextMenu,\r\n isMobile,\r\n wizardList,\r\n fabricatorData,\r\n activeQuoteIndex,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookContextMenu,\r\n};\r\n\r\nexport default injectIntl(\r\n withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(ContextMenuQKBButtons)\r\n )\r\n)\r\n","import React, {Fragment} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport classNames from 'classnames';\r\nimport $ from 'jquery';\r\n\r\nimport {\r\n toggleDesktopNavigation,\r\n setActiveNavigationNames,\r\n setModuleContextMenuType,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setNavigationViewType,\r\n setNavigationLoading,\r\n toggleNavItemPositionModal\r\n} from \"../../../actions/navigationFunctions\";\r\nimport {\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n updateCanvasCount\r\n} from \"../../../actions/actionFunctions\";\r\nimport DesktopNavigationCommon from \"../../visComponents/navigation/desktopNavigationCommon\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nimport LockedView from \"../../common/lockedView\";\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport ContextMenuQKB from \"./contextMenuQKB\";\r\nimport MobileMenuSelect from \"../../visComponents/navigation/mobile/mobileMenuSelect\";\r\nimport {setVisualizerTutorialStep, showVisualizerTutorial} from \"../../../actions/tutorialFunctions\";\r\nimport {Vanity} from \"../core/parts/vanity\";\r\nimport NavItemPositionModal from \"../../visComponents/navigation/navItemPositionModal\";\r\nimport {checkForContextMenuCommon} from \"../lookNavigation/lookFunctions\";\r\nimport {setLookContextMenu} from \"../../../actions/lookFunctions\";\r\nimport goToMaterialPage from \"../../common/goToMaterialPage\";\r\n\r\nclass DesktopNavigation extends DesktopNavigationCommon {\r\n\r\n bindCanvasClick = (event) => {\r\n // const canvas = document.getElementById(this.props.canvasId);\r\n this.props.setHoveredLayer(event);\r\n\r\n if (document.hoveredLayer) {\r\n\r\n if (this.checkForContextMenu(document.hoveredLayer, event)) {\r\n return false\r\n }\r\n\r\n const hoveredPartId = document.hoveredLayer.partId;\r\n\r\n if (hoveredPartId) {\r\n if (this.state.contentType === 0) {\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.setNewActiveFeature();\r\n this.menuOpened();\r\n setTimeout(() => {\r\n $(document).on('click', this.handleWrapperBlur);\r\n }, 0)\r\n });\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n const featureGroup = layout.getFeatureGroupByPartId(hoveredPartId);\r\n if (featureGroup) {\r\n this.triggerOpenNavigationMenu(featureGroup.partName, featureGroup.getParent().partName)\r\n }\r\n }\r\n }\r\n\r\n };\r\n\r\n checkForContextMenu = (hoveredLayer, event) => {\r\n if (this.props.contextMenu.opened) {\r\n this.props.setLookContextMenu({\r\n opened: false\r\n })\r\n return true\r\n }\r\n if (!hoveredLayer) {\r\n return false\r\n }\r\n\r\n const {showButtons} = checkForContextMenuCommon(hoveredLayer.partId, hoveredLayer.layerPosition);\r\n if ((showButtons.length > 1) && !(hoveredLayer.partId && hoveredLayer.partId === \"vanity_legs\")) {\r\n this.props.setLookContextMenu({\r\n opened: true,\r\n partId: hoveredLayer.partId,\r\n layerPosition: hoveredLayer.layerPosition, // if needed\r\n position: {\r\n x: event.clientX,\r\n y: event.clientY,\r\n }\r\n });\r\n return true\r\n } else if (showButtons.length === 1 && showButtons[0].isWizard) {\r\n goToMaterialPage(\"visualizer\", false, null, \"\",\r\n {wizardItemId: showButtons.wizardId, quoteIndex: this.props.activeQuoteIndex});\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n handleContextMenuClick = (featureToClick, partId) => {\r\n const layout = getCurrentLayout();\r\n let clickedParent = \"\", clickedButton = \"\";\r\n const featureGroup = layout.getFeatureGroupByPartId(partId);\r\n if (featureGroup) {\r\n clickedButton = featureGroup.partName;\r\n clickedParent = featureGroup.getParent().partName;\r\n }\r\n // console.log('clickedButton', clickedButton);\r\n // console.log('clickedParent', clickedParent);\r\n if (!clickedButton) {\r\n return\r\n }\r\n // console.log('menuItem', menuItem);\r\n // if (clickedParent === \"Walls\" && (clickedButton === \"Left Shower Wall\" || clickedButton === \"Pony Wall\")) {\r\n // this.ponyWallAndLeftWallClick(menuItem);\r\n // }\r\n\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.menuOpened();\r\n this.triggerOpenNavigationMenu(clickedButton, clickedParent);\r\n $(document).on('click', this.handleWrapperBlur);\r\n this.setNewActiveFeature();\r\n if (featureToClick && !isBacksplash) {\r\n featureToClick.handleClick();\r\n }\r\n });\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false, featureIsLocked, event) => {\r\n\r\n if (this.state.childNavigationItem\r\n && this.state.childNavigationItem.part.activeFeature\r\n && Array.isArray(this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"])\r\n && this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"][0]\r\n && Array.isArray(item.part.metaData[\"SkuName\"])\r\n && (this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"][0] === item.part.metaData[\"SkuName\"][0])) {\r\n this.showPositionsPopup(item, event); // move modal to new position\r\n return false // don't change L to R // redundant click\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n this.navigationItemClickCommon(item); // set active feature\r\n\r\n const showPositionPopup = this.showPositionsPopup(item, event);\r\n if (showPositionPopup) {\r\n return // don't click on feature!! we are clicking inside the modal window\r\n }\r\n\r\n const updateSideBarIds = [\"shower_body\", \"wall_configuration\", \"vanity_cabinet\", \"shower_pan_combo\"];\r\n if (updateSideBarIds.includes(item.part.partId)) {\r\n this.updateSideBar();\r\n } else if (this.state.parentNavigationItem && this.state.parentNavigationItem.text === \"Shower Tub Combo\"\r\n && item.part.bottomTubId && (this.state.parentNavigationItem.part.bottomTub !== item.part.bottomTubId)) {\r\n this.updateSideBar();\r\n }\r\n\r\n // console.log('this.state.parentNavigationItem', this.state.parentNavigationItem);\r\n // console.log('this.state.parentNavigationItem.part.subParts()', this.state.parentNavigationItem && this.state.parentNavigationItem.part && this.state.parentNavigationItem.part.subParts());\r\n\r\n if (item.matchesMetaFailed) {\r\n let nonCompatibleWith = \"\";\r\n switch (item.part.partId) {\r\n case \"vanity_faucet\":\r\n nonCompatibleWith = \"sink\";\r\n break;\r\n case \"sink\":\r\n nonCompatibleWith = \"vanity\";\r\n break;\r\n case \"shower_pod\":\r\n nonCompatibleWith = \"Window Kit\";\r\n break;\r\n case \"window_kits\":\r\n nonCompatibleWith = item.matchesMetaFailed === \"shower_pod\" ? \"Shower Pod\" : \"Corner Shelf\";\r\n break;\r\n default:\r\n break;\r\n }\r\n this.callMetaMathesFailedPopup(item, nonCompatibleWith);\r\n // } else if (item.part.partId === \"vanity_sink\" && this.state.parentNavigationItem.part.faucet\r\n // && this.state.parentNavigationItem.part.faucet.placeholderChanged\r\n // && this.state.parentNavigationItem.part.faucet.activeFeature) {\r\n //\r\n // const sinkSizeConditionValue = item.part.metaData[\"SinkSize\"][0];\r\n //\r\n // if (this.state.parentNavigationItem.part.faucet.activeFeature.matchesMetaForCondition('SinkSize', sinkSizeConditionValue)) {\r\n // this.itemClick(item, ignoreLocked)\r\n // } else {\r\n // this.callMetaMathesFailedPopup(item, 'faucet');\r\n // }\r\n } else if (item.part.partId === \"toilet\") {\r\n const vanity = layout.parts[Vanity.id];\r\n const counterTopSize = vanity.counterTopSize(item.part);\r\n if (counterTopSize === \"60in\" || counterTopSize === \"72in\") {\r\n this.callToiletFailPopup('toilet', item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n } else if (item.part.partId === \"vanity_cabinet\") {\r\n // let toilet = layout.parts[Toilet.id];\r\n // if (toilet) {\r\n // toilet = toilet.toilet; // toiletBody\r\n // }\r\n // const counterTopSize = item.part.vanitySize + 'in';\r\n // const vanity = layout.parts[Vanity.id];\r\n // const currentCounterTopSize = vanity.counterTopSize(item.part);\r\n // if (toilet && toilet.placeholderChanged && (counterTopSize === \"60in\" || counterTopSize === \"72in\")\r\n // && (currentCounterTopSize !== \"60in\" && currentCounterTopSize !== \"72in\")) {\r\n // this.callToiletFailPopup('vanity', item, ignoreLocked)\r\n // } else {\r\n // this.itemClick(item, ignoreLocked);\r\n // }\r\n this.itemClick(item, ignoreLocked);\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n ) {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n }\r\n } else if (item.part.partId === \"shower_interior_wall\") {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n this.itemClick(item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.updateCanvasCount();\r\n }\r\n\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n // const fabricatorSettings = this.props.fabricatorSettings;\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n // const activeNavPart = activeSubPart || activePart;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n\r\n const useWizard = false, wizardGroups = [];\r\n\r\n let showNavigationFiltersSteps = false;\r\n\r\n if (activeSubPart && activeSubPart.canUseNavigationFilterSteps\r\n && activeSubPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = false;\r\n const availableNavButtons = [ContentType.Design, ContentType.Layout, ContentType.DisplayRoom, ContentType.RoomScene];\r\n\r\n return (\r\n \r\n
    \r\n \r\n
    this.navWrapper = node}>\r\n
    \r\n
    \r\n {this.content(useWizard, wizardGroups, useFilters, activePart, activeSubPart)}\r\n
    \r\n
    \r\n {this.navigationMenuButtons(availableNavButtons)}\r\n {showNavigationFiltersSteps ? null : (\r\n
    \r\n \r\n
    \r\n )}\r\n {/*
    */}\r\n {/*
    */}\r\n {/**/}\r\n {/*
    */}\r\n {/*
    */}\r\n
    \r\n
    \r\n {this.props.bvOpened ? : null}\r\n {showLockedView\r\n ? \r\n : null}\r\n
    \r\n \r\n \r\n )\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {contextMenu} = store.lookState;\r\n\r\n return {\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n bvOpened: store.bathroomVisualizerState.bvOpened,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n visualizerTutorialStep: store.tutorialState.visualizerTutorialStep,\r\n visualizerTutorialIsOpened: store.tutorialState.visualizerTutorialIsOpened,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n navItemPositionModal: store.navigationState.navItemPositionModal,\r\n contextMenu,\r\n fabricatorData: store.fabricatorState,\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n toggleDesktopNavigation,\r\n setActiveNavigationNames,\r\n setModuleContextMenuType,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setVisualizerTutorialStep,\r\n showVisualizerTutorial,\r\n setNavigationLoading,\r\n toggleNavItemPositionModal,\r\n updateCanvasCount,\r\n setLookContextMenu,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DesktopNavigation);\r\n","import snakeCase from \"lodash/snakeCase\";\r\nimport {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport NonVisualizerSubPart from \"../subparts/nonVisualizerSubPart\";\r\n\r\nexport default class Other extends Part {\r\n static id = 'Other';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Other';\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n // console.log(\"load other\", dbFeature.groupName);\r\n const partId = snakeCase(dbFeature.groupName);\r\n let relatedItem = this.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, dbFeature.groupName);\r\n this.relatedItems.push(relatedItem);\r\n }\r\n relatedItem.getParent = () => this;\r\n relatedItem.load(dbFeature);\r\n return true\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Other', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport BackgroundBG from \"../subparts/backgrounds/BackgroundBG\";\r\n\r\nexport default class Background extends Part {\r\n static id = 'Background';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Background';\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"BG\":\r\n relatedItemName = \"backgroundBG\";\r\n RelatedItemClass = BackgroundBG;\r\n break;\r\n default:\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem(\"Background\", this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class BackgroundBG extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'background_bg';\r\n this.partName = 'Background BG';\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BackgroundBG());\r\n }\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {floorThumbnail} from \"../../../kvComponent/core/assets\";\r\n\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nexport default class Floor extends Part {\r\n static id = 'Floor';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.partId = 'parent_floor';\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.kitchen.kitchen_floor\";\r\n this.partThumbnail = floorThumbnail;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Flor\":\r\n case \"Floor\":\r\n relatedItemName = \"floorBody\";\r\n RelatedItemClass = FloorBody;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Floor', this);\r\n }\r\n\r\n}\r\n\r\nclass FloorBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'kitchen_floor';\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.kitchen.kitchen_floor\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new FloorBody());\r\n }\r\n}\r\n\r\n\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport store from \"../../../../store\";\r\nimport LeftWall from \"../subparts/walls/leftWall\";\r\nimport RightWall from \"../subparts/walls/rightWall\";\r\nimport CenterWall from \"../subparts/walls/centerWall\";\r\nimport FrontWall from \"../subparts/walls/frontWall\";\r\nimport Ceiling from \"../subparts/walls/ceiling\";\r\n\r\nexport default class Walls extends Part {\r\n static id = 'Walls';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Walls';\r\n this.partThumbnail = \"\";\r\n this.translateId = \"visualizer.kitchen.walls\";\r\n\r\n // related items\r\n this.leftWall = null;\r\n this.rightWall = null;\r\n this.centerWall = null;\r\n this.frontWall = null;\r\n this.ceiling = null;\r\n this.backsplash = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Left Wall\":\r\n relatedItemName = \"leftWall\";\r\n RelatedItemClass = LeftWall;\r\n break;\r\n case \"Right Wall\":\r\n relatedItemName = \"rightWall\";\r\n RelatedItemClass = RightWall;\r\n break;\r\n case \"Center Wall\":\r\n relatedItemName = \"centerWall\";\r\n RelatedItemClass = CenterWall;\r\n break;\r\n case \"Front Wall\":\r\n relatedItemName = \"frontWall\";\r\n RelatedItemClass = FrontWall;\r\n break;\r\n case \"Ceiling\":\r\n relatedItemName = \"ceiling\";\r\n RelatedItemClass = Ceiling;\r\n break;\r\n // case \"Shower Shadow\":\r\n // if (\r\n // dbFeature.displayName.includes(\"Shower Shadow - Divider Wall\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - EX L\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - EX R\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - Popout\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - Pony Wall\")\r\n // ) {\r\n // relatedItemName = \"shadows\";\r\n // RelatedItemClass = Shadow;\r\n // }\r\n // break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Walls', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts(withHidden = true) {\r\n return this.relatedItems\r\n .filter(item => this.filterRelatedItem(item, withHidden))\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n recoverPrevioslySelected(activeRelatedPart) {\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n this.relatedItems.forEach(relatedItem => {\r\n if (relatedItem.partId !== activeRelatedPart.partId && relatedItem.activeFeatureBeforeAllWalls) {\r\n if (relatedItem.activeFeatureBeforeAllWalls === \"placeholder\") {\r\n relatedItem.placeholderChanged = false;\r\n relatedItem.firstClick[activeQuoteIndex] = false;\r\n } else if (!relatedItem.selectedByUser) {\r\n relatedItem.activeFeatureBeforeAllWalls.clickFromAllWalls();\r\n }\r\n }\r\n });\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class LeftWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'left_wall';\r\n this.partName = 'Left Wall';\r\n this.translateId = \"visualizer.kitchen.walls.left_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new LeftWall());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class RightWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'right_wall';\r\n this.partName = 'Right Wall';\r\n this.translateId = \"visualizer.kitchen.walls.right_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new RightWall());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class CenterWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_wall';\r\n this.partName = 'Center Wall';\r\n this.translateId = \"visualizer.bathroom.walls.center_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new CenterWall());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class FrontWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'front_wall';\r\n this.partName = 'Front Wall';\r\n this.translateId = \"visualizer.bathroom.walls.front_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new FrontWall());\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Ceiling extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'walls_ceiling';\r\n this.partName = 'Ceiling';\r\n this.translateId = \"visualizer.kitchen.walls.walls_ceiling\";\r\n this.isStoneFeature = true;\r\n }\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport Fireplace from \"../subparts/fireplace/fireplace\";\r\nimport Furniture from \"../subparts/globals/furniture\";\r\n\r\nexport default class FireplaceParent extends Part {\r\n static id = 'Fireplace';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Fireplace';\r\n this.translateId = \"visualizer.fireplace.fireplace\";\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Fireplace\":\r\n case \"Fierplace\":\r\n relatedItemName = \"fireplace\";\r\n RelatedItemClass = Fireplace;\r\n break;\r\n case \"Furniture\": {\r\n relatedItemName = \"furniture\";\r\n RelatedItemClass = Furniture;\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem(\"Fireplace\", this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Fireplace extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'fireplace';\r\n this.partName = 'Fireplace';\r\n this.translateId = \"visualizer.fireplace.fireplace\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Fireplace());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Furniture extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"furniture\";\r\n this.translateId = \"furniture\";\r\n this.translateId = \"visualizer.fireplace.furniture\";\r\n\r\n this.partName = \"Furniture\";\r\n this.hasAdditionalParts = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {wallsThumbnail} from \"../../../bvComponent/core/assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\n\r\nimport Attachment from \"../subparts/globals/attachment\";\r\nimport Decor from \"../subparts/globals/decor\";\r\nimport {DECORS_MAX} from \"../constants\";\r\n\r\nconst compareMountPosition = (checkFeature, dbFeatureLoading) => {\r\n return checkFeature.metaData[\"MountPosition\"] && checkFeature.matchesMetaForCondition(\"MountPosition\", dbFeatureLoading.metaData[\"MountPosition\"])\r\n}\r\n\r\nconst checkForExistingDecor = (currentDecorFeatureGroup, dbFeature) => {\r\n if (!currentDecorFeatureGroup) { // we skipped all decors, but didn't find the same\r\n return true\r\n }\r\n if (dbFeature.sharedFeatureName === currentDecorFeatureGroup.decorName) { // decors are matching by name\r\n return true\r\n }\r\n if (dbFeature.metaData[\"MountPosition\"]) {\r\n if (Array.isArray(dbFeature.metaData[\"RoomLayout\"])) {\r\n return dbFeature.metaData[\"RoomLayout\"].some(layoutName => {\r\n return currentDecorFeatureGroup.featuresList && Array.isArray(currentDecorFeatureGroup.featuresList[layoutName])\r\n && currentDecorFeatureGroup.featuresList[layoutName].some(feature => compareMountPosition(feature, dbFeature))\r\n })\r\n } else {\r\n return currentDecorFeatureGroup.some(feature => compareMountPosition(feature, dbFeature))\r\n }\r\n }\r\n return false\r\n}\r\n\r\nexport default class Globals extends Part {\r\n static id = \"Globals\";\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = \"Globals\";\r\n this.partThumbnail = wallsThumbnail;\r\n\r\n // related items\r\n this.decor1 = null; // can be up to 10\r\n }\r\n\r\n load(dbFeature) {\r\n let\r\n relatedItemName = \"\",\r\n decorCount = 0,\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Decor\":\r\n case \"Decore\": {\r\n for (let i = 1; i <= DECORS_MAX; i++) {\r\n const currentDecorFeatureGroup = this[\"decor\" + i];\r\n if (checkForExistingDecor(currentDecorFeatureGroup, dbFeature)) {\r\n relatedItemName = \"decor\" + i;\r\n decorCount = i;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case \"Attachment\": {\r\n relatedItemName = \"attachment\";\r\n RelatedItemClass = Attachment;\r\n break;\r\n }\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n if (dbFeature.groupName === \"Decor\" || dbFeature.groupName === \"Decore\") {\r\n this[relatedItemName] = new Decor(true, decorCount);\r\n this[relatedItemName].decorName = dbFeature.sharedFeatureName;\r\n } else {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n }\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {}\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport isEqual from \"lodash/isEqual\";\r\n\r\nexport default class Attachment extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"attachment\";\r\n this.partName = \"Attachment\";\r\n this.hasAdditionalParts = true;\r\n }\r\n\r\n checkIfFeaturePartIsMatching() {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n\r\n setActiveFeatureParts() {\r\n const layout = this.getParent().layout;\r\n const activeFeatures = layout.getActiveFeatures(true, true);\r\n let matchingFeatures = [];\r\n const currentConditions = this.getArrayOfConditions();\r\n const selectFrom = this.features.filter(attFeature => attFeature.matchesMetaForArrayOfConditions(currentConditions));\r\n activeFeatures.forEach(cartItem => {\r\n if (!cartItem.cartFeature || cartItem.featureGroup.disabled || !cartItem.cartFeature.metaData[\"MatchingFeature\"]\r\n || (cartItem.partId === this.partId)) {\r\n return\r\n }\r\n selectFrom.forEach(attFeature => {\r\n if (isEqual(attFeature.metaData[\"MatchingFeature\"], cartItem.cartFeature.metaData[\"MatchingFeature\"])\r\n && isEqual(attFeature.metaData[\"Side\"], cartItem.cartFeature.metaData[\"Side\"])\r\n && !matchingFeatures.some(alreadyAddedFeature => {\r\n return isEqual(attFeature.metaData[\"MatchingFeature\"], alreadyAddedFeature.metaData[\"MatchingFeature\"])\r\n && isEqual(attFeature.metaData[\"Side\"], alreadyAddedFeature.metaData[\"Side\"])\r\n })) {\r\n matchingFeatures.push(attFeature)\r\n }\r\n })\r\n })\r\n return matchingFeatures;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nexport default class Decor extends IntermediatePart {\r\n constructor(isChild, decorCount) {\r\n super(isChild);\r\n this.decorCount = decorCount;\r\n this.partId = \"decor_\" + decorCount;\r\n this.partName = \"Decor \" + decorCount;\r\n }\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Decor(false, this.decorCount));\r\n }\r\n\r\n}\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport classNames from 'classnames';\r\nimport $ from 'jquery';\r\n\r\nimport {\r\n toggleDesktopNavigation,\r\n setActiveNavigationNames,\r\n setModuleContextMenuType,\r\n setActiveNavigationFilter, setActiveNavigationFilterStepIndex, setNavigationViewType, setNavigationLoading\r\n} from \"../../../actions/navigationFunctions\";\r\nimport {setDefaultSelectionGroup, changeActivePartRelatedItemIndex} from \"../../../actions/actionFunctions\";\r\nimport DesktopNavigationCommon from \"../../visComponents/navigation/desktopNavigationCommon\";\r\nimport Z from \"../core/zIndex\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nimport LockedView from \"../../common/lockedView\";\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport ContextMenuSimple from \"./contextMenuSimple\";\r\n// import CabinetContextMenu from \"./cabinetContextMenu\";\r\nimport MobileMenuSelect from \"../../visComponents/navigation/mobile/mobileMenuSelect\";\r\nimport {setVisualizerTutorialStep, showVisualizerTutorial} from \"../../../actions/tutorialFunctions\";\r\n\r\nclass DesktopNavigation extends DesktopNavigationCommon {\r\n\r\n bindCanvasClick = (event) => {\r\n\r\n // const canvas = document.getElementById(this.props.canvasId);\r\n this.props.setHoveredLayer(event);\r\n\r\n if (document.hoveredLayer) {\r\n\r\n const hoveredZone = Z.getMenuByHoveredLayer(document.hoveredLayer);\r\n\r\n // console.log('hoveredZone', hoveredZone);\r\n\r\n if (hoveredZone) {\r\n if (hoveredZone.contextMenuPartId && !this.state.showNavigation) {\r\n if (this.state.contextMenuOpen) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n });\r\n } else {\r\n this.openContextMenu(hoveredZone, event);\r\n }\r\n return false;\r\n } else if (this.state.contentType === 0) {\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.setNewActiveFeature();\r\n this.menuOpened();\r\n setTimeout(() => {\r\n $(document).on('click', this.handleWrapperBlur);\r\n }, 0)\r\n });\r\n }\r\n\r\n hoveredZone.child\r\n ? this.triggerOpenNavigationMenu(hoveredZone.child, hoveredZone.parent)\r\n : this.triggerOpenNavigationMenu(hoveredZone)\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n openContextMenu = (contextMenuOpen, event) => {\r\n let contextMenuButtons = [];\r\n if (contextMenuOpen.contextMenuPartId === \"top_cabinet\") {\r\n // const hoveredParent = this.props.designNavigationItems.find(navItem => {\r\n // return navItem.text === \"Cabinet\"\r\n // });\r\n // if (hoveredParent) {\r\n //\r\n // }\r\n contextMenuButtons = [1, 2, 3, 4, 5]\r\n }\r\n // const receiveBackSplashes = () => {\r\n // const layout = getCurrentLayout();\r\n // const wallsParent = layout.parts[\"Walls\"];\r\n // const backsplashSubPart = wallsParent.subParts().find(subPart => subPart.part.partId === \"backsplash\");\r\n // this.checkIfAllFeaturesReceived(backsplashSubPart);\r\n // };\r\n switch (contextMenuOpen.contextMenuPartId) {\r\n case \"countertop_group_custom\":\r\n contextMenuOpen = \"Countertop\";\r\n break;\r\n case \"right_wall_custom\":\r\n contextMenuOpen = \"right_wall_custom\";\r\n break;\r\n case \"left_wall_custom\":\r\n contextMenuOpen = \"left_wall_custom\";\r\n break;\r\n case \"backsplash_custom_left\": {\r\n // receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_left\";\r\n break;\r\n }\r\n case \"backsplash_custom_right\": {\r\n // receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_right\";\r\n break;\r\n }\r\n case \"backsplash_custom\": {\r\n // receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom\";\r\n break;\r\n }\r\n case \"center_island_custom\":\r\n contextMenuOpen = \"Center Island\";\r\n break;\r\n default:\r\n break;\r\n }\r\n const isMobile = $(window).width() < 991;\r\n\r\n let left = isMobile ? '50%' : event.clientX - 50;\r\n let top = isMobile ? '50%' : event.clientY - 50;\r\n let right = 'auto';\r\n\r\n const maxAllowedWidth = contextMenuButtons.length > 2 ? 300 : 210;\r\n\r\n let maxAllowedHeight = 110;\r\n if (contextMenuButtons.length > 6) {\r\n maxAllowedHeight = 330;\r\n } else if (contextMenuButtons.length > 3) {\r\n maxAllowedHeight = 220;\r\n }\r\n if (!isMobile && (left > window.innerWidth - maxAllowedWidth)) {\r\n left = 'auto';\r\n right = 0\r\n }\r\n if (!isMobile && (top > window.innerHeight - maxAllowedHeight)) {\r\n let negativeMargin = 50;\r\n if (contextMenuButtons.length > 6) {\r\n negativeMargin = 250;\r\n } else if (contextMenuButtons.length > 3) {\r\n negativeMargin = 150;\r\n }\r\n top = top - negativeMargin;\r\n }\r\n this.setState({\r\n contextMenuOpen,\r\n hoveredLayer: document.hoveredLayer,\r\n contextMenuPosition: {\r\n left,\r\n right,\r\n top,\r\n }\r\n });\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false) => {\r\n this.navigationItemClickCommon(item);\r\n this.itemClick(item, ignoreLocked);\r\n\r\n const updateSideBarIds = [\"center_island_cabinet\", \"top_cabinet\"];\r\n if (updateSideBarIds.includes(item.part.partId)) {\r\n this.updateSideBar();\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n // const fabricatorSettings = this.props.fabricatorSettings;\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n // const activeNavPart = activeSubPart || activePart;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n\r\n const useWizard = false, wizardGroups = [];\r\n\r\n let showNavigationFiltersSteps = false;\r\n\r\n if (activeSubPart && activeSubPart.canUseNavigationFilterSteps\r\n && activeSubPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = false;\r\n const availableNavButtons = [ContentType.Design, ContentType.Layout, ContentType.DisplayRoom];\r\n\r\n return (\r\n
    \r\n \r\n
    this.navWrapper = node}>\r\n
    \r\n
    \r\n {this.content(useWizard, wizardGroups, useFilters, activePart, activeSubPart)}\r\n
    \r\n
    \r\n {this.navigationMenuButtons(availableNavButtons)}\r\n {showNavigationFiltersSteps ? null : (\r\n
    \r\n \r\n
    \r\n )}\r\n {/*
    */}\r\n {/*
    */}\r\n {/**/}\r\n {/*
    */}\r\n {/*
    */}\r\n
    \r\n {this.state.contextMenuOpen && !this.state.contextMenuOpen.module\r\n ? \r\n : null}\r\n
    \r\n {showLockedView\r\n ? \r\n : null}\r\n
    \r\n )\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n visualizerTutorialStep: store.tutorialState.visualizerTutorialStep,\r\n visualizerTutorialIsOpened: store.tutorialState.visualizerTutorialIsOpened,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n toggleDesktopNavigation,\r\n setActiveNavigationNames,\r\n setModuleContextMenuType,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setVisualizerTutorialStep,\r\n showVisualizerTutorial,\r\n setNavigationLoading\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DesktopNavigation);\r\n","import React from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport MobileNavigationCommon from \"../../visComponents/navigation/mobileNavigationCommon\";\r\n\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport Z from \"../core/zIndex\";\r\n\r\nimport MobileNavigationButtons from '../../visComponents/navigation/mobile/mobileNavigationButtons';\r\nimport MobileNavigationAllWallsCheckbox from '../../visComponents/navigation/mobile/mobileNavigationAllWallsCheckbox';\r\nimport FeatureWizardSteps from \"../../visComponents/navigation/featureWizard/featureWizardSteps\";\r\n\r\nimport {changeActivePartRelatedItemIndex, setDefaultSelectionGroup} from \"../../../actions/actionFunctions\";\r\nimport {\r\n setActiveNavigationFilter,\r\n setModuleContextMenuType,\r\n setModuleContextMenuModule,\r\n setActiveNavigationFilterStepIndex, setNavigationViewType, setNavigationLoading\r\n} from \"../../../actions/navigationFunctions\";\r\n\r\nimport MobileMenuSelect from '../../visComponents/navigation/mobile/mobileMenuSelect';\r\nimport LockedView from \"../../common/lockedView\";\r\n\r\nimport Filters from \"../../visComponents/navigation/newFilters/filters\";\r\nimport BodyPanelRadio from \"../../visComponents/navigation/desktop/bodyPanelRadio\";\r\nimport FilterSwitchers from \"../../visComponents/navigation/newFilters/filterSwitchers\";\r\nimport FilterSelection from \"../../visComponents/navigation/newFilters/filterSelection\";\r\n// import {CABINET_WIZARD_BUTTONS} from \"../core/constants\";\r\nimport NavigationFiltersSteps from \"../../visComponents/navigation/newFilters/navigationFiltersSteps\";\r\nimport ContextMenuSimple from \"./contextMenuSimple\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nclass MobileNavigation extends MobileNavigationCommon {\r\n\r\n componentWillReceiveProps(nextProps) {\r\n this._componentWillReceiveProps(nextProps)\r\n }\r\n\r\n bindCanvasClick = (event) => {\r\n // console.log(\"bindCanvasClick event\");\r\n\r\n if (!window.touchMove && !this.state.showNavigation && !this.state.contextMenuOpen) {\r\n this.props.setHoveredLayer(event);\r\n }\r\n\r\n if (document.hoveredLayer && !window.touchMove) {\r\n // $('.canvas-text').html(`CLICK3`);\r\n const hoveredZone = Z.getMenuByHoveredLayer(document.hoveredLayer);\r\n if (hoveredZone) {\r\n if (hoveredZone.contextMenuPartId && !this.state.showNavigation) {\r\n if (this.state.contextMenuOpen) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n });\r\n document.removeEventListener('click', this.handleContextMenuBlur);\r\n } else {\r\n let contextMenuOpen = \"\";\r\n\r\n const receiveBackSplashes = () => {\r\n const layout = getCurrentLayout();\r\n const wallsParent = layout.parts[\"Walls\"];\r\n const backsplashSubPart = wallsParent.subParts().find(subPart => subPart.part.partId === \"backsplash\");\r\n this.checkIfAllFeaturesReceived(backsplashSubPart);\r\n };\r\n\r\n switch (hoveredZone.contextMenuPartId) {\r\n case \"countertop_group_custom\":\r\n contextMenuOpen = \"Countertop\";\r\n break;\r\n case \"right_wall_custom\":\r\n contextMenuOpen = \"right_wall_custom\";\r\n break;\r\n case \"left_wall_custom\":\r\n contextMenuOpen = \"left_wall_custom\";\r\n break;\r\n case \"backsplash_custom_left\": {\r\n receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_left\";\r\n break;\r\n }\r\n case \"backsplash_custom_right\": {\r\n receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_right\";\r\n break;\r\n }\r\n case \"backsplash_custom\": {\r\n receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom\";\r\n break;\r\n }\r\n case \"center_island_custom\":\r\n contextMenuOpen = \"Center Island\";\r\n break;\r\n default:\r\n break;\r\n }\r\n this.setState({\r\n contextMenuOpen: contextMenuOpen || hoveredZone,\r\n hoveredLayer: document.hoveredLayer\r\n }, () => {\r\n if (contextMenuOpen) {\r\n setTimeout(() => {\r\n document.addEventListener('click', this.handleContextMenuBlur);\r\n }, 0)\r\n }\r\n });\r\n }\r\n return false;\r\n } else if (this.state.contentType === 0) {\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass((hoveredZone.child || hoveredZone.parent || hoveredZone).toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n this.openMobileMenu();\r\n }\r\n\r\n hoveredZone.child\r\n ? this.triggerOpenNavigationMenu(hoveredZone.child, hoveredZone.parent, false)\r\n : this.triggerOpenNavigationMenu(hoveredZone)\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false) => {\r\n\r\n if (window.location.port === '9007' || document.kvConfig.kioskMode) {\r\n console.log('item', item);\r\n }\r\n this.itemClick(item, ignoreLocked);\r\n\r\n this.props.setActiveFeature(item.part);\r\n\r\n const canvasClass = this.state.childNavigationItem\r\n ? this.state.parentNavigationItem.text + '-' + this.state.childNavigationItem.text\r\n : this.state.parentNavigationItem.text;\r\n\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass(canvasClass.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n if (item.part.partId === \"top_cabinet\" && !item.part.metaData[\"Module\"]) {\r\n this.props.setModuleContextMenuModule(null)\r\n }\r\n };\r\n\r\n handleSubPartClick = (subNavigationItem, activeNavigationFilter = null) => { // sidebar list item click\r\n const subItemPart = subNavigationItem.part;\r\n const childNavigationItemPartId = subItemPart.partId;\r\n subItemPart.getParent().handleSubPartClick(subItemPart);\r\n this.setState({\r\n childNavigationItem: subNavigationItem,\r\n showFilterSelection: subItemPart.allFeaturesReceived, // show filters only if subItemPart has all features\r\n showerWallWizardGroupsSelected: false,\r\n searchText: \"\"\r\n }, () => {\r\n this.scrollContentToTop();\r\n this.rememberWallsSelection();\r\n this.checkIfAllFeaturesReceived(subNavigationItem, \"childNavigationItem\");\r\n });\r\n /*set new materials page subIndex*/\r\n this.setActivePartRelatedItemIndex(subNavigationItem);\r\n // console.log('subItemPart', subItemPart);\r\n if (!window.canvasIsDragging) {\r\n const canvasClass = this.state.parentNavigationItem.text + '-' + subNavigationItem.text\r\n .toLowerCase().replace(/ /g, \"-\");\r\n this.props.setCanvasClass(canvasClass);\r\n }\r\n this.setNewActiveFeature(subNavigationItem);\r\n\r\n this.setNavigationFilterIfTheChildWasChanged(childNavigationItemPartId, activeNavigationFilter);\r\n\r\n };\r\n\r\n backsplashSelectClick = () => {\r\n this.props.refreshCB(); // update canvas\r\n this.reRenderComponent(); // update nav items\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n const activeNavPart = activeSubPart || activePart;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n const allFeaturesReceived = activeNavPart && activeNavPart.allFeaturesReceived;\r\n\r\n // console.log('activePart', activePart);\r\n // console.log('activeSubPart', activeSubPart);\r\n // console.log('activePart.subTypes()', activePart && activePart.subTypes());\r\n // console.log('this.state.childNavigationItemv1111', this.state.childNavigationItem);\r\n\r\n let useWizard = false;\r\n let wizardGroups = [];\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n && this.state.contentType === ContentType.Design && activeSubPart && activeSubPart.canUseWizard && activeSubPart.allFeaturesReceived) {\r\n useWizard = true;\r\n wizardGroups = this.state[this.getWizardGroupsByPartId(this.state.childNavigationItem.part.partId)];\r\n }\r\n\r\n const features = this.getFeatures(layout);\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = (activePart && activePart.partId === \"kitchen_floor\" && activePart.allFeaturesReceived)\r\n || (activeSubPart && (this.isWallItem(activeSubPart) || activeSubPart.partId === \"accent_wall\"\r\n || activeSubPart.partId === \"shower_interior_wall_accent\") && activeSubPart.allFeaturesReceived);\r\n\r\n const filterSelectionHasValues = activeNavPart && FilterSelection.getAvailableFilterValues(\r\n this.props.filterGroups, \"Material\", activeNavPart, this.props.fabricatorData\r\n ).length;\r\n\r\n const itemIsSelected = (!this.props.fabricatorSettings.leadCapture\r\n || (activeSubPart && activeSubPart.activeFeature && activeSubPart.firstClick[this.props.activeQuoteIndex] && activeSubPart.placeholderChanged));\r\n\r\n const useKVWizard = false;\r\n //TODO change it when BE is ready\r\n\r\n const showNavigationFilters = useKVWizard &&activeNavPart\r\n // && this.props.activeNavigationFilter !== CABINET_WIZARD_BUTTONS[0].buttonId\r\n && activeNavPart.canUseNavigationFilter && activeNavPart.canUseNavigationFilter();\r\n\r\n let showNavigationFiltersSteps = false;\r\n if (useKVWizard && activeNavPart && activeNavPart.canUseNavigationFilterSteps\r\n && activeNavPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n const cabinetsPartIds = [\"top_cabinet\", \"bottom_cabinet\", \"center_island_cabinet\"];\r\n const isCabinet = activeSubPart && cabinetsPartIds.includes(activeSubPart.partId);\r\n const countertopPartIds = [\"countertop\", \"backsplash\", \"center_island_countertop\"];\r\n const isCountertop = activeSubPart && countertopPartIds.includes(activeSubPart.partId);\r\n\r\n return (\r\n
    \r\n
    \r\n {/*
    \r\n
    \r\n {this.state.contextMenuOpen && !this.state.contextMenuOpen.module\r\n ? \r\n : null}\r\n {showLockedView\r\n ? \r\n : null}\r\n \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n fabricatorData: store.fabricatorState,\r\n selectedFilters: store.filterState.selectedFilters,\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n userPopupOpened: store.userState.userPopupOpened,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n newLayoutType: store.sqftState.newLayoutType,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n setModuleContextMenuType,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setModuleContextMenuModule,\r\n setNavigationLoading\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(MobileNavigation)\r\n);\r\n","import {LayoutType} from \"./constants\";\r\nimport {UseFullSizeImages} from \"../../../config\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nlet layouts = {};\r\nObject.keys(LayoutType).forEach(layoutName => {\r\n layouts[layoutName] = {\r\n center_island_sink: 3100,\r\n walls_ceiling: 50900,\r\n kitchen_floor: 50025,\r\n // slat_wall: 50020,\r\n shower_wall_mirror: 50050,\r\n back_wall: 50100,\r\n front_wall: 50200,\r\n left_wall: 50500,\r\n right_wall: 54000,\r\n background_bg: 70000,\r\n };\r\n});\r\n\r\nconst getLayerDimensions = (layer, currentLayout, canvasDimensions) => {\r\n const fullImagesFactor = UseFullSizeImages ? 177.77 : 100;\r\n const sizeFactor = fullImagesFactor / 100;\r\n const {coords} = layer;\r\n\r\n if (!coords) {\r\n return null\r\n }\r\n\r\n const COORDS_MAX = 1;\r\n\r\n const x1Percentage = (coords.min_x * 100) / COORDS_MAX;\r\n const x2Percentage = (coords.max_x * 100) / COORDS_MAX;\r\n const y1Percentage = (coords.min_y * 100) / COORDS_MAX;\r\n const y2Percentage = (coords.max_y * 100) / COORDS_MAX;\r\n let x1 = sizeFactor*((canvasDimensions.width * x1Percentage) / 100);\r\n let x2 = sizeFactor*((canvasDimensions.width * x2Percentage) / 100);\r\n let y1 = sizeFactor*((canvasDimensions.height * y1Percentage) / 100);\r\n let y2 = sizeFactor*((canvasDimensions.height * y2Percentage) / 100);\r\n return {\r\n polygonArray: [[x1, y1], [x2, y1], [x2, y2], [x1, y2]],\r\n width: (x2 - x1),\r\n height:(y2 - y1)\r\n };\r\n};\r\n\r\nconst getMenuByHoveredLayer = (layer) => {\r\n const layout = getCurrentLayout();\r\n const featureGroup = layout.getFeatureGroupByPartId(layer.partId);\r\n if (featureGroup) {\r\n return {\r\n parent: featureGroup.getParent().partName,\r\n child: featureGroup.partName\r\n }\r\n }\r\n return \"\"\r\n};\r\n\r\nexport default {\r\n layouts,\r\n getMenuByHoveredLayer,\r\n getLayerDimensions\r\n}\r\n\r\n\r\n","import snakeCase from \"lodash/snakeCase\";\r\nimport {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport NonVisualizerSubPart from \"../subparts/nonVisualizerSubPart\";\r\n\r\nexport default class Other extends Part {\r\n static id = 'Other';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Other';\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n // console.log(\"load other\", dbFeature.groupName);\r\n const partId = snakeCase(dbFeature.groupName);\r\n let relatedItem = this.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, dbFeature.groupName);\r\n this.relatedItems.push(relatedItem);\r\n }\r\n relatedItem.getParent = () => this;\r\n relatedItem.load(dbFeature);\r\n return true\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Other', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport BackgroundBG from \"../subparts/backgrounds/BackgroundBG\";\r\n\r\nexport default class Background extends Part {\r\n static id = 'Background';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Background';\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"BG\":\r\n relatedItemName = \"backgroundBG\";\r\n RelatedItemClass = BackgroundBG;\r\n break;\r\n default:\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem(\"Background\", this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class BackgroundBG extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'background_bg';\r\n this.partName = 'Background BG';\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BackgroundBG());\r\n }\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {floorThumbnail} from \"../../../kvComponent/core/assets\";\r\n\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nexport default class Floor extends Part {\r\n static id = 'Floor';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.partId = 'parent_floor';\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.kitchen.kitchen_floor\";\r\n this.partThumbnail = floorThumbnail;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Flor\":\r\n case \"Floor\":\r\n relatedItemName = \"floorBody\";\r\n RelatedItemClass = FloorBody;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Floor', this);\r\n }\r\n\r\n}\r\n\r\nclass FloorBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'kitchen_floor';\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.kitchen.kitchen_floor\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new FloorBody());\r\n }\r\n}\r\n\r\n\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport LeftWall from \"../subparts/walls/leftWall\";\r\nimport RightWall from \"../subparts/walls/rightWall\";\r\nimport CenterWall from \"../subparts/walls/centerWall\";\r\nimport FrontWall from \"../subparts/walls/frontWall\";\r\n\r\nexport default class Walls extends Part {\r\n static id = 'Walls';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Walls';\r\n this.partThumbnail = \"\";\r\n this.translateId = \"visualizer.kitchen.walls\";\r\n\r\n // related items\r\n this.leftWall = null;\r\n this.rightWall = null;\r\n this.centerWall = null;\r\n this.frontWall = null;\r\n this.ceiling = null;\r\n this.backsplash = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Left Wall\":\r\n relatedItemName = \"leftWall\";\r\n RelatedItemClass = LeftWall;\r\n break;\r\n case \"Right Wall\":\r\n relatedItemName = \"rightWall\";\r\n RelatedItemClass = RightWall;\r\n break;\r\n case \"Center Wall\":\r\n relatedItemName = \"centerWall\";\r\n RelatedItemClass = CenterWall;\r\n break;\r\n case \"Front Wall\":\r\n relatedItemName = \"frontWall\";\r\n RelatedItemClass = FrontWall;\r\n break;\r\n // case \"Shower Shadow\":\r\n // if (\r\n // dbFeature.displayName.includes(\"Shower Shadow - Divider Wall\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - EX L\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - EX R\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - Popout\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - Pony Wall\")\r\n // ) {\r\n // relatedItemName = \"shadows\";\r\n // RelatedItemClass = Shadow;\r\n // }\r\n // break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Walls', this);\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class LeftWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'left_wall';\r\n this.partName = 'Left Wall';\r\n this.translateId = \"visualizer.kitchen.walls.left_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new LeftWall());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class RightWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'right_wall';\r\n this.partName = 'Right Wall';\r\n this.translateId = \"visualizer.kitchen.walls.right_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new RightWall());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class CenterWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_wall';\r\n this.partName = 'Center Wall';\r\n this.translateId = \"visualizer.bathroom.walls.center_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new CenterWall());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class FrontWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'front_wall';\r\n this.partName = 'Front Wall';\r\n this.translateId = \"visualizer.bathroom.walls.front_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new FrontWall());\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {wallsThumbnail} from \"../../../bvComponent/core/assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\n\r\nimport Decor from \"../subparts/globals/decor\";\r\nimport {DECORS_MAX} from \"../constants\";\r\nimport Basket from \"../subparts/globals/basket\";\r\n\r\nconst compareMountPosition = (checkFeature, dbFeatureLoading) => {\r\n return checkFeature.metaData[\"MountPosition\"] && checkFeature.matchesMetaForCondition(\"MountPosition\", dbFeatureLoading.metaData[\"MountPosition\"])\r\n}\r\n\r\nconst checkForExistingDecor = (currentDecorFeatureGroup, dbFeature) => {\r\n if (!currentDecorFeatureGroup) { // we skipped all decors, but didn't find the same\r\n return true\r\n }\r\n if (dbFeature.sharedFeatureName === currentDecorFeatureGroup.decorName) { // decors are matching by name\r\n return true\r\n }\r\n if (dbFeature.metaData[\"MountPosition\"]) {\r\n if (Array.isArray(dbFeature.metaData[\"RoomLayout\"])) {\r\n return dbFeature.metaData[\"RoomLayout\"].some(layoutName => {\r\n return currentDecorFeatureGroup.featuresList && Array.isArray(currentDecorFeatureGroup.featuresList[layoutName])\r\n && currentDecorFeatureGroup.featuresList[layoutName].some(feature => compareMountPosition(feature, dbFeature))\r\n })\r\n } else {\r\n return currentDecorFeatureGroup.some(feature => compareMountPosition(feature, dbFeature))\r\n }\r\n }\r\n return false\r\n}\r\n\r\nexport default class Globals extends Part {\r\n static id = \"Globals\";\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = \"Globals\";\r\n this.partThumbnail = wallsThumbnail;\r\n\r\n // related items\r\n this.decor1 = null; // can be up to 10\r\n this.basket = null; // can be up to 10\r\n }\r\n\r\n load(dbFeature) {\r\n let\r\n relatedItemName = \"\",\r\n decorCount = 0,\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Decor\":\r\n case \"Decore\": {\r\n for (let i = 1; i <= DECORS_MAX; i++) {\r\n const currentDecorFeatureGroup = this[\"decor\" + i];\r\n if (checkForExistingDecor(currentDecorFeatureGroup, dbFeature)) {\r\n relatedItemName = \"decor\" + i;\r\n decorCount = i;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n // case \"Attachment\": {\r\n // relatedItemName = \"attachment\";\r\n // RelatedItemClass = Attachment;\r\n // break;\r\n // }\r\n case \"Basket\": {\r\n relatedItemName = \"basket\";\r\n RelatedItemClass = Basket;\r\n break;\r\n }\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n if (dbFeature.groupName === \"Decor\" || dbFeature.groupName === \"Decore\") {\r\n this[relatedItemName] = new Decor(true, decorCount);\r\n this[relatedItemName].decorName = dbFeature.sharedFeatureName;\r\n } else {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n }\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {}\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nexport default class Decor extends IntermediatePart {\r\n constructor(isChild, decorCount) {\r\n super(isChild);\r\n this.decorCount = decorCount;\r\n this.partId = \"decor_\" + decorCount;\r\n this.partName = \"Decor \" + decorCount;\r\n }\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Decor(false, this.decorCount));\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Basket extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'basket';\r\n this.partName = 'Basket';\r\n this.translateId = \"visualizer.bathroom.basket\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport CabinetLeg from \"../subparts/cabinet/cabinetLeg\";\r\nimport Countertop from \"../subparts/cabinet/countertop\";\r\nimport Hook from \"../subparts/cabinet/hook\";\r\nimport CabinetGroup from \"../subparts/cabinet/cabinetGroup\";\r\nimport Slatwall from \"../subparts/cabinet/slatwall\";\r\nimport OverheadRack from \"../subparts/cabinet/overheadRack\";\r\nimport BottomCabinet from \"../subparts/cabinet/bottomCabinet\";\r\nimport TopCabinet from \"../subparts/cabinet/topCabinet\";\r\nimport TallCabinet from \"../subparts/cabinet/tallCabinet\";\r\nimport TallHandle from \"../subparts/cabinet/tallHandle\";\r\nimport TallCabinetLeg from \"../subparts/cabinet/tallCabinetLeg\";\r\nimport TopHandle from \"../subparts/cabinet/topHandle\";\r\nimport BottomHandle from \"../subparts/cabinet/bottomHandle\";\r\nimport BottomCabinetLeg from \"../subparts/cabinet/bottomCabinetLeg\";\r\n\r\nexport default class Cabinet extends Part {\r\n static id = 'Cabinet';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Cabinet';\r\n this.partThumbnail = \"\";\r\n this.translateId = \"visualizer.kitchen.cabinet\";\r\n\r\n // related items\r\n this.worktop = null;\r\n this.cabinetLeg = null;\r\n this.hook = null;\r\n this.slatWall = null;\r\n this.tallCabinet = null;\r\n this.tallHandle = null;\r\n this.tallCabinetLeg = null;\r\n this.relatedGroupNames = [\"Countertop\", \"Bottom Handle\", \"Top Handle\", \"Bottom Cabinet\", \"Top Cabinet\",\r\n \"Bottom Cabinet Leg\", \"Tall Cabinet\", \"Tall Cabinet Leg\", \"Tall Handle\"];\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Worktop\":\r\n case \"Countertop\":\r\n relatedItemName = \"countertop\";\r\n RelatedItemClass = Countertop;\r\n break;\r\n case \"Cabinet Leg\":\r\n relatedItemName = \"cabinetLeg\";\r\n RelatedItemClass = CabinetLeg;\r\n break;\r\n case \"Bottom Cabinet Leg\":\r\n relatedItemName = \"bottomCabinetLeg\";\r\n RelatedItemClass = BottomCabinetLeg;\r\n break;\r\n case \"Cabinet\":\r\n relatedItemName = \"cabinetGroup\";\r\n RelatedItemClass = CabinetGroup;\r\n break;\r\n case \"Hook\":\r\n case \"Double Hook\":\r\n case \"Kayak Hook\":\r\n case \"Single Hook\":\r\n case \"Vertical Bike Hook\":\r\n relatedItemName = \"hook\";\r\n RelatedItemClass = Hook;\r\n break;\r\n case \"Slatwall\":\r\n case \"Slat Wall\":\r\n relatedItemName = \"slatWall\";\r\n RelatedItemClass = Slatwall;\r\n break;\r\n case \"Overhead Rack\":\r\n relatedItemName = \"Overhead Rack\";\r\n RelatedItemClass = OverheadRack;\r\n break;\r\n case \"Bottom Cabinet\":\r\n relatedItemName = \"bottomCabinet\";\r\n RelatedItemClass = BottomCabinet;\r\n break;\r\n case \"Top Cabinet\":\r\n relatedItemName = \"topCabinet\";\r\n RelatedItemClass = TopCabinet;\r\n break;\r\n case \"Tall Cabinet\":\r\n relatedItemName = \"tallCabinet\";\r\n RelatedItemClass = TallCabinet;\r\n break;\r\n case \"Tall Handle\":\r\n case \"Tall Cabinet Handle\":\r\n relatedItemName = \"tallHandle\";\r\n RelatedItemClass = TallHandle;\r\n break;\r\n case \"Tall Cabinet Leg\":\r\n relatedItemName = \"tallCabinetLeg\";\r\n RelatedItemClass = TallCabinetLeg;\r\n break;\r\n case \"Top Handle\":\r\n relatedItemName = \"topHandle\";\r\n RelatedItemClass = TopHandle;\r\n break;\r\n case \"Bottom Handle\":\r\n relatedItemName = \"bottomHandle\";\r\n RelatedItemClass = BottomHandle;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Cabinet', this);\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class CabinetLeg extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'cabinet_leg';\r\n this.partName = 'Cabinet Leg';\r\n this.translateId = \"visualizer.laundryRoom.cabinetLeg\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Countertop extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'countertop';\r\n this.partName = 'Countertop';\r\n this.translateId = \"visualizer.kitchen.countertop.countertop\";\r\n this.isStoneFeature = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Hook extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'hook';\r\n this.partName = 'Hook';\r\n this.translateId = \"visualizer.laundryRoom.hook\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class CabinetGroup extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'cabinet_group';\r\n this.partName = 'Cabinet';\r\n this.translateId = \"visualizer.kitchen.cabinet\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {SLAT_WALL_POSITIONS} from \"../../constants\";\r\n\r\nexport default class SlatWall extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'slat_wall';\r\n this.partName = 'Slatwall';\r\n this.translateId = \"visualizer.kitchen.walls.slat_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n this.slatWallType = SLAT_WALL_POSITIONS[0];\r\n this.hasAdditionalParts = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Part\"]) {\r\n dbFeature.metaData[\"Part\"] = [\"2\"];\r\n }\r\n if (!dbFeature.metaData[\"Height\"]) {\r\n dbFeature.metaData[\"Height\"] = [\"2\"];\r\n }\r\n const isMainFeature = (dbFeature.metaData[\"Part\"][0] === \"2\") && (dbFeature.metaData[\"Height\"][0] === \"2\");\r\n return super.load_(dbFeature, new SlatWall(false, SlatWall),\r\n true, isMainFeature ? 'features' : 'featuresParts');\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n if (!fromFeature) {\r\n return []\r\n }\r\n const currentConditions = activeFeatureConditions || this.getArrayOfConditions();\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n const parts = this.featuresParts.filter(attFeature => {\r\n if (!attFeature.matchesMetaForArrayOfConditions(currentConditions) || (name1 !== attFeature.getSplittedFeatureName())) {\r\n return false\r\n }\r\n switch (this.slatWallType) {\r\n case SLAT_WALL_POSITIONS[0]: // center horizontal\r\n return (attFeature.matchesMetaForCondition(\"Part\", \"1\") && attFeature.matchesMetaForCondition(\"Height\", \"2\"))\r\n || (attFeature.matchesMetaForCondition(\"Part\", \"3\") && attFeature.matchesMetaForCondition(\"Height\", \"2\"))\r\n case SLAT_WALL_POSITIONS[1]:\r\n return false // only one center feature\r\n case SLAT_WALL_POSITIONS[2]: // center vertical\r\n return (attFeature.matchesMetaForCondition(\"Part\", \"2\") && attFeature.matchesMetaForCondition(\"Height\", \"1\"))\r\n || (attFeature.matchesMetaForCondition(\"Part\", \"2\") && attFeature.matchesMetaForCondition(\"Height\", \"3\"))\r\n case SLAT_WALL_POSITIONS[3]:\r\n return true // full wall, all are matching\r\n }\r\n });\r\n console.log(\"parts\", name1, parts);\r\n return parts\r\n }\r\n\r\n showLayerPositionsModal() {\r\n return true\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class OverheadRack extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'overhead_rack';\r\n this.partName = 'Overhead Rack';\r\n this.translateId = \"visualizer.laundryRoom.overheadRack\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class BottomCabinet extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'bottom_cabinet';\r\n this.partName = 'Bottom Cabinet';\r\n this.translateId = \"visualizer.kitchen.cabinet.bottom_cabinet\";\r\n this.hasAdditionalParts = true;\r\n this.layerPriority = 4;\r\n this.allWallsCanBeApplied = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = (dbFeature.metaData[\"Part\"] && +dbFeature.metaData[\"Part\"][0]) === 1 ? 1 : 2;\r\n return super.load_(dbFeature, new BottomCabinet(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n disabledClick() {\r\n const cabinetParent = this.getParent();\r\n if (cabinetParent.cabinetLeg) {\r\n cabinetParent.cabinetLeg.disabled = this.disabled;\r\n }\r\n if (cabinetParent.countertop) {\r\n cabinetParent.countertop.disabled = this.disabled;\r\n }\r\n if (cabinetParent.bottomHandle) {\r\n cabinetParent.bottomHandle.disabled = this.disabled;\r\n }\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom = \"\") {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick(ignoreLocked, clickFrom);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.bottomCabinet.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class TopCabinet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'top_cabinet';\r\n this.partName = 'Top Cabinet';\r\n this.translateId = \"visualizer.kitchen.cabinet.top_cabinet\";\r\n this.hasAdditionalParts = true;\r\n this.layerPriority = 1;\r\n this.allWallsCanBeApplied = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n disabledClick() {\r\n const cabinetParent = this.getParent();\r\n if (cabinetParent.topHandle) {\r\n cabinetParent.topHandle.disabled = this.disabled;\r\n }\r\n }\r\n\r\n}\r\n\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class TallCabinet extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'tall_cabinet';\r\n this.partName = 'Tall Cabinet';\r\n this.translateId = \"visualizer.kitchen.cabinet.tall_cabinet\";\r\n this.hasAdditionalParts = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = (dbFeature.metaData[\"Part\"] && +dbFeature.metaData[\"Part\"][0]) === 1 ? 1 : 2;\r\n return super.load_(dbFeature, new TallCabinet(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom = \"\") {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick(ignoreLocked, clickFrom);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.bottomCabinet.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n disabledClick() {\r\n const cabinetParent = this.getParent();\r\n if (cabinetParent.tallCabinetLeg) {\r\n cabinetParent.tallCabinetLeg.disabled = this.disabled;\r\n }\r\n if (cabinetParent.tallHandle) {\r\n cabinetParent.tallHandle.disabled = this.disabled;\r\n }\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class TallHandle extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'tall_handle';\r\n this.partName = 'Tall Handle';\r\n this.translateId = \"visualizer.kitchen.cabinet.tall_handle\";\r\n this.hasAdditionalParts = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class TallCabinetLeg extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'tall_cabinet_leg';\r\n this.partName = 'Tall Cabinet Leg';\r\n this.translateId = \"visualizer.kitchen.cabinet.tall_cabinet_leg\";\r\n this.hasAdditionalParts = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class TopHandle extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'top_handle';\r\n this.partName = 'Top Handle';\r\n this.translateId = \"visualizer.kitchen.cabinet.top_handle\";\r\n this.hasAdditionalParts = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class BottomHandle extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'bottom_handle';\r\n this.partName = 'Bottom Handle';\r\n this.translateId = \"visualizer.kitchen.cabinet.bottom_handle\";\r\n this.hasAdditionalParts = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class BottomCabinetLeg extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'bottom_cabinet_leg';\r\n this.partName = 'Bottom Cabinet Leg';\r\n this.translateId = \"visualizer.kitchen.cabinet.bottom_cabinet_leg\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\n\r\nimport Attachment from \"../subparts/globals/attachment\";\r\nimport {DECORS_MAX} from \"../constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nconst compareMountPosition = (checkFeature, dbFeatureLoading) => {\r\n return checkFeature.metaData[\"MatchingFeature\"] && checkFeature.matchesMetaForCondition(\"MatchingFeature\", dbFeatureLoading.metaData[\"MatchingFeature\"])\r\n}\r\n\r\nconst checkForExistingDecor = (currentDecorFeatureGroup, dbFeature) => {\r\n if (!currentDecorFeatureGroup) { // we skipped all decors, but didn't find the same\r\n return true\r\n }\r\n if (dbFeature.sharedFeatureName === currentDecorFeatureGroup.decorName) { // decors are matching by name\r\n return true\r\n }\r\n if (dbFeature.metaData[\"MountPosition\"]) {\r\n if (Array.isArray(dbFeature.metaData[\"RoomLayout\"])) {\r\n return dbFeature.metaData[\"RoomLayout\"].some(layoutName => {\r\n return currentDecorFeatureGroup.featuresList && Array.isArray(currentDecorFeatureGroup.featuresList[layoutName])\r\n && currentDecorFeatureGroup.featuresList[layoutName].some(feature => compareMountPosition(feature, dbFeature))\r\n })\r\n } else {\r\n return currentDecorFeatureGroup.some(feature => compareMountPosition(feature, dbFeature))\r\n }\r\n }\r\n return false\r\n}\r\n\r\nexport default class Accessories extends Part {\r\n static id = \"Accessories\";\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Accessories';\r\n this.partThumbnail = \"\";\r\n this.translateId = \"visualizer.bathroom.accessories2\";\r\n\r\n // related items\r\n this.attachment1 = null; // can be up to 10\r\n }\r\n\r\n load(dbFeature) {\r\n let\r\n relatedItemName = \"\",\r\n decorCount = 0,\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Attachment\": {\r\n for (let i = 1; i <= DECORS_MAX; i++) {\r\n const currentDecorFeatureGroup = this[\"attachment\" + i];\r\n if (checkForExistingDecor(currentDecorFeatureGroup, dbFeature)) {\r\n relatedItemName = \"attachment\" + i;\r\n decorCount = i;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n if (dbFeature.groupName === \"Attachment\") {\r\n this[relatedItemName] = new Attachment(true, decorCount);\r\n this[relatedItemName].decorName = dbFeature.sharedFeatureName;\r\n } else {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n }\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Accessories', this);\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Attachment extends IntermediatePart {\r\n\r\n constructor(isChild, decorCount) {\r\n super(isChild);\r\n this.decorCount = decorCount;\r\n this.partId = \"attachment_\" + decorCount;\r\n this.partName = \"Attachment \" + decorCount;\r\n this.translateId = \"visualizer.bathroom.accessories2\";\r\n this.canBeDisabled = true;\r\n }\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Attachment(false, this.decorCount));\r\n }\r\n\r\n setLayers(layout) {\r\n const activeFeatures = layout.getActiveFeatures(true, true);\r\n if (this.activeFeature\r\n && this.activeFeature.metaData[\"MatchingFeature\"]\r\n && !activeFeatures.some(cartItem => cartItem.cartFeature.metaData[\"MatchingFeature\"]\r\n && cartItem.cartFeature.metaData[\"MatchingFeature\"][0] === this.activeFeature.metaData[\"MatchingFeature\"][0])) {\r\n return this.hideLayers();\r\n }\r\n return super.setLayers(layout);\r\n }\r\n\r\n}\r\n","import $ from 'jquery';\r\nimport * as types from '../actions/actionTypes';\r\nimport {IS_LIXIL_UI, UseFullSizeImages} from \"../config\";\r\nimport {LAYERS_SIZES} from \"../misc/utils\";\r\n\r\nconst initialState = {\r\n bvOpened: IS_LIXIL_UI,\r\n bvVisited: false,\r\n canvasId: \"\",\r\n bvFeatures: [],\r\n bvPresets: [],\r\n allVisualizersPresets: {},\r\n activePreset: 0,\r\n loadedPresets: [], // array of id's of already loaded presets (in order not to download them twice)\r\n presetWasChangedByUser: null, // preset id that user has clicked\r\n firstLoadedPreset: null, // the one that was loaded first (from url or job id, etc.)\r\n showRestorePopup: true,\r\n canvasDimensions: LAYERS_SIZES.normal,\r\n staticCanvasImage: window.location.href.includes(\"formwood_industries\")\r\n ? \"https://qc-static.s3.us-west-1.amazonaws.com/fabricator-static-files/Formwood+Stagnate+Vis.jpg\"\r\n : \"\",\r\n canvasCount: 0,\r\n canvasScale: 1,\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.TOGGLE_BATHROOM_VISUALIZER_OPEN:\r\n if (action.payload.bvOpened) {\r\n setTimeout(() => { // set timeout is needed because of BV menu wrapper blur click\r\n document.body.classList.add('body--bv');\r\n $(window).trigger('resize');\r\n }, 0);\r\n } else {\r\n setTimeout(() => { // set timeout is needed because of BV menu wrapper blur click\r\n document.body.classList.remove('body--bv');\r\n }, 0)\r\n }\r\n\r\n return Object.assign({}, state, {\r\n bvOpened: action.payload.bvOpened,\r\n bvVisited: true\r\n });\r\n case types.SET_BV_CANVAS_ID:\r\n return {...state, canvasId: action.payload.id};\r\n case types.SET_BV_FEATURES:\r\n case types.TOGGLE_SHOW_RESTORE_POPUP:\r\n case types.SET_BATHROOM_VISUALIZER_VISITED:\r\n case types.SET_STATIC_CANVAS_IMAGE:\r\n case types.SET_PRESET_WAS_CHANGED_BY_USER:\r\n case types.SET_FIRST_LOADED_PRESET:\r\n case types.SET_CANVAS_SCALE:\r\n case types.SET_LOADED_PRESETS:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n })\r\n case types.SET_BV_PRESETS:\r\n return Object.assign({}, state, {\r\n ...action.payload,\r\n allVisualizersPresets: Object.assign({}, state.allVisualizersPresets, {\r\n [action.payload.visualizerType || document.kvConfig.visualizerType]: action.payload.bvPresets\r\n })\r\n })\r\n case types.UPDATE_FABRICATOR_SETTINGS: // update when visualizer is changed\r\n return Object.assign({}, state, {\r\n bvPresets: state.allVisualizersPresets[document.kvConfig.visualizerType] || []\r\n })\r\n case types.SET_ACTIVE_PRESET: {\r\n const loadedPresets = state.loadedPresets.includes(action.payload.activePreset)\r\n ? state.loadedPresets\r\n : [...state.loadedPresets, action.payload.activePreset];\r\n return Object.assign({}, state, {\r\n loadedPresets,\r\n ...action.payload\r\n })\r\n }\r\n case types.UPDATE_CANVAS_COUNT:\r\n return Object.assign({}, state, {\r\n canvasCount: state.canvasCount + 1\r\n })\r\n case types.SET_CANVAS_DIMENSIONS:\r\n // eslint-disable-next-line no-case-declarations\r\n const canvasDimensions = action.payload.canvasDimensions\r\n ? Object.assign({}, action.payload.canvasDimensions)\r\n : document.kvConfig.layersSize === \"full_hd\"\r\n ? UseFullSizeImages ? LAYERS_SIZES.full_hd_large : LAYERS_SIZES.full_hd\r\n : UseFullSizeImages ? LAYERS_SIZES.large : LAYERS_SIZES.normal\r\n if (canvasDimensions && canvasDimensions.width) {\r\n switch (canvasDimensions.width) {\r\n case LAYERS_SIZES.large.width:\r\n case LAYERS_SIZES.full_hd_large.width: {\r\n document.body.classList.add('bv--full-size');\r\n break;\r\n }\r\n case LAYERS_SIZES.full_hd.width: {\r\n document.body.classList.add('bv--full-hd');\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n return Object.assign({}, state, {canvasDimensions})\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n loaderOpened: false,\r\n loaderTitle: \"loader.defaultTitle\",\r\n loaderText: \"loader.defaultText\",\r\n loaderFullScreen: false,\r\n multiLoader: {\r\n visible: true,\r\n activeStep: 0,\r\n renderSteps: [\r\n {icon: \"doorStyle\", text: \"doorStyle\"},\r\n {icon: \"color\", text: \"color\"},\r\n {icon: \"layout\", text: \"layout\"},\r\n {icon: \"design1\", text: \"design1\"},\r\n {icon: \"4kOutput\", text: \"4kOutput\"},\r\n {icon: \"lighting\", text: \"lighting\"},\r\n {icon: \"design1\", text: \"design2\"},\r\n ]\r\n }\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n switch(action.type) {\r\n case types.TOGGLE_LOADER:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_MULTI_LOADER:\r\n return Object.assign({}, state, {\r\n multiLoader: {...state.multiLoader, ...action.payload}\r\n });\r\n\r\n }\r\n\r\n return state;\r\n}\r\n","import merge from 'lodash/merge';\r\nimport * as types from '../actions/actionTypes';\r\nimport Analytics from './../analytics';\r\nimport {UserPopupTypes, ConfirmPopupTypes, UserPopupContent} from \"../bvcomponents/visComponents/constants\";\r\nimport {parseQuery} from \"../misc/helpers\";\r\nimport {\r\n parseFabricatorSettings\r\n} from \"./fabricatorReducer\";\r\nimport {PREFERRED_COMMUNICATION_METHODS} from \"../bvcomponents/popups/assignQuotePopup/assignQuoteConstants\";\r\nimport Config from \"../config\";\r\nimport {hardCodeIsCaesarStone, hardCodeIsGraniteTransformationUK, hardCodeIsLowes} from \"../misc/fabricatorHardcode\";\r\n\r\nconst dashboardFramed = Config.isVisualizerManagement();\r\nconst parsedUrl = parseQuery();\r\n\r\nexport const countries = {\r\n \"GBP\": {\r\n name: \"United Kingdom\",\r\n iso2: \"gb\",\r\n dialCode: \"44\",\r\n priority: 0,\r\n areaCodes: null,\r\n },\r\n \"USD\": {\r\n areaCodes: null,\r\n dialCode: \"1\",\r\n iso2: \"us\",\r\n name: \"United States\",\r\n priority: 0\r\n },\r\n \"CAD\": {\r\n areaCodes: null,\r\n dialCode: \"1\",\r\n iso2: \"ca\",\r\n name: \"Canada\",\r\n priority: 1\r\n },\r\n \"AUS\": {\r\n areaCodes: null,\r\n dialCode: \"61\",\r\n iso2: \"au\",\r\n name: \"Australia\",\r\n priority: 0\r\n },\r\n \"PAB\": {\r\n areaCodes: null,\r\n dialCode: \"507\",\r\n iso2: \"pa\",\r\n name: \"Panama\",\r\n priority: 0\r\n },\r\n \"SPN\": {\r\n areaCodes: null,\r\n dialCode: \"37\",\r\n iso2: \"es\",\r\n name: \"Spain\",\r\n priority: 0\r\n },\r\n \"PLN\": {\r\n name: \"Poland (Polska)\",\r\n iso2: \"pl\",\r\n dialCode: \"48\",\r\n priority: 0,\r\n areaCodes: null,\r\n },\r\n};\r\n\r\nexport const getDefaultCountry = (fabricatorSettings) => {\r\n if (fabricatorSettings.currency === \"GBP\" || hardCodeIsGraniteTransformationUK()) {\r\n return countries.GBP\r\n } if (fabricatorSettings.currency === \"PLN\") {\r\n return countries.PLN\r\n } else if (hardCodeIsLowes()) {\r\n return countries.CAD\r\n }\r\n // const {intl} = this.props;\r\n // if (intl.locale === \"en-AU\" || this.props.fabricatorData.isCaesarStone) {\r\n // if (fabricatorState.isCaesarStone) {\r\n // return countries.AUS\r\n // }\r\n const currency = fabricatorSettings.currency === \"AUD\" ? \"AUS\" : fabricatorSettings.currency;\r\n return countries[currency] || countries.USD\r\n};\r\n\r\nconst initialState = {\r\n userPopupOpened: false,\r\n userPopupType: UserPopupTypes.Unlock,\r\n saveQuoteAfterLogin: false,\r\n userIsLoggedIn: dashboardFramed,\r\n userSchedulerOpened: false,\r\n checkout: false,\r\n userInfo: {\r\n phone: \"\",\r\n email: \"\",\r\n password: \"\",\r\n firstName: \"\",\r\n phoneNumber: \"\",\r\n postal: \"\",\r\n salesPersonEmail: (window.salesPerson ? window.salesPerson.email : \"\"),\r\n salesPersonFullName: (window.salesPerson ? window.salesPerson.name : \"\"),\r\n isNew: true,\r\n fabricatorId: document.kvConfig.userId || 61986,\r\n employeeId: window.salesPerson\r\n ? window.salesPerson.rawVal / ( Math.floor(Math.PI * 1000))\r\n : (parsedUrl && parsedUrl.p) ? +parsedUrl.p.split(\"/\")[0] : \"\",\r\n lastName: \"\",\r\n phone2: \"\",\r\n address1: \"\",\r\n address2: \"\",\r\n city: \"\",\r\n state: \"\",\r\n preferredCommunicationMethod: \"\", // (I assume it will be constants - email or phone)\r\n howDidYouHearAboutUs: \"\", // (probably constants too, it is a select in the design)\r\n country: countries.USD, // should be set as an object! from Countries list\r\n provence: \"\", // can be received from getCustomerById response\r\n shipping: {}, // address can be received from getCustomerById response\r\n agreedToTerms: false,\r\n subscribeToNewsletter: true,\r\n },\r\n editToken: ((parsedUrl && parsedUrl.edittoken) ? parsedUrl.edittoken : null),\r\n userInfoErrors: {}, // {\"fullName\": [\"too short\"]}, {\"phoneNumber\": [\"this field is required\"]}, etc.\r\n showAdditionalFields: false,\r\n employeesList: [],\r\n employeesListReceived: false,\r\n isPhoneNumberValidated: dashboardFramed,\r\n // clickLeadCapture: false,\r\n confirmPopupOpened: false,\r\n confirmPopupType: ConfirmPopupTypes.ConsultationRequest,\r\n confirmPopupTag: {}, // object - is used for passing data in the confirm popup\r\n showPrivacyPolicy: false,\r\n alreadyRegisteredUserInfo: {\r\n //... other fields from userLogin response\r\n userId: \"\", // custom field // this will be passed in register response\r\n assignQuote: false, // custom field // if it was clicked from assign quote popup\r\n withCheckoutLogic: false, // custom field // if it was clicked from assign quote popup and with checkout logic\r\n confirmedAssign: false // custom field // if it was confirmed from user (he wants to assign quote on already registered user) - is changing in confirm popup\r\n },\r\n userPopupContent: UserPopupContent.register,\r\n leadCaptureClickCount: 0,\r\n userTwoFa: {\r\n twoFALoading: false,\r\n twoFAToken: \"\",\r\n },\r\n optIn: false\r\n};\r\n\r\nexport default function (state = initialState, action) {\r\n switch (action.type) {\r\n case types.TOGGLE_USER_POPUP:\r\n Analytics.sendEvent(\"user-popup\", action.payload.userPopupOpened ? \"Opened\" : \"Closed\");\r\n return {\r\n ...merge(state, action.payload), // deep merge, otherwise userInfo gets overwritten.\r\n userPopupType: action.payload.userPopupType || UserPopupTypes.Unlock,\r\n saveQuoteAfterLogin: action.payload.saveQuoteAfterLogin || false,\r\n checkout: typeof(action.payload.checkout) === 'undefined' ? state.checkout : action.payload.checkout\r\n };\r\n case types.TOGGLE_ADDITIONAL_FIELDS:\r\n case types.TOGGLE_CONFIRM_POPUP:\r\n case types.SET_USER_POPUP_CONTENT:\r\n case types.SET_LEAD_CAPTURE_CLICK_COUNT:\r\n case types.SET_USER_OPT_IN:\r\n return {...state, ...action.payload};\r\n case types.SET_ALREADY_REGISTERED_USER:\r\n return {...state, alreadyRegisteredUserInfo: {...state.alreadyRegisteredUserInfo, ...action.payload.alreadyRegisteredUserInfo}};\r\n case types.CHANGE_USER_INFO: {\r\n let {userInfo} = state;\r\n userInfo = {...userInfo, ...action.payload.userInfo};\r\n return {...state, userInfo};\r\n }\r\n case types.CHANGE_USER_INFO_ERRORS: {\r\n let {userInfoErrors} = state;\r\n userInfoErrors = {...userInfoErrors, ...action.payload.userInfoErrors};\r\n return {...state, userInfoErrors};\r\n }\r\n case types.SET_USER_TWO_FA: {\r\n let {userTwoFa} = state;\r\n userTwoFa = {...userTwoFa, ...action.payload.userTwoFa};\r\n return {...state, userTwoFa};\r\n }\r\n case types.SET_EMPLOYEES_LIST:\r\n // console.log('action.payload', action.payload);\r\n return Object.assign({}, state, action.payload, {employeesListReceived: true});\r\n case types.SET_USER_PHONE_NUMBER_VALIDATED:\r\n return {...state, isPhoneNumberValidated: action.payload.isPhoneNumberValidated};\r\n case types.RESTORE_USER_STATE:\r\n if (action.payload.userInfo) {\r\n if (!action.payload.userInfo.country || !action.payload.userInfo.country.dialCode) {\r\n action.payload.userInfo.country = state.userInfo.country\r\n }\r\n if (action.payload.userInfo.firstName === \"N/A\") {\r\n action.payload.userInfo.firstName = \"\";\r\n }\r\n if (action.payload.userInfo.lastName === \"N/A\") {\r\n action.payload.userInfo.lastName = \"\";\r\n }\r\n }\r\n return {\r\n ...state,\r\n ...action.payload,\r\n userPopupOpened: false,\r\n userPopup2FAOpened: false,\r\n confirmPopupOpened: false,\r\n userIsLoggedIn: true,\r\n };\r\n case types.SHOW_SCHEDULER:\r\n action.payload.show\r\n ? document.body.classList.add(\"body--shedule\")\r\n : document.body.classList.remove(\"body--shedule\");\r\n return {...state, userSchedulerOpened: action.payload.show};\r\n case types.SET_FABRICATOR_DATA: {\r\n const userInfo = {...state.userInfo};\r\n const {settings} = parseFabricatorSettings(action.payload);\r\n userInfo.country = getDefaultCountry(settings);\r\n if (hardCodeIsCaesarStone() && settings.currency === \"USD\") {\r\n userInfo.preferredCommunicationMethod = PREFERRED_COMMUNICATION_METHODS[0]\r\n }\r\n return {...state, userInfo};\r\n }\r\n }\r\n return state;\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n visible: false,\r\n message: '',\r\n error: '',\r\n title: \"\",\r\n inline: false,\r\n newStyles: false,\r\n buttons: [],\r\n click: null,\r\n // type: null, // added for look // not used\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.CHANGE_MESSAGE_BOX:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\nimport cloneDeep from \"lodash/cloneDeep\";\r\nimport find from \"lodash/find\";\r\n\r\nconst initialState = {\r\n filterGroups: [],\r\n selectedFilters: [],\r\n expandedFilters: [],\r\n showFilters: false,\r\n filterVisible: '',\r\n filterId: \"\",\r\n availableFilterValues: {}, // { filterGroupId: arrayOf(filterValues) }\r\n filtersCount: 0, // to update component when filters received\r\n};\r\n\r\nfunction loadFilterGroups(filterGroups) {\r\n filterGroups.forEach(fg => {\r\n for(let i = fg.values.length - 1; i>= 0; i--) {\r\n let value = fg.values[i];\r\n if(value.parent_id) {\r\n let parent = find(fg.values, v => v.id == value.parent_id);\r\n parent.items = parent.items || [];\r\n parent.items.push(fg.values.splice(i, 1)[0]);\r\n }\r\n }\r\n });\r\n return filterGroups;\r\n}\r\n\r\nexport default function(state = initialState, action) {\r\n let newState = {...state};\r\n switch(action.type) {\r\n case types.LOAD_FILTERS:\r\n newState.filterGroups = loadFilterGroups(cloneDeep(action.payload));\r\n break;\r\n case types.SET_SELECTED_FILTERS:\r\n newState.selectedFilters = [...action.payload];\r\n break;\r\n case types.SET_EXPANDED_FILTERS:\r\n newState.expandedFilters = [...action.payload];\r\n break;\r\n case types.SHOW_FILTERS:\r\n newState.showFilters = action.payload.show;\r\n newState.filterId = action.payload.filterId;\r\n newState.filterVisible = \"Others\";\r\n break;\r\n case types.SHOW_FILTERS_IF_NOT_VISIBLE:\r\n if(!newState.showFilters) {\r\n newState.showFilters = true;\r\n newState.filterId = action.payload;\r\n newState.filterVisible = \"Others\";\r\n }\r\n break;\r\n case types.SET_FILTER_VISIBLE:\r\n newState.filterVisible = action.payload;\r\n break;\r\n case types.SET_AVAILABLE_FILTER_VALUES:\r\n return Object.assign({}, state, {\r\n availableFilterValues: Object.assign({}, state.availableFilterValues, action.payload.availableFilterValues)\r\n });\r\n case types.UPDATE_FILTERS_COUNT:\r\n return Object.assign({}, state, {\r\n filtersCount: state.filtersCount + 1\r\n })\r\n case types.SET_COUNTERTOP_FILTERS_RECEIVED:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_LOOK_OPENED:\r\n if (!action.payload.lookOpened) {\r\n return Object.assign({}, state, { selectedFilters: [] });\r\n }\r\n break;\r\n case types.SET_LOOK_ACTIVE_CATEGORY:\r\n if (!action.payload.lookActiveCategory) {\r\n return Object.assign({}, state, { selectedFilters: [] });\r\n }\r\n break;\r\n case types.SET_SHOP_PAGE_OPENED:\r\n if (!action.payload.shopPageOpened) {\r\n return Object.assign({}, state, { selectedFilters: [] });\r\n }\r\n break;\r\n case types.SET_WIZARD_ACTIVE_STEP:\r\n if (state.selectedFilters.length) {\r\n return Object.assign({}, state, { selectedFilters: [] }); // always remove it on step change\r\n }\r\n break;\r\n }\r\n return newState;\r\n}\r\n","import $ from \"jquery\";\r\nimport * as types from '../actions/actionTypes';\r\nimport {\r\n MODULE_CONTEXT_MENU_TYPES,\r\n MODULE_CONTEXT_MENU_DIRECTIONS,\r\n CABINET_WIZARD_BUTTONS,\r\n COUNTERTOP_WIZARD_BUTTONS,\r\n CABINET_GROUP, COUNTERTOP_GROUP, EDGE_GROUP\r\n}\r\n from \"../bvcomponents/kvComponent/core/constants\";\r\nimport {\r\n COUNTERTOP_GROUP_BATHROOM,\r\n HANDLES_GROUP_BATHROOM,\r\n SHOWER_FLOOR_GROUP_BATHROOM\r\n} from \"../bvcomponents/bvSceneComponent/core/constants\";\r\n\r\nconst isNewBathroomOrKitchen = document.kvConfig.toolVersion >= 5;\r\n\r\nconst initialState = {\r\n mobileNav: [],\r\n desktopNavigationOpened: false,\r\n navigationViewType: 3,\r\n activeNavigationParentName: \"\",\r\n activeNavigationChildName: \"\",\r\n navigationLoadingActive: false, // to show when features are already downloaded\r\n moduleContextMenuType: MODULE_CONTEXT_MENU_TYPES.Filters,\r\n moduleContextMenuDirection: MODULE_CONTEXT_MENU_DIRECTIONS.Vertical,\r\n moduleContextMenuModule: null,\r\n moduleContextMenuModulePart: null,\r\n // cabinet module filters\r\n activeNavigationFilter: CABINET_WIZARD_BUTTONS[0].buttonId,\r\n activeNavigationFilterStepIndex: 0,\r\n cabinetNavigationFilterCompleted: false,\r\n countertopNavigationFilterCompleted: false,\r\n counterTopWizard: { // not needed for now, but probably we would need this logic in future\r\n [COUNTERTOP_WIZARD_BUTTONS[0].buttonId]: \"All\",\r\n [COUNTERTOP_WIZARD_BUTTONS[1].buttonId]: \"All\",\r\n },\r\n edgesApplyTo: EDGE_GROUP,\r\n cabinetsApplyTo: CABINET_GROUP,\r\n cabinetsApplyToBathroom: isNewBathroomOrKitchen ? [] : [\"vanity_cabinet\", \"vanity_mirror\"], // porselanosa enable matching countertops\r\n countertopsApplyToArray: COUNTERTOP_GROUP, // is used on lixil UI\r\n countertopsApplyToArrayBathroom: COUNTERTOP_GROUP_BATHROOM, // is used on lixil UI\r\n handlesApplyToBathroom: HANDLES_GROUP_BATHROOM,\r\n showerFloorApplyToBathroom: SHOWER_FLOOR_GROUP_BATHROOM,\r\n countertopsApplyTo: {\r\n \"countertop\": [\"center_island_countertop\", \"backsplash\"],\r\n \"center_island_countertop\": [\"countertop\", \"backsplash\"],\r\n \"backsplash\": [\"center_island_countertop\", \"countertop\"]\r\n },\r\n countertopsApplyToBathroom: {\r\n \"vanity_countertop\": [\"vanity_backsplash\"],\r\n \"vanity_backsplash\": [\"vanity_countertop\"]\r\n },\r\n useFeaturesLightRequest: {\r\n countertops: true,\r\n cabinets: true,\r\n },\r\n updateDisableFeatureGroupRadio: false,\r\n navItemPositionModal: {\r\n popupOpened: false,\r\n popupPosition: {},\r\n activePartId: \"\"\r\n }\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n let newState = {...state};\r\n switch(action.type) {\r\n case types.LOAD_MOBILE_NAV:\r\n newState.mobileNav = [...action.payload];\r\n break;\r\n case types.SET_ACTIVE_NAVIGATION_NAMES:\r\n if (action.payload.activeNavigationParentName === \"walls\"\r\n || action.payload.activeNavigationParentName === \"cabinet\") {\r\n switch (action.payload.activeNavigationChildName) {\r\n case \"ceiling\":\r\n case \"right_wall\":\r\n case \"popout_wall\":\r\n case \"left_wall\":\r\n case \"crown_molding\":\r\n case \"top_cabinet\":\r\n $('html, body').animate({scrollTop: 0}, 500);\r\n break;\r\n }\r\n }\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.TOGGLE_DESKTOP_NAVIGATION:\r\n case types.SET_NAVIGATION_VIEW_TYPE:\r\n case types.SET_MODULE_CONTEXT_MENU_TYPE:\r\n case types.SET_MODULE_CONTEXT_MENU_DIRECTION:\r\n case types.SET_MODULE_CONTEXT_MENU_MODULE:\r\n case types.SET_MODULE_CONTEXT_MENU_MODULE_PART:\r\n case types.SET_ACTIVE_NAVIGATION_FILTER:\r\n case types.SET_ACTIVE_NAVIGATION_FILTER_STEP_INDEX:\r\n case types.SET_CABINET_NAVIGATION_FILTER_COMPLETED:\r\n case types.SET_COUNTERTOP_NAVIGATION_FILTER_COMPLETED:\r\n case types.SET_NAVIGATION_LOADING:\r\n case types.UPDATE_DISABLE_FEATURE_GROUP_RADIO:\r\n case types.SET_APPLY_TO_COMMON:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_COUNTERTOP_WIZARD:\r\n return Object.assign({}, state, {\r\n counterTopWizard: Object.assign({}, state.counterTopWizard, action.payload.countertopWizard)\r\n });\r\n case types.SET_CABINETS_APPLY_TO:\r\n return Object.assign({}, state, {\r\n cabinetsApplyTo: [...action.payload.cabinetsApplyTo]\r\n });\r\n case types.SET_EDGES_APPLY_TO:\r\n return Object.assign({}, state, {\r\n edgesApplyTo: [...action.payload.edgesApplyTo]\r\n });\r\n case types.SET_CABINETS_APPLY_TO_BATHROOM:\r\n return Object.assign({}, state, {\r\n cabinetsApplyToBathroom: [...action.payload.cabinetsApplyToBathroom]\r\n });\r\n case types.SET_COUNTERTOPS_APPLY_TO:\r\n if (action.payload.newArrayLogic) {\r\n return Object.assign({}, state, {\r\n countertopsApplyToArray: [...action.payload.countertopsApplyTo]\r\n });\r\n }\r\n return Object.assign({}, state, {\r\n countertopsApplyTo: Object.assign({}, state.countertopsApplyTo, action.payload.countertopsApplyTo)\r\n });\r\n case types.SET_COUNTERTOPS_APPLY_TO_BATHROOM:\r\n if (action.payload.newArrayLogic) {\r\n return Object.assign({}, state, {\r\n countertopsApplyToArrayBathroom: [...action.payload.countertopsApplyToBathroom]\r\n });\r\n }\r\n return Object.assign({}, state, {\r\n countertopsApplyToBathroom: Object.assign({}, state.countertopsApplyToBathroom, action.payload.countertopsApplyToBathroom)\r\n });\r\n case types.TOGGLE_NAV_ITEM_POSITION_MODAL:\r\n return Object.assign({}, state, {\r\n navItemPositionModal: Object.assign({}, state.navItemPositionModal, action.payload.navItemPositionModal)\r\n });\r\n case types.SET_USE_FEATURES_LIGHT_REQUEST:\r\n return Object.assign({}, state, {\r\n countertopsApplyToArray: !action.payload.useFeaturesLightRequest.countertops ? [] : state.countertopsApplyToArray,\r\n cabinetsApplyTo: !action.payload.useFeaturesLightRequest.cabinets ? [] : state.cabinetsApplyTo,\r\n useFeaturesLightRequest: Object.assign({}, state.useFeaturesLightRequest, action.payload.useFeaturesLightRequest)\r\n });\r\n }\r\n return newState;\r\n}\r\n","import * as types from '../actions/actionTypes';\r\nimport {SQFT_MEASURE_UNIT, SQFT_VIEW_MODE} from \"../bvcomponents/sqft/constants\";\r\n\r\nconst initialState = {\r\n isSquareFootageEnabled: false,\r\n SQFTGroup: null, // used to display different sqft types ( like cabinets, area, etc..)\r\n SQFTViewMode: SQFT_VIEW_MODE.twoDMode, // used to display 2d - 3d view\r\n sqftLoaded: false,\r\n sqftUpdateType: null,\r\n squareFeet: 0,\r\n changeLayoutPopupOpened: false,\r\n layoutToApply: \"\",\r\n sqftFromFeature: null, // feature from SQFT was opened\r\n applyLayoutOnSqft: false, // this is needed to remember to change layout on popup ok click\r\n setNewLayoutOnSqft: false, // this is needed for change layout popup - after ok click - it send a postMessage to SQFT\r\n sqftFeaturesPopup: {\r\n enabled: true,\r\n opened: false,\r\n visited: false,\r\n sqftPassedData: null, // object passed from calculator\r\n previouslyAddedSqftFeatures: [] // remember previous selections to parse properly data\r\n },\r\n measureUnit: SQFT_MEASURE_UNIT.imperial,\r\n updateCalculations: false, // update sqft calculations\r\n // todo move this to new reducer\r\n abortRequestController: null,\r\n selectedCountertop: null,\r\n selectedWall: null,\r\n cabinetsGlb: null,\r\n cabinetsARBlobUrl: null,\r\n apiErrorMessage: null,\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.ENABLE_SQUARE_FOOTAGE:\r\n case types.SET_SQUARE_FOOTAGE_GROUP:\r\n case types.SET_SQFT_VIEW_MODE:\r\n case types.LOAD_SQFT:\r\n case types.UPDATE_SQFT:\r\n case types.UPDATE_SQFT_CALCULATIONS:\r\n case types.SET_SQFT_SQUARE_FEET:\r\n case types.SET_NEW_LAYOUT_ON_SQFT:\r\n case types.SET_SQFT_MEASURE_UNIT:\r\n case types.SQT_SQFT_FROM_FEATURE:\r\n case types.SET_CABINETS_GLB:\r\n case types.SET_CABINETS_AR_BLOB_URL:\r\n case types.SET_API_ERROR_MESSAGE:\r\n case types.SET_SELECTED_COUNTERTOP:\r\n case types.SET_SELECTED_WALL:\r\n case types.SET_ABORT_CONTROLLER:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.TOGGLE_CHANGE_LAYOUT_POPUP:\r\n return Object.assign({}, state, {\r\n changeLayoutPopupOpened: action.payload.changeLayoutPopupOpened,\r\n layoutToApply: action.payload.layoutToApply || state.layoutToApply,\r\n applyLayoutOnSqft: action.payload.applyLayoutOnSqft,\r\n });\r\n case types.CHANGE_SQFT_FEATURES_POPUP:\r\n state = {...state, sqftFeaturesPopup: Object.assign({}, state.sqftFeaturesPopup, action.payload.sqftFeaturesPopup)};\r\n break;\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import {SHOW_DOCUSIGN} from \"../actions/actionTypes\";\r\n\r\nconst initialState = {\r\n show: false,\r\n callback: null\r\n}\r\n\r\nexport default function (state = initialState, {type, payload} = {}) {\r\n if (type === SHOW_DOCUSIGN) {\r\n return {...state, show: payload.show, callback: payload.callback}\r\n }\r\n return state;\r\n}\r\n\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n qtCategoriesLoaded: [], // includes visualizers\r\n qtCategoriesRequested: [], // includes visualizers\r\n qtActiveCategory: \"\", //string!! look for all the category here: layout.qtCategories.find(qtCategory => qtCategory.name === this.props.qtActiveCategory);\r\n};\r\n\r\nexport default function (state = initialState, action) {\r\n\r\n switch (action.type) {\r\n\r\n case types.SET_QT_CATEGORIES_LOADED:\r\n return Object.assign({}, state, {\r\n qtCategoriesLoaded: [...state.qtCategoriesLoaded, action.payload.qtCategoriesLoaded]\r\n });\r\n case types.SET_QT_CATEGORIES_REQUESTED:\r\n return Object.assign({}, state, {\r\n qtCategoriesRequested: [...state.qtCategoriesRequested, action.payload.qtCategoriesRequested]\r\n });\r\n case types.SET_QT_ACTIVE_CATEGORY:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\nimport Config from \"../config\";\r\nimport {parseFabricatorSettings} from \"./fabricatorReducer\";\r\n\r\nconst removeTutorial = Config.isVisualizerManagement();\r\n\r\nconst initialState = {\r\n materialsTutorialIsOpened: false,\r\n materialsTutorialStep: 0,\r\n materialsTutorialFinished: removeTutorial,\r\n visualizerTutorialIsOpened: false,\r\n visualizerTutorialStep: 1,\r\n visualizerTutorialFinished: removeTutorial,\r\n materialsAgentTutorialIsOpened: false,\r\n materialsAgentTutorialFinished: false,\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.SHOW_MATERIALS_TUTORIAL:\r\n case types.SET_MATERIALS_TUTORIAL_STEP:\r\n case types.SET_MATERIALS_TUTORIAL_FINISHED:\r\n case types.SHOW_MATERIALS_AGENT_TUTORIAL:\r\n case types.SET_MATERIALS_AGENT_TUTORIAL_FINISHED:\r\n case types.SHOW_VISUALIZER_TUTORIAL:\r\n case types.SET_VISUALIZER_TUTORIAL_STEP:\r\n case types.SET_VISUALIZER_TUTORIAL_FINISHED:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_FABRICATOR_DATA: {\r\n if (action.payload && action.payload.settings) {\r\n const {settings} = parseFabricatorSettings(action.payload);\r\n if (!settings.showVisualizerTutorial) {\r\n return Object.assign({}, state, {\r\n materialsTutorialFinished: true,\r\n visualizerTutorialFinished: true\r\n });\r\n }\r\n }\r\n return Object.assign({}, state);\r\n }\r\n\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import uuid from \"uuid\";\r\n\r\nimport {\r\n ADD_TO_CART,\r\n REMOVE_FROM_CART,\r\n CONTRACT_SIGNING_JOB_DOCUMENT,\r\n CONTRACT_SIGNING_POST_SIGNATURE,\r\n CONTRACT_SIGNING_SET_CONTRACTS_VALUES,\r\n CONTRACT_SIGNING_SET_STEP,\r\n CONTRACT_SIGNING_SHOW_SIGNATURE_PAD,\r\n SET_AFTER_CONTRACT_SIGN_CALLBACK,\r\n SET_CONTRACT_BLOB,\r\n SHOW_CONTRACT_SIGNING,\r\n CHANGE_CART_FEATURE,\r\n CHANGE_CART_QUANTITY,\r\n CONTRACT_SIGNING_RESTORE_VALUES,\r\n SET_WIZARD_SELECTED_VALUES,\r\n CHANGE_ALL_CART_ITEMS,\r\n SET_CART_ITEMS_ADDED_TO_PARENT_CART,\r\n TOGGLE_PRICE_WORKSHEET_OPENED,\r\n CONTRACT_SIGNING_SET_CONTRACTS_LIST,\r\n} from \"../actions/actionTypes\";\r\n\r\nconst initialState = {\r\n firstName: '',\r\n lastName: '',\r\n step: 1,\r\n isVisible: false,\r\n callback: null,\r\n signedDocumentUrl: null,\r\n jobDocumentUrl: null,\r\n isSignaturePadVisible: false,\r\n signaturePadTag: null,\r\n invoiceNumberOfPages: null,\r\n savedInvoiceNumberOfPages: null, // is used to update filled in fields when invoice is changed and we need to update the fields\r\n pagesCustomFieldsValue: {}, // old support\r\n afterContractSignCallback: null,\r\n contractBlob: null,\r\n contractLoading: false,\r\n needToUpdateContract: false, // it is a detection for if job was updated!! then we need a new contract\r\n contractId: uuid.v4(), // it is a cached id, so contract is refreshed every time it needs to be changed\r\n contractsList: [], // [contractInterface]\r\n contractsReceived: false,\r\n contractsValues: {}, // here we store all customer signs and contract data, it will be restored {contract.id: {}}\r\n}\r\n\r\nexport default function(state = initialState, action){\r\n switch (action.type) {\r\n case SHOW_CONTRACT_SIGNING:\r\n return _show(state, action.payload);\r\n case CONTRACT_SIGNING_SET_STEP:\r\n return {...state, step: action.payload.step};\r\n case CONTRACT_SIGNING_POST_SIGNATURE:\r\n case SET_AFTER_CONTRACT_SIGN_CALLBACK:\r\n case SET_CONTRACT_BLOB:\r\n case CONTRACT_SIGNING_RESTORE_VALUES:\r\n case CONTRACT_SIGNING_SET_CONTRACTS_VALUES:\r\n return {...state, ...action.payload};\r\n case CONTRACT_SIGNING_SET_CONTRACTS_LIST:\r\n if (!state.contractsReceived && Object.keys(state.pagesCustomFieldsValue).length && document.kvConfig.jobId\r\n && !Object.keys(state.contractsValues).length && action.payload.contractsList\r\n && action.payload.contractsList.length) { // old support\r\n // here we have an old response logic with one contract restored, we need to restore contract fields to the\r\n // first contract found once the contracts are received (they are received later than the job restored)\r\n if (state.savedInvoiceNumberOfPages) {\r\n Object.keys(state.pagesCustomFieldsValue).forEach(oldPage => {\r\n // we were saving page id after the contract? now lets reve contract, so the page goes without the contract\r\n state.pagesCustomFieldsValue[oldPage - state.savedInvoiceNumberOfPages] = state.pagesCustomFieldsValue[oldPage];\r\n delete state.pagesCustomFieldsValue[oldPage]; // erase so new page is not filled with old page values\r\n });\r\n }\r\n return {...state, ...action.payload, contractsReceived: true, contractsValues: {\r\n [action.payload.contractsList[0].id]: state.pagesCustomFieldsValue,\r\n }, pagesCustomFieldsValue: {}} // we don't need them anymore\r\n }\r\n return {...state, ...action.payload, contractsReceived: true};\r\n case CONTRACT_SIGNING_SHOW_SIGNATURE_PAD:\r\n return {...state, isSignaturePadVisible: action.payload.show, signaturePadTag: action.payload.tag};\r\n case ADD_TO_CART:\r\n case REMOVE_FROM_CART:\r\n case CHANGE_CART_FEATURE:\r\n case CHANGE_CART_QUANTITY:\r\n case TOGGLE_PRICE_WORKSHEET_OPENED: // only if they opened, we cant set here set discount sections, because when restoring this is fired\r\n case SET_WIZARD_SELECTED_VALUES:\r\n case CHANGE_ALL_CART_ITEMS:\r\n case SET_CART_ITEMS_ADDED_TO_PARENT_CART:\r\n if (action.type === ADD_TO_CART && action.payload.cartItems.every(cItem => {\r\n return cItem.cartFeature && cItem.cartFeature.dbFeature.autoAddToCart\r\n })) {\r\n return state\r\n }\r\n if (!state.needToUpdateContract) {\r\n return {...state, needToUpdateContract: true, contractId: uuid.v4()};\r\n }\r\n return state\r\n case CONTRACT_SIGNING_JOB_DOCUMENT:\r\n if (Number.isInteger(action.payload.invoiceNumberOfPages)\r\n && Number.isInteger(state.savedInvoiceNumberOfPages)\r\n && (action.payload.invoiceNumberOfPages !== state.savedInvoiceNumberOfPages)\r\n && (Object.keys(state.pagesCustomFieldsValue).length)) {\r\n // on document load we are checking old receipt pages and new receipt pages, and then we update each selected value page\r\n console.log(\"receipt was changed, updating values... old pages and new pages:\", state.savedInvoiceNumberOfPages, action.payload.invoiceNumberOfPages);\r\n let newValues = {};\r\n Object.keys(state.pagesCustomFieldsValue).forEach(oldPage => {\r\n // for example, if filled in page was 5 and there were 3 pages in receipt, and now receipt has 1 page - 5-3+1 = 3 page new\r\n const originalContractPage = oldPage - state.savedInvoiceNumberOfPages;\r\n const newPage = originalContractPage + action.payload.invoiceNumberOfPages;\r\n newValues[newPage] = state.pagesCustomFieldsValue[oldPage];\r\n });\r\n return {...state,\r\n ...action.payload,\r\n needToUpdateContract: false,\r\n pagesCustomFieldsValue: newValues,\r\n savedInvoiceNumberOfPages: action.payload.invoiceNumberOfPages, // update with new number, for the next time we open\r\n };\r\n }\r\n return {\r\n ...state,\r\n ...action.payload,\r\n needToUpdateContract: false,\r\n savedInvoiceNumberOfPages: action.payload.invoiceNumberOfPages // update with current invoice pages count\r\n };\r\n }\r\n return state;\r\n}\r\n\r\n\r\nfunction _show(state, {show, callback}) {\r\n if (!show) {\r\n return {...state, isVisible: false, step: 1, firstName: '', lastName: ''};\r\n }\r\n\r\n return {...state, isVisible: true, callback};\r\n}\r\n\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n priceWorksheetOpened: false,\r\n discountsReceived: false,\r\n discountSections: [],\r\n customAddedDiscounts: [], // same as discountInterface[], but also {categoryId, uuid}\r\n financePercentage: \"\", // %\r\n allFinanceOptionsPopupVisible: false,\r\n financeCellsVisible: false, // boolean\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.TOGGLE_PRICE_WORKSHEET_OPENED:\r\n case types.SET_CUSTOM_ADDED_DISCOUNTS:\r\n case types.SET_FINANCE_PERCENTAGE:\r\n case types.SET_ALL_FINANCE_OPTIONS_POPUP_VISIBLE:\r\n case types.SET_DISCOUNT_FINANCE_CELLS_VISIBLE:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_DISCOUNT_SECTIONS:\r\n return Object.assign({}, state, {\r\n ...action.payload,\r\n discountsReceived: true\r\n });\r\n }\r\n\r\n return state;\r\n}\r\n","import $ from \"jquery\";\r\n\r\nimport * as types from '../actions/actionTypes';\r\nimport {LOOK_OVERLAYS} from \"../bvcomponents/look/core/constants\";\r\n\r\nconst initialState = {\r\n showUnlockCalculations: false,\r\n unlockCalculationsStep: 0,\r\n showCartItems: [],\r\n showTotalItems: [], // \"tax\", \"total\"\r\n showUnlockCalculationsTutorial: false,\r\n unlockCalculationsTutorialIsFinished: false,\r\n unlockCalculationsTutorialStep: 0,\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.SET_SHOW_UNLOCK_CALCULATIONS:\r\n case types.SET_UNLOCK_CALCULATIONS_STEP:\r\n case types.SHOW_UNLOCK_CALCULATIONS_CART_ITEM:\r\n case types.SHOW_UNLOCK_CALCULATIONS_TOTAL_ITEM:\r\n case types.SHOW_UNLOCK_CALCULATIONS_TUTORIAL:\r\n case types.SET_UNLOCK_CALCULATIONS_TUTORIAL_STEP:\r\n case types.SET_UNLOCK_CALCULATIONS_TUTORIAL_FINISHED:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_LOOK_OVERLAY_OPENED:\r\n if ((action.payload.lookOverlayOpened === LOOK_OVERLAYS.leadCapture) && state.showUnlockCalculations && (state.unlockCalculationsStep !== 4)) {\r\n const overlayElement = document.querySelector(\".look-overlay--style\");\r\n if (overlayElement) {\r\n $(overlayElement).fadeIn(300);\r\n }\r\n return Object.assign({}, state, {\r\n unlockCalculationsStep: 4\r\n });\r\n }\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n quotes: [\r\n {}\r\n ],\r\n activeQuoteIndex: 0,\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n let updatedQuotes;\r\n switch(action.type) {\r\n case types.ADD_NEW_QUOTE:\r\n case types.SET_QUOTES:\r\n case types.SET_ACTIVE_QUOTE_INDEX:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.UPDATE_QUOTE:\r\n updatedQuotes = [...state.quotes];\r\n updatedQuotes[updatedQuotes.findIndex(item => item === action.payload.quote)] = action.payload.updatedQuote\r\n return Object.assign({}, state, {quotes: updatedQuotes});\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n showAdvancedQuoting: false,\r\n activeQuoteIndex: 0,\r\n advancedQuotingSearchItem: null, // is needed for materials page (item that was clicked to change)\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.TOGGLE_SHOW_ADVANCED_QUOTING:\r\n case types.SET_ADVANCED_QUOTING_SEARCH_ITEM:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n showAssignQuotePopup: false,\r\n assignQuotePopupSearchText: \"\",\r\n assignQuotePopupEmployee: null,\r\n assignQuotePopupCustomer: null,\r\n assignQuotePopupSuccessText: \"\",\r\n assignQuoteCloneMode: false,\r\n assignQuoteOfflineCustomers: [],\r\n assignQuoteOfflineEmployees: [],\r\n assignQuotePopupSaveButtons: \"all\", // save or checkout or updateTax\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.TOGGLE_SHOW_ASSIGN_QUOTE_POPUP:\r\n case types.SET_ASSIGN_QUOTE_POPUP_SEARCH_TEXT:\r\n case types.SET_ASSIGN_QUOTE_POPUP_EMPLOYEE:\r\n case types.SET_ASSIGN_QUOTE_POPUP_CUSTOMER:\r\n case types.SET_ASSIGN_QUOTE_POPUP_SUCCESS_TEXT:\r\n case types.SET_ASSIGN_QUOTE_CLONE_MODE:\r\n case types.SET_ASSIGN_QUOTE_OFFLINE_DATA:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n receiptUrl: \"\",\r\n receiptSignature: \"\", // pngBase64\r\n};\r\n\r\nexport default function (state = initialState, action) {\r\n\r\n switch (action.type) {\r\n\r\n case types.SET_RECEIPT_URL:\r\n case types.SET_RECEIPT_SIGNATURE:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n attachedToLine: [],\r\n waterfallSectionsData: [],\r\n underlaymentSections: [],\r\n\r\n selectedFeature: null,\r\n selectedPartIds: [],\r\n resourceTypes: []\r\n};\r\n\r\nexport default function(state = {...initialState}, action) {\r\n let filteredResource;\r\n let resourceTypes;\r\n let newState;\r\n switch(action.type) {\r\n case types.SET_SELECTED_FEATURE:\r\n case types.SET_SELECTED_PART_IDS:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_RESOURCES:\r\n state = {...state, [action.payload.resourceType]: action.payload.resources};\r\n break;\r\n case types.ADD_RESOURCE:\r\n newState = {\r\n [action.payload.resourceType]: [...state[action.payload.resourceType], action.payload.resource],\r\n }\r\n if (!state.resourceTypes.includes(action.payload.resourceType)) {\r\n newState.resourceTypes = [...state.resourceTypes, action.payload.resourceType]\r\n }\r\n return Object.assign({}, state, newState);\r\n case types.CHANGE_RESOURCE:\r\n filteredResource = state[action.payload.resourceType].map((item) => {\r\n if (item.id !== action.payload.resource.id) { return item }\r\n\r\n return {\r\n ...item,\r\n ...action.payload.resource\r\n }\r\n })\r\n\r\n return Object.assign({}, state, {[action.payload.resourceType]: filteredResource });\r\n\r\n case types.DELETE_RESOURCE:\r\n filteredResource = state[action.payload.resourceType].filter((row) => row.id !== action.payload.id);\r\n\r\n return Object.assign({}, state, {[action.payload.resourceType]: filteredResource });\r\n case types.DELETE_RESOURCE_ATTACHED_TO:\r\n filteredResource = state[action.payload.resourceType].filter((row) => row.attachedToId !== action.payload.attachedTo.id);\r\n\r\n return Object.assign({}, state, {[action.payload.resourceType]: filteredResource });\r\n case types.DELETE_ALL_RESOURCES:\r\n resourceTypes = {}\r\n for (const resourceType of state.resourceTypes) {\r\n resourceTypes[resourceType] = [];\r\n }\r\n return Object.assign({}, state, resourceTypes);\r\n }\r\n\r\n return state;\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n miteredSections: [],\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n let filteredMiteredSections;\r\n switch(action.type) {\r\n case types.SHOW_SLAB_TOOL:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_MITERED_SECTIONS:\r\n state = {...state, miteredSections: action.payload.miteredSections};\r\n break;\r\n case types.ADD_MITERED_SECTION:\r\n return Object.assign({}, state, {\r\n miteredSections: [...state.miteredSections, action.payload]\r\n });\r\n case types.CHANGE_MITERED_SECTION:\r\n filteredMiteredSections = state.miteredSections.map((item) => {\r\n if (item.id !== action.payload.id) { return item }\r\n\r\n return {\r\n ...item,\r\n ...action.payload\r\n }\r\n })\r\n\r\n return Object.assign({}, state, { miteredSections: filteredMiteredSections });\r\n\r\n case types.DELETE_MITERED_SECTION:\r\n if (state.miteredSections.length === 0) {\r\n return state\r\n }\r\n\r\n filteredMiteredSections = state.miteredSections.filter((row) => row.id !== action.payload.id);\r\n\r\n return Object.assign({}, state, { miteredSections: filteredMiteredSections });\r\n case types.DELETE_ALL_MITERED_SECTIONS:\r\n return Object.assign({}, state, { miteredSections: []});\r\n }\r\n\r\n return state;\r\n}\r\n","import $ from \"jquery\";\r\n\r\nimport * as types from '../actions/actionTypes';\r\nimport {LOOK_FEATURE_CONTENT, LOOK_WALLS_ONLY} from \"../bvcomponents/look/core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../config\";\r\nimport {hardCodeIsEncore} from \"../misc/fabricatorHardcode\";\r\n\r\nconst defaultCompatabilityObject = {\r\n visible: false,\r\n compatabilityLogic: [],\r\n clickedFeature: null,\r\n applyFunction: null\r\n};\r\n\r\nconst defaultLockedTutorialObject = {\r\n visible: false,\r\n step: 0,\r\n anchorDbFeatureId: null,\r\n finished: false,\r\n withGrid: false,\r\n firstLockedIndex: null,\r\n firstUnlockedIndex: null,\r\n};\r\n\r\nconst defaultAllWallsTutorialObject = {\r\n visible: false,\r\n lookFeature: null,\r\n finished: false,\r\n withGrid: false,\r\n left: 0,\r\n top: 0,\r\n height: 0,\r\n // featureIndex: null,\r\n};\r\n\r\nconst initialState = {\r\n lookOpened: false,\r\n lookExpanded: false,\r\n lookParentKeys: [],\r\n lookViewType: 1,\r\n lookViewTypeWasChanged: false,\r\n // wishlistPopupOpened: false,\r\n sidebarModalOpened: false,\r\n lookActiveFeature: null,\r\n lookActiveFeatureStockCount: 0, // to update not in stock\r\n lookActiveCategory: \"\", //partId\r\n moreInfoOpened: \"\", // main or select\r\n moreInfoContent: LOOK_FEATURE_CONTENT.info, // main or select,\r\n lookPageOpened: \"\",\r\n lookOverlayOpened: \"\", // overlay type from constant\r\n lookOverlayAction: \"\", // overlay sub type (added for sharing text)\r\n lookViewChangeOptions: {\r\n newLayoutType: 1,\r\n newScene: 1,\r\n itemsToRemove: [],\r\n }, // overlay type from constant\r\n lookStylePopup: {\r\n notMatchingFeatures: [],\r\n colors: []\r\n }, // overlay type from constant\r\n // lookRemovePopup: {\r\n // fromFeature: null,\r\n // }, // overlay type from constant\r\n introStep: 0,\r\n introHidden: true,\r\n contextMenu: {\r\n opened: false,\r\n partId: \"\",\r\n layerPosition: \"\",\r\n position: {x: 0, y: 0},\r\n clickedOnItem: \"\",\r\n },\r\n lookWallsApplyTo: hardCodeIsEncore() ? [...LOOK_WALLS_ONLY] : [],\r\n lookAllWallsOpened: false,\r\n lookReturnAction: \"\",\r\n lookDemoPointsClicked: false,\r\n lookActiveFeaturePositionInList: null, // is used for navigation only to prevent jumping (null || number)\r\n navigationCount: 0,\r\n featureGroupCount: 0, // is used when feature group receives its features, to update other components\r\n lookCompatabilityAlert: Object.assign({}, defaultCompatabilityObject),\r\n lookRestoreState: null,\r\n lookLockedTutorial: Object.assign({}, defaultLockedTutorialObject),\r\n lookAllWallsTutorial: Object.assign({}, defaultAllWallsTutorialObject),\r\n};\r\n\r\nconst removeMenuFromState = (state, payload) => {\r\n if (state.lookExpanded) {\r\n payload.lookExpanded = false;\r\n }\r\n // if (state.lookActiveFeature) {\r\n // payload.lookActiveFeature = null;\r\n // }\r\n if (state.moreInfoOpened) {\r\n payload.moreInfoOpened = \"\";\r\n }\r\n if (state.lookAllWallsOpened) {\r\n payload.lookAllWallsOpened = false;\r\n }\r\n if (state.contextMenu.clickedOnItem) {\r\n state.contextMenu.clickedOnItem = \"\";\r\n }\r\n // if (state.lookActiveCategory) {\r\n // payload.lookActiveCategory = \"\";\r\n // }\r\n if (document.body.style.overflow === \"hidden\") {\r\n document.body.style.overflow = \"\";\r\n }\r\n return payload\r\n}\r\n\r\nexport default function(state = initialState, action) {\r\n let newState = {...state};\r\n switch(action.type) {\r\n case types.SET_LOOK_OPENED:\r\n if (!action.payload.lookOpened) {\r\n action.payload = removeMenuFromState(state, action.payload);\r\n } else if (action.payload.isMobile) {\r\n document.body.style.overflow = \"hidden\";\r\n }\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_LOOK_ACTIVE_FEATURE:\r\n if (!action.payload.lookActiveFeature) {\r\n if (state.moreInfoOpened) {\r\n action.payload.moreInfoOpened = \"\";\r\n }\r\n if (state.lookRestoreState && !action.payload.isMobile) {\r\n action.payload.lookRestoreState = null;\r\n }\r\n }\r\n if (!IS_PRODUCT_JOURNEY) {\r\n action.payload.lookActiveCategory = action.payload.lookActiveFeature ? action.payload.lookActiveFeature.partId : \"\"\r\n }\r\n if (state.lookOpened && state.lookExpanded) {\r\n action.payload.lookExpanded = false;\r\n }\r\n if (state.lookOpened && state.lookExpanded) {\r\n action.payload.lookExpanded = false;\r\n }\r\n action.payload.lookCompatabilityAlert = Object.assign({}, defaultCompatabilityObject);\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_LOOK_ACTIVE_CATEGORY:\r\n if (state.moreInfoOpened) {\r\n action.payload.moreInfoOpened = \"\";\r\n }\r\n if (!action.payload.lookActiveCategory && state.lookRestoreState) {\r\n action.payload.lookRestoreState = null;\r\n }\r\n if (state.contextMenu.clickedOnItem\r\n && (!action.payload.lookActiveCategory || (action.payload.lookActiveCategory !== \"vanity_sink\"))) {\r\n state.contextMenu.clickedOnItem = \"\";\r\n }\r\n if (action.payload.lookActiveCategory && (action.payload.lookActiveCategory.includes(\"floor\"))) {\r\n $(\"html, body\").animate({scrollTop: document.body.scrollHeight}, 500);\r\n }\r\n action.payload.lookCompatabilityAlert = Object.assign({}, defaultCompatabilityObject);\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_LOOK_EXPANDED:\r\n case types.SET_LOOK_PARENT_KEYS:\r\n case types.SET_WISHLIST_POPUP_OPENED:\r\n case types.SET_SIDEBAR_MODAL_OPENED:\r\n case types.SET_LOOK_MORE_INFO_OPENED:\r\n case types.SET_LOOK_PAGE_OPENED:\r\n case types.SET_LOOK_OVERLAY_OPENED:\r\n case types.SET_LOOK_INTRO_STEP:\r\n case types.SET_LOOK_INTRO_HIDDEN:\r\n case types.SET_LOOK_WALLS_APPLY_TO:\r\n case types.SET_LOOK_ALL_WALLS_OPENED:\r\n case types.SET_LOOK_RETURN_ACTION:\r\n case types.SET_LOOK_DEMO_POINTS_CLICKED:\r\n case types.SET_LOOK_RESTORE_STATE:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_LOOK_VIEW_TYPE:\r\n return Object.assign({}, state, {\r\n ...action.payload, lookViewTypeWasChanged: true\r\n });\r\n case types.SET_LOOK_VIEW_CHANGE_OPTIONS:\r\n return Object.assign({}, state, {\r\n lookViewChangeOptions: Object.assign({}, state.lookViewChangeOptions, action.payload.lookViewChangeOptions)\r\n });\r\n case types.SET_LOOK_STYLE_POPUP:\r\n return Object.assign({}, state, {\r\n lookStylePopup: Object.assign({}, state.lookStylePopup, action.payload.lookStylePopup)\r\n });\r\n case types.SET_LOOK_REMOVE_POPUP:\r\n return Object.assign({}, state, {\r\n lookRemovePopup: Object.assign({}, state.lookRemovePopup, action.payload.lookRemovePopup)\r\n });\r\n case types.SET_LOOK_CONTEXT_MENU:\r\n return Object.assign({}, state, {\r\n contextMenu: Object.assign({}, state.contextMenu, action.payload.contextMenu)\r\n });\r\n case types.SET_LOOK_COMPATABILITY_ALERT:\r\n return Object.assign({}, state, {\r\n lookCompatabilityAlert: Object.assign({}, state.lookCompatabilityAlert, action.payload.lookCompatabilityAlert)\r\n });\r\n case types.SET_LOOK_LOCK_TUTORIAL:\r\n return Object.assign({}, state, {\r\n lookLockedTutorial: Object.assign({}, state.lookLockedTutorial, action.payload.lookLockedTutorial)\r\n });\r\n case types.SET_LOOK_ALL_WALLS_TUTORIAL:\r\n return Object.assign({}, state, {\r\n lookAllWallsTutorial: Object.assign({}, state.lookAllWallsTutorial, action.payload.lookAllWallsTutorial)\r\n });\r\n case types.UPDATE_LOOK_NAVIGATION_COUNT:\r\n return Object.assign({}, state, {\r\n navigationCount: state.navigationCount + 1\r\n });\r\n case types.UPDATE_LOOK_ACTIVE_FEATURE_STOCK_COUNT:\r\n return Object.assign({}, state, {\r\n lookActiveFeatureStockCount: state.lookActiveFeatureStockCount + 1\r\n });\r\n case types.SET_WIZARD_ACTIVE_ITEM:\r\n if (!state.lookOpened && action.payload.wizardActiveItem) {\r\n return Object.assign({}, state, {\r\n lookOpened: true,\r\n });\r\n }\r\n break;\r\n case types.SET_WIZARD_ACTIVE_STEP:\r\n return Object.assign({}, state, {\r\n moreInfoOpened: false,\r\n lookActiveFeaturePositionInList: null,\r\n });\r\n default:\r\n break;\r\n }\r\n return newState;\r\n}\r\n","import * as types from '../actions/actionTypes';\r\nimport {getFeatureGroupFeaturesQuantity} from \"../bvcomponents/look/lookNavigation/lookNavigationFunctions\";\r\n\r\nconst initialState = {\r\n filtersOpened: false,\r\n similarFeature: null,\r\n similarProductsOpened: false,\r\n requiredButNotIncludedFeature: null,\r\n groheFiltersSearchText: \"\",\r\n lastOpenedFeature: null,\r\n lastOpenedCategory: null,\r\n subCategoryOpened: \"\",\r\n showAddedToTheCartSuccess: false,\r\n groheActiveFeatureQuantity: 1,\r\n groheShareButtonsOpened: false,\r\n groheSameColorActiveFeature: null,\r\n groheSameColorSectionOpened: false,\r\n groheSameColorCheckboxApplied: false,\r\n exisingTempId: \"\",\r\n};\r\n\r\nexport default function(state = initialState, action){\r\n switch (action.type) {\r\n case types.SET_GROHE_FILTERS_OPENED:\r\n case types.SET_GROHE_SIMILAR_FEATURE:\r\n case types.SET_GROHE_SIMILAR_PRODUCTS_OPENED:\r\n case types.SET_GROHE_REQUIRED_BUT_NOT_INCLUDED_FEATURE:\r\n case types.SET_GROHE_FILTERS_SEARCH_TEXT:\r\n case types.SET_GROHE_LAST_OPENED_CATEGORY:\r\n case types.SET_GROHE_SUB_CATEGORY_OPENED:\r\n case types.SET_GROHE_SHOW_ADDED_TO_THE_CART_SUCCESS:\r\n case types.SET_GROHE_ACTIVE_FEATURE_QUANTITY:\r\n case types.SET_GROHE_SHARE_BUTTONS_OPENED:\r\n case types.SET_GROHE_SAME_COLOR_SECTION_OPENED:\r\n case types.SET_GROHE_SAME_COLOR_CHECKBOX_APPLIED:\r\n case types.SET_GROHE_SAME_COLOR_ACTIVE_FEATURE:\r\n case types.SET_GROHE_EXISTING_TEMP_ID:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_LOOK_ACTIVE_FEATURE: {\r\n return Object.assign({}, state, {\r\n lastOpenedFeature: action.payload.lookActiveFeature || state.lastOpenedFeature,\r\n subCategoryOpened: action.payload.lookActiveFeature ? \"\" : state.subCategoryOpened,\r\n groheActiveFeatureQuantity: getFeatureGroupFeaturesQuantity(action.payload.lookActiveFeature),\r\n });\r\n }\r\n case types.SET_LOOK_ACTIVE_CATEGORY: {\r\n return Object.assign({}, state, {\r\n lastOpenedCategory: action.payload.lookActiveCategory || state.lastOpenedCategory,\r\n filtersOpened: !action.payload.lookActiveCategory && state.filtersOpened ? false : state.filtersOpened,\r\n groheFiltersSearchText: !action.payload.lookActiveCategory && state.groheFiltersSearchText ? \"\" : state.groheFiltersSearchText, // always remove it on open/close\r\n });\r\n }\r\n case types.SET_LOOK_OPENED: {\r\n return Object.assign({}, state, {\r\n lastOpenedFeature: (!action.payload.lookOpened && state.lastOpenedFeature) ? null : state.lastOpenedFeature,\r\n lastOpenedCategory: (!action.payload.lookOpened && state.lastOpenedCategory) ? null : state.lastOpenedCategory,\r\n subCategoryOpened: \"\", // always remove it on open/close\r\n similarProductsOpened: false, // always remove it on open/close\r\n requiredButNotIncludedFeature: null, // always remove it on open/close\r\n groheActiveFeatureQuantity: !action.payload.lookOpened ? 1 : state.groheActiveFeatureQuantity,\r\n groheFiltersSearchText: \"\", // always remove it on open/close\r\n });\r\n }\r\n case types.SET_LOOK_PAGE_OPENED: {\r\n return Object.assign({}, state, {\r\n groheSameColorActiveFeature: (action.payload.lookPageOpened && state.groheSameColorActiveFeature) ? null : state.groheSameColorActiveFeature,\r\n });\r\n }\r\n case types.SET_WIZARD_ACTIVE_ITEM: {\r\n return Object.assign({}, state, {\r\n subCategoryOpened: \"\",\r\n groheFiltersSearchText: \"\", // always remove it on open/close\r\n });\r\n }\r\n case types.SET_WIZARD_ACTIVE_STEP: {\r\n if (state.groheFiltersSearchText) {\r\n return Object.assign({}, state, {\r\n groheFiltersSearchText: \"\", // always remove it on step change\r\n });\r\n }\r\n }\r\n }\r\n return state;\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n iframeIntegrationRequest: {},\r\n iframeIntegrationResponse: {},\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n let newState = {...state};\r\n switch(action.type) {\r\n case types.SET_IFRAME_INTEGRATION_REQUEST:\r\n return Object.assign({}, state, {\r\n iframeIntegrationRequest: {...action.payload.iframeIntegrationRequest}\r\n });\r\n case types.SET_IFRAME_INTEGRATION_RESPONSE:\r\n return Object.assign({}, state, {\r\n iframeIntegrationResponse: {...action.payload.iframeIntegrationResponse}\r\n });\r\n }\r\n return newState;\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n wizardOpened: false,\r\n wizardName: \"\",\r\n wizardStep: -1,\r\n};\r\n\r\nexport default function(state = initialState, action){\r\n switch (action.type) {\r\n case types.SET_GROHE_WIZARD_NAME:\r\n case types.SET_GROHE_WIZARD_OPENED:\r\n case types.SET_GROHE_WIZARD_STEP:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n }\r\n return state;\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n cardInfo: {\r\n cardNumber: \"\", // ccNum\r\n cardName: \"\", // name\r\n expMonth: \"\",\r\n expYear: \"\",\r\n cvv: \"\",\r\n country: \"USA\",\r\n // zipCode: \"\",\r\n // country: defaultCountryValue,\r\n },\r\n cardErrors: {}, // {\"cardName\": [\"too short\"]}, {\"phoneNumber\": [\"this field is required\"]}, etc.\r\n shippingErrors: {}, // {\"postal\": [\"too short\"]}, {\"phoneNumber\": [\"this field is required\"]}, etc.\r\n selectedShippingAddressIndex: 0, // not used anymore, we can't select shipping addresses\r\n selectedBillingAddressIndex: 0, // not used anymore, we can't select shipping addresses\r\n shippingAddress: {\r\n fullName: \"\", // name\r\n address1: \"\",\r\n address2: \"\",\r\n city: \"\",\r\n state: \"\",\r\n stateShort: \"\", // used in google maps submit\r\n postal: \"\" // zip\r\n },\r\n billingAddress: {\r\n fullName: \"\", // name\r\n address1: \"\",\r\n address2: \"\",\r\n city: \"\",\r\n state: \"\",\r\n stateShort: \"\", // used in google maps submit\r\n postal: \"\" // zip\r\n },\r\n billingSameAsShipping: false,\r\n};\r\n\r\nexport default function(state = initialState, action){\r\n switch (action.type) {\r\n case types.SET_PAYMENT_INFO:\r\n return Object.assign({}, state, {\r\n [action.payload.name]: action.payload.value\r\n });\r\n case types.SET_SHIPPING_INFO:\r\n return Object.assign({}, state, {\r\n shippingAddress: {\r\n ...state.shippingAddress, ...{[action.payload.name]: action.payload.value}\r\n }\r\n });\r\n case types.SET_BILLING_INFO:\r\n return Object.assign({}, state, {\r\n billingAddress: {\r\n ...state.billingAddress, ...{[action.payload.name]: action.payload.value}\r\n }\r\n });\r\n case types.SET_CARD_INFO:\r\n return Object.assign({}, state, {\r\n cardInfo: {\r\n ...state.cardInfo, ...{[action.payload.name]: action.payload.value}\r\n }\r\n })\r\n case types.SET_CARD_ERRORS:\r\n return Object.assign({}, state, {\r\n cardErrors: {...state.cardErrors, ...action.payload.cardErrors}\r\n })\r\n case types.SET_SHIPPING_ERRORS:\r\n return Object.assign({}, state, {\r\n shippingErrors: {...state.shippingErrors, ...action.payload.shippingErrors}\r\n })\r\n case types.RESTORE_PAYMENT_INFO:\r\n return Object.assign({}, state, Object.assign({}, action.payload))\r\n }\r\n return state;\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n layoutHistory: [],\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.ADD_LAYOUT_HISTORY: {\r\n const lastState = state.layoutHistory[state.layoutHistory.length - 1];\r\n if (lastState) {\r\n if (JSON.stringify(lastState) !== JSON.stringify(action.payload.layoutState)) {\r\n state.layoutHistory.push(action.payload.layoutState)\r\n }\r\n } else {\r\n state.layoutHistory.push(action.payload.layoutState)\r\n }\r\n return Object.assign({}, state, {\r\n layoutHistory: state.layoutHistory\r\n })\r\n }\r\n case types.SET_LAYOUT_HISTORY:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n })\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\nimport {ROUTES} from \"../routes\";\r\nimport {getCurrentLayout} from \"../bvcomponents/appLayout\";\r\n\r\nconst initialState = {\r\n shopPageLoaded: false,\r\n shopPageOpened: false,\r\n shopLastPageVisited: ROUTES.shop,\r\n shopPageLeaved: false,\r\n // shopActiveCategory: \"\",\r\n // shopActiveFeature: \"\",\r\n};\r\n\r\nconst getLastVisitedShopPage = (partId, withFeature = null, currentPage = \"\") => {\r\n const layout = getCurrentLayout();\r\n if (!layout.partIdExistInQtCategory(partId, true)) {\r\n return ROUTES.shop\r\n }\r\n if (withFeature) {\r\n return `${ROUTES.shop}/${partId}/${withFeature.dbFeature.sku || withFeature.dbFeature.sharedFeatureName}`\r\n }\r\n if (currentPage && currentPage.includes(partId + \"/\")) { // + \"/\" - we are checking if there is anything more (feature opened)\r\n return currentPage\r\n }\r\n return `${ROUTES.shop}/${partId}`\r\n}\r\n\r\nexport default function (state = initialState, action) {\r\n\r\n switch (action.type) {\r\n\r\n case types.SET_SHOP_PAGE_LOADED:\r\n case types.SET_SHOP_PAGE_OPENED:\r\n case types.SET_SHOP_LAST_PAGE_VISITED:\r\n case types.SET_SHOP_PAGE_LEAVED:\r\n // case types.SET_SHOP_ACTIVE_CATEGORY:\r\n // case types.SET_SHOP_ACTIVE_FEATURE:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_LOOK_ACTIVE_CATEGORY: {\r\n if (!state.shopPageOpened && action.payload.lookActiveCategory) {\r\n const shopLastPageVisited = getLastVisitedShopPage(action.payload.lookActiveCategory, null, state.shopLastPageVisited);\r\n if (shopLastPageVisited !== state.shopLastPageVisited) {\r\n return Object.assign({}, state, {\r\n shopLastPageVisited\r\n });\r\n }\r\n }\r\n return state;\r\n }\r\n case types.SET_LOOK_ACTIVE_FEATURE: {\r\n if (!state.shopPageOpened && action.payload.lookActiveFeature) {\r\n const shopLastPageVisited = getLastVisitedShopPage(action.payload.lookActiveFeature.partId, action.payload.lookActiveFeature, state.shopLastPageVisited);\r\n if (shopLastPageVisited !== state.shopLastPageVisited) {\r\n return Object.assign({}, state, {\r\n shopLastPageVisited\r\n });\r\n }\r\n }\r\n break;\r\n }\r\n // case types.SET_SHOP_ACTIVE_FEATURE:\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n isSwitching : false,\r\n activeStep: 0,\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.SET_SQFT_TUTORIAL_STEP:\r\n if (state.isSwitching) {\r\n return Object.assign({}, state) // don't do anything until animation will finish\r\n }\r\n\r\n return Object.assign({}, state, {\r\n activeStep: action.payload.activeStep <= 0 ? 0 : action.payload.activeStep\r\n });\r\n\r\n case types.SET_SQFT_TUTORIAL_SWITCHING:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import {\r\n SET_ADMIN_LOGIN_POPUP_VISIBLE,\r\n SET_ADMIN_LOGOUT_VISIBLE,\r\n SET_ADMIN_TOOL_SETTINGS_POPUP_VISIBLE\r\n} from \"../../../actions/actionTypes\";\r\n\r\nconst initialState = {\r\n adminLogoutVisible: false,\r\n adminLoginPopupVisible: false,\r\n adminToolSettingsPopupVisible: false,\r\n adminToolSettingsPopupFeature: null,\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case SET_ADMIN_LOGOUT_VISIBLE:\r\n case SET_ADMIN_LOGIN_POPUP_VISIBLE:\r\n case SET_ADMIN_TOOL_SETTINGS_POPUP_VISIBLE:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import React from \"react\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst UserFieldErrors = (props) => {\r\n\r\n const {property, userInfoErrors} = props;\r\n\r\n const errorsExist = Array.isArray(userInfoErrors[property]) && userInfoErrors[property].length;\r\n if (!errorsExist) {\r\n return null\r\n }\r\n\r\n return (\r\n
    \r\n {userInfoErrors[property].map((error) => {\r\n return (\r\n \r\n \r\n \r\n )\r\n })}\r\n
    \r\n )\r\n};\r\n\r\nUserFieldErrors.propTypes = {\r\n property: PropTypes.string.isRequired,\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {userInfo, userInfoErrors} = store.userState;\r\n return {\r\n userInfo,\r\n userInfoErrors,\r\n // fabricatorData: store.fabricatorState,\r\n };\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps)(UserFieldErrors)\r\n)\r\n","import React, {useEffect, useState} from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport Axios from \"axios\";\r\nimport $ from \"jquery\";\r\n\r\nimport LoadingSpinner from \"../../ui/loadingSpinner\";\r\nimport {baseNewImagesPath} from \"../../assets\";\r\nimport {IS_LIXIL_UI} from \"../../../config\";\r\n\r\nconst getPrivacyPolicyUrl = (fabricatorData) => {\r\n if (fabricatorData.isRebath) {\r\n return \"rebathTerms.html\"\r\n } else if (fabricatorData.isLowes) {\r\n return \"lowesTerms.html\"\r\n } else if (fabricatorData.isNhance) {\r\n return \"nhanceTerms.html\"\r\n }\r\n return \"qcTerms.html\"\r\n}\r\n\r\nconst PrivacyPolicyTerms = (props) => {\r\n\r\n const {fabricatorData} = props;\r\n const [terms, setTerms] = useState(null);\r\n\r\n const privacyPolicyUrl = getPrivacyPolicyUrl(fabricatorData);\r\n\r\n useEffect(() => {\r\n const getTerms = async () => {\r\n const termsResponse = await Axios.get(baseNewImagesPath + \"privacyPolicy/\" + privacyPolicyUrl);\r\n if (termsResponse && termsResponse.data) {\r\n setTerms(termsResponse.data)\r\n }\r\n }\r\n getTerms();\r\n\r\n window.anchorScroll = (anchor) => {\r\n const $scrollableDiv = $(IS_LIXIL_UI ? \".grohe-lead__content\" : \".user-popup-terms\");\r\n const scrollToDiv = document.querySelector(`[data-anchor=${anchor}]`);\r\n // const scrollTop = $scrollToDiv ? $scrollToDiv.position().top - 50 : 0;\r\n const scrollTop = scrollToDiv ? scrollToDiv.offsetTop - 60 : 0;\r\n if (scrollTop) {\r\n $scrollableDiv.animate({scrollTop}, 1000);\r\n }\r\n }\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n return terms ?
    : \r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const fabricatorData = store.fabricatorState;\r\n return {\r\n fabricatorData\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(PrivacyPolicyTerms)\r\n","import {closeSQFTTool} from \"../helpers/sqftHelperUi\";\r\nimport {getFeatureUrl} from \"../../look/lookNavigation/lookFunctions2\";\r\nimport {clearAllMenusEvents} from \"../components/canvas/core/workspace/workspaceEvents\";\r\nimport Analytics from \"../../../analytics\";\r\nimport isObject from \"lodash/isObject\";\r\nimport {SQFT_FEATURES} from \"../constants\";\r\nimport {IS_LIXIL_UI} from \"../../../config\";\r\nimport {isFirefox} from \"../../../misc/helpers\";\r\nimport {setShowAddedToTheCartSuccess} from \"../../../actions/groheFunctions\";\r\nimport {setSqftFromFeature} from \"../../../actions/sqftFunctions\";\r\nimport {setCameFromPage} from \"../../../actions/actionFunctions\";\r\nimport {useChangeWizardStepRoute} from \"../../qkbPages/materialsWizard/useChangeWizardStepRoute\";\r\nimport {useHistory} from \"react-router-dom\";\r\nimport store from \"../../../store\";\r\n\r\nexport const useCloseSQFTCalc = () => {\r\n const {changeWizardStepRoute} = useChangeWizardStepRoute();\r\n const history = useHistory();\r\n const state = store.getState();\r\n const {cameFromPage} = state.cartState\r\n\r\n const closeLixilUi = (cameFromPage, shouldChangeWizardToNextStep) => {\r\n closeSQFTTool(cameFromPage, shouldChangeWizardToNextStep, changeWizardStepRoute);\r\n const {wizardIsActive} = store.getState().wizardState;\r\n\r\n if (!wizardIsActive) {\r\n window.setTimeout(() => {\r\n store.dispatch(setShowAddedToTheCartSuccess(true));\r\n }, 300)\r\n history.push(getFeatureUrl(cameFromPage));\r\n history.push(`/cart`);\r\n }\r\n }\r\n\r\n const closeSQFTCalc = (shouldChangeWizardToNextStep = true) => {\r\n // if (payload && payload.measureUnit) {\r\n // props.setSqftMeasureUnit(payload.measureUnit);\r\n // }\r\n //this.sendPostMessageToSqft(SQFT_POST_MESSAGE_ACTIONS.stopRender);\r\n\r\n clearAllMenusEvents();\r\n Analytics.sendClickEvent('sqft-close');\r\n store.dispatch(setSqftFromFeature(null));\r\n\r\n const leaveSqft = () => {\r\n if (isObject(cameFromPage) && cameFromPage.partId && cameFromPage.partId !== SQFT_FEATURES.slabs) {\r\n if (IS_LIXIL_UI) {\r\n closeLixilUi(cameFromPage, shouldChangeWizardToNextStep)\r\n } else {\r\n closeSQFTTool(\"materials\", shouldChangeWizardToNextStep, changeWizardStepRoute);\r\n }\r\n //props.toggleSelectionFeatureInfo(cameFromPage);\r\n } else {\r\n const redirectToPage = cameFromPage && cameFromPage !== \"sqft\" ? cameFromPage : \"materials\"\r\n closeSQFTTool(redirectToPage, shouldChangeWizardToNextStep, changeWizardStepRoute);\r\n }\r\n store.dispatch(setCameFromPage(\"sqft\"));\r\n };\r\n\r\n if (isFirefox()) {\r\n setTimeout(() => {\r\n leaveSqft();\r\n }, 0)\r\n } else {\r\n leaveSqft();\r\n }\r\n }\r\n\r\n return {closeSQFTCalc}\r\n};\r\n","import * as PropTypes from \"prop-types\";\r\n\r\nexport const customerInterface = {\r\n id: PropTypes.number,\r\n fullName: PropTypes.string,\r\n email: PropTypes.string,\r\n};\r\n\r\nexport const employeeInterface = {\r\n id: PropTypes.number,\r\n fullName: PropTypes.string,\r\n};\r\n","import React from \"react\";\r\n\r\nexport const initialContext = {\r\n inputsValidated: true,\r\n customerError: \"\",\r\n selectedContracts: [], // [\"id\"]\r\n}\r\n\r\nexport default React.createContext(initialContext);\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport UiIcon from \"../ui/icons/uiIcon\";\r\n\r\nexport const subPartIsDone = (relatedIem, activeQuoteIndex, cartItems = []) => {\r\n const {placeholderChanged, activeFeature, activeNotInVisualizerFeature, firstClick} = relatedIem;\r\n const selectedFeature = activeFeature || activeNotInVisualizerFeature;\r\n return cartItems.some(cartItem => {\r\n return (cartItem.partId === relatedIem.partId) && (cartItem.currentQuote === activeQuoteIndex) && !cartItem.cartFeature.dbFeature.autoAddToCart\r\n }) || (placeholderChanged && firstClick[activeQuoteIndex] && selectedFeature && !selectedFeature.partName.includes(\"laceholder\"))\r\n}\r\n\r\nconst SubPartDoneCheckMark = (props) => {\r\n\r\n const {placeholderChanged, activeFeature, activeNotInVisualizerFeature, firstClick, activeQuoteIndex, partId, cartItems} = props;\r\n\r\n const selected = subPartIsDone(\r\n {placeholderChanged, activeFeature, activeNotInVisualizerFeature, firstClick, partId},\r\n activeQuoteIndex,\r\n cartItems\r\n );\r\n\r\n if (!selected) {\r\n return null\r\n }\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n};\r\n\r\nSubPartDoneCheckMark.propTypes = {\r\n relatedItem: PropTypes.object.isRequired,\r\n}\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n return {\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n activeFeature: ownProps.relatedItem.activeFeature,\r\n activeNotInVisualizerFeature: ownProps.relatedItem.activeNotInVisualizerFeature,\r\n firstClick: ownProps.relatedItem.firstClick,\r\n placeholderChanged: ownProps.relatedItem.placeholderChanged,\r\n partId: ownProps.relatedItem.partId,\r\n cartItems: store.cartState.cartItems,\r\n fabricatorData: store.fabricatorState\r\n };\r\n};\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SubPartDoneCheckMark)\r\n","import React, { Fragment } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { FormattedMessage, injectIntl } from \"react-intl\";\r\n\r\nimport Button from \"@mui/material/Button\";\r\nimport SvgIcon from \"@mui/material/SvgIcon\";\r\nimport { Look3DIcon, LookAugmentRealityIcon } from \"../../common/icons\";\r\nimport { LOOK_FEATURE_CONTENT } from \"../../look/core/constants\";\r\nimport COLOR_THEMES from \"../../../colorThemes\";\r\nimport config from \"../../sqft/components/canvas/store/sqftConfig\";\r\nimport {\r\n changeSqftFeaturesPopup,\r\n setAPIErrorMessage,\r\n setSqftCabinetsGlb,\r\n setSQFTViewMode\r\n} from \"../../../actions/sqftFunctions\";\r\nimport { setAbortController, setSQFTAr3dPopup } from \"../../../actions/sqftMenuFunctions\";\r\nimport { SQFT_VIEW_MODE } from \"../../sqft/constants\";\r\nimport { setCabinetGLBFromCabinetsSet } from \"../../sqft/helpers/sqft3dArHelper\";\r\nimport {setMultiLoader} from \"../../../actions/actionFunctions\";\r\n\r\nexport const SqftFeaturesPopup3dButtons = (props) => {\r\n const { changeSqftFeaturesPopup, isMobile, setSQFTViewMode, setMultiLoader, SQFTViewMode } = props;\r\n\r\n const threeDButtonClick = async () => {\r\n changeSqftFeaturesPopup({\r\n opened: false,\r\n sqftPassedData: null\r\n });\r\n if (SQFTViewMode === SQFT_VIEW_MODE.threeDMode) {\r\n setMultiLoader({activeStep: 0, visible: true, finished: false});\r\n }\r\n setSQFTViewMode(SQFT_VIEW_MODE.threeDMode);\r\n await setCabinetGLBFromCabinetsSet().then(r => void r);\r\n // setSQFTAr3dPopup({isOpened: true, contentType: SQFT_AR3D_POPUP_CONTENT_TYPE.threeD})\r\n // await setCabinetGLBFromCabinetsSet().then(r => void r);\r\n }\r\n\r\n const arButtonClick = async () => {\r\n changeSqftFeaturesPopup({\r\n opened: false,\r\n sqftPassedData: null\r\n });\r\n if (SQFTViewMode === SQFT_VIEW_MODE.augmentedReality) {\r\n setMultiLoader({activeStep: 0, visible: true, finished: false});\r\n }\r\n setSQFTViewMode(SQFT_VIEW_MODE.augmentedReality);\r\n await setCabinetGLBFromCabinetsSet().then(r => void r);\r\n // setSQFTAr3dPopup({isOpened: true, contentType: SQFT_AR3D_POPUP_CONTENT_TYPE.ar})\r\n // await setCabinetGLBFromCabinetsSet().then(r => void r);\r\n }\r\n\r\n const threeDButtonID = isMobile ? 'sqft.popup.button.3dButtonMobile' : 'sqft.popup.button.3dButton';\r\n const augButtonID = isMobile ? 'sqft.popup.button.augButtonMobile' : 'sqft.popup.button.augButton';\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {isMobile} = store.serverState;\r\n return {\r\n isMobile,\r\n abortRequestController: store.sqftState.abortRequestController,\r\n cabinetsGlb: store.sqftState.cabinetsGlb,\r\n SQFTViewMode: store.sqftState.SQFTViewMode,\r\n };\r\n};\r\nconst mapDispatchToProps = {\r\n setSqftCabinetsGlb,\r\n setSQFTAr3dPopup,\r\n changeSqftFeaturesPopup,\r\n setAPIErrorMessage,\r\n setAbortController,\r\n setSQFTViewMode,\r\n setMultiLoader,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(SqftFeaturesPopup3dButtons)\r\n)\r\n","import React from \"react\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport OutlinedInput from \"@mui/material/OutlinedInput\";\r\nimport TextField from \"@mui/material/TextField\";\r\nimport InputAdornment from \"@mui/material/InputAdornment\";\r\nimport FormControl from \"@mui/material/FormControl\";\r\nimport InputLabel from \"@mui/material/InputLabel\";\r\nimport FormHelperText from \"@mui/material/FormHelperText\";\r\nimport getCreditCardType from \"../grohe/groheCart/getCreditCardType\";\r\nimport {onInputBlur, onInputChange, useInputsValidation} from \"./inputFunctions\";\r\n\r\n\r\nconst LookInput = (props) => {\r\n\r\n const {property, inputValue, setInputValue, intl, errorsObject, changeErrorsObject, getValidationErrors,\r\n inputsValidated, isRequired, blockClassName} = props;\r\n\r\n const onBlur = (event) => {\r\n onInputBlur(event, property, setInputValue, errorsObject, changeErrorsObject, getValidationErrors);\r\n };\r\n\r\n const onChange = (event) => {\r\n onInputChange(event, property, setInputValue, errorsObject, changeErrorsObject, getValidationErrors);\r\n };\r\n\r\n useInputsValidation(inputsValidated, onBlur, inputValue);\r\n\r\n const errorsExist = errorsObject && Array.isArray(errorsObject[property]) && !!errorsObject[property].length;\r\n\r\n const type = property !== \"email\" && property !== \"password\" ? \"text\" : property;\r\n\r\n if (property === \"cardNumber\") {\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n {getCreditCardType(inputValue).icon}\r\n \r\n ) : null}\r\n label={intl.formatMessage({id: \"look.inputs.\" + property})}\r\n onChange={onChange}\r\n onBlur={onBlur}\r\n error={errorsExist}\r\n variant=\"outlined\" />\r\n {errorsExist ? (\r\n \r\n \r\n \r\n ) : null}\r\n \r\n
    \r\n )\r\n }\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n};\r\n\r\nLookInput.propTypes = {\r\n property: PropTypes.string.isRequired,\r\n setInputValue: PropTypes.func.isRequired,\r\n isRequired: PropTypes.bool,\r\n // validation below\r\n inputsValidated: PropTypes.bool,\r\n errorsObject: PropTypes.object, // userInfoErrorsLike\r\n changeErrorsObject: PropTypes.func,\r\n getValidationErrors: PropTypes.func,\r\n blockClassName: PropTypes.string,\r\n};\r\n\r\nexport default injectIntl(LookInput)\r\n","import {useEffect} from \"react\";\r\n\r\nexport const onInputBlur = (event, property, setInputValue, errorsObject, changeErrorsObject, getValidationErrors) => {\r\n const value = (event && event.target && event.target.value ? event.target.value : \"\").trim();\r\n setInputValue(property, value); // set trimmed version\r\n if (changeErrorsObject && getValidationErrors) {\r\n const errors = getValidationErrors(property, value);\r\n if (errors.length) {\r\n changeErrorsObject({\r\n [property]: errors\r\n })\r\n } else if (!errors.length && errorsObject && errorsObject[property]) {\r\n changeErrorsObject({\r\n [property]: errors\r\n })\r\n }\r\n }\r\n}\r\n\r\nexport const onInputChange = (event, property, setInputValue, errorsObject, changeErrorsObject, getValidationErrors) => {\r\n const value = event.target.value;\r\n setInputValue(property, value);\r\n if (errorsObject && errorsObject[property] && getValidationErrors) {\r\n const errors = getValidationErrors(property, value);\r\n if (!errors.length && changeErrorsObject) {\r\n changeErrorsObject({\r\n [property]: errors\r\n })\r\n }\r\n }\r\n};\r\n\r\nexport const useInputsValidation = (inputsValidated, onBlur, inputValue) => {\r\n useEffect(() => {\r\n if (!inputsValidated) {\r\n onBlur({\r\n target: {\r\n value: inputValue\r\n }\r\n });\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [inputsValidated]);\r\n};\r\n","/**\r\n * @param forFeature {featureInterface}\r\n * @param toolSettings {array}\r\n * @returns {{postDiffData, featuresToUpdate}}\r\n */\r\nexport const getEditFeaturesRequestData = (forFeature, toolSettings) => {\r\n let postDiffData = null, featuresToUpdate = [];\r\n const toolSettingsDiff = getDifferentToolSettings(toolSettings, forFeature.dbFeature.updatedToolSettings || forFeature.dbFeature.toolSettings)\r\n if (!toolSettingsDiff.length) {\r\n return {postDiffData, featuresToUpdate} // we didn't change anything, no need to post\r\n }\r\n featuresToUpdate = getSameNameFeatures(forFeature);\r\n postDiffData = {\r\n \"edit\": toolSettingsDiff.map(toolSetting => {\r\n return {\r\n \"FabricatorFeatureIds\": featuresToUpdate.map(f => f.dbFeature.id),\r\n \"EnableVisualizer\": toolSetting[\"enableVisualizer\"],\r\n \"EnableQuotingTool\": toolSetting[\"enableQuotingTool\"],\r\n \"Tool\": toolSetting.tool,\r\n }\r\n })\r\n }\r\n return {postDiffData, featuresToUpdate}\r\n}\r\n\r\n/**\r\n * @param forFeature {featureInterface}\r\n * @returns featureInterface[]\r\n */\r\nconst getSameNameFeatures = (forFeature) => {\r\n const featureGroup = forFeature.getParent();\r\n let features = [forFeature];\r\n const nameToCompare = forFeature.getMatchingFeatureName();\r\n Object.keys(featureGroup.featuresList).forEach(layoutType => {\r\n [...featureGroup.featuresList[layoutType], ...featureGroup.featuresPartsList[layoutType]].forEach(feature => {\r\n if (nameToCompare === feature.getMatchingFeatureName() && !features.some(f => {\r\n return f.dbFeature.id === feature.dbFeature.id\r\n })) {\r\n features.push(feature);\r\n }\r\n })\r\n });\r\n return features\r\n}\r\n\r\n/**\r\n * @param newToolSettings {array}\r\n * @param oldToolSettings {array}\r\n * @returns array\r\n */\r\nexport const getDifferentToolSettings = (newToolSettings, oldToolSettings) => {\r\n return newToolSettings.filter(toolSetting => {\r\n const existingObject = oldToolSettings.find(set => set.tool === toolSetting.tool)\r\n if (!existingObject) {\r\n return true\r\n }\r\n return (existingObject[\"enableVisualizer\"] !== toolSetting[\"enableVisualizer\"])\r\n || (existingObject[\"enableQuotingTool\"] !== toolSetting[\"enableQuotingTool\"])\r\n })\r\n}\r\n","import React, {useEffect, useRef} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport {animateButtons, hideButtons} from \"../../../../SqftUiFunctions\";\r\nimport {SIDEBAR_LAYOUTS_BUTTONS} from \"../../../../../constants\";\r\nimport Square from \"../../../../canvas/core/shapes/layouts/square\";\r\nimport WideAngle from \"../../../../canvas/core/shapes/layouts/wideAngle\";\r\nimport Horseshoe from \"../../../../canvas/core/shapes/layouts/horseshoe\";\r\nimport Rectangle from \"../../../../canvas/core/shapes/layouts/rectangle\";\r\nimport RectangleIsland from \"../../../../canvas/core/shapes/layouts/rectangleIsland\";\r\nimport WideAngleReverted from \"../../../../canvas/core/shapes/layouts/wideAngleReverted\";\r\nimport workspace from \"../../../../canvas/core/workspace\";\r\nimport eventManager from \"../../../../canvas/store/sqftEventManager\";\r\nimport config from \"../../../../canvas/store/sqftConfig\";\r\nimport {toggleChangeLayoutPopup, updateSQFTCalculations} from \"../../../../../../../actions/sqftFunctions\";\r\nimport store from \"../../../../../../../store\";\r\nimport {setSQFTRoomLayouts} from \"../../../../../../../actions/sqftMenuFunctions\";\r\nimport {getCountertopPartNames} from \"../../../../../helpers/shapeHelper\";\r\n\r\nexport const setNewLayout = (layoutName) => {\r\n workspace.removeAllShapes();\r\n eventManager.stealCursor(true);\r\n window.setNextLayout = layoutName;\r\n const [countertopPartName, centerIslandPartName] = getCountertopPartNames();\r\n\r\n switch (layoutName) {\r\n case \"S\":\r\n case \"SP\":\r\n workspace.addShape(new Rectangle(), 'square', null, countertopPartName, layoutName);\r\n break;\r\n case \"SI\":\r\n case \"SPI\":\r\n workspace.addShape(new RectangleIsland(config.shapeSize), 'square', null, countertopPartName, layoutName);\r\n break;\r\n case \"SN\":\r\n case \"SNI\":\r\n case \"SPN\":\r\n case \"SPNI\":\r\n workspace.addShape(new WideAngleReverted(config.shapeSize), 'wideangle', null, countertopPartName, layoutName);\r\n break;\r\n case \"L\":\r\n case \"LI\":\r\n workspace.addShape(new WideAngle(config.shapeSize), 'wideangle', null, countertopPartName, layoutName);\r\n break;\r\n case \"LN\":\r\n case \"LNI\":\r\n workspace.addShape(new Horseshoe(config.shapeSize), 'horseshoe', null, countertopPartName, layoutName);\r\n break;\r\n default:\r\n break;\r\n }\r\n if (layoutName.includes(\"I\")) {\r\n workspace.addShape(new Square(config.shapeSize, true), 'square', null, centerIslandPartName, layoutName);\r\n }\r\n\r\n // todo sqft-react remove?\r\n // nodes.layoutButtons.forEach(function (layoutButton) {\r\n // layoutButton.classList.remove(\"shapes-icon--active\");\r\n // });\r\n // document.querySelector(\"[data-layout='\"+layoutName+\"']\").classList.add(\"shapes-icon--active\");\r\n\r\n if (window.innerHeight < 480 && window.innerWidth < 991) {\r\n // todo sqft-react\r\n //Menu.hideSidebarSide();\r\n //Menu.hideSideBarContent();\r\n }\r\n const state = store.getState();\r\n const updateCalculations = state.sqftState.updateCalculations;\r\n\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n};\r\n\r\nexport const setRoomLayouts = (itemName) => {\r\n const state = store.getState();\r\n const roomLayouts = state.sqftMenuState.roomLayouts;\r\n const activeRoomIndex = state.sqftMenuState.activeRoomIndex;\r\n const updatedRoomLayouts = [...roomLayouts];\r\n const roomLayoutIndex = updatedRoomLayouts.findIndex(roomLayout => roomLayout.roomIndex === activeRoomIndex);\r\n if (roomLayoutIndex >= 0) {\r\n updatedRoomLayouts[roomLayoutIndex].layoutName = itemName;\r\n setSQFTRoomLayouts(updatedRoomLayouts);\r\n } else {\r\n setSQFTRoomLayouts([...roomLayouts, {roomIndex: activeRoomIndex, layoutName: itemName}]);\r\n }\r\n}\r\n\r\nconst SqftNavLayouts = (props) => {\r\n // other popups, modals and so on\r\n const {menuOpened, activeButton, roomLayouts, activeRoomIndex, setSQFTRoomLayouts} = props;\r\n const expanded = activeButton && menuOpened === \"layouts\";\r\n const buttonRefs = useRef({});\r\n\r\n useEffect(() => {\r\n const buttons = Object.values(buttonRefs.current);\r\n if(expanded) {\r\n animateButtons(buttons);\r\n } else {\r\n hideButtons(buttons);\r\n }\r\n\r\n }, [expanded]);\r\n\r\n const handleButtonClick = async (event, itemName) => {\r\n console.log(\"itemName\", itemName);\r\n event.preventDefault();\r\n event.stopPropagation();\r\n const shapesLength = workspace.getShapes().length;\r\n const isRoomHasLayout = roomLayouts.some(roomLayout => roomLayout.roomIndex === activeRoomIndex);\r\n\r\n if (isRoomHasLayout || shapesLength) {\r\n callChangeLayoutDataPopup(itemName, true);\r\n setRoomLayouts(itemName);\r\n } else {\r\n setNewLayout(itemName);\r\n setSQFTRoomLayouts([...roomLayouts, {roomIndex: activeRoomIndex, layoutName: itemName}]);\r\n }\r\n };\r\n\r\n //todo\r\n const callChangeLayoutDataPopup = (layoutName, applyLayoutOnSqft = false) => {\r\n props.toggleChangeLayoutPopup(true, layoutName, applyLayoutOnSqft);\r\n // window.parent.postMessage({\r\n // action: SQFT_POST_MESSAGE_ACTIONS.callChangeLayoutDataPopup,\r\n // payload: {\r\n // layoutName,\r\n // applyLayoutOnSqft\r\n // }\r\n // }, \"*\");\r\n };\r\n\r\n return (\r\n
    \r\n
    \r\n {\r\n SIDEBAR_LAYOUTS_BUTTONS.map((item, index) => (\r\n
    \r\n
    \r\n\r\n )\r\n\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n menuOpened: store.sqftMenuState.menuOpened,\r\n activeButton: store.sqftMenuState.activeButton,\r\n activeRoomType: store.sqftMenuState.activeRoomType,\r\n roomLayouts: store.sqftMenuState.roomLayouts,\r\n qtActiveCategory: store.qtState.qtActiveCategory,\r\n quotes: store.quotesState.quotes,\r\n activeRoomIndex: store.sqftMenuState.activeRoomIndex,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n toggleChangeLayoutPopup,\r\n setSQFTRoomLayouts,\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SqftNavLayouts);\r\n","import React, {useEffect} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {setMultiLoader} from \"../../actions/actionFunctions\";\r\nimport MultiLoaderSteps from \"./multiLoaderSteps\";\r\nimport MaterialSpinner from \"./materialSpinner\";\r\n\r\nconst MultiLoader = (props) => {\r\n\r\n const {multiLoader, setMultiLoader, useCabinetLoader} = props;\r\n\r\n useEffect(() => {\r\n setMultiLoader({finished: false, activeStep: 0, visible: true});\r\n return () => {\r\n setMultiLoader({finished: true, activeStep: 0});\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n // useEffect(() => {\r\n // if (multiLoader.activeStep > multiLoader.renderSteps.length) {\r\n // setTimeout(() => {\r\n // setMultiLoader({visible: false});\r\n // }, 500)\r\n // }\r\n // // eslint-disable-next-line react-hooks/exhaustive-deps\r\n // }, [multiLoader.activeStep]);\r\n\r\n if (!multiLoader.visible) {\r\n return null\r\n }\r\n\r\n if (multiLoader.finished) {\r\n return \r\n }\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n};\r\n\r\nMultiLoader.propTypes = {\r\n useCabinetLoader: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {multiLoader} = store.loaderState;\r\n return {\r\n multiLoader,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setMultiLoader,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(MultiLoader)\r\n","import { useState, useEffect, useMemo } from 'react';\r\nimport { checkIfLookFeaturesReceived } from \"../../../api/look-api\";\r\nimport { getCurrentLayout } from \"../../appLayout\";\r\n\r\nconst useFetchFeatures = (partIds, searchText = \"\", shouldGetModelsOnlyWithThirdPartyAR3DUrls = false) => {\r\n const [featuresData, setFeaturesData] = useState({});\r\n const [isLoading, setIsLoading] = useState(true);\r\n\r\n const layout = useMemo(() => getCurrentLayout(), []);\r\n\r\n useEffect(() => {\r\n const fetchAllRows = async () => {\r\n setIsLoading(true);\r\n const newFeaturesData = {};\r\n\r\n for (const partId of partIds) {\r\n const featureGroup = layout.getFeatureGroupByPartId(partId);\r\n let navItems = [];\r\n\r\n if (featureGroup) {\r\n // If features are not received and no request is in progress, wait for the promise\r\n if (!featureGroup.allFeaturesReceived && !featureGroup.requestInProgress) {\r\n await checkIfLookFeaturesReceived(featureGroup);\r\n }\r\n\r\n navItems = layout.designNavigationItems(\r\n { part: featureGroup },\r\n [],\r\n searchText,\r\n null,\r\n \"all\",\r\n [],\r\n { firstFeature: null, firstConditions: null },\r\n )\r\n\r\n if (shouldGetModelsOnlyWithThirdPartyAR3DUrls) {\r\n navItems = navItems.filter(feature => {\r\n return feature.part\r\n && feature.part.dbFeature\r\n && Array.isArray(feature.part.dbFeature.thirdPartyAR3DUrls)\r\n && feature.part.dbFeature.thirdPartyAR3DUrls.length > 0\r\n })\r\n }\r\n }\r\n\r\n newFeaturesData[partId] = {\r\n rows: navItems,\r\n featureGroup: featureGroup,\r\n };\r\n }\r\n\r\n setFeaturesData(newFeaturesData);\r\n setIsLoading(false);\r\n };\r\n\r\n fetchAllRows();\r\n }, [partIds, searchText, layout, shouldGetModelsOnlyWithThirdPartyAR3DUrls]);\r\n\r\n return { featuresData, isLoading };\r\n};\r\n\r\nexport default useFetchFeatures;\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport ListIcon from \"@mui/icons-material/List\";\r\nimport ViewStreamIcon from '@mui/icons-material/ViewStream';\r\nimport ViewModuleIcon from '@mui/icons-material/ViewModule';\r\n\r\nimport {setLookViewType} from \"../../../../actions/lookFunctions\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS} from \"../../../../analytics\";\r\n\r\nconst LookViewTypeSwitcher = (props) => {\r\n\r\n const {intl, lookExpanded, lookViewType, setLookViewType, isMobile} = props;\r\n\r\n const listButtonClick = () => {\r\n const newViewType = lookViewType === 4 ? 1 : lookViewType + 1;\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookMenuHeaderViewType + newViewType);\r\n setLookViewType(newViewType);\r\n };\r\n\r\n const getViewIcon = () => {\r\n switch (lookViewType) {\r\n case 1:\r\n default:\r\n return \r\n case 2:\r\n return \r\n case 3:\r\n return \r\n case 4:\r\n return \r\n }\r\n }\r\n\r\n return (\r\n \r\n {getViewIcon(lookViewType)}\r\n \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookExpanded, lookViewType} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n return {\r\n lookExpanded,\r\n lookViewType,\r\n isMobile,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookViewType\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookViewTypeSwitcher)\r\n)\r\n","import React, {useEffect, useMemo, useRef, useState} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport { Grid } from 'react-virtualized';\r\nimport 'react-virtualized/styles.css';\r\nimport {injectIntl} from 'react-intl';\r\nimport PropTypes from \"prop-types\";\r\nimport uniqBy from \"lodash/uniqBy\";\r\n\r\nimport {getCurrentLayout} from \"../../../../../../../appLayout\";\r\nimport {featureInterface} from \"../../../../../../../../interfaces/featureInterface\";\r\nimport SqftFeaturesChecker from \"./SqftFeaturesChecker\";\r\nimport SqftOptionsLoading from \"./SqftOptionsLoading\";\r\nimport SqftOptionsRelatedItemRow from \"./SqftOptionsRelatedItemRow\";\r\nimport {\r\n getFilteredRelatedFeatures,\r\n getRelatedFeaturesFromLayout,\r\n} from \"../../../../../../../../misc/helpers\";\r\nimport {getSortedFeatures} from \"../../../../../../helpers/featureHelper\";\r\nimport {loaderDisable, loaderEnable} from \"../../../../../../../ui/loaderView\";\r\n\r\nconst SqftOptionsRelatedItemList = (props) => {\r\n const { windowHeight, isMobile, activeFeature, itemClickCallback, partId, shouldSortByWidth, searchInputValue,\r\n reCacheMenuCounter, lookViewType, selectedFilters, groheFiltersSearchText } = props;\r\n const [activeItemIndex, setActiveItemIndex] = React.useState(0);\r\n const containerRef = useRef(null);\r\n const [containerHeight, setContainerHeight] = useState(0);\r\n const [loading, setLoading] = useState(true);\r\n const [parentFeature, setParentFeature] = useState(null);\r\n const [width, setWidth] = useState(296);\r\n\r\n useEffect(() => {\r\n setWidth(isMobile ? 238 : 296);\r\n }, [isMobile]);\r\n\r\n useEffect(() => {\r\n const handleResize = () => {\r\n if (containerRef.current) {\r\n setContainerHeight(containerRef.current.clientHeight);\r\n }\r\n };\r\n\r\n const setupResizeObserver = () => {\r\n const resizeObserver = new ResizeObserver(handleResize);\r\n const currentContainer = containerRef.current;\r\n\r\n if (currentContainer) {\r\n setContainerHeight(currentContainer.clientHeight);\r\n resizeObserver.observe(currentContainer);\r\n }\r\n\r\n return () => {\r\n if (currentContainer) {\r\n resizeObserver.unobserve(currentContainer);\r\n }\r\n };\r\n };\r\n\r\n // Set up observer after a short delay to ensure the ref is available\r\n const timeoutId = setTimeout(() => {\r\n setupResizeObserver();\r\n }, 0);\r\n\r\n return () => {\r\n clearTimeout(timeoutId);\r\n setupResizeObserver();\r\n };\r\n }, [containerRef]);\r\n\r\n useEffect(() => {\r\n if (containerRef.current) {\r\n setContainerHeight(containerRef.current.clientHeight);\r\n }\r\n }, [windowHeight]);\r\n\r\n const layout = useMemo(() => getCurrentLayout(), []);\r\n const featureGroup = useMemo(() => layout.getFeatureGroupByPartId(partId), [layout, partId]);\r\n\r\n useEffect(() => {\r\n if (featureGroup) {\r\n setLoading(!featureGroup.allFeaturesReceived);\r\n if (!featureGroup.allFeaturesReceived) {\r\n loaderEnable();\r\n }\r\n } else {\r\n setLoading(false);\r\n }\r\n }, [featureGroup]);\r\n\r\n useEffect(() => {\r\n if (!featureGroup) {\r\n setParentFeature(null);\r\n return;\r\n }\r\n\r\n let parentFeature;\r\n\r\n if (featureGroup.activeFeature) {\r\n parentFeature = featureGroup.activeFeature;\r\n } else if (!featureGroup.allFeaturesReceived) {\r\n setParentFeature(null);\r\n return;\r\n }\r\n\r\n if (!featureGroup.activeFeature) {\r\n //featureGroup.setDefault(layout, true);\r\n parentFeature = featureGroup.activeFeature ? featureGroup.activeFeature : featureGroup.activeNotInVisualizerFeature;\r\n }\r\n\r\n setParentFeature(parentFeature);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [featureGroup, layout, activeFeature, partId, loading, reCacheMenuCounter]);\r\n\r\n if (!featureGroup) {\r\n return \r\n }\r\n\r\n if (loading) {\r\n return (\r\n {\r\n if (featureGroup.allFeaturesReceived) {\r\n setLoading(false);\r\n loaderDisable();\r\n }\r\n }} />\r\n )\r\n }\r\n\r\n if (!parentFeature) {\r\n console.log(\"selected feature matched by name not found\", partId);\r\n console.log(\"parentFeature\", parentFeature);\r\n return null;\r\n }\r\n\r\n const relatedFeatures = parentFeature.getFeatureRelatedFeatures();\r\n\r\n if (!Array.isArray(relatedFeatures) || !relatedFeatures.length) {\r\n console.log(\"relatedFeatures are missing\", relatedFeatures);\r\n console.log(\"parentFeature\", parentFeature);\r\n return null;\r\n }\r\n\r\n // Helper function to replace abbreviations in search text\r\n const expandSearchText = (text) => {\r\n return text\r\n .replace(/\\bh(\\d)/gi, 'Height $1')\r\n .replace(/\\bw(\\d)/gi, 'Width $1')\r\n .replace(/\\bd(\\d)/gi, 'Depth $1')\r\n .replace(/\\bh\\b/gi, 'Height')\r\n .replace(/\\bw\\b/gi, 'Width')\r\n .replace(/\\bd\\b/gi, 'Depth');\r\n };\r\n const expandedGroheFiltersSearchText = expandSearchText(groheFiltersSearchText);\r\n\r\n //Now let's search for the related features\r\n const {noFeaturesFound, relatedFeaturesFound} = getRelatedFeaturesFromLayout(\r\n relatedFeatures,\r\n parentFeature,\r\n expandedGroheFiltersSearchText,\r\n selectedFilters\r\n );\r\n if (noFeaturesFound.length) {\r\n console.log(\"ERROR: noFeaturesFound\", noFeaturesFound);\r\n }\r\n\r\n let relatedItemsList = getFilteredRelatedFeatures(relatedFeaturesFound);\r\n relatedItemsList = uniqBy(relatedItemsList, (feature) => feature.dbFeature.id);\r\n let emptyUrlsLog = [];\r\n\r\n relatedItemsList = relatedItemsList.filter(feature => {\r\n if (!feature.dbFeature.thirdPartyAR3DUrls) {\r\n //todo we can remove this searchInputValue and search by filters\r\n if (searchInputValue && feature.getFeatureName().toLowerCase().includes(searchInputValue.toLowerCase())\r\n || !searchInputValue\r\n ) {\r\n emptyUrlsLog.push(feature.dbFeature.sharedFeatureName);\r\n }\r\n } else {\r\n return feature;\r\n }\r\n });\r\n\r\n // const relatedGroups = createRelatedGroups(relatedItemsList, [], activeQuoteIndex, intl, fabricatorData)\r\n // void relatedGroups\r\n // console.log(\"relatedGroups\", relatedGroups);\r\n //\r\n // const groupName = parentFeature.dbFeature.groupName;\r\n // void groupName;\r\n\r\n if (emptyUrlsLog.length > 0) {\r\n console.log(`Features with empty thirdPartyAR3DUrls: ${emptyUrlsLog.join(', ')}`);\r\n }\r\n\r\n if (shouldSortByWidth) {\r\n relatedItemsList = getSortedFeatures(relatedItemsList);\r\n }\r\n\r\n // Define column and row settings based on lookViewType\r\n let columnCount;\r\n let rowHeight;\r\n\r\n switch (lookViewType) {\r\n case 1:\r\n columnCount = 1;\r\n rowHeight = 104;\r\n break;\r\n case 2:\r\n columnCount = 2;\r\n rowHeight = 170;\r\n break;\r\n case 3:\r\n columnCount = 1;\r\n rowHeight = 320; // Increased row height\r\n break;\r\n case 4:\r\n columnCount = 3;\r\n rowHeight = 128;\r\n break;\r\n default:\r\n columnCount = 1;\r\n rowHeight = 135;\r\n }\r\n\r\n const columnWidth = Math.floor(width / columnCount) - 8 / columnCount; // Ensure width is an integer to avoid overflow\r\n const rowCount = Math.ceil(relatedItemsList.length / columnCount);\r\n\r\n return (\r\n
    \r\n {\r\n {\r\n const index = rowIndex * columnCount + columnIndex;\r\n if (index >= relatedItemsList.length) return null;\r\n return (\r\n \r\n )\r\n }}\r\n />\r\n }\r\n
    \r\n )\r\n};\r\n\r\nSqftOptionsRelatedItemList.propTypes = {\r\n activeFeature: PropTypes.shape(featureInterface),\r\n partId: PropTypes.string,\r\n shouldSortByWidth: PropTypes.bool,\r\n itemClickCallback: PropTypes.func,\r\n //searchInputValue: PropTypes.string\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const { menuOpened, reCacheMenuCounter } = store.sqftMenuState;\r\n const { visualizersLoaded } = store.serverState;\r\n const { windowHeight, isMobile } = store.serverState;\r\n const { activeQuoteIndex } = store.quotesState;\r\n const { sqftFromFeature } = store.sqftState;\r\n const { lookViewType } = store.lookState;\r\n const {groheFiltersSearchText} = store.groheState;\r\n const {selectedFilters} = store.filterState;\r\n\r\n return {\r\n menuOpened,\r\n windowHeight,\r\n isMobile,\r\n activeQuoteIndex,\r\n visualizersLoadedLength: visualizersLoaded.length,\r\n fabricatorData: store.fabricatorState,\r\n sqftFromFeature,\r\n reCacheMenuCounter,\r\n groheFiltersSearchText,\r\n selectedFilters,\r\n lookViewType,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n};\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(SqftOptionsRelatedItemList)\r\n)\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst LookVirtualizedListLoadingItem = (props) => {\r\n\r\n const {style, currentType, lookExpanded} = props;\r\n\r\n return (\r\n
  • \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n {currentType === 1 ? (\r\n
    \r\n
    \r\n
    \r\n ) : null}\r\n
    \r\n
  • \r\n )\r\n};\r\n\r\nLookVirtualizedListLoadingItem.propTypes = {\r\n style: PropTypes.object,\r\n viewType: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n}\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n const {lookExpanded, lookViewType} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n const {viewType} = ownProps;\r\n\r\n return {\r\n lookExpanded,\r\n currentType: viewType || lookViewType,\r\n isMobile,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(LookVirtualizedListLoadingItem)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport SvgIcon from \"@mui/material/SvgIcon\";\r\n\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport {GroheLockIconSmall} from \"../../../../common/icons\";\r\nimport {pricingIsLocked} from \"../../lookNavigationFunctions\";\r\nimport {getCurrentLayout} from \"../../../../appLayout\";\r\nimport {setLookOverlayOpened} from \"../../../../../actions/lookFunctions\";\r\nimport {LOOK_OVERLAYS} from \"../../../core/constants\";\r\n\r\nconst LookFeaturePriceLocked = (props) => {\r\n\r\n const {lookFeature, lockedText, setLookOverlayOpened} = props;\r\n\r\n let {showPrice} = pricingIsLocked();\r\n if (showPrice && lookFeature) {\r\n const layout = getCurrentLayout();\r\n showPrice = layout.partIdExistInQtCategory(lookFeature.partId);\r\n }\r\n\r\n const handlePriceLockClick = () => {\r\n console.log(\"lookFeature\", lookFeature);\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n\r\n};\r\n\r\nLookFeaturePriceLocked.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface),\r\n lockedText: PropTypes.string,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookOverlayOpened\r\n}\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookFeaturePriceLocked)\r\n)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\n\r\nimport {setSelectedFilters, showFilters} from \"../../../../actions/actionFunctions\";\r\nimport GroheFiltersSearchInputAsync from \"../../grohe/groheNavigation/groheFilters/groheFiltersSearchInputAsync\";\r\nimport LookFiltersList from \"./lookFiltersList\";\r\nimport LookFiltersReset from \"./lookFiltersReset\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS} from \"../../../../analytics\";\r\nimport {setSQFTActiveLevel3Button} from \"../../../../actions/sqftMenuFunctions\";\r\n\r\n\r\nconst LookFilters = (props) => {\r\n const { wrapperStyles, filtersOpened, intl, showFilters, lookActiveCategory, isMobile, lookActiveFeature,\r\n selectedFilters, groheFiltersSearchText } = props;\r\n const { isRelatedItemsFilters, shouldCloseLevel3Sidebar, setSQFTActiveLevel3Button } = props;\r\n\r\n const closeFilterClick = () => {\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeaturesFiltersClose);\r\n showFilters(!filtersOpened);\r\n if (shouldCloseLevel3Sidebar) {\r\n setSQFTActiveLevel3Button(null);\r\n }\r\n };\r\n\r\n if (!lookActiveCategory) {\r\n return null\r\n }\r\n\r\n //console.log(\"availableFilters\", availableFilters);\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n

    \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n \r\n {selectedFilters.length || groheFiltersSearchText ? : null}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nLookFilters.propTypes = {\r\n wrapperStyles: PropTypes.object,\r\n isRelatedItemsFilters: PropTypes.bool,\r\n shouldCloseLevel3Sidebar: PropTypes.bool\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveCategory, lookActiveFeature} = store.lookState;\r\n const {showFilters, selectedFilters} = store.filterState;\r\n const {isMobile} = store.serverState;\r\n const {groheFiltersSearchText} = store.groheState;\r\n\r\n return {\r\n filtersOpened: showFilters,\r\n selectedFilters,\r\n lookActiveCategory,\r\n lookActiveFeature,\r\n isMobile,\r\n groheFiltersSearchText,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n showFilters,\r\n setSelectedFilters,\r\n setSQFTActiveLevel3Button,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookFilters)\r\n);\r\n","import React from \"react\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {useLocation} from \"react-router-dom\";\r\n\r\nimport {IS_PRODUCT_JOURNEY} from \"../../config\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS} from \"../../analytics\";\r\nimport {ROUTES} from \"../../routes\";\r\nimport {isIframe} from \"../../misc/helpers\";\r\nimport {UserPopupContent} from \"../visComponents/constants\";\r\nimport {setUserPopupContent} from \"../../actions/userFunctions\";\r\nimport {setLookOverlayOpened} from \"../../actions/lookFunctions\";\r\nimport {LOOK_OVERLAYS} from \"./core/constants\";\r\n\r\n\r\nconst LookPolicyLinks = (props) => {\r\n\r\n const {position, isSimple, lookPageOpened, isMobile, fabricatorData, setUserPopupContent, setLookOverlayOpened} = props;\r\n const location = useLocation();\r\n\r\n const openLink = (linkKey) => {\r\n const baseUrl = fabricatorData.isAmericanStandard\r\n ? \"https://www.americanstandard-us.com\"\r\n : window.location && window.location.ancestorOrigins && window.location.ancestorOrigins[\"0\"]\r\n ? window.location.ancestorOrigins[\"0\"]\r\n : \"https://grohe.us\";\r\n\r\n Analytics.sendClickEvent(lookPageOpened === ROUTES.list\r\n ? LOOK_JOURNEY_ANALYTIC_EVENTS.lookListPolicyLinks + linkKey\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookCanvasPolicyLinks + linkKey\r\n );\r\n\r\n switch (linkKey) {\r\n case \"terms\": {\r\n const openUrl = fabricatorData.isAmericanStandard\r\n ? baseUrl + \"/terms-of-use#Terms%20of%20Use\"\r\n : baseUrl + \"/legal-info\";\r\n return window.open(openUrl, \"_blank\");\r\n }\r\n case \"privacy\": {\r\n const openUrl = fabricatorData.isAmericanStandard\r\n ? baseUrl + \"/privacy-policy#Privacy\"\r\n : baseUrl + \"/privacy-policy\";\r\n return window.open(openUrl, \"_blank\");\r\n }\r\n // case \"socialPolicy\":\r\n // return window.open(baseUrl + \"/social-policy\", \"_blank\");\r\n // case \"legalInfo\":\r\n // return window.open(baseUrl + (fabricatorData.isAmericanStandard ? \"/lead-generation-policy\" : \"/legal-info\"), \"_blank\");\r\n case \"privacyQC\": {\r\n setUserPopupContent(UserPopupContent.terms);\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture, \"termsOnly\");\r\n break;\r\n }\r\n default:\r\n return\r\n }\r\n }\r\n\r\n const isLixil = isIframe() && fabricatorData.isLixil;\r\n\r\n return (\r\n
    \r\n
      \r\n {isLixil ? [\"terms\", \"privacy\"].map(linkKey => {\r\n return (\r\n
    • \r\n openLink(linkKey)}>\r\n \r\n \r\n
    • \r\n )\r\n }) : (\r\n
    • \r\n openLink(\"privacyQC\")}>\r\n \r\n \r\n
    • \r\n )}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nLookPolicyLinks.propTypes = {\r\n position: PropTypes.string,\r\n isSimple: PropTypes.bool\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookPageOpened} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n const fabricatorData = store.fabricatorState;\r\n return {\r\n lookPageOpened,\r\n isMobile,\r\n fabricatorData\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setUserPopupContent,\r\n setLookOverlayOpened\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LookPolicyLinks)\r\n","import {connect} from \"react-redux\";\r\n\r\nimport {postMessageToParent} from \"../lookMessaging\";\r\nimport {GROHE_ON_OPEN_ACTION, GROHE_POST_MESSAGES_ACTIONS} from \"../iframeIntegration\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {getTempIdForPostMessage, LIXIL_USER_QUERY_PARAMS} from \"../../../api/look-api\";\r\nimport {getLookId} from \"../lookNavigation/lookFunctions2\";\r\nimport {loaderEnable} from \"../../ui/loaderView\";\r\n\r\nconst WithLoginPostMessage = (props) => {\r\n\r\n const {children, lookReturnAction, activePreset, bvPresets, exisingTempId} = props;\r\n\r\n const loginPostMessage = async (sessionEnded = false) => {\r\n loaderEnable();\r\n const layout = getCurrentLayout();\r\n await layout.updateLocalStorage();\r\n\r\n let tempId = await getTempIdForPostMessage(lookReturnAction || GROHE_ON_OPEN_ACTION.saveQuote, exisingTempId);\r\n let lookUrl = window.location.href;\r\n\r\n if (sessionEnded) {\r\n const searchParams = new URLSearchParams(\r\n (window.location.search).replace(/amp;/g, \"\")\r\n || (window.location.hash).replace(/(.*)\\?/g, \"\")\r\n || \"\"\r\n );\r\n LIXIL_USER_QUERY_PARAMS.forEach(param => searchParams.delete(param));\r\n\r\n let stringifiedParams = searchParams.toString();\r\n let baseHref = window.location.origin + window.location.pathname;\r\n if (baseHref[baseHref.length - 1] === \"/\") {\r\n baseHref.slice(0, -1);\r\n }\r\n if (stringifiedParams && stringifiedParams.length && stringifiedParams[0] !== \"?\") {\r\n stringifiedParams = \"?\" + stringifiedParams;\r\n }\r\n lookUrl = baseHref + stringifiedParams + window.location.hash;\r\n\r\n }\r\n\r\n if (!lookUrl.includes(\"look-\")) {\r\n const withHashUrl = new URL(lookUrl);\r\n const lookId = getLookId(activePreset, bvPresets);\r\n withHashUrl.hash = `#/look-${lookId}`;\r\n lookUrl = withHashUrl.href;\r\n }\r\n\r\n console.log(\"returnUrl: \", lookUrl);\r\n\r\n postMessageToParent({\r\n \"EventType\": GROHE_POST_MESSAGES_ACTIONS.signIn,\r\n \"returnUrl\": lookUrl,\r\n \"tempID\": tempId\r\n });\r\n }\r\n\r\n return children(loginPostMessage)\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookReturnAction} = store.lookState;\r\n const {exisingTempId} = store.groheState;\r\n const {activePreset, bvPresets} = store.bathroomVisualizerState;\r\n\r\n return {\r\n lookReturnAction,\r\n activePreset,\r\n bvPresets,\r\n exisingTempId,\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(WithLoginPostMessage)\r\n","import React, {useEffect} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nimport {setLookOpened,\r\n setSidebarModalOpened,\r\n setLookActiveFeature,\r\n setLookActiveCategory} from \"../../../../actions/lookFunctions\";\r\nimport LookSideBarLayoutButton from \"./lookSideBarLayoutButton\";\r\nimport LookSideBarSaveButton from \"./lookSideBarSaveButton\";\r\n// import LookSideBarHomeButton from \"./lookSideBarHomeButton\";\r\nimport LookSideBarEditButton from \"./lookSideBarEditButton\";\r\nimport LookSideBarMoreButton from \"./lookSideBarMoreButton\";\r\nimport LookSideBarFiltersButton from \"./lookSideBarFiltersButton\";\r\nimport {LOOK_INTRO_STEPS, LOOK_OVERLAYS} from \"../../core/constants\";\r\nimport {zoomCanvasOut} from \"../lookFunctions\";\r\nimport {setCanvasScale} from \"../../../../actions/actionFunctions\";\r\nimport LookSideBarPingPilotButton from \"./lookSideBarPingPilotButton\";\r\nimport LookSideBarRevertButton from \"./lookSideBarRevertButton\";\r\nimport WithUpdateLookCartItem from \"../../hocs/withUpdateLookCartItem\";\r\nimport {useShowRoomLayoutsButton} from \"../../../../misc/helperHooks\";\r\n\r\nconst LookSidebar = (props) => {\r\n\r\n const {popupCloseClick, imageCanvas, lookOverlayOpened, lookPageOpened, isMobile, introStep, lookOpened, setLookOpened,\r\n setCanvasScale, setLookActiveFeature, setLookActiveCategory, activePreset, visualizersLoadedLength} = props;\r\n\r\n const highLightForDemo = [LOOK_INTRO_STEPS.wallsAndFloor, LOOK_INTRO_STEPS.layoutsAndRooms, LOOK_INTRO_STEPS.saveAndMore];\r\n\r\n const stylePopups = [LOOK_OVERLAYS.stylePairing, LOOK_OVERLAYS.styleColor, LOOK_OVERLAYS.styleRemove, LOOK_OVERLAYS.styleRemoveBack];\r\n const stylePopupOnMobile = isMobile && stylePopups.some(popupType => popupType === lookOverlayOpened);\r\n\r\n useEffect(() => {\r\n // if (lookPageOpened || lookOverlayOpened) {\r\n if (lookPageOpened) {\r\n zoomCanvasOut(imageCanvas, setCanvasScale)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [lookPageOpened, lookOverlayOpened])\r\n\r\n const sidebarButtonClicked = () => { // closes opened menu and zooms out canvas\r\n if (lookOpened) {\r\n setLookOpened(null);\r\n setLookActiveCategory(\"\");\r\n setLookActiveFeature(null);\r\n }\r\n // revertFeatureBeforeChange(updateCanvasCount);\r\n zoomCanvasOut(imageCanvas, setCanvasScale);\r\n }\r\n\r\n const showRoomLayoutsButton = useShowRoomLayoutsButton(activePreset, isMobile, visualizersLoadedLength);\r\n\r\n return (\r\n \r\n )\r\n};\r\n\r\nLookSidebar.propTypes = {\r\n popupCloseClick: PropTypes.func,\r\n imageCanvas: PropTypes.object,\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookOpened, lookOverlayOpened, lookPageOpened, introStep} = store.lookState;\r\n const {activeTheme, isMobile, visualizersLoaded} = store.serverState;\r\n const {activePreset} = store.bathroomVisualizerState;\r\n\r\n return {\r\n lookOpened,\r\n activeTheme,\r\n lookOverlayOpened,\r\n isMobile,\r\n introStep,\r\n lookPageOpened,\r\n activePreset,\r\n visualizersLoadedLength: visualizersLoaded.length,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookOpened,\r\n setSidebarModalOpened,\r\n setCanvasScale,\r\n setLookActiveFeature,\r\n setLookActiveCategory,\r\n};\r\n\r\nexport default withRouter(\r\n injectIntl(connect(mapStateToProps, mapDispatchToProps)(LookSidebar))\r\n)\r\n","import React, {Fragment, useState} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport trim from \"lodash/trim\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport PhoneIcon from '@mui/icons-material/Phone';\r\nimport TextField from \"@mui/material/TextField\";\r\nimport CheckIcon from '@mui/icons-material/Check';\r\n\r\nimport {setUserPopupContent, setUserTwoFa} from \"../../../actions/userFunctions\";\r\nimport {LOOK_OVERLAYS} from \"../core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../config\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS, PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../analytics\";\r\nimport {UserPopupContent} from \"../../visComponents/constants\";\r\nimport {ROUTES} from \"../../../routes\";\r\nimport {\r\n generateTwoFaAuthenticationToken,\r\n sendAuthenticationRequest,\r\n validateTwoFaAuthentication\r\n} from \"../../../api/user-api\";\r\nimport MaterialSpinner from \"../../ui/materialSpinner\";\r\nimport {changeUserInfo, setUserPhoneNumberValidated} from \"../../../actions/actionFunctions\";\r\n\r\nexport const sendAuthRequest = async (twoFALoading, analyticsLabel, userInfo, userIsLoggedIn, type, setUserTwoFa) => {\r\n if (twoFALoading) {\r\n return false\r\n }\r\n setUserTwoFa({\r\n twoFALoading: true\r\n });\r\n Analytics.sendClickEvent(analyticsLabel);\r\n const twoFAToken = await generateTwoFaAuthenticationToken();\r\n if (twoFAToken && userIsLoggedIn) {\r\n setUserTwoFa({ // set token to redux store, so the input can check it\r\n twoFAToken\r\n });\r\n await sendAuthenticationRequest(twoFAToken, `+${userInfo.country.dialCode} ${userInfo.phoneNumber}`, type);\r\n }\r\n setUserTwoFa({\r\n twoFALoading: false\r\n });\r\n}\r\n\r\nconst TwoFaCodeInput = (props) => {\r\n\r\n const {history, intl, setUserPhoneNumberValidated, userInfo, isPhoneNumberValidated, lookOverlayOpened,\r\n setUserPopupContent, userTwoFa, setUserTwoFa, closePopup, location} = props;\r\n const {twoFAToken, twoFALoading} = userTwoFa;\r\n\r\n const [authCode, setAuthCode] = useState(\"\");\r\n const [inValidCode, setInValidCode] = useState(\"\");\r\n const [isBlurred, setIsBlurred] = useState(false);\r\n\r\n const updatePhoneButtonClick = () => {\r\n if (twoFALoading) {\r\n return false\r\n }\r\n if (lookOverlayOpened === LOOK_OVERLAYS.leadCapture) {\r\n const analyticsLabel = IS_PRODUCT_JOURNEY\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.leadCapturePopupTwoFAUpdatePhone\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookLeadCapturePopupTwoFAUpdatePhone;\r\n Analytics.sendClickEvent(analyticsLabel);\r\n setUserPopupContent(UserPopupContent.twoFA);\r\n return false\r\n }\r\n Analytics.sendClickEvent(PRODUCT_JOURNEY_ANALYTIC_EVENTS.cartTwoFAUpdatePhone);\r\n history.push(ROUTES.cartTwoFA);\r\n };\r\n\r\n const checkCode = async (newAuthCode) => {\r\n setUserTwoFa({\r\n twoFALoading: true\r\n });\r\n const validated = await validateTwoFaAuthentication(twoFAToken, newAuthCode, userInfo.phoneNumber);\r\n console.log(\"validated\", validated);\r\n setUserTwoFa({\r\n twoFALoading: false\r\n });\r\n Analytics.sendEvent(\"PhoneVerification\", validated ? \"Success\" : \"Failure\");\r\n if (validated) {\r\n setUserPhoneNumberValidated(true);\r\n const currentLocation = location.pathname;\r\n history.push(currentLocation + \"/phone-verified-thankyou\");\r\n setTimeout(() => {\r\n if (lookOverlayOpened === LOOK_OVERLAYS.leadCapture && closePopup) {\r\n history.push(currentLocation);\r\n closePopup();\r\n } else {\r\n history.push(ROUTES.cartTerms);\r\n }\r\n }, 2000);\r\n } else {\r\n setInValidCode(intl.formatMessage({id: \"look.inputs.errors.incorrectCode\"}));\r\n }\r\n }\r\n\r\n const onUserInputChange = (e) => {\r\n const newAuthCode = trim(e.target.value).replace(/[^0-9]/g, \"\");\r\n setAuthCode(newAuthCode);\r\n\r\n if (newAuthCode.length === 6) {\r\n if (inValidCode) {\r\n setInValidCode();\r\n }\r\n checkCode(newAuthCode);\r\n } else if (newAuthCode.length > 6) {\r\n setInValidCode(intl.formatMessage({id: \"look.inputs.errors.maxCode\"}));\r\n } else if (isBlurred && newAuthCode.length < 6) {\r\n setInValidCode(intl.formatMessage({id: \"look.inputs.errors.minCode\"}));\r\n } else if (inValidCode) {\r\n setInValidCode(\"\");\r\n }\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n setIsBlurred(true)}\r\n error={!!inValidCode}\r\n helperText={inValidCode}\r\n variant=\"outlined\" />\r\n
    \r\n
    \r\n
    \r\n {isPhoneNumberValidated ? (\r\n \r\n \r\n \r\n ) : twoFALoading ? : (\r\n \r\n \r\n \r\n )}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nTwoFaCodeInput.propTypes = {\r\n closePopup: PropTypes.func\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {userInfo, isPhoneNumberValidated, userIsLoggedIn, userTwoFa} = store.userState;\r\n const {lookOverlayOpened} = store.lookState;\r\n\r\n return {\r\n lookOverlayOpened,\r\n userInfo,\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n userTwoFa,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n changeUserInfo,\r\n setUserPhoneNumberValidated,\r\n setUserTwoFa,\r\n setUserPopupContent,\r\n};\r\n\r\nexport default injectIntl(\r\n withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(TwoFaCodeInput)\r\n )\r\n)\r\n","import React, {useMemo, useRef} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport $ from \"jquery\";\r\n\r\nimport CheckIcon from '@mui/icons-material/Check';\r\n\r\nimport FeatureName from \"../../../../visComponents/featureName\";\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport FeatureThumbnail from \"../../../../visComponents/featureThumbnail\";\r\nimport Config, {IS_LIXIL_SERVERS, IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport {getCommonCoords, getFeatureCoords, getLayerCenter, navFeatureCLick, zoomCanvasOut} from \"../../lookFunctions\";\r\nimport {addToCart, setCanvasScale, updateCanvasCount} from \"../../../../../actions/actionFunctions\";\r\nimport {getCurrentLayout} from \"../../../../appLayout\";\r\nimport {LOOK_WALLS_ONLY} from \"../../../core/constants\";\r\n\r\nimport {enableRelatedFeature, getPropertyToMatchActiveFeature} from \"../../lookFunctions2\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport LookFeaturePrice from \"../lookListFeature/lookFeaturePrice\";\r\nimport {setWizardSelectedValues} from \"../../../../../actions/wizardFunctions\";\r\nimport {wizardGroupInterface} from \"../../../../../interfaces/wizardItemInterface\";\r\nimport LookWizardSectionListFeatureQuantity from \"./lookWizardSectionListFeatureQuantity\";\r\nimport {\r\n setLookActiveFeature,\r\n setLookAllWallsTutorial,\r\n setLookCompatabilityAlert\r\n} from \"../../../../../actions/lookFunctions\";\r\nimport LookAllWallsRadioButton from \"../lookAllWallsRadioButton\";\r\nimport {\r\n checkForCompatabilityAlert,\r\n clickOnSimilarFeatures,\r\n getApplyToLogic,\r\n getShowMatchRadio,\r\n} from \"../../lookNavigationFunctions\";\r\nimport LookListActiveFeatureMobileButton from \"../lookListFeature/lookListActiveFeatureMobileButton\";\r\nimport {getAnalyticsEcommerceItem} from \"../../../../../analyticsEcommerceParams\";\r\nimport {getCorrectedCenter, shouldZoomPartId, shouldZoomToTheBottom} from \"../../../hocs/withZoomToFeature\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nconst LookWizardSectionListFeature = (props) => {\r\n\r\n const {wizardGroup, lookFeature, lookViewType, featureGroup, updateCanvasCount, style, setLookActiveFeature, navItems,\r\n isMobile, addToCart, qtActiveCategory, setCanvasScale, wizardSelectedValues, wizardActiveStep, setWizardSelectedValues,\r\n imageCanvas, maxClickCountReached, updateLookCartItem, setLookCompatabilityAlert, isLixil, groheActiveFeatureQuantity,\r\n lookAllWallsTutorial, setLookAllWallsTutorial, isPhoneNumberValidated, lookLockedTutorial, isEncore, canvasScale,\r\n isAllWallsTutorialItem} = props;\r\n\r\n const featureElement = useRef();\r\n\r\n const featureIsLocked = useMemo(() => {\r\n if (wizardGroup.skipLockDontApply) {\r\n return false\r\n }\r\n return getFeatureIsLocked(lookFeature)\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [lookFeature, wizardGroup, isPhoneNumberValidated]);\r\n\r\n const applyWizardItemClick = async (zoomFeature) => {\r\n setWizardSelectedValues({\r\n [wizardActiveStep]: {\r\n wizardGroup,\r\n selectedFeature: lookFeature,\r\n partId: lookFeature.partId,\r\n singleFeature: navItems.length === 1,\r\n quantity: groheActiveFeatureQuantity\r\n }\r\n });\r\n\r\n if (wizardGroup && wizardGroup.skipLockDontApply) {\r\n return false\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n if (zoomFeature) {\r\n\r\n const parent = featureGroup || zoomFeature.getParent();\r\n Analytics.sendEcommerceEvent(\"select_item\", {\r\n item_list_id: zoomFeature.partId,\r\n item_list_name: parent.dbName || parent.partName || \"\",\r\n items: [getAnalyticsEcommerceItem(zoomFeature, 1)],\r\n });\r\n\r\n const featureLabel = Analytics.getSkuForAnalytics(zoomFeature);\r\n const analyticsLabel = LOOK_JOURNEY_ANALYTIC_EVENTS.lookWizardListFeature + featureLabel;\r\n Analytics.sendClickEvent(analyticsLabel);\r\n\r\n const positionInList = navItems ? navItems.findIndex(navItem => navItem.part.dbFeature.id === lookFeature.dbFeature.id) : null;\r\n setLookActiveFeature(zoomFeature, positionInList); // to set feature screen options // allow for look journey too\r\n\r\n if (showMatchRadio) { // before nav feature click\r\n const applyToLogic = getApplyToLogic(lookFeature);\r\n if (applyToLogic && Array.isArray(applyToLogic.currentApplyToArray) && applyToLogic.currentApplyToArray.length) {\r\n await clickOnSimilarFeatures(zoomFeature, applyToLogic, true);\r\n }\r\n }\r\n navFeatureCLick(zoomFeature);\r\n enableRelatedFeature(zoomFeature, addToCart, qtActiveCategory);\r\n\r\n // const parent = zoomFeature.getParent();\r\n // if (parent.disabled) {\r\n // parent.disabled = false;\r\n // parent.disabledClick();\r\n // }\r\n if (wizardGroup.multipleAddToCart) {\r\n return\r\n }\r\n updateCanvasCount();\r\n if (imageCanvas && imageCanvas.current && imageCanvas.current.pinchZoom && !LOOK_WALLS_ONLY.includes(zoomFeature.partId)\r\n && shouldZoomPartId(zoomFeature.partId, isMobile)) {\r\n if (zoomFeature.matchesMetaForArrayOfConditions(parent.getArrayOfConditions())) {\r\n const commonCoords = getFeatureCoords(zoomFeature, true) || getCommonCoords(parent, zoomFeature, imageCanvas.current.canvas);\r\n const {center} = getCorrectedCenter(\r\n getLayerCenter(commonCoords, imageCanvas.current.canvas, isMobile),\r\n null, zoomFeature, imageCanvas, isMobile\r\n );\r\n if (center) {\r\n imageCanvas.current.pinchZoom.zoomToCenter(center, 0, false, layout.partIdExistInQtCategory(zoomFeature.partId));\r\n setCanvasScale(imageCanvas.current.pinchZoom.options.tapZoomFactor)\r\n }\r\n }\r\n } else if (canvasScale !== 1) {\r\n zoomCanvasOut(imageCanvas, setCanvasScale);\r\n if (shouldZoomToTheBottom(zoomFeature.partId)) {\r\n $(\"html, body\").animate({scrollTop: document.body.scrollHeight}, 500);\r\n }\r\n }\r\n if (!lookAllWallsTutorial.finished && showMatchRadio && !featureIsLocked && !lookFeature.notAvailableInVisualizer\r\n && featureElement && featureElement.current && !isEncore) {\r\n const applyToLogic = getApplyToLogic(lookFeature);\r\n if (applyToLogic) {\r\n setLookAllWallsTutorial({\r\n visible: true,\r\n // withGrid: navItems.length === 1,\r\n // positionInList,\r\n lookFeature,\r\n top: featureElement.current.getBoundingClientRect().top,\r\n left: featureElement.current.getBoundingClientRect().left,\r\n height: style.height,\r\n width: style.width,\r\n // firstLockedIndex,\r\n // firstUnlockedIndex,\r\n })\r\n }\r\n }\r\n }\r\n updateLookCartItem(zoomFeature);\r\n }\r\n\r\n // const [canRender, setCanRender] = useState(false);\r\n const listFeatureClick = (event) => {\r\n if (event.target.closest(\".look-icon--delete\") || event.target.closest(\".gm-ios-checkbox\") || lookLockedTutorial.visible || isAllWallsTutorialItem) {\r\n return\r\n }\r\n if (Config.isDevMode() && lookFeature) {\r\n console.log(\"lookFeature\", lookFeature, lookFeature.metaData);\r\n }\r\n let zoomFeature = lookFeature;\r\n if (maxClickCountReached()) { // fabricator settings click lead capture\r\n return false;\r\n }\r\n\r\n const compatabilityLogic = isLixil ? [] : checkForCompatabilityAlert(zoomFeature);\r\n if (compatabilityLogic.length) {\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookShowCompatabilityAlert);\r\n setLookCompatabilityAlert({\r\n visible: true,\r\n compatabilityLogic,\r\n clickedFeature: zoomFeature,\r\n applyFunction: applyWizardItemClick.bind(this, zoomFeature) // always apply features from this popup\r\n });\r\n return false\r\n }\r\n\r\n applyWizardItemClick(zoomFeature);\r\n }\r\n\r\n // const realFeatureGroup = (featureGroup || lookFeature.getParent())\r\n // const activeFeature = realFeatureGroup.activeNotInVisualizerFeature || realFeatureGroup.activeFeature;\r\n let isActive = false;\r\n if (wizardSelectedValues[wizardActiveStep] && wizardSelectedValues[wizardActiveStep].selectedFeature) {\r\n const propToMatch = getPropertyToMatchActiveFeature(wizardSelectedValues[wizardActiveStep].selectedFeature);\r\n isActive = lookFeature.dbFeature[propToMatch] === wizardSelectedValues[wizardActiveStep].selectedFeature.dbFeature[propToMatch]\r\n }\r\n const nameLength = IS_PRODUCT_JOURNEY ? 40 : 500;\r\n\r\n const showMatchRadio = getShowMatchRadio(lookFeature);\r\n const showAllWalls = isActive && showMatchRadio;\r\n\r\n return (\r\n
  • \r\n
    \r\n {isActive ? (IS_PRODUCT_JOURNEY && isMobile) ? (\r\n \r\n ) : (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n \r\n {showAllWalls ? : null}\r\n
    \r\n
    \r\n \r\n \r\n \r\n {(wizardGroup.multipleAddToCart && !IS_PRODUCT_JOURNEY) || !IS_LIXIL_SERVERS ? null : (\r\n

    \r\n \r\n

    \r\n )}\r\n {wizardGroup.hidePriceNoCart ? null : (\r\n
    \r\n \r\n
    \r\n )}\r\n {wizardGroup.multipleAddToCart && !lookFeature.dbFeature.hideQuantity && !IS_PRODUCT_JOURNEY ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n
    \r\n
  • \r\n )\r\n};\r\n\r\nLookWizardSectionListFeature.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface),\r\n featureGroup: PropTypes.object,\r\n viewType: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n style: PropTypes.object,\r\n imageCanvas: PropTypes.object.isRequired,\r\n maxClickCountReached: PropTypes.func,\r\n updateLookCartItem: PropTypes.func,\r\n navItems: PropTypes.array,\r\n isAllWallsTutorialItem: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookViewType, lookAllWallsTutorial, lookLockedTutorial} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n const {activePreset, bvPresets, canvasScale} = store.bathroomVisualizerState;\r\n const {qtActiveCategory} = store.qtState;\r\n const {wizardSelectedValues, wizardActiveStep} = store.wizardState;\r\n const {cabinetsApplyTo} = store.navigationState;\r\n const {isLixil, isEncore} = store.fabricatorState;\r\n const {groheActiveFeatureQuantity} = store.groheState;\r\n const {isPhoneNumberValidated} = store.userState;\r\n\r\n return {\r\n lookViewType,\r\n isMobile,\r\n activePreset,\r\n bvPresets,\r\n qtActiveCategory,\r\n canvasScale,\r\n wizardSelectedValues,\r\n wizardActiveStep,\r\n cabinetsApplyTo,\r\n isLixil,\r\n groheActiveFeatureQuantity,\r\n lookAllWallsTutorial,\r\n isPhoneNumberValidated,\r\n lookLockedTutorial,\r\n isEncore,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n updateCanvasCount,\r\n addToCart,\r\n setCanvasScale,\r\n setWizardSelectedValues,\r\n setLookActiveFeature,\r\n setLookCompatabilityAlert,\r\n setLookAllWallsTutorial,\r\n};\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(LookWizardSectionListFeature)\r\n)\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport {\r\n toggleSelectionWindow, toggleSelectionFeatureInfo, setCameFromPage,\r\n} from \"../../actions/actionFunctions\";\r\n\r\nimport Analytics from \"../../analytics\";\r\nimport {ROUTES} from \"../../routes\";\r\n\r\n\r\nconst ShoppingCartButton = (props) => {\r\n\r\n const {className, cartItems, setCameFromPage, selectionFeatureInfo, toggleSelectionFeatureInfo, toggleSelectionWindow,\r\n selectionOpened, selectionGroup, history, location} = props;\r\n\r\n const shCartButtonClick = () => {\r\n Analytics.sendClickEvent('go-to-shopping-cart');\r\n\r\n if (selectionOpened) {\r\n toggleSelectionWindow(false, selectionGroup);\r\n setCameFromPage(\"materials\");\r\n if (selectionFeatureInfo) {\r\n toggleSelectionFeatureInfo(null);\r\n }\r\n } else if (location && (location.pathname === ROUTES.home || location.pathname === ROUTES.quoteDesign)) {\r\n setCameFromPage(ROUTES.quoteDesign);\r\n }\r\n\r\n if (!window.location.href.includes('shoppingcart')) {\r\n history.push(ROUTES.shoppingcart);\r\n }\r\n\r\n };\r\n\r\n return (\r\n \r\n )\r\n\r\n}\r\n\r\nShoppingCartButton.propTypes = {\r\n text: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\r\n className: PropTypes.string\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {cartItems} = store.cartState;\r\n const {selectionFeatureInfo, selectionOpened, selectionGroup} = store.selectionState;\r\n\r\n return {\r\n cartItems,\r\n selectionFeatureInfo,\r\n selectionOpened,\r\n selectionGroup,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setCameFromPage,\r\n toggleSelectionFeatureInfo,\r\n toggleSelectionWindow,\r\n}\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(ShoppingCartButton)\r\n);\r\n","import React, {useEffect, useState} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport {setLanguage} from \"../../actions/serverFunctions\";\r\nimport Config, {AVAILABLE_LANGUAGES, POST_MESSAGES} from \"../../config\";\r\nimport {isIframe} from \"../../misc/helpers\";\r\n\r\nconst LanguageSwitcher = (props) => {\r\n\r\n const {language, setLanguage, intl, fabricatorSettings} = props;\r\n const [dropdownVisible, setDropdownVisible] = useState(false);\r\n\r\n useEffect(() => {\r\n return () => {\r\n window.removeEventListener('click', handleWrapperBlur)\r\n }\r\n }, []);\r\n\r\n if (!fabricatorSettings.showLanguageSelect || (!Config.isDevMode() && !document.kvConfig.isBackend)) {\r\n return null\r\n }\r\n\r\n const activeLanguage = language;\r\n\r\n const handleWrapperBlur = (e) => {\r\n const disallowClasses = [\".language\", \".language-list\"];\r\n if (!disallowClasses.some(cls => e.target.closest(cls))) {\r\n setDropdownVisible(false)\r\n }\r\n };\r\n\r\n const handleButtonClick = () => {\r\n const newVisible = !dropdownVisible;\r\n setDropdownVisible(newVisible);\r\n setTimeout(() => {\r\n newVisible\r\n ? window.addEventListener('click', handleWrapperBlur)\r\n : window.removeEventListener('click', handleWrapperBlur)\r\n }, 0)\r\n };\r\n\r\n const handleLocaleClick = (locale) => {\r\n setLanguage(locale);\r\n if (isIframe() && window.parent) {\r\n window.parent.postMessage({\r\n action: POST_MESSAGES.setIframeLanguage,\r\n payload: { language: locale }\r\n }, \"*\");\r\n }\r\n handleButtonClick();\r\n };\r\n\r\n const getLanguageName = (locale) => {\r\n switch (locale) {\r\n case \"en-US\":\r\n return intl.formatMessage({id: \"languageDropdown.english\"})\r\n case \"en-AU\":\r\n return intl.formatMessage({id: \"languageDropdown.australian\"})\r\n case \"fr-FR\":\r\n return intl.formatMessage({id: \"languageDropdown.french\"})\r\n case \"pl-PL\":\r\n return intl.formatMessage({id: \"languageDropdown.polish\"})\r\n case \"es-ES\":\r\n return intl.formatMessage({id: \"languageDropdown.spanish\"})\r\n default:\r\n return locale\r\n }\r\n };\r\n\r\n const styles = {\r\n height: dropdownVisible ? AVAILABLE_LANGUAGES.length * 50 : 0\r\n }\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n
    \r\n {AVAILABLE_LANGUAGES.map((locale, languageIndex) => (\r\n
  • handleLocaleClick(locale)}>\r\n {getLanguageName(locale)}\r\n
  • \r\n ))}\r\n
    \r\n
    \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n language: store.serverState.language,\r\n fabricatorSettings: store.fabricatorState.settings\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLanguage,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LanguageSwitcher)\r\n);\r\n","//********* TUTORIALS *********//\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const toggleShowAdvancedQuoting = (showAdvancedQuoting) => ({\r\n type: types.TOGGLE_SHOW_ADVANCED_QUOTING,\r\n payload: {showAdvancedQuoting}\r\n});\r\n\r\nexport const setAdvancedQuotingSearchItem = (advancedQuotingSearchItem) => ({\r\n type: types.SET_ADVANCED_QUOTING_SEARCH_ITEM,\r\n payload: {advancedQuotingSearchItem}\r\n});\r\n","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport { toggleInstOpened } from \"../../actions/actionFunctions\";\r\n\r\nimport InstList from \"./instList\";\r\nimport Analytics from './../../analytics';\r\n\r\nclass InstView extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n unmount: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n Analytics.sendClickEvent('installations-close');\r\n if (!nextProps.instOpened && this.props.instOpened) {\r\n this.setState({\r\n unmount: true\r\n }, () => {\r\n setTimeout(() => {\r\n this.setState({\r\n unmount: false\r\n })\r\n }, 500)\r\n })\r\n }\r\n\r\n }\r\n\r\n closeInstallationView = () => {\r\n this.props.toggleInstOpened(false);\r\n };\r\n\r\n render() {\r\n\r\n return (\r\n
    \r\n
    \r\n

    \r\n

    \r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n instOpened: store.instState.instOpened,\r\n instState: store.instState.instState\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n toggleInstOpened\r\n})(InstView);\r\n","import React from \"react\";\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {unlockPricing} from \"../../../actions/actionFunctions\";\r\nimport Analytics from \"../../../analytics\";\r\n\r\nclass FeatureInfoPriceLocked extends React.Component {\r\n\r\n static propTypes = {\r\n textOnly: PropTypes.bool\r\n }\r\n\r\n handlePriceLockClick = () => {\r\n Analytics.sendClickEvent('feature-info-price-unlock');\r\n this.props.unlockPricing();\r\n };\r\n\r\n render() {\r\n return this.props.textOnly ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = () => {\r\n return {\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n unlockPricing\r\n})(FeatureInfoPriceLocked);\r\n","import React, {Fragment} from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport FeatureDescription from \"../../visComponents/featureDescription\";\r\n\r\nconst FeatureInfoDescription = (props) => {\r\n\r\n const {fabricatorData, intl, selectionFeatureInfo, feature, brief} = props;\r\n const activeFeature = feature || selectionFeatureInfo;\r\n\r\n let pros = [];\r\n let subDescription = activeFeature.dbFeature.subDescription;\r\n if ((fabricatorData.isLowes || fabricatorData.isCaesarStone) && intl.messages) {\r\n if (intl.locale === \"fr-FR\" && intl.messages[\"transDoc.subDescription_FR.\" + activeFeature.dbFeature.sharedFeatureName]) {\r\n subDescription = intl.formatMessage({id: \"transDoc.subDescription_FR.\" + activeFeature.dbFeature.sharedFeatureName})\r\n } else if (intl.locale === \"pl-PL\" && intl.messages[\"transDoc.customSubDescription_PL.\" + activeFeature.dbFeature.sharedFeatureName]) {\r\n subDescription = intl.formatMessage({id: \"transDoc.customSubDescription_PL.\" + activeFeature.dbFeature.sharedFeatureName})\r\n }\r\n }\r\n if (!brief && subDescription && subDescription.length > 0) {\r\n pros = subDescription.split('\\n').filter(n => n);\r\n }\r\n\r\n return (\r\n \r\n \r\n {pros.length ? (\r\n
      \r\n {pros.map((pros, index) => {\r\n return
    • {pros}
    • \r\n })}\r\n
    \r\n ) : null}\r\n
    \r\n );\r\n};\r\n\r\nFeatureInfoDescription.propTypes = {\r\n feature: PropTypes.object,\r\n brief: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n selectionFeatureInfo: store.selectionState.selectionFeatureInfo,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(FeatureInfoDescription)\r\n)\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\n\r\nimport WithClickCount from \"../../look/hocs/withClickCount\";\r\nimport {wizardGroupInterface} from \"../../../interfaces/wizardItemInterface\";\r\nimport {setWizardSelectedValues} from \"../../../actions/wizardFunctions\";\r\nimport {getFeatureGroupFromWizardGroup} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport MaterialsWizardSqftButton from \"../../qkbPages/materialsWizard/materialsWizardSqftButton\";\r\nimport {getWizardFeatureAsync} from \"../../look/lookNavigation/lookMain/lookWizard/wizardFunctionsCommon\";\r\n\r\nconst SelectionGridWizardGroupItem = (props) => {\r\n\r\n const {wizardGroup, wizardActiveStep, setWizardSelectedValues, wizardSelectedValues, styles, isRowItem,\r\n handleFeatureClick} = props;\r\n\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n\r\n // const {customImageUrl, uploadedImageUrl} = wizardGroup;\r\n\r\n const isActive = wizardSelectedValues[wizardActiveStep] && wizardSelectedValues[wizardActiveStep].wizardGroup\r\n && wizardSelectedValues[wizardActiveStep].wizardGroup.id === wizardGroup.id;\r\n\r\n const wizardItemClick = async (maxClickCountReached) => {\r\n // Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookWizardParent + Analytics.getStringForAnalytics(wizardGroup.groupName));\r\n\r\n if (maxClickCountReached()) { // fabricator settings click lead capture\r\n return false;\r\n }\r\n\r\n // const layout = getCurrentLayout();\r\n // const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n // if (featureGroup && featureGroup.activeFeature) {\r\n // if (featureGroup.partId === \"vanity_sink\" && wizardGroup.productCartTitle\r\n // && wizardGroup.productCartTitle.includes(\"edestal\") && featureGroup.getParent().vanity_type) {\r\n // const navItems = layout.designNavigationItems({part: featureGroup});\r\n // const nextPedestal = navItems.find(navItem => Array.isArray(navItem.part.metaData[\"MountType\"]) && navItem.part.metaData[\"MountType\"].includes(\"ST\"));\r\n // if (nextPedestal) {\r\n // navFeatureCLick(nextPedestal.part);\r\n // } else {\r\n // navFeatureCLick(featureGroup.activeFeature);\r\n // }\r\n // }\r\n // navFeatureCLick(featureGroup.activeFeature);\r\n // }\r\n\r\n setWizardSelectedValues({\r\n [wizardActiveStep]: {\r\n wizardGroup,\r\n partId: featureGroup ? featureGroup.partId : \"\"\r\n }\r\n });\r\n console.log(\"wizardGroupwizardGroup\", wizardGroup);\r\n if (wizardGroup.clickOnLogic && wizardGroup.clickOnLogic.enabled && wizardGroup.clickOnLogic.feature\r\n && wizardGroup.clickOnLogic.groupName && handleFeatureClick) {\r\n const featureFound = await getWizardFeatureAsync(wizardGroup.clickOnLogic.feature, wizardGroup.clickOnLogic.groupName);\r\n console.log(\"clickOnLogic featureFound\", featureFound);\r\n if (featureFound) {\r\n handleFeatureClick({part: featureFound}, null, wizardGroup.clickOnLogic);\r\n }\r\n }\r\n }\r\n\r\n return (\r\n \r\n {(maxClickCountReached) => isRowItem ? (\r\n
    wizardItemClick(maxClickCountReached)}>\r\n
    \r\n {wizardGroup.customImageUrl ? (\r\n
    \r\n \"\"/\r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n

    {wizardGroup.productCartTitle || wizardGroup.title || wizardGroup.groupName}

    \r\n
    {wizardGroup.productCartDescription}
    \r\n {window.location.href.includes(\"porcelanosa\") && wizardGroup.id === \"29\" ? ( // && wizardGroup.title === \"Xtone Underlayment\" // removed, they can rename\r\n
    \r\n \r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n ) : (\r\n
    wizardItemClick(maxClickCountReached)}>\r\n
    \r\n {wizardGroup.customImageUrl\r\n ? \"\"/\r\n : null}\r\n
    \r\n
    \r\n {/*{showPrice ? (*/}\r\n {/* */}\r\n {/* {getPriceWithIncluded(price, currentFeature.part, fabricatorData, intl.messages)}\r\n {/**/}\r\n {/*) : null}*/}\r\n \r\n {wizardGroup.productCartTitle || wizardGroup.title || wizardGroup.groupName}\r\n \r\n
    \r\n
    \r\n )}\r\n
    \r\n )\r\n}\r\n\r\nSelectionGridWizardGroupItem.propTypes = {\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n isRowItem: PropTypes.bool,\r\n handleFeatureClick: PropTypes.func,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {wizardActiveItem, wizardActiveStep, wizardSelectedValues} = store.wizardState;\r\n return {\r\n wizardActiveItem,\r\n wizardActiveStep,\r\n wizardSelectedValues,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setWizardSelectedValues\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SelectionGridWizardGroupItem);\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {s3FeatureImagePath, THUMBNAIL_SIZES} from \"../../misc/utils\";\r\nimport {baseNewImagesPath} from \"../assets\";\r\n\r\nconst NotInVisualizerView = (props) => {\r\n\r\n const getThumbnail = () => {\r\n\r\n if (!props.activeFeature) {\r\n return null\r\n }\r\n\r\n let src = \"\";\r\n let styles = {};\r\n if (props.activeFeature.dbFeature.thumbnailUrl) {\r\n src = s3FeatureImagePath(\r\n props.activeFeature.dbFeature.thumbnailUrl,\r\n props.isMobile ? THUMBNAIL_SIZES.small : THUMBNAIL_SIZES.medium\r\n );\r\n } else if (props.currentFeature && props.activeFeature.customThumbnail) {\r\n src = props.activeFeature.customThumbnail;\r\n } else {\r\n src = `${baseNewImagesPath}images/image-not-found.png`;\r\n }\r\n // if (props.isMobile) {\r\n // const height = (props.listItemHeight - 32) / 2;\r\n // styles.height = height;\r\n // styles.width = height;\r\n // }\r\n // console.log(\"listItemHeight\", );\r\n return (\r\n
    \r\n \"not-in-visualizer-thumbnail\"\r\n
    \r\n )\r\n }\r\n\r\n if (props.allVisualizerNotAvailable) {\r\n return (\r\n
    \r\n {getThumbnail()}\r\n \r\n \r\n \r\n

    \r\n \r\n

    \r\n
    \r\n )\r\n }\r\n\r\n const notAvailableAtAll = !props.activeFeature.dbFeature.s3Bindings || !props.activeFeature.dbFeature.s3Bindings.length;\r\n\r\n return !notAvailableAtAll ? (\r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n ) : (\r\n
    \r\n {getThumbnail()}\r\n \r\n \r\n \r\n

    \r\n \r\n

    \r\n
    \r\n )\r\n};\r\n\r\nNotInVisualizerView.displayName = \"NotInVisualizerView\";\r\nNotInVisualizerView.propTypes = {\r\n goToBV: PropTypes.func,\r\n activeFeature: PropTypes.object,\r\n allVisualizerNotAvailable: PropTypes.bool,\r\n};\r\nexport default NotInVisualizerView\r\n","import {renderConfirmPopup} from \"../../../api/api-popups\";\r\nimport {ConfirmPopupTypes} from \"../../visComponents/constants\";\r\nimport store from \"../../../store\";\r\nimport {removeFromCart} from \"../../../actions/actionFunctions\";\r\n\r\n/**\r\n * Common func to call question popup\r\n * @param cartItem {cartItemInterface}\r\n * @param navItem {navItem}\r\n * @param quoteIndex {Number}\r\n * @param fromDelete {boolean}\r\n * @return {boolean}\r\n */\r\nexport const checkForDeletePopup = (cartItem, navItem, quoteIndex, fromDelete = false) => {\r\n const {fabricatorState, cartState} = store.getState();\r\n if (fabricatorState.settings.useCategorySwitching) {\r\n if (cartItem.partId === \"room\" && cartItem.cartFeature && (fromDelete || (navItem.part.dbFeature.id !== cartItem.cartFeature.dbFeature.id))\r\n && cartState.cartItems.some(cItem => cItem.partId !== \"room\" && cItem.currentQuote === quoteIndex)) {\r\n renderConfirmPopup(ConfirmPopupTypes.DeleteCartItemsPopup, {\r\n cartItem, // old\r\n navItem, // new\r\n fromDelete\r\n });\r\n return true\r\n }\r\n }\r\n return false\r\n}\r\n/**\r\n * Common func to remove features\r\n * @param quoteIndex {Number}\r\n * @return {boolean}\r\n */\r\nexport const removeCartItemsWithQuoteIndex = (quoteIndex) => {\r\n const {cartState} = store.getState();\r\n const cartItemsToRemove = cartState.cartItems.filter(cItem => cItem.currentQuote === quoteIndex);\r\n if (cartItemsToRemove.length) {\r\n cartItemsToRemove.forEach(cItem => {\r\n store.dispatch(removeFromCart(cItem));\r\n })\r\n }\r\n}\r\n\r\n/**\r\n * Cheks if we selected something from the previous wizard step\r\n * @param quoteIndex {number}\r\n * @param wizardItemId {number}\r\n * @param wizardStep {number}\r\n * @param applyFunction {function} // will be called on yes click\r\n * @return {boolean}\r\n */\r\nexport const checkForWizardPreviousChanges = (quoteIndex, wizardItemId, wizardStep, applyFunction) => {\r\n const {cartState} = store.getState();\r\n const cartItemsToRemove = cartState.cartItems.filter(cItem => {\r\n return cItem.currentQuote === quoteIndex && cItem.fromWizardId === wizardItemId && cItem.fromWizardStep > wizardStep\r\n });\r\n if (cartItemsToRemove.length) {\r\n console.log(\"cartItemsToRemove\", cartItemsToRemove);\r\n const finalFunction = () => {\r\n cartItemsToRemove.forEach(cItem => {\r\n store.dispatch(removeFromCart(cItem));\r\n })\r\n applyFunction()\r\n }\r\n renderConfirmPopup(ConfirmPopupTypes.ChangeWizardToPreviousStepSelection, {\r\n applyFunction: finalFunction.bind(this)\r\n });\r\n return true\r\n }\r\n return false\r\n}\r\n\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport ErrorIcon from \"@mui/icons-material/Error\";\r\n\r\n\r\nconst GroheFeatureNotInVisualizer = (props) => {\r\n const {intl, fabricatorData} = props;\r\n\r\n return (\r\n
    \r\n {fabricatorData.isAmericanStandard ? null : (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n
    \r\n )\r\n};\r\nconst mapStateToProps = (store) => {\r\n const fabricatorData = store.fabricatorState;\r\n return {\r\n fabricatorData\r\n }\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps)(GroheFeatureNotInVisualizer)\r\n)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\n\r\nimport GroheMobile3dButton from \"./groheMobile3dButton\";\r\nimport FeatureName from \"../../../../visComponents/featureName\";\r\nimport FeatureThumbnail from \"../../../../visComponents/featureThumbnail\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport LookLockedButton from \"../../../lookNavigation/lookMain/lookLockedButton\";\r\nimport LookFeatureNotInStock from \"../../../lookNavigation/lookMain/lookFeature/lookFeatureNotInStock\";\r\nimport LookFeatureSku from \"../../../lookNavigation/lookMain/lookFeature/lookFeatureSku\";\r\n\r\nconst GroheMobileFeatureTop = (props) => {\r\n\r\n const {lookActiveFeature} = props;\r\n\r\n if (!lookActiveFeature) {\r\n return null\r\n }\r\n\r\n const featureIsLocked = getFeatureIsLocked(lookActiveFeature);\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n

    \r\n
    \r\n

    \r\n \r\n

    \r\n {!IS_PRODUCT_JOURNEY ? : null}\r\n
    \r\n
    \r\n {featureIsLocked ? : }\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeature} = store.lookState;\r\n const {isPhoneNumberValidated} = store.userState; // to update component when user is logged in\r\n\r\n return {\r\n lookActiveFeature,\r\n isPhoneNumberValidated,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(GroheMobileFeatureTop)\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport {isInStock} from \"../../lookFunctions2\";\r\n\r\nconst LookFeatureNotInStock = (props) => {\r\n\r\n const {lookFeature} = props;\r\n\r\n if (isInStock(lookFeature)) {\r\n return null\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n )\r\n};\r\n\r\nLookFeatureNotInStock.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface),\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeatureStockCount} = store.lookState;\r\n return {\r\n lookActiveFeatureStockCount,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(LookFeatureNotInStock)\r\n","import React, {useMemo} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport orderBy from \"lodash/orderBy\";\r\n\r\nimport MenuList from '@mui/material/MenuList';\r\n\r\nimport {getLookList} from \"../../../lookNavigation/lookFunctions\";\r\nimport {getFeatureGroupName} from \"../../../../../misc/helpers\";\r\nimport {setLookActiveCategory, setLookPageOpened} from \"../../../../../actions/lookFunctions\";\r\n// import GroheCategoriesMenuItemWizard from \"./groheCategoriesMenuItemWizard\";\r\nimport {setGroheWizardName} from \"../../../../../actions/groheQuotingToolFunctions\";\r\nimport GroheCategory from \"./groheCategory\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport LookMainWizardList from \"../../../lookNavigation/lookMain/lookMainWizardList\";\r\nimport {ROUTES} from \"../../../../../routes\";\r\nimport MaterialSpinner from \"../../../../ui/materialSpinner\";\r\n\r\nconst GroheCategoriesMenu = (props) => {\r\n\r\n const {intl, fabricatorData, isAccessory, showWizardItems, location, visualizersLoadedLength,\r\n qtCategoriesLoadedLength} = props;\r\n\r\n const isShopPage = location.pathname.includes(ROUTES.shop);\r\n\r\n let featureGroups = useMemo(() => {\r\n return getLookList(false, true, false, isShopPage, true)\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [visualizersLoadedLength, qtCategoriesLoadedLength, isShopPage]);\r\n const featureGroupNameSort = (lmFeature) => getFeatureGroupName(lmFeature.featureGroup, intl, fabricatorData)\r\n featureGroups = orderBy(featureGroups,[featureGroupNameSort], ['asc'])\r\n\r\n // console.log(\"featureGroups\", featureGroups);\r\n if (!featureGroups) {\r\n return null\r\n }\r\n\r\n const ACCESSORIES = [\"paper_holder\", \"robe_hook\", \"towel_bar\", \"towel_ring\"];\r\n const acc_groups = featureGroups.filter(parentObject => ACCESSORIES.includes(parentObject.partId));\r\n if (acc_groups.length && IS_PRODUCT_JOURNEY) {\r\n featureGroups = isAccessory ? acc_groups : featureGroups.filter(parentObject => !ACCESSORIES.includes(parentObject.partId));\r\n if (!isAccessory) {\r\n featureGroups.push({partId: \"submenu_accessories\"});\r\n }\r\n }\r\n\r\n return (\r\n
    \r\n {!qtCategoriesLoadedLength ? : (\r\n \r\n {featureGroups.map(lmFeature => {\r\n return \r\n })}\r\n {showWizardItems ? : null}\r\n {/**/}\r\n \r\n )}\r\n
    \r\n )\r\n};\r\n\r\nGroheCategoriesMenu.propTypes = {\r\n isAccessory: PropTypes.bool,\r\n showWizardItems: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {visualizersLoaded} = store.serverState;\r\n const {qtCategoriesLoaded} = store.qtState;\r\n\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n visualizersLoadedLength: visualizersLoaded.length,\r\n qtCategoriesLoadedLength: qtCategoriesLoaded.length,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookActiveCategory,\r\n setLookPageOpened,\r\n setGroheWizardName,\r\n};\r\n\r\nexport default withRouter(\r\n injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(GroheCategoriesMenu)\r\n )\r\n)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {Grid} from \"react-virtualized\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport LookListFeature from \"../../../lookNavigation/lookMain/lookListFeature/lookListFeature\";\r\nimport {GROHE_CONFIG} from \"../../groheConfig\";\r\nimport LookWizardSectionListFeature from \"../../../lookNavigation/lookMain/lookWizard/lookWizardSectionListFeature\";\r\nimport {wizardGroupInterface} from \"../../../../../interfaces/wizardItemInterface\";\r\nimport LookVirtualizedListLoadingItem\r\n from \"../../../lookNavigation/lookMain/lookCategory/lookVirtualizedListLoadingItem\";\r\n\r\nconst GroheVirtualizedList = (props) => {\r\n\r\n const {lookViewType, windowHeight, renderList, isMobile, onScrollHandler, isWizard, wizardGroup, wizardActiveItem,\r\n imageCanvas, maxClickCountReached, updateLookCartItem, loadingCount} = props;\r\n\r\n const width = isMobile ? GROHE_CONFIG.sidebarWidth.mobile : GROHE_CONFIG.sidebarWidth.desktop;\r\n let height = isMobile ? windowHeight - (wizardActiveItem ? 98 : 48) : windowHeight - 120;\r\n if (loadingCount) {\r\n height = isMobile ? height + 58 : height + 37;\r\n }\r\n\r\n const columnWidth = lookViewType === 2 ? width / 3 : width;\r\n const columnCount = lookViewType === 2 ? 3 : 1;\r\n const rowCount = Math.ceil((loadingCount || renderList.length) / columnCount);\r\n\r\n const listSettings = {\r\n width,\r\n columnCount,\r\n columnWidth,\r\n rowCount,\r\n height,\r\n rowHeight: lookViewType === 1\r\n ? 120\r\n : 124,\r\n overscanRowCount: 3,\r\n showScrollingPlaceholder: false,\r\n useDynamicRowHeight: false,\r\n }\r\n\r\n const cellRenderer = ({columnIndex, key, rowIndex, style}) => {\r\n if (loadingCount) {\r\n return \r\n }\r\n const navItem = renderList[(listSettings.columnCount * rowIndex) + columnIndex];\r\n if (!navItem) {\r\n return null\r\n }\r\n if (isWizard) {\r\n return \r\n }\r\n return \r\n }\r\n\r\n const noRowsRenderer = () =>
    No Features found
    ;\r\n\r\n return (\r\n \r\n )\r\n};\r\n\r\nGroheVirtualizedList.propTypes = {\r\n imageCanvas: PropTypes.object,\r\n maxClickCountReached: PropTypes.func,\r\n updateLookCartItem: PropTypes.func,\r\n renderList: PropTypes.array,\r\n contentHeight: PropTypes.number,\r\n isMobile: PropTypes.bool,\r\n onScrollHandler: PropTypes.func,\r\n isWizard: PropTypes.bool,\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n loadingCount: PropTypes.number,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookViewType} = store.lookState;\r\n const {windowHeight, isMobile} = store.serverState;\r\n const {wizardActiveItem} = store.wizardState;\r\n return {\r\n lookViewType,\r\n windowHeight,\r\n isMobile,\r\n wizardActiveItem,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(GroheVirtualizedList)\r\n","import React from \"react\";\r\n\r\nimport WithOverlay from \"../../popups/withOverlayHoc\";\r\nimport MaterialSpinner from \"../../ui/materialSpinner\";\r\nimport {COLORS} from \"../../../colorThemes\";\r\n\r\n\r\nconst NavigationLoader = (props) => {\r\n const {className = \"\"} = props;\r\n\r\n return (\r\n \r\n {() => (\r\n \r\n )}\r\n \r\n )\r\n};\r\n\r\nexport default NavigationLoader\r\n","import React, {Fragment} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\n\r\nimport {LOOK_FEATURE_CONTENT} from \"../../../core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport LookFeatureInfoContent from \"./lookFeatureInfoContent\";\r\nimport LookFeatureInfo3d from \"./lookFeatureInfo3d\";\r\nimport {setLookMoreInfoOpened} from \"../../../../../actions/lookFunctions\";\r\nimport LookFeatureInfoButtons from \"./lookFeatureInfoButtons\";\r\nimport LookFeatureInfoAug from \"./lookFeatureInfoAug\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS, PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\n\r\nconst LookFeatureInfo = (props) => {\r\n\r\n const {intl, lookActiveFeature, moreInfoOpened, moreInfoContent, setLookMoreInfoOpened, isMobile} = props;\r\n\r\n const backButtonClick = () => {\r\n Analytics.sendClickEvent(IS_PRODUCT_JOURNEY\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureInfoContentHeaderClose\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeatureInfoContentHeaderClose\r\n );\r\n setLookMoreInfoOpened(\"\", LOOK_FEATURE_CONTENT.threeD);\r\n }\r\n\r\n const mainContent = () => {\r\n // if (!moreInfoOpened && !isMobile) { // always render on mobile\r\n if (!lookActiveFeature) { // always render on mobile\r\n return null\r\n }\r\n switch (moreInfoContent) {\r\n case LOOK_FEATURE_CONTENT.info:\r\n default:\r\n return \r\n case LOOK_FEATURE_CONTENT.threeD:\r\n case LOOK_FEATURE_CONTENT.aug:\r\n if (!moreInfoOpened) {\r\n return null\r\n }\r\n return (\r\n
    \r\n {isMobile && !IS_PRODUCT_JOURNEY ? null : (\r\n \r\n \r\n \r\n )}\r\n {moreInfoContent === LOOK_FEATURE_CONTENT.threeD ? : }\r\n {isMobile ? null : (\r\n \r\n

    \r\n \r\n

    \r\n {moreInfoContent === LOOK_FEATURE_CONTENT.threeD ? (\r\n

    \r\n \r\n

    \r\n ) : null}\r\n \r\n
    \r\n )}\r\n {isMobile && (moreInfoContent === LOOK_FEATURE_CONTENT.threeD) ? (\r\n

    \r\n \r\n

    \r\n ) : null}\r\n
    \r\n )\r\n }\r\n }\r\n\r\n const classNames = !IS_PRODUCT_JOURNEY && isMobile\r\n ? \"lm-content lm-content--filters\" + (!moreInfoOpened ? \" lm-content--slide-up\" : \"\")\r\n : \"lm-content__info\" + (moreInfoOpened ? \" lm-content__info--active lm-content__info--\" + moreInfoContent : \"\")\r\n\r\n return (\r\n
    \r\n {mainContent()}\r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeature, moreInfoOpened, moreInfoContent} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n return {\r\n lookActiveFeature,\r\n moreInfoOpened,\r\n moreInfoContent,\r\n isMobile,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookMoreInfoOpened\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookFeatureInfo)\r\n)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {\r\n getCartItemObject,\r\n getPriceWithCurrency,\r\n getQuotePriceWithTaxes,\r\n getTotalPrice,\r\n toFixedPrice\r\n} from \"../../../../../misc/helpers\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\n\r\nconst LookWizardContentFinalPrice = (props) => {\r\n\r\n const {wizardSelectedValues, fabricatorSettings, qtActiveCategory} = props;\r\n\r\n if (!fabricatorSettings.showPricing) {\r\n return null\r\n }\r\n\r\n const cartItemsToCount = (Object.keys(wizardSelectedValues)).reduce((total, step) => {\r\n const selectedValue = wizardSelectedValues[step];\r\n if (!selectedValue || !selectedValue.selectedFeature) {\r\n return total\r\n }\r\n const parentPositions = selectedValue.selectedFeature.getParent().layerPositions\r\n const quantity = parentPositions\r\n ? Object.keys(parentPositions).filter(pos => parentPositions[pos]).length\r\n : 1;\r\n return [...total, getCartItemObject(selectedValue.selectedFeature, quantity, qtActiveCategory)]\r\n }, []);\r\n console.log(\"cartItemsToCount\", cartItemsToCount);\r\n\r\n const totalPrice = getTotalPrice(null, false, cartItemsToCount, true);\r\n const grandTotal = getQuotePriceWithTaxes(totalPrice);\r\n\r\n return (\r\n
    \r\n {IS_PRODUCT_JOURNEY ? (\r\n \r\n :\r\n \r\n ) : null}\r\n {getPriceWithCurrency(fabricatorSettings, toFixedPrice(grandTotal), null, true)}\r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {wizardSelectedValues} = store.wizardState;\r\n const {settings} = store.fabricatorState;\r\n const {qtActiveCategory} = store.qtState;\r\n\r\n return {\r\n wizardSelectedValues,\r\n fabricatorSettings: settings,\r\n qtActiveCategory,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(LookWizardContentFinalPrice)\r\n","export const loadScript = (url, callback, id = \"\") => {\r\n let script = document.createElement(\"script\");\r\n script.type = \"text/javascript\";\r\n\r\n if (script.readyState) {\r\n script.onreadystatechange = function() {\r\n if (script.readyState === \"loaded\" || script.readyState === \"complete\") {\r\n script.onreadystatechange = null;\r\n if (callback) {\r\n callback()\r\n }\r\n }\r\n };\r\n } else if (callback) {\r\n script.onload = callback;\r\n }\r\n\r\n script.src = url;\r\n script.id = id;\r\n document.getElementsByTagName(\"head\")[0].appendChild(script);\r\n};\r\n","import React, {Fragment} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {getPriceWithCurrency, getQuotePriceWithTaxes, getTotalPrice} from \"../../../../misc/helpers\";\r\nimport GroheCartDeliveryColumn from \"./groheCartDeliveryColumn\";\r\n\r\nconst GroheCartColumns = (props) => {\r\n\r\n const {activeQuoteIndex, discountSections, fabricatorSettings, isPhoneNumberValidated, language, intl, isShort,\r\n showUnlockCalculations, showTotalItems} = props;\r\n\r\n const {isBackend, jobId, canSaveQuote} = document.kvConfig;\r\n const totalPrice = getTotalPrice();\r\n let grandTotal = getQuotePriceWithTaxes(totalPrice, discountSections);\r\n const pricingIsLocked = (fabricatorSettings.leadCaptureOnQuote || fabricatorSettings.leadCaptureShoppingCart)\r\n && !(isBackend && jobId && canSaveQuote) && !isPhoneNumberValidated;\r\n\r\n let allTaxes = totalPrice.priceTaxes.length\r\n ? totalPrice.priceTaxes\r\n : [{materialTax: totalPrice.materialTaxes}];\r\n let instTaxes = totalPrice.installationTaxes;\r\n // console.log(\"allTaxes\", allTaxes);\r\n // console.log(\"totalPrice\", totalPrice);\r\n // console.log(\"grandTotal\", grandTotal);\r\n\r\n // const showTaxes = (pricingIsLocked || allTaxes.some(tax => tax.materialTax > 0)) && (!showUnlockCalculations || showTotalItems.includes(\"tax\"));\r\n const showTaxes = !isShort;\r\n const showInstTaxes = instTaxes && (!showUnlockCalculations || showTotalItems.includes(\"tax\"));\r\n const showTotal = !isShort && (!showUnlockCalculations || showTotalItems.includes(\"total\"));\r\n\r\n let subTotalPrice = 0;\r\n // if (quotes.length > 1 && !showAllQuotesCartItemsList) {\r\n const quoteTotalPrice = getTotalPrice(activeQuoteIndex);\r\n // subTotalPrice = getQuotePriceWithTaxes(quoteTotalPrice, discountSections);\r\n subTotalPrice = quoteTotalPrice.materialPrice;\r\n allTaxes = quoteTotalPrice.priceTaxes.length\r\n ? quoteTotalPrice.priceTaxes\r\n : [{materialTax: quoteTotalPrice.materialTaxes}];\r\n instTaxes = quoteTotalPrice.installationTaxes;\r\n // }\r\n subTotalPrice = subTotalPrice.toFixed(2); // always round to 23.65, even if it is 23.00\r\n grandTotal = grandTotal.toFixed(2); // always round to 23.65, even if it is 23.00\r\n\r\n const getTaxColumn = (pricingIsLocked, taxObject, taxObjectIndex) => {\r\n // const showIncluded = !pricingIsLocked && (+taxObject.materialTax > 0);\r\n const taxTotal = taxObject.materialTax.toFixed(2); // always round to 23.65, even if it is 23.00\r\n // if (taxTotal <= 0) {\r\n // return null\r\n // }\r\n const taxName = taxObject.nameIntl && taxObject.nameIntl[language]\r\n ? taxObject.nameIntl[language]\r\n : taxObject.state || intl.formatMessage({id: \"grohe.cart.footer.tax\"})\r\n return (\r\n
    \r\n {taxName}\r\n
    \r\n {pricingIsLocked ? : getPriceWithCurrency(fabricatorSettings, taxTotal)}\r\n
    \r\n
    \r\n )\r\n }\r\n\r\n const LockedPrice = () => (\r\n {}}>\r\n \r\n \r\n )\r\n\r\n return (\r\n \r\n
    \r\n \r\n \r\n \r\n
    \r\n {pricingIsLocked ? : getPriceWithCurrency(fabricatorSettings, subTotalPrice)}\r\n
    \r\n
    \r\n {showTaxes ? allTaxes.map((taxObject, taxObjectIndex) => {\r\n return getTaxColumn(pricingIsLocked, taxObject, taxObjectIndex)\r\n }) : null}\r\n {showInstTaxes ? (\r\n
    \r\n \r\n {intl.formatMessage({id: \"grohe.cart.footer.instTax\"}) +\r\n (!pricingIsLocked && (+instTaxes > 0)\r\n ? intl.formatMessage({id: \"grohe.cart.footer.taxIncluded\"})\r\n : \"\")}\r\n \r\n
    \r\n {pricingIsLocked ? : getPriceWithCurrency(fabricatorSettings, instTaxes.toFixed(2))}\r\n
    \r\n
    \r\n ) : null}\r\n {/*{(quotes.length > 1) && !showAllQuotesCartItemsList && showTotal ? (*/}\r\n {/*
    */}\r\n {/* */}\r\n {/* */}\r\n {/* */}\r\n {/*
    */}\r\n {/* {pricingIsLocked ? : getPriceWithCurrency(fabricatorSettings, subTotalPrice)}*/}\r\n {/*
    */}\r\n {/*
    */}\r\n {/*) : null}*/}\r\n {isShort ? null : }\r\n {showTotal ? (\r\n
    \r\n \r\n \r\n \r\n
    \r\n {pricingIsLocked ? : getPriceWithCurrency(fabricatorSettings, grandTotal, null, true)}\r\n
    \r\n
    \r\n ) : null}\r\n
    \r\n )\r\n};\r\n\r\nGroheCartColumns.propTypes = {\r\n isShort: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {settings} = store.fabricatorState;\r\n const {discountSections} = store.priceWorksheetState;\r\n const {cartItems, showAllQuotesCartItemsList, sureTax} = store.cartState;\r\n const {isPhoneNumberValidated} = store.userState;\r\n const {language} = store.serverState;\r\n const {quotes, activeQuoteIndex} = store.quotesState;\r\n const {showUnlockCalculations, showTotalItems} = store.unlockCalculationsState;\r\n\r\n return {\r\n fabricatorSettings: settings,\r\n discountSections,\r\n cartItems,\r\n showAllQuotesCartItemsList,\r\n isPhoneNumberValidated,\r\n language,\r\n quotes,\r\n activeQuoteIndex,\r\n showUnlockCalculations,\r\n showTotalItems,\r\n sureTax, // to update when response received\r\n // deliveryList, // to update when delivery changed\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default injectIntl(\r\n withRouter(connect(mapStateToProps, mapDispatchToProps)(GroheCartColumns))\r\n)\r\n","import {useCallback, useEffect} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {\r\n setWizardActiveItem,\r\n setWizardActiveStep,\r\n setWizardSelectedValues\r\n} from \"../../../../../actions/wizardFunctions\";\r\nimport {getActiveWizardItem} from \"./lookWizardFunctions\";\r\nimport {setLookCompatabilityAlert} from \"../../../../../actions/lookFunctions\";\r\n\r\nconst LookWizard = (props) => {\r\n\r\n const {wizardList, location, setWizardActiveItem, wizardActiveItem, setWizardActiveStep, setWizardSelectedValues,\r\n children, lookCompatabilityAlert, setLookCompatabilityAlert, wizardActiveStep} = props;\r\n\r\n const closeCompatability = useCallback(() => {\r\n setLookCompatabilityAlert({\r\n visible: false,\r\n compatabilityLogic: [],\r\n clickedFeature: null,\r\n applyFunction: null\r\n })\r\n }, [setLookCompatabilityAlert])\r\n\r\n useEffect(() => {\r\n console.log(\"wizardActiveItem\", wizardActiveItem);\r\n if (!wizardActiveItem) {\r\n const wizardItem = getActiveWizardItem(wizardList, location);\r\n console.log(\"wizardItem\", wizardItem);\r\n if (wizardItem) {\r\n setWizardActiveItem(wizardItem)\r\n }\r\n }\r\n return () => {\r\n setWizardActiveItem(null);\r\n setWizardActiveStep(-1);\r\n setWizardSelectedValues({}, true);\r\n if (lookCompatabilityAlert && lookCompatabilityAlert.visible) {\r\n closeCompatability()\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [wizardList])\r\n\r\n useEffect(() => {\r\n if (lookCompatabilityAlert && lookCompatabilityAlert.visible) {\r\n closeCompatability()\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [wizardActiveStep, wizardActiveItem]);\r\n\r\n if (!wizardActiveItem) {\r\n return null\r\n }\r\n\r\n return children\r\n};\r\n\r\nLookWizard.propTypes = {\r\n children: PropTypes.oneOfType([PropTypes.func, PropTypes.node]).isRequired,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {wizardList, wizardActiveItem, wizardActiveStep} = store.wizardState;\r\n const {lookCompatabilityAlert} = store.lookState;\r\n\r\n return {\r\n wizardList,\r\n wizardActiveItem,\r\n wizardActiveStep,\r\n lookCompatabilityAlert,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setWizardActiveItem,\r\n setWizardActiveStep,\r\n setWizardSelectedValues,\r\n setLookCompatabilityAlert,\r\n};\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(LookWizard)\r\n)\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {getCurrentGroups} from \"./lookWizardFunctions\";\r\n\r\n\r\nconst LookWizardContentTitle = (props) => {\r\n\r\n const {wizardActiveItem, wizardActiveStep, wizardSelectedValues} = props;\r\n\r\n const currentGroups = getCurrentGroups(wizardActiveItem, wizardActiveStep, wizardSelectedValues);\r\n\r\n if (wizardActiveStep === -1) {\r\n // return \r\n return wizardActiveItem.name\r\n }\r\n if (wizardActiveStep > -1 && currentGroups.length === 1) {\r\n return currentGroups[0].title\r\n }\r\n if (wizardActiveStep > -1 && !currentGroups.length) {\r\n return \r\n }\r\n if (wizardActiveStep === 0 && currentGroups.length > 1 && wizardActiveItem.startTitle) {\r\n return wizardActiveItem.startTitle\r\n }\r\n return null\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {wizardActiveItem, wizardActiveStep, wizardSelectedValues} = store.wizardState;\r\n return {\r\n wizardActiveItem,\r\n wizardActiveStep,\r\n wizardSelectedValues,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(LookWizardContentTitle)\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {getCurrentGroups} from \"./lookWizardFunctions\";\r\n\r\n\r\nconst LookWizardContentDescription = (props) => {\r\n\r\n const {wizardActiveItem, wizardActiveStep, wizardSelectedValues} = props;\r\n\r\n const currentGroups = getCurrentGroups(wizardActiveItem, wizardActiveStep, wizardSelectedValues);\r\n\r\n if (wizardActiveStep === -1) {\r\n return wizardActiveItem.description\r\n }\r\n if (wizardActiveStep > -1 && currentGroups.length === 1) {\r\n return currentGroups[0].description\r\n }\r\n if (wizardActiveStep > -1 && !currentGroups.length) {\r\n return \r\n }\r\n if (wizardActiveStep === 0 && currentGroups.length > 1 && wizardActiveItem.startDescription) {\r\n return wizardActiveItem.startDescription\r\n }\r\n return null\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {wizardActiveItem, wizardActiveStep, wizardSelectedValues} = store.wizardState;\r\n return {\r\n wizardActiveItem,\r\n wizardActiveStep,\r\n wizardSelectedValues,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(LookWizardContentDescription)\r\n","import React, {Fragment} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport LookWizardSection from \"./lookWizard/lookWizardSection\";\r\nimport {getActiveWizardItem, getAvailableSteps, getCurrentGroups} from \"./lookWizard/lookWizardFunctions\";\r\nimport {ROUTES} from \"../../../../routes\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../config\";\r\n\r\nimport GroheFeaturesHeader from \"../../grohe/groheNavigation/groheFeatures/groheFeaturesHeader\";\r\n\r\nconst LookMainWizardSections = (props) => {\r\n\r\n const {wizardList, location, wizardActiveStep, wizardSelectedValues, isMobile, contentHeight, wizardActiveItem,\r\n shopPageOpened, lookCompatabilityAlert, filtersOpened} = props;\r\n\r\n const showWizard = (shopPageOpened && wizardActiveItem) || (location && location.pathname && location.pathname.includes(ROUTES.wizard));\r\n // console.log(\"showWizard\", showWizard);\r\n if (!showWizard) {\r\n return null\r\n }\r\n\r\n const wizardItem = wizardActiveItem || getActiveWizardItem(wizardList, location);\r\n if (!wizardItem) {\r\n return null\r\n }\r\n\r\n const wizardSteps = getAvailableSteps(wizardItem, wizardSelectedValues);\r\n // console.log(\"wizardSteps\", wizardSteps);\r\n\r\n const currentGroups = getCurrentGroups(wizardItem, wizardActiveStep, wizardSelectedValues);\r\n const isCompletedStep = wizardActiveStep > -1 && !currentGroups.length;\r\n\r\n const wizardSections = (\r\n \r\n {wizardSteps.map((wizardStep, wizardStepIndex) => {\r\n const currentGroups = getCurrentGroups(wizardItem, wizardStepIndex, wizardSelectedValues);\r\n\r\n if (IS_PRODUCT_JOURNEY) {\r\n let classNames = \"grohe-features grohe-section--wizard\"\r\n + ((wizardActiveStep === wizardStepIndex) && !isCompletedStep ? \" grohe-features--opened\" : \"\")\r\n + (shopPageOpened ? \" grohe-section--shop\" : \"\");\r\n if (isMobile) {\r\n if (wizardActiveStep !== wizardStepIndex) {\r\n classNames += wizardActiveStep > wizardStepIndex && !isCompletedStep\r\n ? \" lm-section--slide-left\"\r\n : \" lm-section--slide-right\"\r\n }\r\n }\r\n return (\r\n
    \r\n \r\n
    1) ? \"\" : \" lm-content--no-scroll lm-content--product\")}>\r\n {currentGroups.length ? : null}\r\n
    \r\n
    \r\n )\r\n }\r\n\r\n if (isMobile) {\r\n let classNames = \"lm-content lm-content--features lm-content--wizard\";\r\n if (wizardActiveStep !== wizardStepIndex) {\r\n classNames += wizardActiveStep > wizardStepIndex && !isCompletedStep\r\n ? \" lm-section--slide-left lm-section--hidden\"\r\n : \" lm-section--slide-right lm-section--hidden\"\r\n }\r\n return (\r\n
    \r\n {currentGroups.length ? : null}\r\n
    \r\n )\r\n }\r\n let classNames = \"lm-section lm-section--feature lw-section lm-section--slide-right\";\r\n if (wizardActiveStep !== wizardStepIndex) {\r\n classNames += wizardActiveStep > wizardStepIndex && !isCompletedStep\r\n ? \" lm-section--slide-right-more lm-section--hidden\"\r\n : \" lm-section--slide-none lm-section--hidden\"\r\n }\r\n return (\r\n
    \r\n
    1 ? \"\" : \" lm-content--no-scroll\")\r\n + (filtersOpened || lookCompatabilityAlert.visible ? \" lm-content--slide-down\" : \"\")}>\r\n {currentGroups.length ? : null}\r\n
    \r\n
    \r\n )\r\n })}\r\n
    \r\n )\r\n\r\n if (IS_PRODUCT_JOURNEY && isMobile) {\r\n return (\r\n
    \r\n {wizardSections}\r\n
    \r\n )\r\n }\r\n\r\n return wizardSections\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {wizardList, wizardActiveStep, wizardSelectedValues, wizardActiveItem} = store.wizardState;\r\n const {isMobile} = store.serverState;\r\n const {shopPageOpened} = store.shopState;\r\n const {lookCompatabilityAlert} = store.lookState;\r\n const {filtersOpened} = store.groheState;\r\n\r\n return {\r\n wizardList,\r\n wizardActiveStep,\r\n wizardSelectedValues,\r\n isMobile,\r\n wizardActiveItem,\r\n shopPageOpened,\r\n lookCompatabilityAlert,\r\n filtersOpened,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n\r\n};\r\n\r\nexport default withRouter(\r\n injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookMainWizardSections)\r\n )\r\n)\r\n","import React, {useEffect, useRef} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport ErrorIcon from \"@mui/icons-material/Error\";\r\n\r\nimport {setLookCompatabilityAlert} from \"../../../../../actions/lookFunctions\";\r\nimport LookCompatabilitySectionButtons from \"./lookCompatabilitySectionButtons\";\r\nimport LookCompatabilitySectionContent from \"./lookCompatabilitySectionContent\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport $ from \"jquery\";\r\n\r\nconst LookCompatabilitySection = (props) => {\r\n const {lookCompatabilityAlert, wrapperStyles, intl, isMobile} = props;\r\n\r\n const compatabilityContentElem = useRef();\r\n\r\n //console.log(\"availableFilters\", availableFilters);\r\n\r\n useEffect(() => {\r\n if (lookCompatabilityAlert.visible) {\r\n setTimeout(() => {\r\n if (compatabilityContentElem && compatabilityContentElem.current) {\r\n const buttons = $(compatabilityContentElem.current).find(\".look-popup__buttons\");\r\n if (buttons && buttons[0] && buttons[0].offsetTop) {\r\n $(compatabilityContentElem.current).animate({scrollTop: buttons[0].offsetTop}, 1300);\r\n }\r\n }\r\n }, 700);\r\n }\r\n }, [lookCompatabilityAlert])\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n

    \r\n \r\n

    \r\n
    \r\n

    \r\n \r\n

    \r\n \r\n \r\n
    \r\n
    \r\n )\r\n};\r\n\r\nLookCompatabilitySection.propTypes = {\r\n wrapperStyles: PropTypes.object\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookCompatabilityAlert, lookActiveFeature} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n return {\r\n lookActiveFeature,\r\n lookCompatabilityAlert,\r\n isMobile,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookCompatabilityAlert\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookCompatabilitySection)\r\n);\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\n\r\nimport {setLookOpened} from \"../../../../actions/lookFunctions\";\r\nimport {ROUTES} from \"../../../../routes\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS} from \"../../../../analytics\";\r\nimport {zoomCanvasOut} from \"../lookFunctions\";\r\nimport {setCanvasScale} from \"../../../../actions/actionFunctions\";\r\nimport LookCanvasContext from \"../../lookCanvasContext\";\r\n\r\nconst LookMainHeaderCloseButton = (props) => {\r\n\r\n const {intl, history, setLookOpened, setCanvasScale} = props;\r\n\r\n const closeButtonClick = (imageCanvas) => {\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookMenuHeaderClose);\r\n setLookOpened(false);\r\n zoomCanvasOut(imageCanvas, setCanvasScale);\r\n history.push(ROUTES.home);\r\n };\r\n\r\n return (\r\n \r\n {(imageCanvas) => (\r\n closeButtonClick(imageCanvas)}>\r\n \r\n \r\n )}\r\n \r\n )\r\n};\r\n\r\nconst mapStateToProps = () => {\r\n return {\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookOpened,\r\n setCanvasScale,\r\n};\r\n\r\nexport default withRouter(\r\n injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookMainHeaderCloseButton)\r\n )\r\n)\r\n","const ua = navigator.userAgent || navigator.vendor || window.opera;\r\nexport const isInstagram = ua.indexOf('Instagram') > -1\r\nexport const isFacebook = (ua.indexOf(\"FBAN\") > -1) || (ua.indexOf(\"FBAV\") > -1);\r\n\r\n// if (document.documentElement.classList) {\r\n// if (isInstagram) {\r\n// window.document.body.classList.add('bv--instagram');\r\n// }\r\n// }\r\n","import React, {useEffect, useRef, useState} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport ClickAwayListener from '@mui/material/ClickAwayListener';\r\nimport Grow from '@mui/material/Grow';\r\nimport Popper from '@mui/material/Popper';\r\n\r\nimport {setLookContextMenu} from \"../../../actions/lookFunctions\";\r\n\r\nimport ContextMenuQKBButtons from \"./contextMenuQKBButtons\";\r\n\r\n// export const checkForContextMenuCommon = (partId, layerPosition) => {\r\nexport const checkForContextMenuCommon = () => {\r\n const returnObject = {\r\n allButtons: [], // {partId: \"\", translateId: \"\", isWizard: true, wizardId: sting|number, hasSubMenu: false}\r\n showButtons: [] // {partId: \"\", translateId: \"\", isWizard: true, wizardId: sting|number, hasSubMenu: false}\r\n }\r\n return returnObject\r\n}\r\n\r\nconst getContextMenuPosition = (contextMenu, position, isMobile) => {\r\n const {partId, layerPosition} = contextMenu;\r\n const {showButtons} = checkForContextMenuCommon(partId, layerPosition);\r\n\r\n let left = isMobile ? '50%' : position.x - 50;\r\n let top = isMobile ? '50%' : position.y - 50;\r\n let right = 'auto';\r\n\r\n const maxAllowedWidth = showButtons.length > 2 ? 300 : 210;\r\n\r\n let maxAllowedHeight = 110;\r\n if (showButtons.length > 6) {\r\n maxAllowedHeight = 330;\r\n } else if (showButtons.length >= 3) {\r\n maxAllowedHeight = 220;\r\n }\r\n if (!isMobile && (left > window.innerWidth - maxAllowedWidth)) {\r\n left = 'auto';\r\n right = 0\r\n }\r\n if (!isMobile && (top > window.innerHeight - maxAllowedHeight)) {\r\n let negativeMargin = 50;\r\n if (showButtons.length > 6) {\r\n negativeMargin = 250;\r\n } else if (showButtons.length >= 3) {\r\n negativeMargin = 150;\r\n }\r\n top = top - negativeMargin;\r\n }\r\n\r\n return {left, top, right}\r\n}\r\n\r\nconst ContextMenuQKB = (props) => {\r\n\r\n const {contextMenu, setLookContextMenu, isMobile, handleContextMenuClick, renderGreenLayerByZindex} = props;\r\n const {opened, position} = contextMenu;\r\n const [styles, setStyles] = useState({left: 0, top: 0, right: 0});\r\n const [buttons, setButtons] = useState([]);\r\n const anchorRef = useRef(null);\r\n\r\n const handleClose = (event) => {\r\n if (document.hoveredLayer && event.target.closest(\".canvas-el\") && ALL_CONTEXT_MENU.includes(document.hoveredLayer.partId)) {\r\n return\r\n }\r\n setLookContextMenu({\r\n opened: false,\r\n layerPosition: \"\",\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (!contextMenu.opened) {\r\n return null\r\n }\r\n setStyles(getContextMenuPosition(contextMenu, position, isMobile));\r\n const {showButtons} = checkForContextMenuCommon(contextMenu.partId, contextMenu.layerPosition);\r\n setButtons(showButtons);\r\n }, [contextMenu, position, isMobile]);\r\n\r\n // console.log(\"styles\", styles);\r\n\r\n let contextStyles = styles;\r\n if (buttons.length <= 4) {\r\n contextStyles = Object.assign({}, styles, {maxWidth: \"210px\"});\r\n }\r\n\r\n return (\r\n
    \r\n \r\n {({ TransitionProps }) => (\r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n )}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nContextMenuQKB.propTypes = {\r\n handleContextMenuClick: PropTypes.func,\r\n renderGreenLayerByZindex: PropTypes.func,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {contextMenu} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n return {\r\n contextMenu,\r\n isMobile,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookContextMenu\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ContextMenuQKB)\r\n","import Analytics from \"../../../analytics\";\r\nimport Config from \"../../../config\";\r\nimport {loaderDisable, loaderEnable} from \"../../ui/loaderView\";\r\nimport {saveQuote} from \"../../../api/server-api\";\r\nimport {renderErrorPopup} from \"../../../api/api-popups\";\r\nimport {showQuoteSavedNotification} from \"../../ui/successNotification\";\r\n\r\nexport const handleBackToDashboard = () => {\r\n if (window.salesForceLoaded || typeof(sr) != 'undefined') {\r\n Analytics.sendClickEvent('see-job-in-salesforce');\r\n let payload = {QCJobId: document.kvConfig.jobId};\r\n console.log('attempting to view job in SalesForce', payload);\r\n let eventPayload = {name: 'quoteCountertops.viewJobInSF', payload }\r\n try {\r\n window.Sfdc.canvas.client.publish(sr.client, eventPayload);\r\n } catch(e) {\r\n console.log('unable to send via salesforce viewpage');\r\n }\r\n if (typeof(sfdcMessage) !== 'undefined') {\r\n sfdcMessage.postMessage(eventPayload);\r\n }\r\n } else {\r\n Analytics.sendClickEvent('back-to-dashboard');\r\n Config.parent && Config.parent.exitEditQuote && Config.parent.exitEditQuote();\r\n loaderDisable(); // in case it is not an iframe\r\n showQuoteSavedNotification();\r\n }\r\n};\r\n\r\nexport const handleSaveAndBackToDashboard = () => {\r\n\r\n if (!document.kvConfig.jobId) {\r\n renderErrorPopup(\"The Quote can not be saved, no JobId is assigned yet\");\r\n return false\r\n }\r\n\r\n loaderEnable(\"loader.savingQuoteText\");\r\n saveQuote({submit: true})\r\n .then(handleBackToDashboard)\r\n .catch(handleBackToDashboard)\r\n};\r\n","export const VIEW = {\r\n login: 0,\r\n register: 1,\r\n reset: 2,\r\n terms: 3\r\n};","import React from 'react';\r\nimport JsonApi from \"../../api/jsonApi\";\r\nimport PropTypes from 'prop-types';\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport trim from \"lodash/trim\";\r\nimport {connect} from \"react-redux\";\r\n\r\nimport 'react-intl-tel-input/dist/main.css';\r\nimport {browserIsSafari} from \"../../misc/helpers\";\r\nimport OnScreenKeyboard from './OnScreenKeyboard/keyboard';\r\nimport Analytics from './../../analytics';\r\nimport misc from '../../misc/misc';\r\nimport {loaderDisable, loaderEnable} from \"../ui/loaderView\";\r\nimport store from '../../store';\r\nimport LookUserPhoneInput from \"../look/user/lookUserPhoneInput\";\r\nimport {changeUserInfo} from \"../../actions/actionFunctions\";\r\n//import autoPrefixer from 'gulp-autoprefixer';\r\n\r\nconst steps = {\r\n VerifyPhoneNumber: 0,\r\n TermsAndConditions: 1,\r\n UpdatePhone: 2,\r\n Updated: 3,\r\n Verified: 4\r\n};\r\n\r\n//const phoneUtil = PhoneNumberUtil.getInstance();\r\n\r\nexport const getPreferredCountries = () => {\r\n const {fabricatorState} = store.getState();\r\n if (fabricatorState.isCaesarStone && (fabricatorState.settings.currency === \"AUD\" || fabricatorState.settings.currency === \"AUS\")) {\r\n return [\"au\", \"us\", \"gb\", \"ca\"]\r\n }\r\n if (fabricatorState.isLixil) {\r\n return [\"us\", \"gb\", \"ca\"]\r\n }\r\n switch(fabricatorState.settings.currency) {\r\n case \"CAD\":\r\n return fabricatorState.isLowes ? [\"ca\"] : [\"ca\", \"us\", \"gb\", \"pa\", \"es\"];\r\n default:\r\n return [\"us\", \"gb\", \"ca\", \"pa\", \"es\"];\r\n }\r\n}\r\n\r\nclass TwoFactorAuthClass extends React.Component {\r\n static propTypes = {\r\n phoneNumber: PropTypes.string.isRequired,\r\n // (cancel = true, updatePhone = null)\r\n onClose: PropTypes.func.isRequired\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n step: steps.VerifyPhoneNumber,\r\n authCode: '',\r\n validating: false,\r\n valid: true,\r\n phoneUpdateError: false,\r\n oldPhoneNumber: \"\",\r\n oldCountry: {},\r\n };\r\n\r\n this.handleResendSMS();\r\n }\r\n\r\n setStep = (step) => {\r\n this.setState({step});\r\n };\r\n\r\n componentDidMount() {\r\n this.setOldValues();\r\n }\r\n\r\n setOldValues() {\r\n const {phoneNumber, country} = this.props;\r\n this.setState({oldPhoneNumber: phoneNumber, oldCountry: country})\r\n }\r\n\r\n render() {\r\n return (\r\n
    \r\n {this.getDialog()}\r\n
    \r\n );\r\n }\r\n\r\n getDialogContent = () => {\r\n let content = {\r\n title: \"Invalid Step\",\r\n content: null,\r\n footer: null\r\n };\r\n switch (this.state.step) {\r\n case steps.VerifyPhoneNumber:\r\n content = this.getVerifyPhoneNumberContent();\r\n break;\r\n case steps.TermsAndConditions:\r\n content = this.getTermsAndConditionsContent();\r\n break;\r\n case steps.UpdatePhone:\r\n content = this.getUpdatePhoneContent();\r\n break;\r\n }\r\n return content;\r\n };\r\n\r\n sendAuthenticationRequest = (token, to, type, message) => {\r\n if (message) {\r\n loaderEnable(null, message);\r\n setTimeout(() => {\r\n loaderDisable()\r\n }, 3000);\r\n }\r\n return JsonApi.sendAuthenticationRequest(token, to, type);\r\n };\r\n\r\n handleResendSMS = () => {\r\n Analytics.sendClickEvent(\"resend-sms\");\r\n JsonApi.generateAuthenticationToken()\r\n .then((t) => {\r\n var token = t.data ? t.data : t;\r\n this.setState({token});\r\n this.sendAuthenticationRequest(token, `+${this.props.country.dialCode + this.props.phoneNumber}`, 1, \"loader.authenticationSmsSendTitle\");\r\n }).catch(() => this.props.onClose(false, this.props.phoneNumber));\r\n };\r\n\r\n handleResendVoice = () => {\r\n Analytics.sendClickEvent(\"resend-voice\");\r\n JsonApi.generateAuthenticationToken()\r\n .then((t) => {\r\n var token = t.data ? t.data : t;\r\n this.setState({token});\r\n this.sendAuthenticationRequest(token, `+${this.props.country.dialCode + this.props.phoneNumber}`, 2, 'loader.authenticationCallBackTitle');\r\n }).catch(() => this.props.onClose(false, this.props.phoneNumber));\r\n };\r\n\r\n handleCheckVerificationCode = (e) => {\r\n const authCode = trim(e.target.value).replace(/[^0-9]/g, \"\");\r\n this.setState({authCode});\r\n if (authCode.length === 6) {\r\n this.setState({validating: true}, () => {\r\n JsonApi.validateAuthenticationRequest(this.state.token, authCode, this.props.phoneNumber)\r\n .then((success) => {\r\n if (success.data) {\r\n this.handlePostPhoneNumberUpdated();\r\n Analytics.sendEvent(\"PhoneVerification\", \"Success\");\r\n this.setStep(steps.Verified);\r\n window.setTimeout(() => this.props.onClose(false, this.props.phoneNumber), 3750);\r\n } else\r\n Analytics.sendEvent(\"PhoneVerification\", \"Failure\");\r\n this.setState({valid: false, validating: false}); //, validating: false\r\n });\r\n });\r\n }\r\n };\r\n\r\n handlePostPhoneNumberUpdated = () => {\r\n Analytics.sendClickEvent(\"phone-number-update\");\r\n };\r\n\r\n handleUpdatePhoneNumber = () => {\r\n const {country} = this.props;\r\n var iso2 = country.iso2 || \"US\";\r\n if (misc.isPhoneNumber(this.props.phoneNumber, iso2.toUpperCase())) {\r\n this.handlePostPhoneNumberUpdated();\r\n this.setStep(steps.VerifyPhoneNumber);\r\n this.setState({authCode: \"\"}); // erase previous\r\n this.setOldValues();\r\n this.handleResendSMS();\r\n } else {\r\n this.setState({phoneUpdateError: true});\r\n }\r\n };\r\n\r\n revertUserValues = () => {\r\n this.props.changeUserInfo({\r\n phoneNumber: this.state.oldPhoneNumber,\r\n country: this.state.oldCountry,\r\n }); // set previous values on back click\r\n }\r\n\r\n handleBackClick = () => {\r\n this.revertUserValues(); // set previous values on back click\r\n this.setStep(steps.VerifyPhoneNumber);\r\n }\r\n\r\n getVerifyPhoneNumberContent = () => {\r\n const {intl} = this.props;\r\n const {fabricatorState} = store.getState();\r\n return {\r\n title: intl.formatMessage({id: \"twoFA.title\"}),\r\n content: (\r\n
    \r\n \r\n this.handleCheckVerificationCode({target: {value: v}})} type=\"numeric\"/>\r\n {!this.state.valid\r\n ?
    \r\n : null}\r\n {this.state.validating\r\n ? \"Validating...\"\r\n\r\n : null}\r\n
    \r\n \r\n {`+${this.props.country.dialCode} ${this.props.phoneNumber}`}\r\n {/*Please enter it or choose to receive a call with your verification code to unlock.*/}\r\n
    \r\n
    this.setStep(steps.UpdatePhone)}>\r\n \r\n
    \r\n
    \r\n
    this.handleResendSMS()}>
    \r\n
    this.handleResendVoice()}>
    \r\n
    \r\n {fabricatorState.isLowes ? null : (\r\n
    \r\n \r\n
    \r\n )}\r\n
    \r\n ),\r\n footer: (\r\n
    \r\n
    this.setStep(steps.TermsAndConditions)}>
    \r\n
    \r\n )\r\n }\r\n };\r\n\r\n getTermsAndConditionsContent = () => {\r\n const {intl} = this.props;\r\n return {\r\n title: intl.formatMessage({id: \"twoFA.termsAndConditions\"}),\r\n content: (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n ),\r\n footer: (\r\n
    \r\n
    \r\n
    this.setStep(steps.VerifyPhoneNumber)}>\r\n \r\n
    \r\n
    \r\n
    \r\n )\r\n };\r\n };\r\n\r\n getUpdatePhoneContent = () => {\r\n const {intl} = this.props;\r\n return {\r\n title: intl.formatMessage({id: \"twoFA.updatePhoneNumber\"}),\r\n content: (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n {this.state.phoneUpdateError ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n
    \r\n ),\r\n footer: (\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n )\r\n };\r\n };\r\n\r\n closeButtonClick = () => {\r\n this.revertUserValues();\r\n this.props.onClose(true);\r\n }\r\n\r\n getDialog = () => {\r\n if (this.state.step < steps.Updated) {\r\n let content = this.getDialogContent();\r\n const popupStyles = browserIsSafari() && this.props.windowWidth < 991 ? {height: this.props.windowHeight - 35} : {};\r\n return (\r\n
    \r\n
    \r\n
    {content.title}
    \r\n
    \r\n X\r\n
    \r\n
    \r\n {content.content}\r\n {content.footer}\r\n
    \r\n );\r\n } else {\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {phoneNumber, country} = store.userState.userInfo;\r\n return {\r\n phoneNumber,\r\n country,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n changeUserInfo,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(TwoFactorAuthClass)\r\n)\r\n","import React, {Component, Fragment} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport {\r\n toggleConfirmPopup,\r\n setJobId\r\n} from \"../../actions/actionFunctions\";\r\nimport {\r\n showContractSigning,\r\n setAfterContractSignCallback\r\n} from \"../../actions/contractsActions\";\r\nimport {updateSQFT} from \"../../actions/sqftFunctions\";\r\nimport {ConfirmPopupTypes, QuoteRequestType, SqftUpdateTypes, UserAction} from \"../visComponents/constants\";\r\nimport {setUserLoginResponse, userLogin, userRegister} from \"../../api/user-api\";\r\nimport Analytics from './../../analytics';\r\nimport WithCloseSQFtCalc from \"../sqft/hocs/withCloseSQFtCalc\";\r\nimport workspace from \"../sqft/components/canvas/core/workspace\";\r\nimport WithOverlay from \"./withOverlayHoc\";\r\nimport {setAssignQuotePopupCustomer} from \"../../actions/assignPopupFunctions\";\r\nimport {setAlreadyRegisteredUserInfo} from \"../../actions/userFunctions\";\r\nimport {loaderEnable} from \"../ui/loaderView\";\r\nimport {renderConfirmPopup} from \"../../api/api-popups\";\r\nimport {ROUTES} from \"../../routes\";\r\n\r\nclass ConfirmPopup extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {};\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.applyPopupOpened && !this.props.applyPopupOpened) {\r\n document.body.classList.add('body--apply-popup');\r\n }\r\n }\r\n\r\n handleApply = (confirm, hideOverlay, closeSQFtCalc) => {\r\n // Analytics.sendClickEvent('confirm-popup-apply-' + (confirm ? 'yes': 'no'));\r\n hideOverlay(this.closePopup);\r\n document.body.classList.remove('body--apply-popup');\r\n const {confirmPopupType, confirmPopupTag} = this.props;\r\n switch (confirmPopupType) {\r\n case ConfirmPopupTypes.ConsultationRequest: {\r\n const data = {\r\n yesNoConsultationRequest: confirm,\r\n userPopupType: confirmPopupTag.userPopupType,\r\n fromConfirmationDialog: true,\r\n quoteRequestType: QuoteRequestType.RequestConsultation\r\n };\r\n confirm\r\n ? Analytics.sendClickEvent('design-consultation-yes')\r\n : Analytics.sendClickEvent('design-consultation-no');\r\n switch (confirmPopupTag.userAction) {\r\n case UserAction.Login:\r\n userLogin(data);\r\n break;\r\n case UserAction.Register:\r\n userRegister(data)\r\n break;\r\n }\r\n break;\r\n }\r\n case ConfirmPopupTypes.SqftResetChanges: {\r\n if (confirm) {\r\n this.props.updateSQFT(SqftUpdateTypes.Reset);\r\n closeSQFtCalc(false);\r\n workspace.removeAllShapes();\r\n workspace.textBoxManager.removeAllTextBoxes();\r\n workspace.removeAllSlabImages();\r\n setTimeout(() => {\r\n this.props.updateSQFT(null);\r\n }, 0)\r\n }\r\n break;\r\n }\r\n case ConfirmPopupTypes.SqftUpdateQuestion: {\r\n if (confirm) {\r\n this.props.updateSQFT(SqftUpdateTypes.UpdateData);\r\n setTimeout(() => {\r\n this.props.updateSQFT(null);\r\n }, 0)\r\n }\r\n break;\r\n }\r\n case ConfirmPopupTypes.AssignQuoteOnExistingUser: {\r\n if (confirm) {\r\n const {alreadyRegisteredUserInfo} = this.props;\r\n Analytics.sendClickEvent('confirm-assign-quote-on-existing-user');\r\n if (window.location.hash.includes(ROUTES.contract)) {\r\n // this.props.showContractSigning(false, () => {}); // why close contract?\r\n if (this.props.afterContractSignCallback) {\r\n this.props.setAfterContractSignCallback(null);\r\n }\r\n }\r\n if (alreadyRegisteredUserInfo.assignQuote) {\r\n this.props.setAssignQuotePopupCustomer({ // clear current selected customer\r\n id: alreadyRegisteredUserInfo.userId,\r\n email: alreadyRegisteredUserInfo.email,\r\n fullName: alreadyRegisteredUserInfo.values.firstName + (alreadyRegisteredUserInfo.values.lastName ? \" \" + alreadyRegisteredUserInfo.values.lastName : \"\"),\r\n });\r\n this.props.setAlreadyRegisteredUserInfo({confirmedAssign: true}); // trigger assign quote button\r\n } else {\r\n loaderEnable();\r\n setUserLoginResponse(alreadyRegisteredUserInfo, true);\r\n }\r\n }\r\n if (confirmPopupTag.applyFunction) {\r\n confirmPopupTag.applyFunction();\r\n }\r\n break;\r\n }\r\n case ConfirmPopupTypes.DeleteCartItemsPopup: {\r\n if (confirm) {\r\n renderConfirmPopup(0, {allowDelete: true}, false); // clear tag\r\n }\r\n break;\r\n }\r\n // case ConfirmPopupTypes.ChangeWizardToPreviousStepSelection:\r\n // case ConfirmPopupTypes.ReplaceRoomWhenItExistsInCartButWeAddNew: {\r\n // break;\r\n // }\r\n default: {\r\n if (confirm) {\r\n if (confirmPopupTag.applyFunction) {\r\n confirmPopupTag.applyFunction();\r\n }\r\n } else if (confirmPopupTag.declineFunction) {\r\n confirmPopupTag.declineFunction()\r\n }\r\n renderConfirmPopup(0, {}, false); // clear tag\r\n break;\r\n }\r\n }\r\n };\r\n\r\n getConfirmMessage = () => {\r\n const {intl, confirmPopupType, confirmPopupTag} = this.props;\r\n switch (confirmPopupType) {\r\n case ConfirmPopupTypes.ConsultationRequest:\r\n return intl.formatMessage({id: \"confirmPopup.consultationRequest\"});\r\n case ConfirmPopupTypes.SqftResetChanges:\r\n return intl.formatMessage({id: \"confirmPopup.sqftResetChanges\"});\r\n case ConfirmPopupTypes.SqftUpdateQuestion:\r\n return intl.formatMessage({id: \"confirmPopup.sqftUpdateQuestion\"});\r\n case ConfirmPopupTypes.DeleteCartItemsPopup:\r\n return intl.formatMessage({id: confirmPopupTag.fromDelete ? \"confirmPopup.deleteCartItems2\" : \"confirmPopup.deleteCartItems\"});\r\n case ConfirmPopupTypes.ChangeWizardToPreviousStepSelection:\r\n return intl.formatMessage({id: \"confirmPopup.deleteCartItemsWizard\"});\r\n case ConfirmPopupTypes.ReplaceRoomWhenItExistsInCartButWeAddNew:\r\n return intl.formatMessage({id: \"confirmPopup.replaceRoomWhenItExistsInCartButWeAddNew\"});\r\n case ConfirmPopupTypes.AssignQuoteOnExistingUser: {\r\n const {alreadyRegisteredUserInfo} = this.props;\r\n return (\r\n \r\n

    \r\n

    \r\n {alreadyRegisteredUserInfo.values ? (\r\n
    \r\n

    {alreadyRegisteredUserInfo.values.firstName + (alreadyRegisteredUserInfo.values.lastName ? \" \" + alreadyRegisteredUserInfo.values.lastName : \"\")}

    \r\n

    {alreadyRegisteredUserInfo.email}

    \r\n
    \r\n ) : null}\r\n
    \r\n );\r\n }\r\n default:\r\n return \"Text is not set up\"\r\n }\r\n };\r\n\r\n closePopup = () => {\r\n this.props.toggleConfirmPopup(false);\r\n };\r\n\r\n render() {\r\n const {confirmPopupOpened, confirmPopupType} = this.props;\r\n if (!confirmPopupOpened) {\r\n return null\r\n }\r\n return (\r\n \r\n {(hideOverlay) => (\r\n
    \r\n {/*
    */}\r\n {/*

    Would you like to add any visualized items to your cart?

    */}\r\n {/*
    */}\r\n
    \r\n {this.getConfirmMessage()}\r\n
    \r\n
    \r\n \r\n \r\n {(closeSQFtCalc) => (\r\n \r\n )}\r\n \r\n
    \r\n
    \r\n )}\r\n
    \r\n\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {confirmPopupOpened, confirmPopupType, confirmPopupTag, alreadyRegisteredUserInfo} = store.userState;\r\n const {afterContractSignCallback} = store.contractSigningState;\r\n return {\r\n confirmPopupOpened,\r\n confirmPopupType,\r\n confirmPopupTag,\r\n alreadyRegisteredUserInfo,\r\n // contractSignIsOpened: isVisible,\r\n afterContractSignCallback,\r\n };\r\n};\r\nconst mapDispatchToProps = {\r\n toggleConfirmPopup,\r\n setJobId,\r\n updateSQFT,\r\n setAssignQuotePopupCustomer,\r\n setAlreadyRegisteredUserInfo,\r\n showContractSigning,\r\n setAfterContractSignCallback,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(ConfirmPopup)\r\n)\r\n","import {connect} from \"react-redux\";\r\n\r\nimport {setCameFromPage, toggleConfirmPopup, toggleSelectionFeatureInfo} from \"../../../actions/actionFunctions\";\r\nimport {setSqftFromFeature} from \"../../../actions/sqftFunctions\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport {setShowAddedToTheCartSuccess} from \"../../../actions/groheFunctions\";\r\nimport {useCloseSQFTCalc} from \"./useCloseSQFTCalc\";\r\n\r\nconst WithCloseSQFtCalc = (props) => {\r\n const {children} = props;\r\n const {closeSQFTCalc} = useCloseSQFTCalc();\r\n\r\n return children(closeSQFTCalc);\r\n};\r\n\r\nconst mapStateToProps = (store) => ({\r\n cameFromPage: store.cartState.cameFromPage,\r\n activePreset: store.bathroomVisualizerState.activePreset,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n toggleSelectionFeatureInfo,\r\n setCameFromPage,\r\n toggleConfirmPopup,\r\n setSqftFromFeature,\r\n setShowAddedToTheCartSuccess,\r\n};\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(WithCloseSQFtCalc)\r\n);\r\n","import React, {Component} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {isFacebook, isInstagram} from \"../../misc/browsers\";\r\nimport {baseNewImagesPath} from \"../assets\";\r\nimport MobileRotateButtonIcon from \"./mobileRotateButtonIcon\";\r\nimport {AmericanStandardIcon, groheIcon} from \"../common/icons\";\r\n\r\n// const faceBookOldView = (isRebath) => (\r\n//
    \r\n//
    \r\n// Click HERE to open this tool in another browser\r\n//
    \r\n//
    \r\n// Facebook doesn’t support this visualizer in the Facebook app.\r\n//
    \r\n//
    \r\n// \"\"/\r\n//
    \r\n//
    \r\n//

    OR

    \r\n//

    Copy the following link into your browser:

    \r\n//

    {window.location.href.split(window.location.search)[0]}

    \r\n//
    \r\n//
    \r\n// );\r\n\r\nclass MobileRotateButton extends Component {\r\n\r\n getIcon = () => {\r\n if (this.props.fabricatorData.isAmericanStandard) {\r\n return AmericanStandardIcon\r\n }\r\n return groheIcon\r\n }\r\n\r\n getLogo = () => {\r\n let isHttpBNIP = baseNewImagesPath.length > 4 && baseNewImagesPath.substring(0, 4).toLowerCase() == \"http\";\r\n switch (true) {\r\n case this.props.fabricatorData.isRebath:\r\n return `${baseNewImagesPath}${(isHttpBNIP ? \"styles/\" : \"\" )}images/Logos/rebath-logo.svg`\r\n case this.props.fabricatorData.isRona:\r\n return `https://qc-cdn.s3.amazonaws.com/Logos/rona.png`\r\n case this.props.fabricatorData.isRenoDepot:\r\n return `https://qc-cdn.s3.amazonaws.com/Logos/reno-depot.png`\r\n case this.props.fabricatorData.isLowes:\r\n return `${baseNewImagesPath}${(isHttpBNIP ? \"styles/\" : \"\" )}images/Logos/Lowes-Color-Logo.svg`\r\n case this.props.fabricatorData.isCaesarStone:\r\n return `${baseNewImagesPath}${(isHttpBNIP ? \"styles/\" : \"\" )}images/Logos/csconnect2.png`\r\n default:\r\n // return `${baseNewImagesPath}images/Logos/quote-logo-stacked.svg`\r\n return `${baseNewImagesPath}${(isHttpBNIP ? \"styles/\" : \"\" )}images/Logos/Quote-Kitchen-and-Bath.svg`\r\n }\r\n };\r\n\r\n render() {\r\n\r\n const {isRebath, isLowes, isRona, isRenoDepot, isAmericanStandard, isLixil} = this.props.fabricatorData;\r\n\r\n return isFacebook || isInstagram\r\n ? null : (\r\n
    \r\n
    \r\n {isLixil ? this.getIcon() : \"\"}\r\n
    \r\n \r\n

    \r\n \r\n

    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n fabricatorData: store.fabricatorState\r\n});\r\nexport default connect(mapStateToProps)(MobileRotateButton);\r\n","import React from \"react\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport {connect} from \"react-redux\";\r\n\r\nimport {setAssignQuotePopupSearchText} from \"../../../actions/assignPopupFunctions\";\r\n\r\nconst AssignQuotePopupSearch = (props) => {\r\n\r\n const {setAssignQuotePopupSearchText, assignQuotePopupSearchText, intl} = props;\r\n\r\n const handleSearchInputChange = (event) => {\r\n setAssignQuotePopupSearchText(event.target.value)\r\n };\r\n\r\n const searchText = assignQuotePopupSearchText;\r\n\r\n return (\r\n
    \r\n 12 ? \" search-input--with-close\" : \"\")}\r\n value={searchText}\r\n onChange={handleSearchInputChange}\r\n placeholder={intl.formatMessage({id: \"mobileMenu.searchPlaceholder\"})}\r\n />\r\n \r\n {searchText ?
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n assignQuotePopupSearchText: store.assignQuoteState.assignQuotePopupSearchText\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setAssignQuotePopupSearchText\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(AssignQuotePopupSearch)\r\n)\r\n","import React, {useEffect, useState} from \"react\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\nimport {List} from \"react-virtualized\";\r\n\r\nimport {customerInterface, employeeInterface} from \"./assignQuoteInterfaces\";\r\nimport {usePrevious} from \"../../../misc/helperHooks\";\r\nimport UiIcon from \"../../ui/icons/uiIcon\";\r\n// import LoadingSpinner from \"../../ui/loadingSpinner\";\r\n\r\nconst AssignQuoteVirtualizedList = (props) => {\r\n\r\n const {renderList, selectEntity, activeEntity, noEntitiesFound, title, contentDimensions, errorMessage,\r\n hideEmployeesColumn} = props;\r\n const [scrollToIndex, setScrollToIndex] = useState(0);\r\n const prevEntity = usePrevious(activeEntity);\r\n\r\n useEffect(() => {\r\n if (activeEntity && !prevEntity) {\r\n let scrollToIn = renderList.findIndex(item => item.id === activeEntity.id)\r\n if (scrollToIn > -1) {\r\n setScrollToIndex(scrollToIn + 3);\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [activeEntity]);\r\n\r\n const listWidth = contentDimensions && contentDimensions.width\r\n ? hideEmployeesColumn\r\n ? contentDimensions.width - 10\r\n : (contentDimensions.width / 2) - 10\r\n : 320; // 10 is padding\r\n const listHeight = contentDimensions && contentDimensions.height ? contentDimensions.height - 15 : 245; // 15 is title\r\n\r\n const listSettings = {\r\n width: listWidth,\r\n height: listHeight,\r\n rowHeight: 40,\r\n overscanRowCount: 6,\r\n rowCount: renderList.length,\r\n showScrollingPlaceholder: false,\r\n useDynamicRowHeight: false,\r\n }\r\n\r\n const rowRenderer = ({index, key, style}) => {\r\n const customer = renderList[index];\r\n return (\r\n
  • \r\n
    selectEntity(customer)}>\r\n
    \r\n \r\n
    \r\n
    \r\n selectEntity(customer)}>\r\n {customer.fullName} {customer.email ? ({customer.email}) : null}\r\n \r\n
  • \r\n );\r\n }\r\n\r\n const noRowsRenderer = () =>
    ;\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n {errorMessage ? : null}\r\n
    \r\n \r\n
    \r\n )\r\n};\r\n\r\nAssignQuoteVirtualizedList.propTypes = {\r\n renderList: PropTypes.array.isRequired,\r\n selectEntity: PropTypes.func.isRequired,\r\n activeEntity: PropTypes.oneOfType([\r\n PropTypes.shape(customerInterface),\r\n PropTypes.shape(employeeInterface)\r\n ]),\r\n title: PropTypes.string.isRequired,\r\n errorMessage: PropTypes.string,\r\n noEntitiesFound: PropTypes.string.isRequired,\r\n contentDimensions: PropTypes.shape({\r\n width: PropTypes.number,\r\n height: PropTypes.number,\r\n }),\r\n}\r\n\r\nexport default injectIntl(AssignQuoteVirtualizedList)\r\n","import React, {useEffect, useRef} from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport SqftFeaturesPopup from \"./sqftFeaturesPopup\";\r\nimport eventManager from \"../../sqft/components/canvas/store/sqftEventManager\";\r\nimport {changeSqftFeaturesPopup} from \"../../../actions/sqftFunctions\";\r\n\r\nconst SqftFeaturesPopupWrapper = (props) => {\r\n const { sqftFeaturesPopup, changeSqftFeaturesPopup } = props;\r\n const isOpened = sqftFeaturesPopup.opened;\r\n const wrapperRef = useRef(null);\r\n\r\n useEffect(() => {\r\n const closePopup = () => {\r\n changeSqftFeaturesPopup({ opened: false, sqftPassedData: null });\r\n };\r\n\r\n const handleClickOutside = (event) => {\r\n if (wrapperRef.current && !wrapperRef.current.contains(event.target)) {\r\n closePopup();\r\n }\r\n };\r\n\r\n if (isOpened) {\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_DOWN,\r\n closePopup,\r\n { name: \"popupWrapper\" },\r\n eventManager.priorities.OVERALL\r\n );\r\n }\r\n\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n }, [wrapperRef, isOpened, changeSqftFeaturesPopup]);\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {sqftFeaturesPopup, sqftFromFeature} = store.sqftState;\r\n return {\r\n sqftFeaturesPopup,\r\n sqftFromFeature,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n changeSqftFeaturesPopup\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SqftFeaturesPopupWrapper);\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport FilterListIcon from '@mui/icons-material/FilterList';\r\nimport InfoIcon from \"@mui/icons-material/Info\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\n\r\nimport {getFilterValueThumbnailAndStyles} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {getFeatureGroupIconStyles, getFeatureGroupIconURL} from \"../../bvComponent/core/assets\";\r\nimport {wizardGroupInterface, wizardSelectedValueInterface} from \"../../../interfaces/wizardItemInterface\";\r\nimport {featureGroupInterface} from \"../../../interfaces/featureInterface\";\r\n\r\n\r\nconst MaterialsWizardFooterStepThumbnail = (props) => {\r\n\r\n const {wizardGroup, wizardSelectedValue, allFilterGroups, isMobile, activeTheme, featureGroup} = props;\r\n\r\n let selectedFilter = wizardSelectedValue ? wizardSelectedValue.selectedFilter : null;\r\n\r\n // const notSelected = !wizardSelectedValue || !(Object.keys(wizardSelectedValue).length)\r\n // || (!selectedFeature && !selectedFilter);\r\n //\r\n // if (notSelected) {\r\n // const featureGroup = wizardGroup ? getFeatureGroupFromWizardGroup(wizardGroup) : null;\r\n // return
    \r\n //
    \r\n // }\r\n\r\n if (wizardGroup && selectedFilter && wizardGroup.nodeType === \"filter\") {\r\n if (isMobile) {\r\n return (\r\n
    \r\n \r\n \r\n \r\n
    \r\n )\r\n }\r\n const filterGroup = allFilterGroups.find(group => group.id === selectedFilter.filterGroup_id);\r\n const {styles} = getFilterValueThumbnailAndStyles(selectedFilter, filterGroup || {});\r\n return
    \r\n } else if (wizardGroup) {\r\n return (\r\n
    \r\n )\r\n }\r\n\r\n // just in case\r\n return (\r\n
    \r\n {isMobile\r\n ? \r\n :
    }\r\n
    \r\n )\r\n\r\n};\r\n\r\nMaterialsWizardFooterStepThumbnail.propTypes = {\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n featureGroup: PropTypes.shape(featureGroupInterface),\r\n wizardSelectedValue: PropTypes.shape(wizardSelectedValueInterface),\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {filterGroups} = store.filterState;\r\n const {activeTheme} = store.serverState;\r\n\r\n return {\r\n allFilterGroups: filterGroups,\r\n activeTheme,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(MaterialsWizardFooterStepThumbnail)\r\n","import React from \"react\";\r\nimport CreditCardIcon from \"@mui/icons-material/CreditCard\";\r\nimport SvgIcon from \"@mui/material/SvgIcon\";\r\n\r\nimport creditCardIcons from \"../../../common/creditCardIcons\";\r\nimport {COLORS} from \"../../../../colorThemes\";\r\n\r\nconst _getSvgCardIcon = (iconName) => {creditCardIcons[iconName]};\r\n\r\nexport default function getCreditCardType(testCard) {\r\n const cardNumber = testCard.replaceAll(/ /g, \"\");\r\n let amex = new RegExp('^3[47][0-9]{13}$');\r\n let visa = new RegExp('^4[0-9]{12}(?:[0-9]{3})?$');\r\n let cup1 = new RegExp('^62[0-9]{14}[0-9]*$');\r\n let cup2 = new RegExp('^81[0-9]{14}[0-9]*$');\r\n\r\n let mastercard = new RegExp('^5[1-5][0-9]{14}$');\r\n let mastercard2 = new RegExp('^2[2-7][0-9]{14}$');\r\n\r\n let disco1 = new RegExp('^6011[0-9]{12}[0-9]*$');\r\n let disco2 = new RegExp('^62[24568][0-9]{13}[0-9]*$');\r\n let disco3 = new RegExp('^6[45][0-9]{14}[0-9]*$');\r\n\r\n let diners = new RegExp('^3[0689][0-9]{12}[0-9]*$');\r\n let jcb = new RegExp('^35[0-9]{14}[0-9]*$');\r\n\r\n\r\n if (visa.test(cardNumber)) {\r\n return {text: \"Visa\", icon: _getSvgCardIcon(\"visa\")};\r\n }\r\n if (amex.test(cardNumber)) {\r\n return {text: \"AmEx\", icon: _getSvgCardIcon(\"amex\")};\r\n }\r\n if (mastercard.test(cardNumber) || mastercard2.test(cardNumber)) {\r\n return {text: \"Mastercard\", icon: _getSvgCardIcon(\"mastercard\")};\r\n }\r\n if (disco1.test(cardNumber) || disco2.test(cardNumber) || disco3.test(cardNumber)) {\r\n return {text: \"Discover\", icon: _getSvgCardIcon(\"discover\")};\r\n }\r\n if (diners.test(cardNumber)) {\r\n return {text: \"Diners\", icon: {creditCardIcons[\"diners\"]}};\r\n }\r\n if (jcb.test(cardNumber)) {\r\n return {text: \"JCB\", icon: _getSvgCardIcon(\"jcb\")};\r\n }\r\n if (cup1.test(cardNumber) || cup2.test(cardNumber)) {\r\n return {text: \"Union Pay\", icon: _getSvgCardIcon(\"unionPay\")};\r\n }\r\n return {text: \"\", icon: };\r\n}\r\n","import JsonApi from \"./jsonApi\";\r\nimport {getSessionStorageItem, setSessionStorageItem} from \"../misc/storageFunctions\";\r\nimport {renderErrorPopup} from \"./api-popups\";\r\n\r\nexport const postLoginAdmin = (data) => {\r\n return JsonApi.loginAdmin(data)\r\n .then(response => {\r\n console.log(\"loginAdmin response\", response);\r\n if (response && response.status === 200 && response.data) {\r\n setSessionStorageItem(\"superAdminToken\", response.data);\r\n return true\r\n }\r\n return false\r\n })\r\n .catch(error => {\r\n console.log(\"Server error postLoginAdmin \"+new Error(error));\r\n return false\r\n })\r\n};\r\n\r\nexport const postEditFeatures = (data) => {\r\n const headers = {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + getSessionStorageItem(\"superAdminToken\", false),\r\n }\r\n return JsonApi.postEditFeatures(data, headers)\r\n .then(response => {\r\n return response && response.data\r\n })\r\n .catch(error => {\r\n if (error && error.response && error.response.status === 401) {\r\n renderErrorPopup(\"Your session is expired, please re-login again\");\r\n } else {\r\n renderErrorPopup(error);\r\n }\r\n console.log(\"Server error postEditFeatures \"+new Error(error));\r\n return false\r\n })\r\n}\r\n","import React from 'react';\r\nimport {injectIntl} from \"react-intl\";\r\nimport {connect} from \"react-redux\";\r\n\r\nimport { polyfill } from 'es6-promise';\r\npolyfill();\r\nimport \"./polyfills/object.dataset\";\r\nimport \"./polyfills/string.includes\";\r\nimport \"./polyfills/string.startsWith\";\r\nimport \"./polyfills/jquery.preBind\";\r\nimport \"./polyfills/arrayMethods\";\r\nimport \"./polyfills/objectMethods\";\r\nimport \"./polyfills/numberMethods\";\r\nimport \"./lib/wrapText\";\r\nimport \"./lib/fraction\";\r\n//import {getNonce} from \"../../misc/utils\";\r\n\r\nimport SqftFooter from \"./components/sqftFooter\";\r\nimport SqftIcons from \"./components/SqftIcons\";\r\nimport ChangeLayoutPopup from \"../popups/changeLayoutPopup\";\r\nimport SqftManualCalculateWindow from \"./components/manualCalculate/SqftManualCalculateWindow\";\r\nimport SqftNavSettingsWindow from \"./components/popup/SqftNavSettingsWindow\";\r\nimport SqftTutorial from \"./components/popup/SqftTutorial\";\r\n// import SqftCabinetsTutorial from \"./components/popup/SqftCabinetsTutorial\";\r\nimport SqftSystemMessage from \"./components/popup/SqftSystemMessage\";\r\nimport AR3DPopup from \"./components/popup/AR3DPopup\";\r\nimport ValidationPopupWindow from \"./components/popup/ValidationPopupWindow\";\r\nimport SqftSystemDeleteMessage from \"./components/popup/SqftSystemDeleteMessage\";\r\nimport SqftLoadSlabWindow from \"./components/slab/SqftLoadSlabWindow\";\r\nimport SqftPopupWindow from \"./components/popup/SqftPopupWindow\";\r\nimport SqftLabelsContextMenuCategorySwitching\r\n from \"./components/canvas/core/controls/labels/sqftLabelsContextMenuCategorySwitching\";\r\nimport SqftLabelsContextMenu from \"./components/canvas/core/controls/labels/sqftLabelsContextMenu\";\r\nimport {\r\n setIsRoomSwitcherVisible,\r\n setSQFTActiveRoomId,\r\n setSQFTActiveRoomIndex,\r\n setSQFTActiveRoomType\r\n} from \"../../actions/sqftMenuFunctions\";\r\nimport SqftContextMenuV2 from \"./components/popup/SqftContextMenuV2\";\r\nimport ChangeValuePopupWindow from \"./components/popup/ChangeValuePopupWindow\";\r\nimport NavigationSidebar from \"./components/navigation/NavigationSidebar\";\r\nimport useUpdateSqftConfig from \"./hocs/onLoad/useUpdateSqftConfig\";\r\nimport useAddDeviceClass from \"./hocs/onLoad/useAddDeviceClass\";\r\n//import useImportSQFTData from \"./hocs/onLoad/useImportSQFTData\";\r\nimport useToggleRoomsSwitcher from \"./hocs/onLoad/useToggleRoomsSwitcher\";\r\nimport useOpenSQFTMenu from \"./hocs/onLoad/useOpenSQFTMenu\";\r\nimport useCheckWizardActiveItem from \"./hocs/onLoad/useCheckWizardActiveItem\";\r\nimport useResetState from \"./hocs/onLoad/useResetState\";\r\nimport SqftHeader from \"./components/header/SqftHeader\";\r\nimport useUpdateCabinetFeatures from \"./hocs/onLoad/useUpdateCabinetFeatures\";\r\nimport SquareFootageToolViewWorkspace from \"./squareFootageToolViewWorkspace\";\r\n//import NavigationSidebarRight from \"./components/navigation/NavigationSidebarRight\";\r\n//import useSetDefaultCabinetViewMode from \"./hocs/onLoad/useSetDefaultCabinetViewMode\";\r\n\r\nconst SquareFootageToolView = (props) => {\r\n const {visualizersLoaded} = props;\r\n const {cartItems, sqftPopup, fabricatorSettings,\r\n setSQFTActiveRoomIndex, setSQFTActiveRoomType, setSQFTActiveRoomId, activeQuoteIndex,\r\n setIsRoomSwitcherVisible, contextMenuV2, quotes, changeValuePopups, validationPopups, isSquareFootageEnabled} = props;\r\n\r\n useResetState();\r\n useUpdateSqftConfig();\r\n useAddDeviceClass();\r\n useToggleRoomsSwitcher( visualizersLoaded, fabricatorSettings, setIsRoomSwitcherVisible, quotes, setSQFTActiveRoomId,\r\n setSQFTActiveRoomIndex, setSQFTActiveRoomType, cartItems, activeQuoteIndex, isSquareFootageEnabled\r\n );\r\n //useSQFTRouting();\r\n //useSetDefaultCabinetViewMode(); //we assume is already in 2d\r\n useUpdateCabinetFeatures();\r\n\r\n useOpenSQFTMenu();\r\n useCheckWizardActiveItem();\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n {/**/}\r\n \r\n
    \r\n
    \r\n \r\n
    \r\n {\r\n visualizersLoaded.length ? : null\r\n }\r\n {\r\n visualizersLoaded.length ? : null\r\n }\r\n {\r\n visualizersLoaded.length ? : null\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n fabricatorSettings.useCategorySwitching ? : \r\n }\r\n {\r\n changeValuePopups.map((changeValuePopup, index) => {\r\n return (\r\n \r\n )\r\n })\r\n }\r\n {\r\n validationPopups.map((validationPopup, index) => {\r\n return (\r\n \r\n )\r\n })\r\n }\r\n \r\n {/**/}\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {sqftFeaturesPopup} = store.sqftState;\r\n\r\n return {\r\n quotes: store.quotesState.quotes,\r\n fabricatorData: store.fabricatorState,\r\n sqftVisited: sqftFeaturesPopup.visited,\r\n sqftPopup: store.sqftMenuState.sqftPopup,\r\n activeButton: store.sqftMenuState.activeButton,\r\n contextMenuV2: store.sqftMenuState.contextMenuV2,\r\n isMobile: store.serverState.isMobile,\r\n cartItems: store.cartState.cartItems,\r\n windowWidth: store.serverState.windowWidth,\r\n visualizersLoaded: store.serverState.visualizersLoaded,\r\n isShowSlabTool: store.sqftSlabState.isShowSlabTool,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n changeValuePopups: store.sqftMenuState.changeValuePopups,\r\n validationPopups: store.sqftMenuState.validationPopups,\r\n isSquareFootageEnabled: store.sqftState.isSquareFootageEnabled,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setSQFTActiveRoomId,\r\n setSQFTActiveRoomIndex,\r\n setSQFTActiveRoomType,\r\n setIsRoomSwitcherVisible,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(SquareFootageToolView)\r\n);\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport {setQuotes} from \"../../../actions/roomsFunctions\";\r\nimport {changeSqftFeaturesPopup, setSqftMeasureUnit, setSquareFeet} from \"../../../actions/sqftFunctions\";\r\nimport {setMaterialsPageSubSteps} from \"../../../actions/selectionFunctions\";\r\nimport {\r\n changeCartItemQuantity,\r\n changeSelectionInfoQuantity,\r\n setCameFromPage,\r\n toggleSelectionFeatureInfo\r\n} from \"../../../actions/actionFunctions\";\r\nimport WithAddToQuote from \"../hocs/withAddToQuote\";\r\n\r\nconst SqftFooterAddToQuoteButton = (props) => {\r\n\r\n return (\r\n \r\n {(handleAddToQuoteClick) => (\r\n \r\n )}\r\n \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => ({\r\n measureUnit: store.sqftState.measureUnit,\r\n showManualCalculation: store.sqftManualCalculationState.showManualCalculation,\r\n quotes: store.quotesState.quotes,\r\n cartItems: store.cartState.cartItems,\r\n selectionFeatureInfo: store.selectionState.selectionFeatureInfo,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n sqftVisited: store.sqftState.sqftFeaturesPopup.visited,\r\n isSlabToolVisited: store.sqftSlabState.isSlabToolVisited,\r\n useSqftCartPopup: store.sqftState.sqftFeaturesPopup.enabled,\r\n cameFromPage: store.cartState.cameFromPage\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setQuotes,\r\n setSquareFeet,\r\n setMaterialsPageSubSteps,\r\n changeSqftFeaturesPopup,\r\n toggleSelectionFeatureInfo,\r\n setCameFromPage,\r\n changeCartItemQuantity,\r\n changeSelectionInfoQuantity,\r\n setSqftMeasureUnit,\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SqftFooterAddToQuoteButton);\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport {setCameFromPage, toggleConfirmPopup, toggleSelectionFeatureInfo} from \"../../../actions/actionFunctions\";\r\nimport WithSqftFooterCancel from \"../hocs/withSqftFooterCancel\";\r\n\r\nconst SqftFooterCancelButton = (props) => {\r\n\r\n return (\r\n \r\n {(handleCloseSQFtCalc) => (\r\n \r\n )}\r\n \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => ({\r\n cameFromPage: store.cartState.cameFromPage,\r\n showManualCalculation: store.sqftManualCalculationState.showManualCalculation,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n toggleConfirmPopup,\r\n toggleSelectionFeatureInfo,\r\n setCameFromPage\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SqftFooterCancelButton);\r\n","import {connect} from \"react-redux\";\r\nimport {manualCalculationsCheckForChangesApplied} from \"../helpers/sqftCalculations\";\r\nimport {ConfirmPopupTypes} from \"../../visComponents/constants\";\r\nimport {setCameFromPage, toggleConfirmPopup, toggleSelectionFeatureInfo} from \"../../../actions/actionFunctions\";\r\nimport {setSqftFromFeature} from \"../../../actions/sqftFunctions\";\r\nimport {withRouter} from \"react-router-dom\";\r\n\r\nimport workspaceHistory from \"../components/canvas/core/workspaceHistory\";\r\nimport {useCloseSQFTCalc} from \"./useCloseSQFTCalc\";\r\nimport {enableRegularMode} from \"../components/canvas/store/canvasHelper\";\r\nimport {clearAllMenusEvents} from \"../components/canvas/core/workspace/workspaceEvents\";\r\nimport {showSlabTool} from \"../../../actions/sqftSlabFunctions\";\r\n\r\nconst WithSqftFooterCancel = (props) => {\r\n const {showManualCalculation, toggleConfirmPopup, showSlabTool} = props;\r\n const {children} = props;\r\n const {closeSQFTCalc} = useCloseSQFTCalc();\r\n\r\n const handleCancelClick = () => {\r\n if (showManualCalculation) {\r\n manualCalculationsCheckForChangesApplied() ? callResetDataPopup() : closeSQFTCalc(false);\r\n } else {\r\n showSlabTool(false);\r\n enableRegularMode();\r\n clearAllMenusEvents();\r\n workspaceHistory.checkForChangesApplied() ? callResetDataPopup() : closeSQFTCalc(false);\r\n }\r\n };\r\n\r\n const callResetDataPopup = () => {\r\n toggleConfirmPopup(true, ConfirmPopupTypes.SqftResetChanges);\r\n };\r\n\r\n return children(handleCancelClick);\r\n};\r\n\r\nconst mapStateToProps = (store) => ({\r\n cameFromPage: store.cartState.cameFromPage,\r\n showManualCalculation: store.sqftManualCalculationState.showManualCalculation,\r\n activePreset: store.bathroomVisualizerState.activePreset,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n toggleConfirmPopup,\r\n toggleSelectionFeatureInfo,\r\n setCameFromPage,\r\n setSqftFromFeature,\r\n showSlabTool,\r\n};\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(WithSqftFooterCancel)\r\n);\r\n","import React from 'react'\r\nimport {connect} from \"react-redux\";\r\nimport {setSQFTActiveButton} from \"../../../../actions/sqftMenuFunctions\";\r\nimport {setSqftMeasureUnit} from \"../../../../actions/sqftFunctions\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nconst SqftPopupWindow = (props) => {\r\n const {title, content, isOpened} = props;\r\n const {confirmCallback, confirmText, cancelCallback, cancelText} = props;\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n {title}\r\n
    \r\n \r\n
    \r\n
    \r\n {content}\r\n
    \r\n
    \r\n {\r\n cancelText ?\r\n \r\n : null\r\n }\r\n {\r\n confirmText ?\r\n \r\n : null\r\n }\r\n
    \r\n
    \r\n
    \r\n )\r\n};\r\n\r\nSqftPopupWindow.propTypes = {\r\n title: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.object,\r\n PropTypes.instanceOf(FormattedMessage)\r\n ]),\r\n content: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.object,\r\n PropTypes.instanceOf(FormattedMessage)\r\n ]),\r\n isOpened: PropTypes.bool,\r\n confirmCallback: PropTypes.func,\r\n confirmText: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.object,\r\n PropTypes.instanceOf(FormattedMessage)\r\n ]),\r\n cancelCallback: PropTypes.func,\r\n cancelText: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.object,\r\n PropTypes.instanceOf(FormattedMessage)\r\n ]),\r\n};\r\n\r\nconst mapStateToProps = (store) => ({\r\n activeButton: store.sqftMenuState.activeButton,\r\n measureUnit: store.sqftState.measureUnit,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setSQFTActiveButton,\r\n setSqftMeasureUnit\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SqftPopupWindow);\r\n","import point from \"../point\";\r\nimport line from \"../line\";\r\n\r\nconst Square = (size, isIsland = false) => {\r\n let points = isIsland ? [\r\n new point(0, 15, \"lefttop\"),\r\n new point(65, 15, \"righttop\"),\r\n new point(65, 80, \"rightbottom\"),\r\n new point(0, 80, \"leftbottom\")\r\n ] : [\r\n new point(0, 0, \"lefttop\"),\r\n new point(65, 0, \"righttop\"),\r\n new point(65, 65, \"rightbottom\"),\r\n new point(0, 65, \"leftbottom\")\r\n ];\r\n\r\n return [\r\n new line(points[0], points[1]),\r\n new line(points[1], points[2]),\r\n new line(points[2], points[3]),\r\n new line(points[3], points[0])\r\n ];\r\n};\r\n\r\nexport default Square\r\n","import point from \"../point\";\r\nimport line from \"../line\";\r\nimport config from \"../../../store/sqftConfig\";\r\n\r\nconst wideAngle = function() {\r\n let points;\r\n if(config.measureUnit === \"Metric\" ) {\r\n points = [\r\n new point(-13.62, -10, \"lefttop\"),\r\n new point(134, -10, \"righttop\"),\r\n new point(134, 13.62, \"rightbottom\"),\r\n new point(10, 13.62, \"rightbottom\", true),\r\n new point(10, 114, \"rightbottom\"),\r\n new point(-13.62, 114, \"leftbottom\")\r\n ];\r\n } else {\r\n points = [\r\n new point(-16, -10, \"lefttop\"),\r\n new point(134, -10, \"righttop\"),\r\n new point(134, 16, \"rightbottom\"),\r\n new point(10, 16, \"rightbottom\", true),\r\n new point(10, 114, \"rightbottom\"),\r\n new point(-16, 114, \"leftbottom\")\r\n ];\r\n }\r\n\r\n let lines = [\r\n new line(points[0], points[1]),\r\n new line(points[1], points[2]),\r\n new line(points[2], points[3]),\r\n new line(points[3], points[4]),\r\n new line(points[4], points[5]),\r\n new line(points[5], points[0])\r\n ];\r\n\r\n return lines;\r\n};\r\n\r\nexport default wideAngle\r\n","import point from \"../point\";\r\nimport line from \"../line\";\r\nimport config from \"../../../store/sqftConfig\";\r\n\r\nconst horseshoe = function() {\r\n let points;\r\n if(config.measureUnit === \"Metric\" ) {\r\n points = [\r\n new point(0, -20, \"lefttop\"),\r\n new point(181, -20, \"righttop\"),\r\n new point(181, 80, \"rightbottom\"),\r\n new point(157.38, 80, \"leftbottom\"),\r\n new point(157.38, 3.62, \"leftbottom\", true),\r\n new point(23.62, 3.62, \"rightbottom\", true),\r\n new point(23.62, 80, \"rightbottom\"),\r\n new point(0, 80, \"leftbottom\")\r\n ];\r\n } else {\r\n points = [\r\n new point(0, -20, \"lefttop\"),\r\n new point(181, -20, \"righttop\"),\r\n new point(181, 80, \"rightbottom\"),\r\n new point(155, 80, \"leftbottom\"),\r\n new point(155, 6, \"leftbottom\", true),\r\n new point(26, 6, \"rightbottom\", true),\r\n new point(26, 80, \"rightbottom\"),\r\n new point(0, 80, \"leftbottom\")\r\n ];\r\n }\r\n\r\n let lines = [\r\n new line(points[0], points[1]),\r\n new line(points[1], points[2]),\r\n new line(points[2], points[3]),\r\n new line(points[3], points[4]),\r\n new line(points[4], points[5]),\r\n new line(points[5], points[6]),\r\n new line(points[6], points[7]),\r\n new line(points[7], points[0])\r\n ];\r\n\r\n return lines;\r\n};\r\n\r\nexport default horseshoe\r\n","import React, {useEffect} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport {setSwitcherPosition, toggleShowManualCalculation} from \"../../../../../actions/sqftManualCalculationFunctions\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst ManualCalculateSwitcher = (props) => {\r\n const {overlay, setSwitcherPosition, switcherPosition, showManualCalculation, toggleShowManualCalculation, isMobile,\r\n sideBarButtons} = props;\r\n\r\n const handleButtonClick = () => {\r\n // changeStateToQuote();\r\n toggleShowManualCalculation(!showManualCalculation);\r\n };\r\n\r\n useEffect(() => {\r\n if (!overlay) {\r\n const elem = document.getElementById(\"manual-switcher\");\r\n const rect = elem.getBoundingClientRect();\r\n setSwitcherPosition({rect})\r\n }\r\n }, [overlay, sideBarButtons, setSwitcherPosition]);\r\n\r\n const blockStyle = {\r\n left: overlay ? switcherPosition.rect.left : ''\r\n }\r\n isMobile\r\n ? blockStyle.bottom = overlay ? '13px' : ''\r\n : blockStyle.top = overlay ? switcherPosition.rect.top : ''\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n )\r\n};\r\n\r\nManualCalculateSwitcher.propTypes = {\r\n overlay: PropTypes.bool,\r\n sideBarButtons: PropTypes.array,\r\n};\r\n\r\nconst mapStateToProps = (store) => ({\r\n showManualCalculation: store.sqftManualCalculationState.showManualCalculation,\r\n switcherPosition: store.sqftManualCalculationState.switcherPosition,\r\n isMobile: store.serverState.isMobile,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n toggleShowManualCalculation,\r\n setSwitcherPosition,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ManualCalculateSwitcher);\r\n","// ExportButton.js\r\nimport React from 'react';\r\nimport {GLTFExporter} from \"three/examples/jsm/exporters/GLTFExporter\";\r\nimport SqftStore from \"../../../canvas/store/sqftStore\";\r\n\r\nconst ExportButton = () => {\r\n const exportScene = () => {\r\n const exporter = new GLTFExporter();\r\n const viewGL = SqftStore.viewGL;\r\n\r\n if (viewGL && viewGL.scene) {\r\n exporter.parse(viewGL.scene, (gltf) => {\r\n const blob = new Blob([JSON.stringify(gltf)], {type: 'text/plain'});\r\n const link = document.createElement('a');\r\n link.style.display = 'none';\r\n document.body.appendChild(link);\r\n link.href = URL.createObjectURL(blob);\r\n link.download = 'scene.gltf';\r\n link.click();\r\n });\r\n } else {\r\n console.error('GLBViewer instance or scene not found');\r\n }\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default ExportButton;\r\n","import React, {Fragment, useEffect} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport {setAbortController, setSQFTAr3dPopup} from \"../../../../../actions/sqftMenuFunctions\";\r\nimport ShapesGoogleModelViewer from \"./ShapesGoogleModelViewer\";\r\nimport ShapesThreeJsViewer from \"./ShapesThreeJsViewer\";\r\nimport MultiLoader from \"../../../../ui/multiLoader\";\r\nimport store from \"../../../../../store\";\r\nimport {setMultiLoader} from \"../../../../../actions/actionFunctions\";\r\n//import GroheFeatures from \"../../../look/grohe/groheNavigation/groheFeatures/groheFeatures\";\r\nimport {setLookActiveCategory, setLookOpened} from \"../../../../../actions/lookFunctions\";\r\nimport {setAPIErrorMessage, setSqftCabinetsGlb} from \"../../../../../actions/sqftFunctions\";\r\n//import {setCabinetGLBFromCabinetsSet} from \"../../../helpers/sqft3dArHelper\";\r\n//import sqftShapeManager from \"../canvas/store/sqftShapeManager\";\r\n//import {SHAPE_PART_ID} from \"../../../constants\";\r\n//import {isProd} from \"../../../../misc/fabricatorHardcode\";\r\nimport {IS_QKB_UI} from \"../../../../../config\";\r\nimport PropTypes from \"prop-types\";\r\nimport sqftConfig from \"../../canvas/store/sqftConfig\";\r\n\r\nconst ThreeDWorkspace = (props) => {\r\n const {apiErrorMessage, cabinetsGlb, setLookOpened,\r\n abortRequestController} = props;\r\n //const {lookActiveFeature, setLookActiveCategory, displayDoorsOnly} = props;\r\n\r\n useEffect(()=> {\r\n if (!IS_QKB_UI) {\r\n setLookOpened(false);\r\n }\r\n }, [setLookOpened])\r\n\r\n useEffect(()=> {\r\n return () => {\r\n if (abortRequestController) {\r\n abortRequestController.abort();\r\n }\r\n store.dispatch(setMultiLoader({activeStep: 8, visible: false, finished: true}));\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n // //todo lookActiveFeature is always triggered\r\n // //todo CHANGE FEATURES FROM THREE D\r\n // useEffect(()=> {\r\n // // wi will display door styles for this category\r\n // //todo\r\n // setLookActiveCategory(SHAPE_PART_ID.top_cabinet);\r\n //\r\n // store.dispatch(setMultiLoader({activeStep: 0, visible: false, finished: false}));\r\n // store.dispatch(setMultiLoader({activeStep: 0, visible: true, finished: false}));\r\n //\r\n // //todo update lower and bottom separately\r\n // //sqftShapeManager.changeShapesFeatureIDIfColorWasChanged(lookActiveFeature);\r\n //\r\n // setCabinetGLBFromCabinetsSet(displayDoorsOnly).then(r => void r);\r\n //\r\n // // eslint-disable-next-line react-hooks/exhaustive-deps\r\n // }, [lookActiveFeature])\r\n\r\n return (\r\n
    \r\n {sqftConfig.threeD.useGoogleModelViewer\r\n ? \r\n : (\r\n \r\n {cabinetsGlb && !apiErrorMessage ? : null}\r\n {apiErrorMessage || }\r\n \r\n )}\r\n {/* TODO CHANGE FEATURES FROM THREE D */}\r\n {/*{ !isProd() ? : null}*/}\r\n
    \r\n )\r\n};\r\n\r\nThreeDWorkspace.propTypes = {\r\n displayDoorsOnly: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n cabinetsGlb: store.sqftState.cabinetsGlb,\r\n apiErrorMessage: store.sqftState.apiErrorMessage,\r\n abortRequestController: store.sqftState.abortRequestController,\r\n lookActiveFeature: store.lookState.lookActiveFeature,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setSQFTAr3dPopup,\r\n setLookActiveCategory,\r\n setSqftCabinetsGlb,\r\n setAPIErrorMessage,\r\n setAbortController,\r\n setLookOpened,\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ThreeDWorkspace);\r\n","import * as THREE from 'three';\r\nimport { OrbitControls } from \"three/examples/jsm/controls/OrbitControls.js\";\r\n\r\nimport {HDR_MAP_LOADER, loadHDRMap} from \"./scene/HDRMapLoader\";\r\nimport SceneModelsLoader from \"./scene/SceneModelsLoader\";\r\nimport store from \"../../../../../../store\";\r\nimport {setMultiLoader} from \"../../../../../../actions/actionFunctions\";\r\n\r\nclass SeparateModelGLBViewer {\r\n spinner = null;\r\n animationFrameId = null;\r\n lightIntensity = null;\r\n modelScale = 39.37;\r\n envMap = null;\r\n gltf = null;\r\n isMobile = false;\r\n modelLoader = null;\r\n modelsCenter = null;\r\n modelsSize = null;\r\n modelsLoaded = false;\r\n\r\n constructor(canvas, glbUrl, lightIntensity, isMobile) {\r\n this.canvas = canvas;\r\n this.glbUrl = glbUrl;\r\n this.lightIntensity = lightIntensity;\r\n this.isMobile = isMobile;\r\n\r\n // this.initSpinner();\r\n this.initScene();\r\n this.modelsLoader = new SceneModelsLoader(this, this.scene, this.modelScale);\r\n }\r\n\r\n initScene() {\r\n this.scene = new THREE.Scene();\r\n //this.scene.background = new THREE.Color(0xf0f0f0);\r\n //this.scene.background = new THREE.Color(0xbcc4ce);\r\n this.scene.background = new THREE.Color(0xcccccc);\r\n\r\n this.camera = new THREE.PerspectiveCamera(45, this.canvas.clientWidth / this.canvas.clientHeight, 0.1, 1000);\r\n this.camera.position.set(0, 0, 5);\r\n\r\n this.renderer = new THREE.WebGLRenderer({\r\n canvas: this.canvas,\r\n antialias: true,\r\n preserveDrawingBuffer: true,\r\n powerPreference: 'high-performance',\r\n });\r\n this.renderer.setSize(this.canvas.clientWidth, this.canvas.clientHeight);\r\n //this.renderer.setPixelRatio(this.isMobile ? window.devicePixelRatio * 0.5 : window.devicePixelRatio);\r\n this.renderer.setPixelRatio(window.devicePixelRatio);\r\n\r\n this.renderer.outputColorSpace = THREE.SRGBColorSpace;\r\n this.renderer.useLegacyLights = false;\r\n this.renderer.toneMapping = THREE.ACESFilmicToneMapping;\r\n this.renderer.toneMappingExposure = 1;\r\n this.renderer.shadowMap.enabled = true;\r\n this.renderer.shadowMap.autoUpdate = true;\r\n this.renderer.shadowMap.type = THREE.VSMShadowMap;\r\n this.renderer.gammaOutput = true;\r\n this.renderer.gammaFactor = 2.2;\r\n\r\n this.controls = new OrbitControls(this.camera, this.renderer.domElement);\r\n this.controls.target.set(0, 0, 0);\r\n this.controls.update();\r\n this.controls.enableDamping = true;\r\n this.controls.dampingFactor = 0.1;\r\n this.controls.screenSpacePanning = true;\r\n this.controls.minDistance = 0.1;\r\n this.controls.maxDistance = 100;\r\n this.renderer.xr.enabled = true;\r\n\r\n loadHDRMap(this.scene, this.renderer, HDR_MAP_LOADER.pmremGeneratorEXR);\r\n\r\n //const hdrBackgroundPath = \"/images/sqft-icons/3d/comfy_cafe_1k.hdr\"\r\n //this.loadHDRAsBackground(hdrBackgroundPath);\r\n }\r\n\r\n closeMultiLoader() {\r\n store.dispatch(setMultiLoader({ activeStep: 8 }));\r\n setTimeout(() => {\r\n store.dispatch(setMultiLoader({ visible: false }));\r\n }, 500);\r\n }\r\n\r\n calculateAndSetCameraPosition(center, size) {\r\n this.controls.reset();\r\n this.controls.target.copy(center);\r\n this.controls.maxDistance = size * 10;\r\n\r\n this.camera.position.copy(center.clone().add(new THREE.Vector3(size, size / 5, size * 2)));\r\n this.camera.near = size / 100;\r\n this.camera.far = size * 100;\r\n this.camera.lookAt(center);\r\n this.camera.updateProjectionMatrix();\r\n\r\n // if (this.controls) {\r\n // this.controls.reset();\r\n // this.controls.maxDistance = size * 10;\r\n // }\r\n //\r\n // if (this.camera) {\r\n // this.camera.position.copy(center);\r\n // this.camera.position.x += size; // far distance\r\n // this.camera.position.y += size / 5.0;\r\n // //this.camera.position.z += size;\r\n // this.camera.position.z *= -1; // rotate distance\r\n //\r\n // this.camera.near = size / 100;\r\n // this.camera.far = size * 100;\r\n // this.camera.updateProjectionMatrix();\r\n // }\r\n }\r\n\r\n addLight(boxCenter) {\r\n //console.log(\"boxCenter\", boxCenter);\r\n //const maxSize = Math.max(boxSize.x, boxSize.y, boxSize.z);\r\n const lightOffset = 4.5;\r\n const baseHeight = 2.5;\r\n\r\n const dynamicIntensity = this.lightIntensity ;\r\n\r\n //console.log(`maxSize: ${maxSize}, lightOffset: ${lightOffset}, baseHeight: ${baseHeight}`);\r\n console.log(`this.lightIntensity: ${this.lightIntensity }`);\r\n console.log(`dynamicIntensity: ${dynamicIntensity}`);\r\n\r\n const lightPositions = [\r\n // Central light\r\n { x: 0, y: baseHeight / 2, z: 5 },\r\n { x: 0, y: baseHeight * 2, z: 5 },\r\n\r\n // Upper corner Light\r\n { x: lightOffset, y: baseHeight, z: lightOffset },\r\n { x: -lightOffset, y: baseHeight, z: lightOffset },\r\n { x: lightOffset, y: baseHeight, z: -lightOffset },\r\n { x: -lightOffset, y: baseHeight, z: -lightOffset },\r\n\r\n // Bottom light\r\n { x: lightOffset, y: -baseHeight, z: lightOffset },\r\n { x: -lightOffset, y: -baseHeight, z: lightOffset },\r\n { x: lightOffset, y: -baseHeight, z: -lightOffset },\r\n { x: -lightOffset, y: -baseHeight, z: -lightOffset }\r\n ];\r\n\r\n\r\n lightPositions.forEach(pos => {\r\n let light = new THREE.PointLight(0xffffff, dynamicIntensity, 0, 2);\r\n light.position.set(boxCenter.x + pos.x, boxCenter.y + pos.y, boxCenter.z + pos.z);\r\n light.castShadow = true;\r\n this.scene.add(light);\r\n //console.log(`Light position: x: ${pos.x}, y: ${pos.y}, z: ${pos.z}, Intensity: ${dynamicIntensity}`);\r\n });\r\n\r\n // Добавление окружающего света для общего освещения\r\n const ambientLight = new THREE.AmbientLight(0xffffff, 0.1);\r\n this.scene.add(ambientLight);\r\n\r\n const directionalLight = new THREE.DirectionalLight(0xffffff, 0.8);\r\n directionalLight.position.set(boxCenter.x, boxCenter.y, boxCenter.z + 10);\r\n directionalLight.castShadow = true;\r\n this.scene.add(directionalLight);\r\n }\r\n\r\n addLightV9(boxCenter) {\r\n this.renderer.toneMappingExposure = 0.1;\r\n this.lightIntensity = 800;\r\n this.addLight(boxCenter);\r\n }\r\n\r\n addLightV10(boxCenter) {\r\n this.renderer.toneMappingExposure = 1;\r\n this.lightIntensity = 20;\r\n\r\n this.addLight(boxCenter);\r\n }\r\n\r\n updateSceneLighting(type) {\r\n // Delete current lights\r\n this.scene.children = this.scene.children.filter(child => !(child instanceof THREE.Light));\r\n\r\n // Create and add new light\r\n switch (type) {\r\n case 'addLightV9':\r\n this.addLightV9(this.modelsCenter);\r\n break;\r\n case 'addLightV10':\r\n this.addLightV10(this.modelsCenter);\r\n break;\r\n default:\r\n console.warn(`Unknown lighting type: ${type}`);\r\n break;\r\n }\r\n }\r\n\r\n updateLightIntensity(intensity) {\r\n this.lightIntensity = intensity\r\n this.scene.children.forEach(child => {\r\n if (child instanceof THREE.PointLight) {\r\n //console.log(\"child.intensity\", child.intensity);\r\n child.intensity = intensity;\r\n }\r\n });\r\n }\r\n\r\n startAnimation() {\r\n const animate = () => {\r\n this.animationFrameId = requestAnimationFrame(animate);\r\n this.controls.update();\r\n this.renderer.render(this.scene, this.camera);\r\n };\r\n\r\n animate();\r\n }\r\n\r\n stopAnimation() {\r\n if (this.animationFrameId) {\r\n cancelAnimationFrame(this.animationFrameId);\r\n this.animationFrameId = null;\r\n }\r\n }\r\n\r\n dispose() {\r\n this.stopAnimation();\r\n this.renderer.dispose();\r\n this.controls.dispose();\r\n\r\n // Remove spinner\r\n // if (this.spinner) {\r\n // ReactDOM.unmountComponentAtNode(this.spinner);\r\n // this.spinner.remove();\r\n // this.spinner = null;\r\n // }\r\n\r\n // Nullify properties to free up memory\r\n this.scene = null;\r\n this.camera = null;\r\n this.renderer = null;\r\n this.controls = null;\r\n this.canvas = null;\r\n }\r\n\r\n onMouseDown() {\r\n }\r\n\r\n onMouseMove() {\r\n }\r\n\r\n onMouseUp() {\r\n }\r\n\r\n onWheel() {\r\n }\r\n\r\n onWindowResize() {\r\n this.camera.aspect = this.canvas.clientWidth / this.canvas.clientHeight;\r\n this.camera.updateProjectionMatrix();\r\n this.renderer.setSize(this.canvas.clientWidth, this.canvas.clientHeight);\r\n }\r\n\r\n // This methods will rotate scene in case OrbitControls wont fit everything\r\n\r\n // onMouseDown(event) {\r\n // this.mouseDown = true;\r\n // this.lastPosition = {\r\n // x: event.clientX,\r\n // y: event.clientY\r\n // };\r\n // }\r\n //\r\n // onMouseMove(event) {\r\n // if (!this.mouseDown) return;\r\n //\r\n // const deltaX = event.clientX - this.lastPosition.x;\r\n // const deltaY = event.clientY - this.lastPosition.y;\r\n //\r\n // this.camera.rotation.y += deltaX * 0.01;\r\n // this.camera.rotation.x += deltaY * 0.01;\r\n //\r\n // this.lastPosition = {\r\n // x: event.clientX,\r\n // y: event.clientY\r\n // };\r\n //\r\n // this.renderer.render(this.scene, this.camera);\r\n // }\r\n //\r\n // onMouseUp() {\r\n // this.mouseDown = false;\r\n // }\r\n //\r\n // onWheel(event) {\r\n // const delta = event.deltaY * 0.001;\r\n // this.camera.position.z += delta;\r\n //\r\n // this.renderer.render(this.scene, this.camera);\r\n // }\r\n // onWindowResize() {\r\n //\r\n // }\r\n}\r\n\r\nexport default SeparateModelGLBViewer;\r\n","import React, {useEffect} from 'react';\r\nimport {injectIntl} from \"react-intl\";\r\nimport {connect} from \"react-redux\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport {LookAugmentRealityIcon} from \"../../../../common/icons\";\r\nimport GLBLoader from \"./arButton/GLBLoader\";\r\nimport PropTypes from \"prop-types\";\r\nimport SvgIcon from \"@mui/material/SvgIcon\";\r\nimport Button from \"@mui/material/Button\";\r\n\r\nconst ARButton = (props) => {\r\n const {url, cabinetsARBlobUrl} = props;\r\n\r\n useEffect(() => {\r\n //let url = 'https://s3.amazonaws.com/qc-3dfiles/composed/' + file + '.glb'\r\n //url = 'https://discoverthreejs.com/examples/assets/models/Parrot.glb';\r\n //url = 'https://threejs.org/examples/models/gltf/AnisotropyBarnLamp.glb';\r\n //url = '/images/sqft-icons/3d/Chair.glb';\r\n //url = 'https://qc-3dfiles.s3.amazonaws.com/ar-composer/WBC3630_Brown.glb';\r\n new GLBLoader(url);\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const makeImage = () => {\r\n const c = document.createElement('canvas');\r\n const i = new Image();\r\n i.src = c.toDataURL();\r\n\r\n return i;\r\n }\r\n\r\n const makeLink = (blobUrl) => {\r\n console.log(\"blobUrl\", blobUrl);\r\n return Object.assign(document.createElement('a'), {\r\n download: 'asset.usdz',\r\n rel: \"ar\",\r\n href: blobUrl //URL.createObjectURL(blob)\r\n });\r\n }\r\n\r\n const arClick = () => {\r\n const i = makeImage();\r\n const a = makeLink(cabinetsARBlobUrl)\r\n a.appendChild(i);\r\n\r\n a.click();\r\n }\r\n\r\n return (\r\n \r\n )\r\n};\r\n\r\nARButton.propTypes = {\r\n url: PropTypes.string,\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n visualizersLoaded: store.serverState.visualizersLoaded,\r\n cabinetsARBlobUrl: store.sqftState.cabinetsARBlobUrl,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n};\r\n\r\nexport default withRouter(\r\n injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(ARButton)\r\n )\r\n);\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport {setSQFTSystemMessage} from \"../../../../actions/sqftMenuFunctions\";\r\n\r\nconst ValidationPopupWindow = (props) => {\r\n const {id, text, position, isHidden} = props;\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n {text}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => ({\r\n validationMessage: store.sqftMenuState.validationMessage\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setSQFTSystemMessage\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ValidationPopupWindow);\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport {CONTEXT_MENU_TYPE} from \"../../../../../constants\";\r\nimport ContextmenuList from \"./contextmenu/contextmenuList\";\r\nimport ContextmenuButtons from \"./contextmenu/contextmenuButtons\";\r\n\r\nconst SqftContextMenu = (props) => {\r\n const {contextMenuType} = props;\r\n\r\n switch (contextMenuType) {\r\n case CONTEXT_MENU_TYPE.list:\r\n return \r\n case CONTEXT_MENU_TYPE.buttons:\r\n return \r\n }\r\n};\r\n\r\nconst mapStateToProps = () => ({\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SqftContextMenu);\r\n\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {setSqftSlabToolVisited, addRoomWithVisitedSlabTool, showSlabTool} from \"../../../../../actions/sqftSlabFunctions\";\r\nimport {\r\n setSQFTActiveButton,\r\n setSQFTMenuOpened\r\n} from \"../../../../../actions/sqftMenuFunctions\";\r\nimport {enableRegularMode, enableSlabMode} from \"../../canvas/store/canvasHelper\";\r\nimport {clearAllMenusEvents} from \"../../canvas/core/workspace/workspaceEvents\";\r\nimport {getQtCatName} from \"../../../helpers/sqftQuotesHelper\";\r\n\r\nconst SlabToolSwitcher = (props) => {\r\n const {isShowSlabTool, isSlabToolVisited, showSlabTool, setSQFTActiveButton, setSQFTMenuOpened,\r\n setSqftSlabToolVisited, addRoomWithVisitedSlabTool} = props;\r\n\r\n const handleButtonClick = () => {\r\n clearAllMenusEvents();\r\n !isShowSlabTool ? enableSlabMode(true) : enableRegularMode(); // before change isShowSlabTool we need to disable and restore shapes\r\n !isSlabToolVisited && setSqftSlabToolVisited(true);\r\n addRoomWithVisitedSlabTool(getQtCatName());\r\n showSlabTool(!isShowSlabTool);\r\n setSQFTActiveButton(\"\");\r\n setSQFTMenuOpened(\"\");\r\n };\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => ({\r\n isShowSlabTool: store.sqftSlabState.isShowSlabTool,\r\n isSlabToolVisited: store.sqftSlabState.isSlabToolVisited,\r\n showManualCalculation: store.sqftManualCalculationState.showManualCalculation,\r\n switcherPosition: store.sqftManualCalculationState.switcherPosition,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n showSlabTool,\r\n setSQFTActiveButton,\r\n setSQFTMenuOpened,\r\n setSqftSlabToolVisited,\r\n addRoomWithVisitedSlabTool,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SlabToolSwitcher);\r\n","import eventManager from \"../../store/sqftEventManager\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport workspace from \"../workspace\";\r\nimport store from \"../../../../../../store\";\r\nimport $ from \"jquery\";\r\nimport {iconPlusBlack, iconPlusBlue} from \"../../../../assetsSQFT\";\r\nimport {setSQFTMenuOpened} from \"../../../../../../actions/sqftMenuFunctions\";\r\nimport {updateSQFTCalculations} from \"../../../../../../actions/sqftFunctions\";\r\nimport {attachResource} from \"./resourseCanas\";\r\nimport {SIDEBAR_NAVIGATION_BUTTONS} from \"../../../../constants\";\r\n\r\nconst backsplashCanvas = function() {\r\n let self = this;\r\n this.backSplashFeature = {\r\n size: 0,\r\n name: \"\"\r\n };\r\n this.cursorImage = null;\r\n this.addedImages = null; //like in edges\r\n this.img = null;\r\n this.isWaitingToRestoreCursor = false;\r\n\r\n this.setBackSplashFeature = function (backSplashFeature) {\r\n this.backSplashFeature = backSplashFeature;\r\n };\r\n this.setHighlighting = function (disallowDemo) {\r\n eventManager.stealCursor(true); // remove all other cursors\r\n workspace.setAllowEdges(false); // removing sizing lines\r\n workspace.setAllowBumpoutEdges(false); // removing bumpout lines\r\n config.highlight.points = false;\t// remove radiuses\r\n config.highlight.lines = true; // enable lines highlighting\r\n\r\n if (!disallowDemo) {\r\n config.highlight.demoShow = true;\r\n }\r\n setTimeout(function () {\r\n config.highlight.demoShow = false;\r\n }, 1000);\r\n };\r\n\r\n this.setCursorImage = function () {\r\n let bounds = 18,\r\n imgWidth = bounds,\r\n imgHeight = bounds;\r\n\r\n let domImg = document.createElement('img');\r\n domImg.crossOrigin = \"Anonymous\";\r\n\r\n let $img = $(domImg);\r\n $img.css({\r\n position: 'absolute',\r\n width: '1px',\r\n height: '1px'\r\n });\r\n\r\n $img.attr({\r\n 'data-id': self.backSplashFeature.size,\r\n 'data-name': self.backSplashFeature.name,\r\n });\r\n\r\n function imgOnLoad() {\r\n var bounds = 18;\r\n let ratio;\r\n if(imgWidth > imgHeight) {\r\n ratio = imgHeight / imgWidth;\r\n imgWidth = bounds;\r\n imgHeight = bounds * ratio;\r\n } else {\r\n ratio = imgWidth / imgHeight;\r\n imgHeight = bounds;\r\n imgWidth = bounds * ratio;\r\n }\r\n eventManager.setCursor('edge-select', self, true);\r\n self.cursorImage = { image: domImg, width: imgWidth, height: imgHeight };\r\n self.registerEvents(); // only after image is load!\r\n }\r\n $img.on('load', imgOnLoad);\r\n $img.appendTo($('body'));\r\n\r\n if (self.backSplashFeature.size === \"wall\") {\r\n config.highlight.type = 'wall';\r\n $img.attr('src', iconPlusBlack);\r\n } else {\r\n config.highlight.type = 'backsplash';\r\n $img.attr('src', iconPlusBlue);\r\n }\r\n\r\n this.img = $img;\r\n config.highlight.id = self.backSplashFeature.size;\r\n };\r\n\r\n this.registerEvents = () => {\r\n eventManager.setCursor('radius-select', self, true);\r\n eventManager.addEvent(\r\n eventManager.events.RENDER,\r\n this.renderCursor,\r\n this,\r\n eventManager.priorities.OVERALL\r\n );\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_UP,\r\n this.onMouseUp,\r\n this,\r\n eventManager.priorities.OVERALL\r\n );\r\n };\r\n this.deregisterEvents = () => {\r\n eventManager.resetCursor(this);\r\n eventManager.removeEvent(this);\r\n config.highlight.lines = false;\r\n //todo sqft-react\r\n //elements.navbacksplash.removeClass('steps-scope-config-button-selected');\r\n }\r\n this.destroy = function(protect, revertBackAfterMouseUp) {\r\n if (revertBackAfterMouseUp) {\r\n eventManager.removeEvent(self, eventManager.events.RENDER); //remove render only, but wait for mouse up to set cursor again\r\n this.isWaitingToRestoreCursor = true;\r\n } else {\r\n this.deregisterEvents();\r\n //$('img[data-id=\"' + this.img.data('id') +'\"]').remove();\r\n //this.addedImages = this.addedImages.filter(image => image.dataset.id === this.img.data('id'));\r\n }\r\n };\r\n this.onMouseUp = function(mousePos) {\r\n void mousePos;\r\n let hoverShape = workspace.getHoverShape();\r\n if (hoverShape && hoverShape.getHoverSegment) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (activeButton !== SIDEBAR_NAVIGATION_BUTTONS.backsplash) {\r\n return\r\n }\r\n\r\n const segCorner = hoverShape.getHoverSegmentOutlineCorner();\r\n const seg = hoverShape.getHoverSegment();\r\n if (seg || segCorner) {\r\n let resourceType = (self.backSplashFeature.size === \"wall\") ? \"wall\" : \"backsplash\";\r\n\r\n //remove incompatible resources\r\n if (seg && seg.isWithMitered()) {\r\n seg.deleteMitered();\r\n } else if (seg && (seg.isWithWaterfallToolEdge() || seg.isWithPeninsulaUnderwrapEdge())) {\r\n seg.deleteAttachedItem();\r\n }\r\n\r\n //add new resource\r\n attachResource(seg, segCorner, resourceType, null, null, this.backSplashFeature.name, this.backSplashFeature.size);\r\n\r\n // let attachedTo = workspace.getImagesAttachedTo(seg);\r\n // if (attachedTo) {\r\n // workspace.removeShape(attachedTo);\r\n // }\r\n //\r\n //\r\n // let historyCallBack;\r\n //\r\n // //add image to line or cornerLine\r\n // if (seg) {\r\n // historyCallBack = seg.addBacksplashToLine.bind(self, this.backSplashFeature.name, type, self.cursorImage.image.dataset.id);\r\n // } else if (segCorner) {\r\n // historyCallBack = segCorner.addBacksplashToCornerLine.bind(self, this.backSplashFeature.name, type, self.cursorImage.image.dataset.id);\r\n // }\r\n //\r\n // workspace.addImage(\r\n // self.cursorImage.image,\r\n // self.cursorImage.width / scale,\r\n // self.cursorImage.height / scale,\r\n // seg || segCorner,\r\n // hoverShape,\r\n // type,\r\n // historyCallBack\r\n // );\r\n //\r\n // historyCallBack();\r\n // config.highlight.lines = true;\r\n } else {\r\n store.dispatch(setSQFTMenuOpened('backsplash'));\r\n // \tderegisterEvents();\r\n // \telements.designDefault.click();\r\n }\r\n\r\n const updateCalculations = reduxState.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n }\r\n this.checkForRestoreCursor();\r\n };\r\n this.checkForRestoreCursor = function() {\r\n if (self.isWaitingToRestoreCursor) {\r\n self.isWaitingToRestoreCursor = false;\r\n eventManager.removeEvent(self, eventManager.events.MOUSE_UP); //remove mouse up, it will be added in setCursorImage\r\n self.setHighlighting(true);\r\n self.setCursorImage();\r\n }\r\n };\r\n this.renderCursor = function(ctx) {\r\n // if((this.backsplashSize > 0) && ($(window).width() > 768)) {\r\n // var mPos = eventManager.LastKnownMousePos;\r\n // if(mPos) {\r\n // ctx.save();\r\n // ctx.font = \"18px Arial\";\r\n // ctx.fillStyle = \"#000000\";\r\n // ctx.fillText(this.backsplashSize + \"\\\" Backsplash\", mPos.x + (12 * config.scale), mPos.y + 9);\r\n // ctx.restore();\r\n // }\r\n // }\r\n if(self.cursorImage.image && ($(window).width() > 768)) {\r\n var mPos = eventManager.LastKnownMousePos;\r\n if(mPos) {\r\n ctx.drawImage(self.cursorImage.image, mPos.x + 10, mPos.y + 10, self.cursorImage.width, self.cursorImage.height);\r\n }\r\n }\r\n };\r\n};\r\n\r\nexport default new backsplashCanvas();\r\n","import LookVirtualizedListLoadingItem\r\n from \"../../../../../../../look/lookNavigation/lookMain/lookCategory/lookVirtualizedListLoadingItem\";\r\nimport {Grid} from \"react-virtualized\";\r\nimport React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {connect} from \"react-redux\";\r\n\r\nexport const SqftOptionsLoading = (props) => {\r\n const {isMobile, windowHeight} = props;\r\n\r\n const rowHeight = 135;\r\n const width = isMobile ? 221 : 280;\r\n const columnWidth = width;\r\n const columnCount = 1;\r\n const height = isMobile ? windowHeight - 25 : windowHeight - 60;\r\n const rowCount = Math.floor(height / rowHeight);\r\n\r\n const listSettings = {\r\n width,\r\n columnCount,\r\n columnWidth,\r\n rowCount,\r\n height,\r\n rowHeight: rowHeight,\r\n overscanRowCount: 3,\r\n showScrollingPlaceholder: false,\r\n useDynamicRowHeight: false,\r\n }\r\n\r\n const cellRenderer = ({columnIndex, key, rowIndex, style}) => {\r\n void columnIndex;\r\n void rowIndex;\r\n\r\n return \r\n }\r\n\r\n const noRowsRenderer = () =>
    No Features found
    ;\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\nSqftOptionsLoading.propTypes = {\r\n // maxClickCountReached: PropTypes.func,\r\n // renderList: PropTypes.array,\r\n // contentHeight: PropTypes.number,\r\n isMobile: PropTypes.bool,\r\n // onScrollHandler: PropTypes.func,\r\n // loadingCount: PropTypes.number,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {windowHeight, isMobile} = store.serverState;\r\n return {\r\n windowHeight,\r\n isMobile,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SqftOptionsLoading);\r\n","import React, {useState} from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {connect} from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport TextInput from \"../../ui/textInput\";\r\nimport {updateFeatureInfoCount} from \"../../../actions/actionFunctions\";\r\nimport {EditIcon, GroheInkPenIcon} from \"../../common/icons\";\r\nimport COLOR_THEMES from \"../../../colorThemes\";\r\nimport {IS_QKB_UI} from \"../../../config\";\r\n\r\nconst FeaturePriceInput = (props) => {\r\n\r\n const {feature, updateFeatureInfoCount, fabricatorData, unit, activeTheme, price, className, showPrice} = props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n const [priceEditing, setPriceEditing] = useState(false);\r\n\r\n const hidePrice = (typeof showPrice !== 'undefined') && !showPrice;\r\n\r\n const togglePriceEditing = () => setPriceEditing(!priceEditing);\r\n\r\n // if (selectionFeatureInfo && selectionFeatureInfo.dbFeature.id && document.kvConfig.isBackend) {\r\n // return \r\n // }\r\n\r\n const handlePriceOnChange = (newAmount) => {\r\n if (fabricatorSettings.useFabricatorCostPrices) {\r\n feature.dbFeature.price = newAmount;\r\n } else {\r\n feature.dbFeature.cost = newAmount;\r\n feature.dbFeature.fabricatorCost = newAmount;\r\n }\r\n feature.dbFeature.priceWasChanged = true;\r\n updateFeatureInfoCount();\r\n }\r\n\r\n return (\r\n
    \r\n {hidePrice ? null :\r\n {fabricatorSettings.currencySign}}\r\n \r\n {priceEditing || hidePrice\r\n ? null\r\n : IS_QKB_UI ? {price} : price}\r\n {unit && !hidePrice ? ({unit}) : null}\r\n \r\n
    \r\n )\r\n};\r\n\r\nFeaturePriceInput.propTypes = {\r\n feature: PropTypes.object,\r\n onBlur: PropTypes.func,\r\n unit: PropTypes.string,\r\n price: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n className: PropTypes.string,\r\n showPrice: PropTypes.bool,\r\n};\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n const {activeTheme} = store.serverState;\r\n return {\r\n feature: ownProps.feature || store.selectionState.selectionFeatureInfo,\r\n fabricatorData: store.fabricatorState,\r\n featureInfoCount: store.selectionState.featureInfoCount,\r\n activeTheme,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n updateFeatureInfoCount\r\n}\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(FeaturePriceInput)\r\n);\r\n","import React, {} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {miteredSectionInterface} from \"../../../../../../interfaces/sqftInterfaces\";\r\nimport NavMiteredSegment from \"./navMiteredSegment\";\r\n\r\nconst NavMiteredSection = (props) => {\r\n const {sectionName, miteredSection, index} = props;\r\n\r\n let SEGMENTS = miteredSection.getSegments();\r\n\r\n return (\r\n
    \r\n

    \r\n {/*${TranslatesProvider.translate(\"sqft.navigation.mitered.title\")}*/}\r\n {sectionName}\r\n \r\n {('0' + (index + 1)).slice(-2)}\r\n \r\n

    \r\n
    \r\n {\r\n SEGMENTS.map((miteredSegment, index) => {\r\n return \r\n })\r\n }\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nNavMiteredSection.propTypes = {\r\n sectionName: PropTypes.string,\r\n miteredSection: PropTypes.shape(miteredSectionInterface)\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n menuOpened: store.sqftMenuState.menuOpened,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(NavMiteredSection);\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport debounce from \"lodash/debounce\";\r\n\r\nimport InputLabel from '@mui/material/InputLabel';\r\nimport TextField from '@mui/material/TextField';\r\n\r\nimport COLOR_THEMES from \"../../../../../colorThemes\";\r\n\r\nimport {setGroheFiltersSearchText} from \"../../../../../actions/groheFunctions\";\r\nimport {searchProductRequest} from \"../../../../../api/search-api\";\r\nimport {getCurrentLayout} from \"../../../../appLayout\";\r\nimport {updateNavigationCount} from \"../../../../../actions/lookFunctions\";\r\nimport {setNavigationLoading} from \"../../../../../actions/navigationFunctions\";\r\n\r\nconst GroheFiltersSearchInput = (props) => {\r\n const {activeTheme, groheFiltersSearchText, setGroheFiltersSearchText, lookActiveCategory, updateNavigationCount,\r\n setNavigationLoading} = props;\r\n\r\n const layout = getCurrentLayout();\r\n const featureGroup = layout.getFeatureGroupByPartId(lookActiveCategory);\r\n\r\n const debounceRequest = async (searchText) => {\r\n if (featureGroup && !featureGroup.getRealFeaturesReceivedProperty()) {\r\n return await searchProductRequest(featureGroup, searchText, (ended) => {\r\n setNavigationLoading(ended);\r\n if (!ended) {\r\n updateNavigationCount();\r\n }\r\n })\r\n }\r\n }\r\n\r\n const debounceFn = debounce(debounceRequest, 800);\r\n\r\n const handleSearchInputChange = async (event) => {\r\n setGroheFiltersSearchText(event.currentTarget.value);\r\n await debounceFn(event.target.value)\r\n }\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {groheFiltersSearchText} = store.groheState;\r\n const {activeTheme} = store.serverState;\r\n const {lookActiveCategory} = store.lookState;\r\n\r\n return {\r\n groheFiltersSearchText,\r\n activeTheme,\r\n lookActiveCategory,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setGroheFiltersSearchText,\r\n updateNavigationCount,\r\n setNavigationLoading,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(GroheFiltersSearchInput)\r\n);\r\n","import React, {useState, useEffect} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport Accordion from '@mui/material/Accordion';\r\nimport AccordionDetails from '@mui/material/AccordionDetails';\r\nimport AccordionSummary from '@mui/material/AccordionSummary';\r\nimport ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\r\n\r\nimport {setGroheFiltersOpened, setGroheFiltersSearchText} from \"../../../../actions/groheFunctions\";\r\nimport {setSelectedFilters} from \"../../../../actions/actionFunctions\";\r\nimport GroheFiltersValues from \"../../grohe/groheNavigation/groheFilters/groheFiltersValues\";\r\nimport {getCurrentLayout} from \"../../../appLayout\";\r\n// import {AVAILABLE_FILTERS} from \"../../core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../config\";\r\n\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS, PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../analytics\";\r\n// import {COUNTERTOP_GROUP} from \"../../../kvComponent/core/constants\";\r\nimport {getFeatureGroupFilters} from \"../../../../misc/filtersFunctions\";\r\nimport MaterialSpinner from \"../../../ui/materialSpinner\";\r\nimport {getCurrentGroups, getFeatureGroupFromWizardGroup} from \"../lookMain/lookWizard/lookWizardFunctions\";\r\n\r\n\r\nconst LookFiltersList = (props) => {\r\n const { className, filtersOpened, intl, isMobile, lookActiveFeature, lookActiveCategory, wizardFeatureGroup,\r\n isRelatedItemsFilters } = props;\r\n const [activeFilterId, setActiveFilterId] = useState(null);\r\n\r\n useEffect(() => {\r\n setActiveFilterId(filtersOpened ? \"description\" : isMobile ? activeFilterId : \"\");\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [filtersOpened])\r\n\r\n const handleChange = (filterId, filterName) => (event, isExpanded) => {\r\n const underscoredText = Analytics.getSkuForAnalytics({dbFeature: {sku: filterName}}, false);\r\n if (IS_PRODUCT_JOURNEY) {\r\n Analytics.sendClickEvent(\r\n isExpanded\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeaturesFiltersAccordionOpen + underscoredText\r\n : PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeaturesFiltersAccordionClose + underscoredText\r\n );\r\n } else {\r\n Analytics.sendClickEvent(\r\n isExpanded\r\n ? LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeaturesFiltersAccordionOpen + underscoredText\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeaturesFiltersAccordionClose + underscoredText\r\n );\r\n }\r\n\r\n setActiveFilterId(isExpanded ? filterId : false);\r\n };\r\n\r\n const layout = getCurrentLayout();\r\n const featureGroup = wizardFeatureGroup\r\n || (lookActiveFeature ? lookActiveFeature.getParent() : layout.getFeatureGroupByPartId(lookActiveCategory));\r\n\r\n const availableFilters = filtersOpened && (featureGroup.allFeaturesReceived || isRelatedItemsFilters)\r\n ? getFeatureGroupFilters(featureGroup)\r\n : [];\r\n\r\n if (!featureGroup) {\r\n return null\r\n }\r\n // .filter(filterGroup => AVAILABLE_FILTERS.includes(filterGroup.name));\r\n\r\n // if (!featureGroup.filtersReceived) {\r\n // return (\r\n //
    \r\n // \r\n //
    \r\n // )\r\n // }\r\n\r\n return (\r\n
    \r\n {availableFilters.map(availableFilter => {\r\n return (\r\n
  • \r\n \r\n }\r\n aria-label={intl.formatMessage({id:\"tooltip.editLook\"})}\r\n aria-controls=\"panel2bh-content\"\r\n id=\"panel2bh-header\"\r\n className=\"lk-info__header\"\r\n >\r\n
    \r\n \r\n {availableFilter.filterGroupName}\r\n {availableFilter.selectedFiltersLength ? ` (${availableFilter.selectedFiltersLength})` : null}\r\n \r\n {featureGroup.filtersReceived || featureGroup.realFeaturesReceived ? null : }\r\n
    \r\n \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
  • \r\n )\r\n })}\r\n
    \r\n )\r\n};\r\n\r\nLookFiltersList.propTypes = {\r\n className: PropTypes.string,\r\n isRelatedItemsFilters: PropTypes.bool\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeature, lookActiveCategory} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n const {showFilters, selectedFilters, filtersCount} = store.filterState;\r\n const {filtersOpened} = store.groheState;\r\n const {featureGroupCount} = store.lookState;\r\n\r\n let wizardFeatureGroup = null\r\n const {wizardSelectedValues, wizardActiveItem, wizardActiveStep} = store.wizardState;\r\n if (filtersOpened && wizardActiveItem) {\r\n const currentGroups = getCurrentGroups(wizardActiveItem, wizardActiveStep, wizardSelectedValues);\r\n if (currentGroups.length === 1) {\r\n wizardFeatureGroup = getFeatureGroupFromWizardGroup(currentGroups[0])\r\n }\r\n }\r\n\r\n return {\r\n filtersOpened: showFilters || filtersOpened,\r\n filtersCount,\r\n isMobile,\r\n // allFilterGroups: filterGroups,\r\n lookActiveFeature,\r\n selectedFilters,\r\n lookActiveCategory,\r\n featureGroupCount,\r\n wizardFeatureGroup,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setGroheFiltersOpened,\r\n setGroheFiltersSearchText,\r\n setSelectedFilters,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookFiltersList)\r\n);\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport Checkbox from '@mui/material/Checkbox';\r\nimport FormGroup from '@mui/material/FormGroup';\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\n\r\nimport PropTypes from \"prop-types\";\r\nimport {filterGroupInterface} from \"../../../../../interfaces/filterInterface\";\r\nimport {toggleFilterArrayValue} from \"../../../../visComponents/navigation/newFilters/filtersBody\";\r\nimport {setSelectedFilters} from \"../../../../../actions/actionFunctions\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS, PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport {featureGroupInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport {getFixedFilterValueName, weShouldHideFilterValue} from \"../../../filtersHardcode\";\r\n\r\nconst GroheFiltersValues = (props) => {\r\n const {availableFilter, selectedFilters, setSelectedFilters} = props;\r\n\r\n const setActiveFilterValue = (filterId, filterGroupId, filterValueText, selected) => {\r\n const underscoredText = Analytics.getSkuForAnalytics({dbFeature: {sku: filterValueText}}, false);\r\n\r\n if (IS_PRODUCT_JOURNEY) {\r\n Analytics.sendClickEvent(\r\n selected\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeaturesFiltersValuerUnChecked + underscoredText\r\n : PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeaturesFiltersValueChecked + underscoredText\r\n )\r\n } else {\r\n Analytics.sendClickEvent(\r\n selected\r\n ? LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeaturesFiltersValuerUnChecked + underscoredText\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeaturesFiltersValueChecked + underscoredText\r\n )\r\n }\r\n setSelectedFilters(toggleFilterArrayValue([...selectedFilters], {filterId, filterGroupId}));\r\n };\r\n\r\n return (\r\n
    \r\n \r\n {availableFilter.values.map(filterValue => {\r\n // we did this check already in the getAvailableFiltersForReceivedFilters function\r\n // if (COUNTERTOP_GROUP.includes(featureGroup.partId) && featureGroup && featureGroup.filtersReceived\r\n // && !featureGroup.filtersReceived.includes(filterValue.id)) {\r\n // return null\r\n // }\r\n if (weShouldHideFilterValue(filterValue)) {\r\n return null\r\n }\r\n const selected = selectedFilters.find((filter) => {\r\n return filter.filterGroupId === availableFilter.id && filter.filterId === filterValue.id\r\n })\r\n const checkboxClick = () => {\r\n return setActiveFilterValue(filterValue.id, availableFilter.id, filterValue.displayText, selected)\r\n }\r\n return (\r\n }\r\n />\r\n )}\r\n )}\r\n \r\n
    \r\n )\r\n};\r\n\r\nGroheFiltersValues.propTypes = {\r\n availableFilter: PropTypes.shape(filterGroupInterface),\r\n featureGroup: PropTypes.shape(featureGroupInterface),\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {selectedFilters} = store.filterState;\r\n return {\r\n selectedFilters\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setSelectedFilters\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(GroheFiltersValues)\r\n);\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport RestartAltIcon from '@mui/icons-material/RestartAlt';\r\n\r\nimport {setSelectedFilters} from \"../../../../actions/actionFunctions\";\r\nimport {setGroheFiltersSearchText} from \"../../../../actions/groheFunctions\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS} from \"../../../../analytics\";\r\n\r\n\r\nconst LookFiltersReset = (props) => {\r\n const {setSelectedFilters, intl, setGroheFiltersSearchText} = props;\r\n\r\n const resetFilterClick = () => {\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeaturesFiltersReset);\r\n setSelectedFilters([]);\r\n setGroheFiltersSearchText(\"\");\r\n };\r\n\r\n //console.log(\"availableFilters\", availableFilters);\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeature} = store.lookState;\r\n const {showFilters} = store.filterState;\r\n return {\r\n filtersOpened: showFilters,\r\n lookActiveFeature,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setSelectedFilters,\r\n setGroheFiltersSearchText,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookFiltersReset)\r\n);\r\n","import { useState, useEffect } from 'react';\r\n\r\nfunction getWindowDimensions() {\r\n const { innerWidth: windowWidth, innerHeight: windowHeight } = window;\r\n return {\r\n windowWidth,\r\n windowHeight\r\n };\r\n}\r\n\r\nexport default function useWindowDimensions() {\r\n const [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());\r\n\r\n useEffect(() => {\r\n function handleResize() {\r\n setWindowDimensions(getWindowDimensions());\r\n }\r\n\r\n window.addEventListener('resize', handleResize);\r\n return () => window.removeEventListener('resize', handleResize);\r\n }, []);\r\n\r\n return windowDimensions;\r\n}\r\n","import React from 'react';\r\nimport {injectIntl} from \"react-intl\";\r\nimport {connect} from \"react-redux\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport {LookAugmentRealityIcon} from \"../../../../common/icons\";\r\nimport PropTypes from \"prop-types\";\r\nimport SvgIcon from \"@mui/material/SvgIcon\";\r\nimport Button from \"@mui/material/Button\";\r\n\r\nconst ARViewUSDZButton = (props) => {\r\n const {url} = props;\r\n\r\n const makeImage = () => {\r\n const c = document.createElement('canvas');\r\n const i = new Image();\r\n i.src = c.toDataURL();\r\n\r\n return i;\r\n }\r\n\r\n const makeLink = (url) => {\r\n return Object.assign(document.createElement('a'), {\r\n download: 'asset.usdz',\r\n rel: \"ar\",\r\n href: url\r\n });\r\n }\r\n\r\n const arClick = () => {\r\n const i = makeImage();\r\n const a = makeLink(url);\r\n a.appendChild(i);\r\n a.click();\r\n }\r\n\r\n return (\r\n \r\n )\r\n};\r\n\r\nARViewUSDZButton.propTypes = {\r\n url: PropTypes.string,\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n visualizersLoaded: store.serverState.visualizersLoaded,\r\n cabinetsARBlobUrl: store.sqftState.cabinetsARBlobUrl,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n};\r\n\r\nexport default withRouter(\r\n injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(ARViewUSDZButton)\r\n )\r\n);\r\n","import {useEffect, useState} from \"react\";\r\nimport {connect} from \"react-redux\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {getImagePromiseFromLayout} from \"../../../misc/getCanvasImageFromLayout\";\r\n\r\nconst WithCanvasImage = (props) => {\r\n\r\n const {children, visualizersLoadedLength} = props;\r\n\r\n const [canvasSrc, setCanvasSrc] = useState(\"\");\r\n\r\n const setCanvasImage = () => {\r\n const layout = getCurrentLayout();\r\n getImagePromiseFromLayout(layout)\r\n .then((response) => setCanvasSrc(response));\r\n };\r\n\r\n useEffect(() => {\r\n setCanvasImage()\r\n }, [visualizersLoadedLength])\r\n\r\n return children(canvasSrc)\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n visualizersLoadedLength: store.serverState.visualizersLoaded.length,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(WithCanvasImage)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport LookListContentHeader from \"./lookListContentHeader\";\r\nimport LookListMain from \"./lookListMain\";\r\nimport WithCartAnimationsChecker from \"../hocs/withCartAnimationsChecker\";\r\n\r\nconst LookListContent = (props) => {\r\n\r\n const {onBackClick} = props;\r\n\r\n return (\r\n \r\n {() => (\r\n
    \r\n \r\n \r\n
    \r\n )}\r\n
    \r\n )\r\n};\r\n\r\nLookListContent.propTypes = {\r\n onBackClick: PropTypes.func.isRequired\r\n}\r\n\r\nconst mapStateToProps = () => {\r\n return {\r\n\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LookListContent)\r\n","import React, {Fragment} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport {useLocation, withRouter} from \"react-router-dom\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\n// import PrintIcon from \"@mui/icons-material/Print\";\r\nimport FavoriteBorderIcon from \"@mui/icons-material/FavoriteBorder\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\n// import Button from \"@mui/material/Button\";\r\n\r\nimport {setLookOpened, setLookOverlayOpened, setLookPageOpened} from \"../../../actions/lookFunctions\";\r\nimport {LOOK_OVERLAYS} from \"../core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../config\";\r\nimport WithSavePostMessage from \"../hocs/withSavePostMessage\";\r\n// import {featureIsBundle, getBundledFeatures, isInStock} from \"../lookNavigation/lookFunctions2\";\r\nimport {cartItemInStock} from \"../lookNavigation/lookFunctions2\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS} from \"../../../analytics\";\r\nimport {ROUTES} from \"../../../routes\";\r\nimport {isIframe} from \"../../../misc/helpers\";\r\n\r\nconst LookListContentHeaderRightSide = (props) => {\r\n\r\n const {intl, isMobile, onBackClick, setLookOverlayOpened, cartItems, userIsLoggedIn, setLookPageOpened, setLookOpened,\r\n history, withoutSave, fabricatorData} = props;\r\n\r\n const location = useLocation();\r\n\r\n // const printButtonClick = () => {\r\n // setLookOverlayOpened(LOOK_OVERLAYS.print)\r\n // }\r\n\r\n const closeCartClick = () => {\r\n setLookPageOpened(\"\");\r\n setLookOpened(null);\r\n history.push(ROUTES.home);\r\n }\r\n\r\n const saveButtonClick = (savePostMessage) => {\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookListHeaderSave);\r\n if (userIsLoggedIn) {\r\n savePostMessage();\r\n } else {\r\n const isLixil = isIframe() && fabricatorData.isLixil;\r\n setLookOverlayOpened(isLixil ? LOOK_OVERLAYS.questionLogin : LOOK_OVERLAYS.leadCapture);\r\n }\r\n }\r\n\r\n let itemsToCount = 0;\r\n cartItems.forEach(cartItem => {\r\n if (!cartItem.relatedProductParent && cartItemInStock(cartItem)\r\n // || (featureIsBundle(cartItem.cartFeature, cartItems) && getBundledFeatures(cartItem.cartFeature).some(relFeature => relFeature.dbFeature.lixilAvailableQty > 0))\r\n ) {\r\n itemsToCount = itemsToCount + cartItem.quantity\r\n }\r\n }); // Items in visualizer should equal total quantity of items minus out of stock (Shower bundle will count as 1 not 7)\r\n\r\n return (\r\n
    \r\n {/*
    */}\r\n {/* */}\r\n {/* */}\r\n {/* */}\r\n {/* {isMobile ? null : (*/}\r\n {/* */}\r\n {/* */}\r\n {/* */}\r\n {/* )}*/}\r\n {/*
    */}\r\n {withoutSave || fabricatorData.isGrohe || (!IS_PRODUCT_JOURNEY && isMobile) ? null : (\r\n \r\n {(savePostMessage) => (\r\n
    saveButtonClick(savePostMessage)}>\r\n \r\n \r\n \r\n {isMobile ? null : (\r\n \r\n \r\n \r\n )}\r\n
    \r\n )}\r\n
    \r\n )}\r\n {!isMobile || !location || !location.pathname ? null : (\r\n \r\n {!IS_PRODUCT_JOURNEY && !location.pathname.includes(ROUTES.cart) ? (\r\n
    \r\n \r\n \r\n \r\n
    \r\n ) : null}\r\n {/*{IS_PRODUCT_JOURNEY && (location.pathname === ROUTES.cartLogin) ? (*/}\r\n {/* */}\r\n {/*) : null}*/}\r\n {/*{IS_PRODUCT_JOURNEY && (location.pathname === ROUTES.cartRegister) ? (*/}\r\n {/* */}\r\n {/*) : null}*/}\r\n
    \r\n )}\r\n
    \r\n )\r\n};\r\n\r\nLookListContentHeaderRightSide.propTypes = {\r\n onBackClick: PropTypes.func,\r\n withoutSave: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {isMobile} = store.serverState;\r\n const {cartItems} = store.cartState;\r\n const {userIsLoggedIn} = store.userState;\r\n const fabricatorData = store.fabricatorState;\r\n\r\n return {\r\n isMobile,\r\n cartItems,\r\n userIsLoggedIn,\r\n fabricatorData,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookOverlayOpened,\r\n setLookPageOpened,\r\n setLookOpened,\r\n};\r\n\r\nexport default injectIntl(\r\n withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(LookListContentHeaderRightSide)\r\n )\r\n)\r\n","import {useEffect, useState} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport {getCartItemsCount} from \"../grohe/groheNavigation/groheFunctions\";\r\nimport {LOOK_OVERLAYS} from \"../core/constants\";\r\nimport {setLookOverlayOpened} from \"../../../actions/lookFunctions\";\r\nimport {setShowUnlockCalculations} from \"../../../actions/unlockCalculationsFunctions\";\r\n\r\nconst WithCartAnimationsChecker = (props) => {\r\n\r\n const {children, fabricatorSettings, isPhoneNumberValidated, setLookOverlayOpened, setShowUnlockCalculations, cartItems,\r\n instList} = props;\r\n const [leadPopupWasOpened, setLeadPopupWasOpened] = useState(false);\r\n\r\n const cartItemsLength = getCartItemsCount(cartItems);\r\n const shouldOpenLeadCapturePopup = fabricatorSettings.leadCaptureShoppingCart && !isPhoneNumberValidated && !!(cartItemsLength || instList.length);\r\n\r\n useEffect(() => {\r\n if (shouldOpenLeadCapturePopup) {\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture);\r\n setShowUnlockCalculations(true);\r\n setLeadPopupWasOpened(true);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n return children(leadPopupWasOpened, shouldOpenLeadCapturePopup)\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {isPhoneNumberValidated} = store.userState;\r\n const {settings} = store.fabricatorState;\r\n const {cartItems} = store.cartState;\r\n const {instList} = store.instState;\r\n\r\n return {\r\n isPhoneNumberValidated,\r\n fabricatorSettings: settings,\r\n cartItems,\r\n instList,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookOverlayOpened,\r\n setShowUnlockCalculations,\r\n};\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(WithCartAnimationsChecker)\r\n)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport {withRouter} from \"react-router-dom\";\r\n\r\nimport Button from \"@mui/material/Button\";\r\nimport SvgIcon from \"@mui/material/SvgIcon\";\r\nimport RequestQuoteOutlinedIcon from '@mui/icons-material/RequestQuoteOutlined';\r\n\r\nimport {LookCartIcon} from \"../../common/icons\";\r\nimport {\r\n getPriceWithCurrency,\r\n getQuotePriceWithTaxes,\r\n getTotalPrice,\r\n isIframe,\r\n toFixedPrice\r\n} from \"../../../misc/helpers\";\r\n// import {showQuoteSavedNotification} from \"../../ui/successNotification\";\r\n// import {saveQuote} from \"../../../api/server-api\";\r\nimport WithAddToCartPostMessage from \"../hocs/withAddToCartPostMessage\";\r\nimport {cartItemInStock} from \"../lookNavigation/lookFunctions2\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS} from \"../../../analytics\";\r\nimport WithOpenMiniCartPostMessage from \"../hocs/withOpenMiniCartPostMessage\";\r\nimport {getCartItemsCount} from \"../grohe/groheNavigation/groheFunctions\";\r\nimport {ROUTES} from \"../../../routes\";\r\nimport {pricingIsLocked} from \"../lookNavigation/lookNavigationFunctions\";\r\nimport {setLookOverlayOpened, setLookPageOpened} from \"../../../actions/lookFunctions\";\r\nimport LookFeaturePriceLocked from \"../lookNavigation/lookMain/lookListFeature/lookFeaturePriceLocked\";\r\nimport {LOOK_OVERLAYS} from \"../core/constants\";\r\nimport {getAnalyticsEcommerceValues} from \"../../../analyticsEcommerceParams\";\r\n\r\n\r\nconst LookListFooter = (props) => {\r\n\r\n const {discountSections, fabricatorData, cartItems, isMobile, lookPageOpened, visualizersLoadedLength, history,\r\n setLookPageOpened, isPhoneNumberValidated, showUnlockCalculations, showTotalItems, setLookOverlayOpened,\r\n intl} = props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n const isLixil = isIframe() && fabricatorData.isLixil;\r\n const withoutCheckout = !fabricatorSettings.checkout;\r\n const totalPrice = getTotalPrice();\r\n let grandTotal = getQuotePriceWithTaxes(totalPrice, discountSections);\r\n\r\n const requestQuoteClick = () => {\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookListRequestQuote);\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture, \"quotation\");\r\n };\r\n\r\n const viewCartClick = (openMiniCartPostMessage) => {\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookListOpenMiniCart);\r\n const {currency, value, items} = getAnalyticsEcommerceValues();\r\n Analytics.sendEcommerceEvent(\"view_cart\", {currency, value, items});\r\n openMiniCartPostMessage();\r\n };\r\n\r\n const disabled = cartItems.every(cartItem => !cartItemInStock(cartItem) || cartItem.isRemoved || !cartItem.quantity);\r\n\r\n let itemsToCount = getCartItemsCount(cartItems, intl);\r\n let {pricingLocked, showPrice} = pricingIsLocked();\r\n if (!pricingLocked && fabricatorSettings.enableQuote && !isPhoneNumberValidated) {\r\n pricingLocked = true;\r\n }\r\n const hideTotal = !showPrice || (showUnlockCalculations && !showTotalItems.includes(\"total\"));\r\n const hideCheckout = (showUnlockCalculations && !showTotalItems.includes(\"checkout\"));\r\n\r\n const getListFooterButtonText = () => {\r\n if (fabricatorSettings.enableQuote && !isPhoneNumberValidated) {\r\n return \"leadCapturePopup.getQuote\"\r\n } else if (withoutCheckout) {\r\n return \"leadCapturePopup.saveDesignButton\"\r\n } else if (pricingLocked) {\r\n return \"look.list.footer.addToCartButtonLocked\"\r\n // } else if (fabricatorSettings.checkout && fabricatorSettings.hasPaymentGateway) {\r\n // return \"buttons.checkout\"\r\n } else {\r\n return \"look.list.footer.addToCartButton\" // lixil text\r\n }\r\n }\r\n\r\n const checkoutClick = (addToCartPostMessage) => {\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookListAddToCart);\r\n if (isLixil || !fabricatorSettings.checkout) {\r\n addToCartPostMessage();\r\n } else if (pricingLocked) {\r\n window.clearTimeout(window.leadCaptureTimeoutId);\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture);\r\n } else {\r\n setLookPageOpened(ROUTES.cart);\r\n history.push(ROUTES.cart);\r\n }\r\n // saveQuote({\r\n // submit: true,\r\n // })\r\n // .then((responseData) => {\r\n // document.kvConfig.jobId = responseData.jobId;\r\n // showQuoteSavedNotification(\"successNotification.titleQuoteCreated\");\r\n // setIsLoading(false);\r\n // })\r\n // .catch(() => {\r\n // setIsLoading(false);\r\n // })\r\n };\r\n\r\n return (\r\n
    \r\n {/*
    */}\r\n {/* */}\r\n {/*
    */}\r\n {isMobile && (lookPageOpened !== ROUTES.list) ? null : (\r\n
    \r\n {isMobile || !isLixil || !fabricatorSettings.checkout ? null : (\r\n \r\n {(openMiniCartPostMessage) => (\r\n \r\n )}\r\n \r\n )}\r\n \r\n {(addToCartPostMessage) => hideCheckout || (fabricatorData.isGrohe && !fabricatorSettings.checkout) ? null : (\r\n \r\n )}\r\n \r\n {fabricatorSettings.callForPricing ? (\r\n \r\n ) : null}\r\n {hideTotal ? null : (\r\n
    \r\n \r\n \r\n \r\n \r\n {pricingLocked ? : getPriceWithCurrency(fabricatorSettings, toFixedPrice(grandTotal), null, true)}\r\n \r\n
    \r\n )}\r\n
    \r\n )}\r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const fabricatorData = store.fabricatorState;\r\n const {discountSections} = store.priceWorksheetState;\r\n const {cartItems, cItemsAddedToParentCart, sureTax} = store.cartState;\r\n const {isMobile, visualizersLoaded} = store.serverState;\r\n const {lookPageOpened} = store.lookState;\r\n const {isPhoneNumberValidated} = store.userState; // to update component when user is logged in\r\n const {showUnlockCalculations, showTotalItems} = store.unlockCalculationsState;\r\n\r\n return {\r\n fabricatorData,\r\n discountSections,\r\n cartItems,\r\n cItemsAddedToParentCart,\r\n isMobile,\r\n lookPageOpened,\r\n visualizersLoadedLength: visualizersLoaded.length,\r\n isPhoneNumberValidated,\r\n sureTax, // to update when response received\r\n showUnlockCalculations,\r\n showTotalItems\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookPageOpened,\r\n setLookOverlayOpened,\r\n};\r\n\r\nexport default injectIntl(\r\n withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(LookListFooter)\r\n )\r\n)\r\n","import store from './../store';\r\nimport {useEffect, useState} from \"react\";\r\n\r\nimport {getCurrentLayout} from \"../bvcomponents/appLayout\";\r\nimport {setAllFeaturesLoaded} from \"./serverFunctions\";\r\nimport JsonApi from \"../api/jsonApi\";\r\nimport {useIsMounted} from \"../misc/helperHooks\";\r\nimport {getBvFeatures} from \"../api/server-api\";\r\n\r\n\r\nexport const downloadAllFeatures = async () => {\r\n const mainResponse = await JsonApi.getBathroomVisualizerData(100000);\r\n if (!mainResponse || !mainResponse.data || !mainResponse.data.features) {\r\n return false\r\n }\r\n const layout = getCurrentLayout();\r\n layout.loadNewFeatures(mainResponse.data);\r\n layout.getFeatures().forEach((parentGroup) => {\r\n parentGroup.relatedItems.forEach((relatedItem) => {\r\n relatedItem.allFeaturesReceived = true;\r\n })\r\n })\r\n store.dispatch(setAllFeaturesLoaded(document.kvConfig.visualizerType))\r\n return true\r\n};\r\n\r\nexport const useFeaturesRoomLayoutsChecker = () => { // not used for now!\r\n\r\n const [featuresLoaded, setFeaturesLoaded] = useState(false);\r\n const isMounted = useIsMounted();\r\n\r\n const checkFeatures = async () => {\r\n const layout = getCurrentLayout();\r\n const featureGroupsObjects = layout.getActiveFeatures(true, false, true)\r\n .filter(fgObject => !fgObject.partId.includes(\"decor_\") && !fgObject.partId.includes(\"attachment\")); // they are already received\r\n // console.log(\"featureGroupsObjects\", featureGroupsObjects);\r\n let needToRequestNames = [];\r\n featureGroupsObjects.forEach((featureGroupObject) => {\r\n if (featureGroupObject.featureGroup\r\n && !featureGroupObject.realFeaturesReceived\r\n && featureGroupObject.cartFeature\r\n && featureGroupObject.cartFeature.dbFeature\r\n && featureGroupObject.cartFeature.dbFeature.sharedFeatureName\r\n && !needToRequestNames.includes(featureGroupObject.cartFeature.dbFeature.sharedFeatureName)\r\n && (!featureGroupObject.featureGroup.alreadyRequestedFeatureNames\r\n || !featureGroupObject.featureGroup.alreadyRequestedFeatureNames.includes(featureGroupObject.cartFeature.dbFeature.sharedFeatureName))) {\r\n if (!featureGroupObject.featureGroup.alreadyRequestedFeatureNames) {\r\n featureGroupObject.featureGroup.alreadyRequestedFeatureNames = [];\r\n }\r\n needToRequestNames.push(featureGroupObject.cartFeature.dbFeature.sharedFeatureName)\r\n featureGroupObject.featureGroup.alreadyRequestedFeatureNames.push(featureGroupObject.cartFeature.dbFeature.sharedFeatureName)\r\n }\r\n });\r\n console.log(\"needToRequestNames\", needToRequestNames);\r\n if (!needToRequestNames.length) {\r\n setFeaturesLoaded(true)\r\n return\r\n }\r\n const missingSkusResponse = await getBvFeatures(null, needToRequestNames, true);\r\n if (missingSkusResponse && missingSkusResponse.data) {\r\n console.log(\"missingSkusResponse\", missingSkusResponse.data);\r\n layout.loadNewFeatures(missingSkusResponse.data);\r\n }\r\n if (isMounted()) {\r\n setFeaturesLoaded(true)\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n checkFeatures()\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n return featuresLoaded\r\n}\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {connect} from \"react-redux\";\r\n\r\nimport CheckIcon from '@mui/icons-material/Check';\r\n\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport {checkIfFeatureDisabled} from \"../../lookFunctions\";\r\n\r\nconst LookListFeatureCheckmark = (props) => {\r\n\r\n const {lookFeature, lookActiveCategory, lookActiveFeature, isEmpty} = props;\r\n\r\n if (!lookActiveCategory || isEmpty || !lookActiveFeature) {\r\n return null\r\n }\r\n\r\n if (lookFeature.getSplittedFeatureName() !== lookActiveFeature.getSplittedFeatureName()) {\r\n return null\r\n }\r\n\r\n const parent = lookFeature.getParent();\r\n const alreadyDisabled = checkIfFeatureDisabled(lookFeature, parent, true);\r\n\r\n if (alreadyDisabled) {\r\n return null\r\n }\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n};\r\n\r\nLookListFeatureCheckmark.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface),\r\n isEmpty: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeature, lookActiveCategory} = store.lookState;\r\n const {canvasCount} = store.bathroomVisualizerState;\r\n return {\r\n lookActiveFeature,\r\n lookActiveCategory,\r\n canvasCount\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(LookListFeatureCheckmark)\r\n","import React, {Fragment, useEffect} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport $ from \"jquery\";\r\n\r\nimport {\r\n setUnlockCalculationsStep, showUnlockCalculationsCartItems,\r\n showUnlockCalculationsTotalItems\r\n} from \"../../../../../actions/unlockCalculationsFunctions\";\r\nimport {CART_ITEM_ADDED_BY} from \"../../../../shoppingCart/cartItemInterface\";\r\nimport UnlockCalculationStep from \"./unlockCalculationStep\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport {sortCartItemsForListPage} from \"../../../lookNavigation/lookFunctions2\";\r\nimport {ROUTES} from \"../../../../../routes\";\r\nimport {showWizardInsteadOfQT} from \"../../../lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {WIZARD_GROUP_TYPES} from \"../../../../../interfaces/wizardItemInterface\";\r\nimport {isSameVisualizerWizard} from \"../../../lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\n\r\nexport const getUnlockCalculationsCartItems = (cartItems, wizardList, wizardIsActive, allWizardsValues, lookPageOpened, quotes) => {\r\n let cartItemsToInclude = [];\r\n if (showWizardInsteadOfQT(wizardList, wizardIsActive)) {\r\n quotes.forEach((quote, quoteIndex) => {\r\n wizardList.forEach(wizardItem => {\r\n const existingAllObject = allWizardsValues.find(wizSelObject => {\r\n return wizSelObject.wizardItemId === wizardItem.id && wizSelObject.quoteIndex === quoteIndex\r\n && isSameVisualizerWizard(wizSelObject)\r\n });\r\n if (existingAllObject && existingAllObject.wizardSelectedValues) {\r\n Object.keys(existingAllObject.wizardSelectedValues).forEach(key => {\r\n if (existingAllObject.wizardSelectedValues[key].wizardGroup\r\n && existingAllObject.wizardSelectedValues[key].wizardGroup.nodeType === WIZARD_GROUP_TYPES.custom) {\r\n cartItemsToInclude.push({\r\n id: quoteIndex + existingAllObject.wizardSelectedValues[key].wizardGroup.id\r\n });\r\n }\r\n let currentCartItems = cartItems.filter(cartItem => {\r\n return cartItem.cartFeature && (cartItem.currentQuote === quoteIndex)\r\n && +key === cartItem.fromWizardStep\r\n && !cartItemsToInclude.includes(cartItem.id)\r\n });\r\n if (currentCartItems.length) {\r\n cartItemsToInclude = [...cartItemsToInclude, ...currentCartItems];\r\n }\r\n })\r\n }\r\n })\r\n cartItems.forEach(cartItem => {\r\n if (!cartItemsToInclude.some(cItem => cItem.id === cartItem.id)) {\r\n cartItemsToInclude = [...cartItemsToInclude, cartItem];\r\n }\r\n })\r\n })\r\n } else {\r\n cartItemsToInclude = cartItems;\r\n }\r\n if (IS_PRODUCT_JOURNEY) {\r\n cartItemsToInclude = cartItemsToInclude.filter(cItem => cItem.addedBy === CART_ITEM_ADDED_BY.user);\r\n } else if (lookPageOpened === ROUTES.list) {\r\n cartItemsToInclude = sortCartItemsForListPage(cartItemsToInclude)\r\n }\r\n\r\n return cartItemsToInclude\r\n}\r\n\r\nconst UnlockCalculationSteps = (props) => {\r\n\r\n const {setUnlockCalculationsStep, cartItems, showUnlockCalculationsCartItems, showUnlockCalculationsTotalItems,\r\n lookPageOpened, wizardList, wizardIsActive, allWizardsValues, quotes} = props;\r\n\r\n const cartItemsToInclude = getUnlockCalculationsCartItems(cartItems, wizardList, wizardIsActive,\r\n allWizardsValues, lookPageOpened, quotes);\r\n\r\n useEffect(() => {\r\n runAnimations()\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n return () => {\r\n showUnlockCalculationsCartItems([]);\r\n showUnlockCalculationsTotalItems([]);\r\n setUnlockCalculationsStep(0);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const animateCartItems = async () => {\r\n let showCartItems = [];\r\n for (const [elementIndex, element] of cartItemsToInclude.entries()) {\r\n // const waitTime = this.props.cartItems.length < 7 ? 500*(index + 1) : 300*(index + 1);\r\n if (elementIndex <= 1) {\r\n await new Promise(resolve => setTimeout(resolve, 750));\r\n showCartItems.push(element.id);\r\n showUnlockCalculationsCartItems([...showCartItems]);\r\n } else {\r\n setTimeout(() => {\r\n showCartItems.push(element.id);\r\n showUnlockCalculationsCartItems([...showCartItems]);\r\n }, 750 * (elementIndex - 1))\r\n }\r\n }\r\n };\r\n\r\n const showTotalItems = async () => {\r\n await new Promise(resolve => setTimeout(resolve, 500));\r\n showUnlockCalculationsTotalItems([\"tax\"]);\r\n await new Promise(resolve => setTimeout(resolve, 1000));\r\n showUnlockCalculationsTotalItems([\"tax\", \"total\"]);\r\n await new Promise(resolve => setTimeout(resolve, 1500));\r\n showUnlockCalculationsTotalItems([\"tax\", \"total\", \"checkout\"]);\r\n };\r\n\r\n const runAnimations = async () => {\r\n await new Promise(resolve => setTimeout(resolve, 500));\r\n await animateCartItems();\r\n await new Promise(resolve => setTimeout(resolve, 1500));\r\n setUnlockCalculationsStep(1);\r\n await new Promise(resolve => setTimeout(resolve, 2000));\r\n setUnlockCalculationsStep(2);\r\n await showTotalItems();\r\n await exitAnimations();\r\n };\r\n\r\n const exitAnimations = async () => {\r\n const overlayElement = document.querySelector(\".look-overlay--style\");\r\n if (overlayElement) {\r\n setUnlockCalculationsStep(3);\r\n $(overlayElement).fadeOut(300, () => {\r\n window.clearTimeout(window.leadCaptureTimeoutId);\r\n window.leadCaptureTimeoutId = setTimeout(() => {\r\n setUnlockCalculationsStep(4);\r\n $(overlayElement).fadeIn(300);\r\n }, 4000);\r\n })\r\n } else {\r\n setUnlockCalculationsStep(3);\r\n }\r\n };\r\n\r\n return (\r\n \r\n {[0,1,2].map(stepIndex => )}\r\n \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {unlockCalculationsStep, showTotalItems} = store.unlockCalculationsState;\r\n const {cartItems} = store.cartState;\r\n const {lookPageOpened} = store.lookState;\r\n const {wizardList, wizardIsActive, allWizardsValues} = store.wizardState;\r\n const {quotes} = store.quotesState;\r\n\r\n return {\r\n cartItems,\r\n unlockCalculationsStep,\r\n showTotalItems,\r\n lookPageOpened,\r\n wizardList,\r\n wizardIsActive,\r\n allWizardsValues,\r\n quotes,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setUnlockCalculationsStep,\r\n showUnlockCalculationsCartItems,\r\n showUnlockCalculationsTotalItems,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(UnlockCalculationSteps)\r\n","import React from 'react';\r\n\r\nconst LoadingDots = () => (\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nLoadingDots.displayName = 'LoadingDots';\r\n\r\nexport default LoadingDots;\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {connect} from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport {withRouter} from \"react-router-dom\";\r\n\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport {checkIfFeatureDisabled} from \"../../lookFunctions\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport {getFeatureSectionIsHidden, getFeatureUrl} from \"../../lookFunctions2\";\r\nimport {setLookActiveFeature} from \"../../../../../actions/lookFunctions\";\r\nimport LookMobileInfoButtonAnimatedIcon from \"../../../animations/lookMobileInfoButtonAnimatedIcon\";\r\nimport {setWizardShowFeatureSection} from \"../../../../../actions/wizardFunctions\";\r\n\r\nconst LookListActiveFeatureMobileButton = (props) => {\r\n\r\n const {lookFeature, setLookActiveFeature, history, isActive, lookLockedTutorial, isWizard,\r\n setWizardShowFeatureSection} = props;\r\n\r\n if (!isActive || lookLockedTutorial.visible) {\r\n return null\r\n }\r\n\r\n if (!isWizard) {\r\n const featureSectionIsHidden = getFeatureSectionIsHidden(lookFeature);\r\n if (featureSectionIsHidden) {\r\n return null\r\n }\r\n\r\n const parent = lookFeature.getParent();\r\n const alreadyDisabled = checkIfFeatureDisabled(lookFeature, parent, true);\r\n\r\n if (alreadyDisabled) {\r\n return null\r\n }\r\n }\r\n\r\n const infoButtonClick = (event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookMobileActiveFeatureButton);\r\n\r\n if (isWizard) {\r\n setWizardShowFeatureSection(true);\r\n return\r\n }\r\n\r\n setLookActiveFeature(lookFeature);\r\n history.push(getFeatureUrl(lookFeature, true));\r\n }\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n};\r\n\r\nLookListActiveFeatureMobileButton.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface).isRequired,\r\n isActive: PropTypes.bool,\r\n isWizard: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {canvasCount} = store.bathroomVisualizerState;\r\n const {lookLockedTutorial} = store.lookState;\r\n\r\n return {\r\n canvasCount,\r\n lookLockedTutorial,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookActiveFeature,\r\n setWizardShowFeatureSection,\r\n};\r\n\r\nexport default withRouter(\r\n injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookListActiveFeatureMobileButton)\r\n )\r\n)\r\n","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport { toggleInstOpened } from \"../../actions/actionFunctions\";\r\n\r\nclass InstallButton extends Component {\r\n\r\n static propTypes = {\r\n questionShown: PropTypes.bool\r\n };\r\n\r\n render() {\r\n let fabSettings = this.props.fabricatorSettings;\r\n return (\r\n \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n questionNoClicked: store.cartState.questionNoClicked,\r\n instOpened: store.instState.instOpened,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n toggleInstOpened\r\n})(InstallButton);\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport {toggleShowAllQuotesCartItemsList, toggleShowMobileQuotes} from \"../../actions/shoppingCartFunctions\";\r\n\r\nconst ShoppingCartListSwitcher = (props) => {\r\n\r\n const {quotes, showAllQuotesCartItemsList, toggleShowAllQuotesCartItemsList, toggleShowMobileQuotes} = props;\r\n\r\n if (quotes.length <= 1) {\r\n return null\r\n }\r\n\r\n const handleButtonClick = () => {\r\n toggleShowMobileQuotes(false);\r\n toggleShowAllQuotesCartItemsList(!showAllQuotesCartItemsList);\r\n };\r\n\r\n return (\r\n
    \r\n \r\n \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {showAllQuotesCartItemsList} = store.cartState;\r\n return {\r\n quotes: store.quotesState.quotes,\r\n showAllQuotesCartItemsList,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n toggleShowAllQuotesCartItemsList,\r\n toggleShowMobileQuotes\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ShoppingCartListSwitcher);\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport Analytics from \"../../../analytics\";\r\nimport {changeStateToQuote} from \"../../../actions/actionFunctions\";\r\nimport {toggleShowAdvancedQuoting} from \"../../../actions/advancedQuotingFunctions\";\r\nimport {toggleShowAllQuotesCartItemsList, toggleShowMobileQuotes} from \"../../../actions/shoppingCartFunctions\";\r\n\r\nconst AdvancedQuotingSwitcher = (props) => {\r\n\r\n const {showAdvancedQuoting, changeStateToQuote, toggleShowAdvancedQuoting, toggleShowMobileQuotes} = props;\r\n\r\n if (!document.kvConfig.isBackend) {\r\n return null\r\n }\r\n\r\n const handleButtonClick = () => {\r\n Analytics.sendClickEvent(`advanced-quoting-click-${!showAdvancedQuoting ? \"on\" : \"off\"}`);\r\n changeStateToQuote();\r\n toggleShowMobileQuotes(false);\r\n toggleShowAdvancedQuoting(!showAdvancedQuoting);\r\n };\r\n\r\n return (\r\n
    \r\n \r\n \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {showAdvancedQuoting} = store.advancedQuotingState;\r\n return {\r\n showAdvancedQuoting,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n changeStateToQuote,\r\n toggleShowAdvancedQuoting,\r\n toggleShowAllQuotesCartItemsList,\r\n toggleShowMobileQuotes\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(AdvancedQuotingSwitcher);\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n// import {setJobId} from \"../../../actions/actionFunctions\";\r\nimport {setAssignQuoteCloneMode, toggleShowAssignQuotePopup} from \"../../../actions/assignPopupFunctions\";\r\nimport Analytics from \"../../../analytics\";\r\nimport Config from \"../../../config\";\r\n\r\nconst CloneQuoteButton = (props) => {\r\n\r\n // const {setJobId, toggleShowAssignQuotePopup} = props;\r\n const {toggleShowAssignQuotePopup, fabricatorData, setAssignQuoteCloneMode} = props;\r\n\r\n const cloneButtonIsVisible = Config.isDevMode() || (fabricatorData.isCaesarStone && document.kvConfig.showBackToDashboard);\r\n if (!cloneButtonIsVisible) {\r\n return null\r\n }\r\n\r\n const handleCloneQuoteClick = () => {\r\n Analytics.sendClickEvent(\"order-complete-clone-quote\");\r\n // document.kvConfig.jobId = null; // clear current job\r\n // setJobId(0); // clear current job\r\n setAssignQuoteCloneMode(true); // show new assign quote popup\r\n toggleShowAssignQuotePopup(true); // show new assign quote popup\r\n }\r\n\r\n return (\r\n \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n // setJobId,\r\n setAssignQuoteCloneMode,\r\n toggleShowAssignQuotePopup\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(CloneQuoteButton)\r\n\r\n","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\n\r\nimport {baseNewImagesPath} from \"../assets\";\r\nimport MobileMenu from \"../ui/mobileMenu\";\r\nimport ShoppingCartButton from \"../ui/shoppingCartButton\";\r\nimport UserLoginButton from './../ui/userLoginButton';\r\n\r\nclass ProjectScopeMobileHeader extends Component {\r\n\r\n render() {\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n const hardCodedLogo = `${baseNewImagesPath}images/Logos/QuoteCountertops-Logo.svg`;\r\n const logoStyles = this.props.fabricatorData.logoUrl ? {} : {\r\n maxWidth: \"500px\",\r\n width: \"100%\"\r\n };\r\n const initialFlowIsRunning = document.kvConfig.initialFlowEnabled && this.props.initialFlowStep !== 3;\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n {this.props.fabricatorData.received ? (\r\n
    \r\n \"Logo\"/\r\n
    \r\n ) : null}\r\n {fabricatorSettings.showPricing && !initialFlowIsRunning ? (\r\n
    \r\n \r\n
    \r\n ): null}\r\n {(fabricatorSettings.leadCaptureOnQuote && !initialFlowIsRunning &&\r\n !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote))\r\n ? \r\n : null}\r\n
    \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n initialFlowStep: store.initialFlowState.initialFlowStep\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(ProjectScopeMobileHeader);\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport $ from \"jquery\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport { setCameFromPage, toggleSelectionWindow, toggleBathroomVisualizerOpen, changeActivePartRelatedItemIndex,\r\n setQtActiveCategory } from '../../actions/actionFunctions';\r\nimport { homePage, getFeatureGroupIconURL } from \"../bvComponent/core/assets\";\r\n\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport Analytics from './../../analytics';\r\nimport ProjectScopeFunctions from './projectScopeFunctions';\r\n\r\nclass ProjectScopeSections extends ProjectScopeFunctions {\r\n\r\n componentDidMount() {\r\n $(window).on(ActionTypes.UPDATE_ALL_ITEMS, this.updateSections);\r\n }\r\n componentWillUnmount() {\r\n $(window).off(ActionTypes.UPDATE_ALL_ITEMS, this.updateSections);\r\n }\r\n\r\n updateSections = () => {\r\n this.forceUpdate();\r\n };\r\n\r\n goToMaterialsPage = (subPart, parentName) => {\r\n Analytics.sendClickEvent('go-to-materials-' + subPart.partId);\r\n this.goToMaterialsPageCommon(subPart, parentName)\r\n };\r\n\r\n checkForWallsComplexGroup = (qtCategory) => {\r\n return qtCategory.subParts\r\n .map((subPart, subPartIndex) => {\r\n const parent = subPart.part.getParent && subPart.part.getParent(); // floor check\r\n if (parent && parent.partName === \"Walls\" && parent.subParts().every(wallsSubPart => {\r\n return qtCategory.subParts.some(qtCatSubPart => qtCatSubPart.part.partId === wallsSubPart.part.partId)\r\n })) { // here we check - if all walls are included - show just the first one\r\n if (subPartIndex) {\r\n return null\r\n } else {\r\n subPart.part.homePageTitle = \"Walls\";\r\n return subPart\r\n }\r\n }\r\n return subPart\r\n })\r\n .filter(subPart => subPart)\r\n };\r\n\r\n render() {\r\n const sections = this.getSections();\r\n return (\r\n
    \r\n {sections.map((section, index) => {\r\n return section.items && section.items.length ? (\r\n
    \r\n

    \r\n \r\n

    \r\n
      \r\n {section.items.map((subPart, index) => {\r\n // console.log('subPart.partId', subPart.part.partId);\r\n const image = subPart.part.featuredImage || homePage[subPart.part.partId]\r\n || subPart.part.customImageUrl || getFeatureGroupIconURL(subPart.part.partName);\r\n const isCustom = !homePage[subPart.part.partId] && subPart.part.customImageUrl;\r\n const style = {\r\n backgroundImage: image ? `url(${image})` : 'none'\r\n };\r\n if (subPart.part.featuredImage) {\r\n style.backgroundSize = \"contain\";\r\n }\r\n\r\n return (\r\n
    • this.goToMaterialsPage(subPart.part, section.title)}>\r\n
      \r\n {(subPart.part.activeFeature && subPart.part.activeFeature.dbFeature.customGroupName) || subPart.part.homePageTitle || subPart.text}\r\n
      \r\n
    • \r\n )\r\n })}\r\n
    \r\n
    \r\n ) : null\r\n })}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n layoutParts: store.stepsState.layoutParts,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n toggleBathroomVisualizerOpen,\r\n toggleSelectionWindow,\r\n setCameFromPage,\r\n changeActivePartRelatedItemIndex,\r\n setQtActiveCategory\r\n})(ProjectScopeSections);\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport {withRouter} from \"react-router-dom\";\r\n\r\nimport {\r\n toggleSelectionFeatureInfo,\r\n toggleUserPopup,\r\n changeSelectionInfoQuantity,\r\n unlockPricing,\r\n changeMaterialsInfoFeatureModules,\r\n addToRecentlyViewed,\r\n setQtActiveCategory,\r\n togglePulseFeatureInfoQuantity,\r\n setCameFromPage\r\n} from \"../../../actions/actionFunctions\";\r\nimport Quantity from \"../../ui/quantity\";\r\nimport InstView from \"../../installation/instView\";\r\nimport Analytics from './../../../analytics';\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport FeatureInfoAssociated from \"./featureInfoAssociated\";\r\nimport FeatureInfoDesc from \"./featureInfoDesc\";\r\nimport FeatureInfoPrice from \"./featureInfoPrice\";\r\nimport FeatureInfoImage from \"./featureInfoImage\";\r\nimport FeatureInfoDescription from \"./featureInfoDescription\";\r\nimport FeatureInfoImagesMobile from \"./featureInfoImagesMobile\";\r\nimport {\r\n canShowSqftButtonForFeature,\r\n canShowSqftCabinetButtonForFeature,\r\n getFeatureIsLocked,\r\n getFeatureUnit\r\n} from \"../../../misc/helpers\";\r\nimport AddProductNoteButton from \"../../ui/addProductNoteButton\";\r\nimport AddProductNoteEditor from \"./addProductNoteEditor\";\r\nimport {MEASURE_UNITS, SQFT_GROUP} from \"../../sqft/constants\";\r\nimport {COUNTERTOP_GROUP} from \"../../kvComponent/core/constants\";\r\nimport {toggleNavItemPositionModal} from \"../../../actions/navigationFunctions\";\r\n// import {setCartItemEditFeature} from \"../../../actions/shoppingCartFunctions\";\r\nimport {enableSquareFootage, setSqftFromFeature, setSquareFootageGroup} from \"../../../actions/sqftFunctions\";\r\nimport {isEnglish} from \"../../../translatesProvider\";\r\nimport {showWizardInsteadOfQT} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {getFeatureGroupFeaturesQuantity} from \"../../look/lookNavigation/lookNavigationFunctions\";\r\n\r\nclass FeatureInfo extends Component {\r\n\r\n static propTypes = {\r\n features: PropTypes.array.isRequired,\r\n handleFeatureClick: PropTypes.func.isRequired,\r\n changeActivePartRelatedItem: PropTypes.func.isRequired,\r\n activePart: PropTypes.object,\r\n };\r\n\r\n componentDidMount() {\r\n const layout = getCurrentLayout();\r\n const activeFeature = this.props.selectionFeatureInfo;\r\n if (this.props.fabricatorData.settings.showRecentlyViewedItems) {\r\n this.props.addToRecentlyViewed(activeFeature);\r\n }\r\n // console.log('selectionFeatureInfo', this.props.selectionFeatureInfo);\r\n const navItemParent = activeFeature.getParent();\r\n const parentSimple = (navItemParent.partName === \"Floor\" && navItemParent.partId !== \"shower_floor\")\r\n || navItemParent.partName === \"Toilet\"\r\n || (navItemParent.partName === \"Ceiling\" &&\r\n (document.kvConfig.visualizerType === \"Bathroom\" || document.kvConfig.visualizerType === \"BV\"))\r\n || navItemParent.partName === \"Window\";\r\n // console.log('parentSimple', parentSimple);\r\n // console.log('navItemParent', navItemParent);\r\n if (parentSimple && !layout.qtCategories) {\r\n this.props.changeActivePartRelatedItem(0)\r\n } else {\r\n const {wizardList, wizardIsActive} = this.props;\r\n let subParts = [];\r\n if (layout.qtCategories && this.props.qtActiveCategory && !showWizardInsteadOfQT(wizardList, wizardIsActive)) {\r\n const qtActiveCategory = layout.qtCategories.find(qtCategory => qtCategory.name === this.props.qtActiveCategory);\r\n subParts = qtActiveCategory ? qtActiveCategory.subParts : this.props.activePart.subParts(false)\r\n } else {\r\n subParts = this.props.activePart.subParts(false);\r\n }\r\n\r\n const nextActivePartRelatedItemIndex = subParts.findIndex((subPart) => {\r\n return subPart.part.partId === navItemParent.partId\r\n });\r\n // console.log('nextActivePartRelatedItemIndex', nextActivePartRelatedItemIndex);\r\n this.props.changeActivePartRelatedItem(nextActivePartRelatedItemIndex)\r\n }\r\n // console.log('cartItem', cartItem);\r\n if (this.props.selectionInfoQuantity <= 1) {\r\n this.props.changeSelectionInfoQuantity(this.getDefaultFeatureQuantity());\r\n }\r\n\r\n if ((document.kvConfig.visualizerType === \"Kitchen\" || document.kvConfig.visualizerType === \"KV\")\r\n && activeFeature.partId === \"top_cabinet\" && activeFeature.metaData[\"Module\"]) {\r\n const activeFeatures = this.props.activePart.layout.getActiveFeatures();\r\n const materialsInfoFeatureModules = activeFeatures\r\n .filter(feature => feature.partId.includes(\"top_cabinet_module\"))\r\n .map(feature => {\r\n const existInCart = this.props.cartItems.find(cartItem => cartItem.partId === feature.partId);\r\n return {\r\n ...feature,\r\n quantity: existInCart ? existInCart.quantity : feature.quantity\r\n }\r\n });\r\n // console.log(\"this.props.cartItems\", cartItems);\r\n // console.log(\"this.props.activePart.layout.getActiveFeatures\", activeFeatures);\r\n this.props.changeMaterialsInfoFeatureModules(materialsInfoFeatureModules)\r\n }\r\n\r\n if (this.props.navItemPositionModal && this.props.navItemPositionModal.popupOpened) {\r\n this.props.toggleNavItemPositionModal({\r\n popupOpened: false,\r\n });\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this.props.toggleSelectionFeatureInfo(null);\r\n this.props.changeMaterialsInfoFeatureModules([]);\r\n this.props.changeSelectionInfoQuantity(1);\r\n // if (this.props.cartItemEditFeature && !window.location.href.includes(\"sqft\")) {\r\n // this.props.setCartItemEditFeature(null);\r\n // }\r\n }\r\n\r\n getDefaultFeatureQuantity = () => {\r\n const activeFeature = this.props.selectionFeatureInfo;\r\n // const cartItem = this.props.cartItems.find(cartItem => {\r\n // return (cartItem.cartFeature.dbFeature.id === activeFeature.dbFeature.id)\r\n // && (cartItem.currentQuote === this.props.activeQuoteIndex)\r\n // });\r\n // if (cartItem) {\r\n // return cartItem.quantity\r\n // }\r\n if (this.props.cartItemEditFeature) {\r\n return this.props.cartItemEditFeature.quantity\r\n } else if (this.props.advancedQuotingSearchItem) {\r\n return this.props.advancedQuotingSearchItem.quantity\r\n }\r\n\r\n const featureGroup = activeFeature.getParent();\r\n\r\n const sqftQuantity = (activeFeature.sqftQuantity && activeFeature.sqftQuantity[this.props.activeQuoteIndex])\r\n || (featureGroup.sqftQuantity && featureGroup.sqftQuantity[this.props.activeQuoteIndex]);\r\n if (sqftQuantity) {\r\n return sqftQuantity\r\n }\r\n\r\n const defaultOrPositionsQuantity = getFeatureGroupFeaturesQuantity(activeFeature, featureGroup);\r\n\r\n if (defaultOrPositionsQuantity && (defaultOrPositionsQuantity !== 1)) {\r\n return defaultOrPositionsQuantity\r\n }\r\n\r\n const zeroQuantityPartIdsArray = [\"vanity_countertop\", \"vanity_backsplash\", \"countertop\", \"backsplash\", \"center_island_countertop\"];\r\n if (zeroQuantityPartIdsArray.includes(activeFeature.partId)) {\r\n return 0\r\n }\r\n\r\n return 1;\r\n };\r\n\r\n handleChangeItemQuantity = (quantity) => {\r\n if (quantity && this.props.pulseFeatureInfoQuantity) {\r\n this.props.togglePulseFeatureInfoQuantity(false);\r\n }\r\n this.props.changeSelectionInfoQuantity(quantity);\r\n };\r\n\r\n handleSQFTButtonClick = () => {\r\n Analytics.sendClickEvent(\"sqft-opened\");\r\n this.props.setCameFromPage(this.props.selectionFeatureInfo);\r\n this.props.setSqftFromFeature(this.props.cartItemEditFeature || {cartFeature: this.props.selectionFeatureInfo});\r\n //enable sqft trough redux\r\n this.props.enableSquareFootage(true);\r\n\r\n //enable sqft trough url\r\n //hashHistory.push(\"sqft\");\r\n };\r\n\r\n handleSQFTCabnetButtonClick = () => {\r\n Analytics.sendClickEvent(\"sqft-opened\");\r\n this.props.setCameFromPage(this.props.selectionFeatureInfo);\r\n this.props.setSqftFromFeature(this.props.cartItemEditFeature || {cartFeature: this.props.selectionFeatureInfo});\r\n //enable sqft trough redux\r\n this.props.enableSquareFootage(true);\r\n this.props.setSquareFootageGroup(SQFT_GROUP.cabinets);\r\n\r\n //enable sqft trough url\r\n //hashHistory.push(\"sqft?cabinets=1\");\r\n };\r\n\r\n getFeatureModules = () => {\r\n const activeFeatures = this.props.activePart.layout.getActiveFeatures();\r\n return this.props.materialsInfoFeatureModules.map((materialsQuantity, materialsQuantityIndex) => {\r\n const activeFeature = activeFeatures.find(feature => feature.partId === materialsQuantity.partId);\r\n return (\r\n
    \r\n
    \r\n
    \r\n

    \r\n {\r\n const materialsInfoFeatureModules = this.props.materialsInfoFeatureModules.map(mQuantity => {\r\n if (mQuantity.partId === materialsQuantity.partId) {\r\n mQuantity.quantity = quantity\r\n }\r\n return mQuantity\r\n });\r\n this.props.changeMaterialsInfoFeatureModules(materialsInfoFeatureModules);\r\n }}\r\n value={materialsQuantity.quantity}/>\r\n

    \r\n
    \r\n )\r\n })\r\n };\r\n\r\n render() {\r\n const activeFeature = this.props.selectionFeatureInfo;\r\n const {productNoteEditorVisible, fabricatorData, intl} = this.props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n const relatedFeatures = activeFeature.getFeatureRelatedFeatures();\r\n const associatedProduct = Array.isArray(relatedFeatures) && relatedFeatures.length;\r\n\r\n const showPriceLocked = getFeatureIsLocked(activeFeature);\r\n const showPrice = fabricatorSettings.showPricing && !fabricatorData.hideCheckoutBreakdownCost && !showPriceLocked && !fabricatorData.hidePricesFromUser;\r\n\r\n const isMobile = this.props.windowWidth < 991;\r\n\r\n const showFeatureModules = (document.kvConfig.visualizerType === \"Kitchen\" || document.kvConfig.visualizerType === \"KV\")\r\n && activeFeature.partId === \"top_cabinet\" && activeFeature.metaData[\"Module\"];\r\n\r\n const availableMeasureUnits = [...COUNTERTOP_GROUP, \"edge\", \"edge_profile\", \"center_island_edge\"];\r\n const unit = getFeatureUnit(activeFeature, intl, fabricatorData, this.props.selectionInfoQuantity);\r\n const lowerCasedUnit = unit.toLowerCase();\r\n const allowDecimals = (fabricatorSettings.measureUnit === MEASURE_UNITS.Metric) && (\r\n availableMeasureUnits.includes(activeFeature.partId) || [\"lm\", \"sm\", \"mm\"].some(um => um === lowerCasedUnit)\r\n );\r\n const unitText = activeFeature.getParent ? activeFeature.getParent().unitText : null;\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n

    \r\n \r\n

    \r\n {!isMobile ? : null}\r\n \r\n
    \r\n
    \r\n {showPrice ? : null}\r\n {activeFeature.dbFeature.hideQuantity ? null :\r\n showFeatureModules\r\n ? this.getFeatureModules()\r\n : (\r\n
    \r\n \r\n {(label) => (\r\n \r\n )}\r\n \r\n
    \r\n )\r\n }\r\n
    \r\n {canShowSqftButtonForFeature(activeFeature, fabricatorSettings) ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n {canShowSqftCabinetButtonForFeature(activeFeature, fabricatorSettings) ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n {isMobile ?
    : null}\r\n
    \r\n {isMobile ? null : }\r\n
    \r\n
    \r\n {isMobile ? : null}\r\n {isMobile ? : null}\r\n {associatedProduct ? : null}\r\n
    \r\n \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {selectionInfoQuantity, pulseFeatureInfoQuantity, materialsInfoFeatureModules, selectionGroup,\r\n selectionFeatureInfo, productNoteEditorVisible, featureInfoCount} = store.selectionState;\r\n const {cartItems, cartItemEditFeature} = store.cartState;\r\n const {wizardList, wizardIsActive} = store.wizardState;\r\n return {\r\n selectionFeatureInfo,\r\n selectionGroup,\r\n selectionInfoQuantity,\r\n pulseFeatureInfoQuantity,\r\n materialsInfoFeatureModules,\r\n productNoteEditorVisible,\r\n windowWidth: store.serverState.windowWidth,\r\n cartItems,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPriceUnlocked: store.userState.userIsLoggedIn && store.userState.isPhoneNumberValidated,\r\n fabricatorData: store.fabricatorState,\r\n qtActiveCategory: store.qtState.qtActiveCategory,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n advancedQuotingSearchItem: store.advancedQuotingState.advancedQuotingSearchItem,\r\n navItemPositionModal: store.navigationState.navItemPositionModal,\r\n cartItemEditFeature,\r\n featureInfoCount,\r\n wizardList,\r\n wizardIsActive,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n toggleUserPopup,\r\n changeSelectionInfoQuantity,\r\n toggleSelectionFeatureInfo,\r\n changeMaterialsInfoFeatureModules,\r\n unlockPricing,\r\n setCameFromPage,\r\n addToRecentlyViewed,\r\n setQtActiveCategory,\r\n togglePulseFeatureInfoQuantity,\r\n toggleNavItemPositionModal,\r\n // setCartItemEditFeature,\r\n setSqftFromFeature,\r\n enableSquareFootage,\r\n setSquareFootageGroup,\r\n};\r\n\r\nexport default withRouter(\r\n injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(FeatureInfo)\r\n )\r\n);\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {getFilterGroupValues, s3FilterImagePath} from \"../../../misc/utils\";\r\n\r\nconst FeatureInfoBrand = (props) => {\r\n\r\n const {selectionFeatureInfo, filterGroups, feature} = props;\r\n\r\n const currentFeature = feature || selectionFeatureInfo;\r\n\r\n const brandFilterGroup = filterGroups.find(group => group.name === \"Brand\");\r\n if (!brandFilterGroup) {\r\n return null\r\n }\r\n\r\n const featureBrandValues = getFilterGroupValues(currentFeature, brandFilterGroup);\r\n if (!featureBrandValues) {\r\n return null\r\n }\r\n\r\n const brandFilterValue = brandFilterGroup.values.find(val => val.id === featureBrandValues[0]);\r\n if (!brandFilterValue || !brandFilterValue.icon) {\r\n return null\r\n }\r\n\r\n const styles = {\r\n backgroundImage: `url(${s3FilterImagePath(brandFilterValue.icon)})`\r\n };\r\n\r\n return (\r\n
    \r\n );\r\n};\r\n\r\nFeatureInfoBrand.propTypes = {\r\n feature: PropTypes.object\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n selectionFeatureInfo: store.selectionState.selectionFeatureInfo,\r\n filterGroups: store.filterState.filterGroups,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(FeatureInfoBrand);\r\n","import React, {Fragment} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from \"react-redux\";\r\nimport $ from \"jquery\";\r\nimport uniq from \"lodash/uniq\";\r\nimport Config from \"../../config\";\r\n\r\nimport {\r\n toggleSelectionFeatureInfo,\r\n setActiveFeature,\r\n toggleShowDescriptionCover, toggleShowRestorePopup, updateCanvasCount\r\n} from \"../../actions/actionFunctions\";\r\n\r\nimport {getEventPosition, getFeatureIsLocked} from \"../../misc/helpers\";\r\n// import {s3FeatureImagePath, THUMBNAIL_SIZES} from \"../../misc/utils\";\r\n\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport NavigationItemsList from \"../visComponents/navigation/navigationItemsList\";\r\nimport CountertopSwitchers from \"../kvComponent/navigation/countertopSwitchers\";\r\nimport CabinetSwitchers from \"../kvComponent/navigation/cabinetSwitchers\";\r\nimport {CABINET_GROUP, COUNTERTOP_GROUP} from \"../kvComponent/core/constants\";\r\nimport {UserPopupTypes} from \"../visComponents/constants\";\r\nimport {toggleNavItemPositionModal, toggleUpdateDisableFeatureGroupRadio} from \"../../actions/navigationFunctions\";\r\nimport {CABINET_GROUP_BATHROOM, COUNTERTOP_GROUP_BATHROOM} from \"../bvSceneComponent/core/constants\";\r\nimport SelectionMainVirtualizedList from \"./selectionRowList/selectionMainVirtualizedList\";\r\nimport LoadingSpinner from \"../ui/loadingSpinner\";\r\nimport WizardList from \"./wizardList/wizardList\";\r\nimport SelectionMainVirtualizedGrid from \"./selectionGridList/selectionMainVirtualizedGrid\";\r\nimport SelectionMainVirtualizedGridMobile from \"./selectionGridList/selectionMainVirtualizedGridMobile\";\r\nimport {wizardGroupInterface} from \"../../interfaces/wizardItemInterface\";\r\nimport {checkIfNeedToReceiveFeaturesIfFiltersApplied} from \"../../misc/filtersFunctions\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport {clickOnSimilarFeatures, getApplyToLogic} from \"../look/lookNavigation/lookNavigationFunctions\";\r\nimport {navFeatureCLick} from \"../look/lookNavigation/lookFunctions\";\r\nimport {featureCanChangeShowerSize, searchForSameNameWallsBeforeFeatureApply} from \"../look/bathroomFunctions\";\r\n\r\nclass SelectionMainList extends NavigationItemsList {\r\n\r\n static propTypes = {\r\n features: PropTypes.array.isRequired,\r\n handleUserLoginClick: PropTypes.func.isRequired,\r\n setRef: PropTypes.func.isRequired,\r\n currentParent: PropTypes.object,\r\n listItemHeight: PropTypes.number,\r\n showItemsList: PropTypes.bool.isRequired,\r\n layoutName: PropTypes.string,\r\n isWizard: PropTypes.bool,\r\n currentGroups: PropTypes.arrayOf(PropTypes.shape(wizardGroupInterface))\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n showPlaceHolders: document.bvConfig ? document.bvConfig.showPlaceholders : false,\r\n reorderedFeatures: [],\r\n showLoader: false,\r\n currentParentText: \"\"\r\n };\r\n window.itemClickCountQuote = window.itemClickCountQuote || 0;\r\n window.itemClickCount = window.itemClickCount || 0;\r\n }\r\n\r\n componentDidMount() {\r\n this.updatePositions(this.props);\r\n $(document).on(ActionTypes.USER_IS_LOGGED_IN, () => { // click on current active item after unlock\r\n if (this.props.currentParent && (this.props.currentParent.activeLockedFeature || this.props.currentParent.activeFeature)) {\r\n this.handleFeatureClick({\r\n part: this.props.currentParent.activeLockedFeature || this.props.currentParent.activeFeature\r\n });\r\n }\r\n this.forceUpdate(() => {\r\n if (!this.props.listItemHeight || this.props.listItemHeight < 10) { // $(\".bv-item-list\").height()\r\n $(window).trigger('resize'); // squeeze features bug\r\n }\r\n });\r\n });\r\n // console.log(\"|this.props.currentParent\", this.props.currentParent);\r\n if (this.props.currentParent && this.props.currentParent.activeFeature) {\r\n this.props.setActiveFeature(this.props.currentParent.activeFeature);\r\n this.deleteNotInVisualizerFeature(this.props);\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n $(document).off(ActionTypes.USER_IS_LOGGED_IN);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if ((nextProps.currentParent && this.props.currentParent && (nextProps.currentParent.partName !== this.props.currentParent.partName))\r\n || (nextProps.currentParent && (nextProps.currentParent.partName !== this.state.currentParentText)) || nextProps.features !== this.props.features) {\r\n this.updatePositions(nextProps);\r\n this.deleteNotInVisualizerFeature(nextProps);\r\n }\r\n if (this.needToUpdate && nextProps.features.length !== this.props.features.length) {\r\n this.updatePositions(nextProps);\r\n }\r\n\r\n let wizardSubStepIsActive = false;\r\n if (nextProps.wizardConfig.length) {\r\n const existingWizSetup = nextProps.wizardConfig.find(wizObject => {\r\n return wizObject.featureGroupName === nextProps.currentParent.dbName || wizObject.featureGroupName === nextProps.currentParent.partName\r\n })\r\n if (existingWizSetup && existingWizSetup.filterGroups.length) {\r\n wizardSubStepIsActive = true;\r\n }\r\n }\r\n\r\n if (nextProps.selectedFilters.length && !wizardSubStepIsActive && nextProps.currentParent) {\r\n const checkPassed = checkIfNeedToReceiveFeaturesIfFiltersApplied(nextProps.selectedFilters, nextProps.currentParent);\r\n if (checkPassed) {\r\n this.getFeaturesFromBackendWithFilters(nextProps.currentParent, checkPassed.arrayOfNeededFiltersToReceive, 1);\r\n }\r\n }\r\n }\r\n\r\n deleteNotInVisualizerFeature = (nextProps) => {\r\n if (nextProps.currentParent && nextProps.currentParent.activeNotInVisualizerFeature\r\n && nextProps.currentParent.activeFeature && !nextProps.currentParent.activeFeature.notAvailableInVisualizer) {\r\n nextProps.currentParent.activeNotInVisualizerFeature = null;\r\n }\r\n }\r\n\r\n updatePositions = (nextProps) => {\r\n this.setState({\r\n indexesToReplace: [],\r\n showLoader: true\r\n }, () => {\r\n this.setRelatedStones(nextProps);\r\n });\r\n };\r\n\r\n checkForDisabled = (navItem) => {\r\n if (!navItem || !navItem.part || !navItem.part.getParent) {\r\n return\r\n }\r\n const parent = navItem.part.getParent();\r\n if (parent.disabled) {\r\n const itemParent = navItem.part.getParent();\r\n let exLAndBathtubAndSmallRoom = false;\r\n if (itemParent.partId === \"left_shower_wall\" && itemParent.getParent().layout.type === 0) {\r\n const showerBody = itemParent.getParent().layout.parts.Shower.showerBody;\r\n if (showerBody && showerBody.disabled) {\r\n exLAndBathtubAndSmallRoom = true\r\n }\r\n }\r\n if (itemParent.disabled && !exLAndBathtubAndSmallRoom) {\r\n itemParent.disabled = false;\r\n itemParent.disabledClick(); // disable also related parts\r\n }\r\n }\r\n if (parent.getParent) { // enable shower if child is clicked\r\n const showerParent = parent.getParent();\r\n if (showerParent.partName === \"Shower\" && showerParent.showerBody && showerParent.showerBody.disabled) {\r\n showerParent.showerBody.disabled = false;\r\n showerParent.showerBody.disabledClick(); // enable also related parts\r\n }\r\n }\r\n }\r\n\r\n handleFeatureClick = async (activeFeature, event, wizardClickOnLogic = null) => {\r\n\r\n if (event && (event.target.closest(\".feature-buttons\") || event.target.closest(\".feature-toolSettings\"))) {\r\n return false; // do not set activeFeature again ! // prevent redundant feature click\r\n } else if (this.props.activeFeature && this.props.activeFeature.dbFeature.id === activeFeature.part.dbFeature.id\r\n && (this.props.currentParent && this.props.currentParent.firstClick[this.props.activeQuoteIndex])) {\r\n this.showPositionsPopup(activeFeature.part, event);\r\n if (this.props.handleFeatureClick) {\r\n this.props.handleFeatureClick(activeFeature.part)\r\n }\r\n return false; // the same feature clicked // prevent redundant feature click\r\n }\r\n\r\n if (Config.isDevMode()) {\r\n console.log(\"activeFeature\", activeFeature.part);\r\n console.log(\"sharedFeatureName:\", activeFeature.part.dbFeature.sharedFeatureName, \"\\ngetSplittedFeatureName:\", activeFeature.part.getSplittedFeatureName());\r\n }\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n if(!this.props.userIsLoggedIn && fabricatorSettings.clickLeadCaptureOnQuote && fabricatorSettings.clickLeadCountOnQuote\r\n && (++window.itemClickCountQuote >= fabricatorSettings.clickLeadCountOnQuote)) {\r\n this.props.handleUserLoginClick(UserPopupTypes.NewDesign);\r\n return;\r\n }\r\n if (this.props.handleFeatureClick && !wizardClickOnLogic) {\r\n this.props.handleFeatureClick(activeFeature.part) // set wizard selected value\r\n }\r\n if (this.props.showRestorePopup) {\r\n this.props.toggleShowRestorePopup(false);\r\n }\r\n // if (this.isWallItem(activeFeature.part) && activeFeature.part.getParent().getParent().allWallsApplied) {\r\n // this.applyAllWalls(activeFeature.part, ignoreLocked);\r\n // }\r\n\r\n if (!wizardClickOnLogic) {\r\n this.props.setActiveFeature(activeFeature.part); // set selected feature\r\n }\r\n\r\n const showPositionPopup = this.showPositionsPopup(activeFeature.part, event);\r\n if (showPositionPopup && !wizardClickOnLogic) {\r\n return // don't click on feature!! we are clicking inside the modal window\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n\r\n if ((layout.isNewLayout || (layout.visualizerType === \"bvScene\")) && featureCanChangeShowerSize(activeFeature.part)) {\r\n await searchForSameNameWallsBeforeFeatureApply(activeFeature.part);\r\n }\r\n\r\n if (layout.isNewLayout) {\r\n\r\n navFeatureCLick(activeFeature.part);\r\n\r\n const applyToLogic = getApplyToLogic(activeFeature.part);\r\n // const parent = zoomFeature.getParent();\r\n // setActiveFeaturesBeforeAllWalls([], parent); // we don't need it here, as we have remembering logic below\r\n if (applyToLogic && Array.isArray(applyToLogic.currentApplyToArray) && applyToLogic.currentApplyToArray.length) {\r\n clickOnSimilarFeatures(activeFeature.part, applyToLogic, true);\r\n }\r\n } else {\r\n\r\n activeFeature.part.handleClick(false, \"\", wizardClickOnLogic ? {skipNotCompatible: true} : null);\r\n\r\n if (CABINET_GROUP.includes(activeFeature.part.partId) || CABINET_GROUP_BATHROOM.includes(activeFeature.part.partId)) {\r\n const featureIsLocked = getFeatureIsLocked(activeFeature.part);\r\n CabinetSwitchers.applyAllCabinets(activeFeature.part, !featureIsLocked);\r\n } else if (COUNTERTOP_GROUP.includes(activeFeature.part.partId) || COUNTERTOP_GROUP_BATHROOM.includes(activeFeature.part.partId)) {\r\n const featureIsLocked = getFeatureIsLocked(activeFeature.part);\r\n CountertopSwitchers.applyAllCountertops(activeFeature.part, !featureIsLocked);\r\n }\r\n }\r\n\r\n this.checkForDisabled(activeFeature);\r\n // this.props.toggleShowDescriptionCover(false);\r\n // console.log('is visible', $('.feature--selected').is(':visible'));\r\n\r\n if (activeFeature.part.partId === \"room\") {\r\n this.props.checkIfNeedToSwitchRoom(activeFeature.part);\r\n }\r\n\r\n this.props.toggleUpdateDisableFeatureGroupRadio(true);\r\n $(window).trigger(ActionTypes.CHANGE_LAYOUT); // update canvas\r\n this.props.updateCanvasCount();\r\n setTimeout(() => {\r\n this.props.toggleUpdateDisableFeatureGroupRadio(false);\r\n }, 0)\r\n\r\n };\r\n\r\n showPositionsPopup = (clickedFeature, event) => {\r\n if (clickedFeature && !clickedFeature.notAvailableInVisualizer\r\n && this.props.currentParent\r\n && this.props.currentParent.showLayerPositionsModal\r\n && this.props.currentParent.showLayerPositionsModal(clickedFeature)) {\r\n const eventPosition = getEventPosition(event);\r\n this.props.toggleNavItemPositionModal({\r\n popupOpened: true,\r\n popupPosition: {\r\n left: eventPosition.x,\r\n top: eventPosition.y\r\n },\r\n activePartId: clickedFeature.partId,\r\n });\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS); // update buttons\r\n return true\r\n } else if (this.props.navItemPositionModal && this.props.navItemPositionModal.popupOpened) {\r\n this.props.toggleNavItemPositionModal({\r\n popupOpened: false,\r\n });\r\n }\r\n return false\r\n }\r\n\r\n // isWallItem = (itemPart) => {\r\n // const wallsPartIds = [\"wall_a\", \"wall_b\", \"wall_c\", \"right_shower_wall\", \"left_shower_wall\",\"pony_wall\"];\r\n // return wallsPartIds.includes(itemPart.partId);\r\n // };\r\n\r\n setRelatedStones(nextProps) {\r\n\r\n const selectedFirstItemIndex = this.getActiveItemIndex(nextProps);\r\n const features = nextProps.features.filter(feature => feature);\r\n let otherSelectedWallsIndexes = this.getSelectedWallIndexes(\r\n {part: nextProps.currentParent}, features, selectedFirstItemIndex\r\n );\r\n let unlockedIndexes = [];\r\n\r\n // console.log(\"otherSelectedWallsIndexes\", otherSelectedWallsIndexes);\r\n\r\n const fabricatorSettings = this.props.fabricatorData.settings; // set unlocked on the first positions\r\n if (nextProps.features.length && (fabricatorSettings.leadCaptureOnQuote && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) && !nextProps.isPhoneNumberValidated) {\r\n nextProps.features.forEach((feature, index) => {\r\n if (feature && feature.part && !getFeatureIsLocked(feature.part, false)) {\r\n unlockedIndexes.push(index);\r\n }\r\n });\r\n }\r\n\r\n const selectedExist = (selectedFirstItemIndex || selectedFirstItemIndex === 0) && selectedFirstItemIndex > -1;\r\n const indexesToReplace = selectedExist\r\n ? uniq([selectedFirstItemIndex, ...unlockedIndexes, ...otherSelectedWallsIndexes])\r\n : [...unlockedIndexes, ...otherSelectedWallsIndexes];\r\n this.setState({\r\n currentParentText: nextProps.currentParent ? nextProps.currentParent.partName : \"\",\r\n reorderedFeatures: this.getReorderedItems(indexesToReplace, nextProps, selectedExist, true),\r\n showLoader: false\r\n }, () => {\r\n if (this.needToUpdate) {\r\n const $gridBody = $(this.itemsList).find(\".ReactVirtualized__Grid\");\r\n if (this.props.windowWidth <= 991) {\r\n $gridBody.scrollLeft(this.needToUpdate);\r\n } else {\r\n $gridBody.scrollTop(this.needToUpdate);\r\n }\r\n this.needToUpdate = false;\r\n }\r\n });\r\n }\r\n\r\n getActiveItemIndex = (props) => {\r\n if (props.currentParent && props.currentParent.partId === \"room\") {\r\n return 0\r\n }\r\n const fabricatorSettings = props.fabricatorData.settings;\r\n const showPlaceHolders = document.bvConfig ? document.bvConfig.showPlaceholders : false;\r\n let isActiveItemIndex = null;\r\n if ((fabricatorSettings.leadCaptureOnQuote && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote))\r\n && !props.isPhoneNumberValidated && props.currentParent && props.currentParent.activeLockedFeature) {\r\n\r\n isActiveItemIndex = props.features.findIndex((item) => {\r\n return props.currentParent.activeLockedFeature.dbFeature.id === item.part.id()\r\n });\r\n // console.log('props.currentParent', props.currentParent);\r\n }\r\n else if (props.currentParent && props.currentParent.activeNotInVisualizerFeature) {\r\n isActiveItemIndex = props.features.findIndex((item) => {\r\n return item && item.part && (props.currentParent.activeNotInVisualizerFeature.dbFeature.id === item.part.id())\r\n })\r\n } else if (props.currentParent && props.currentParent.activeFeature) {\r\n isActiveItemIndex = props.features.findIndex((item) => {\r\n return item && item.part && (props.currentParent.activeFeatureId(showPlaceHolders) === item.part.id())\r\n })\r\n }\r\n return isActiveItemIndex\r\n };\r\n\r\n checkIfFeatureSelected = (currentFeature, currentParent = this.props.currentParent) => {\r\n if (!currentFeature) {\r\n return false\r\n }\r\n\r\n const currentFeatureId = currentFeature.dbFeature.id;\r\n\r\n if (this.props.isWizard) {\r\n const {wizardSelectedValues, wizardActiveStep} = this.props;\r\n if (!wizardSelectedValues || !wizardSelectedValues[wizardActiveStep] || !wizardSelectedValues[wizardActiveStep].selectedFeature) {\r\n return false\r\n }\r\n if (currentFeature.dbFeature.sharedFeatureName && wizardSelectedValues[wizardActiveStep].selectedFeature.dbFeature.sharedFeatureName) {\r\n return currentFeature.dbFeature.sharedFeatureName === wizardSelectedValues[wizardActiveStep].selectedFeature.dbFeature.sharedFeatureName\r\n }\r\n return currentFeatureId === wizardSelectedValues[wizardActiveStep].selectedFeature.dbFeature.id\r\n }\r\n\r\n let selected = false;\r\n if (currentFeatureId && currentParent\r\n && ((this.props.activeFeature && !this.props.activeFeature.notAvailableInVisualizer) || currentParent.firstClick[this.props.activeQuoteIndex])) {\r\n selected = currentParent.activeNotInVisualizerFeature\r\n ? currentParent.activeNotInVisualizerFeature.dbFeature.id === currentFeatureId\r\n : this.props.activeFeature && this.props.activeFeature.dbFeature.id === currentFeatureId\r\n }\r\n return selected\r\n };\r\n\r\n handleOnMobileGridScroll = ({clientWidth, scrollLeft, scrollWidth}) => {\r\n if (this.props.showItemsList && !this.state.showLoader) {\r\n const ceilScrollWidth = Math.ceil(scrollWidth);\r\n const floorScrollWidth = Math.floor(scrollWidth);\r\n const ceilScrollLeft = Math.ceil(scrollLeft);\r\n const floorScrollLeft = Math.floor(scrollLeft);\r\n if ((ceilScrollWidth - ceilScrollLeft === clientWidth)\r\n || (ceilScrollWidth - floorScrollLeft === clientWidth)\r\n || (floorScrollWidth - ceilScrollLeft === clientWidth)\r\n || (floorScrollWidth - floorScrollLeft === clientWidth)) {\r\n this.getNewFeaturesOnScroll(scrollLeft, {part: this.props.currentParent})\r\n }\r\n }\r\n };\r\n\r\n // getLoadingElementsForGrid = (isMobile) => {\r\n // const counts = getActivePartsCounts(this.props.currentParent, this.props.layoutName);\r\n // if (!counts) {\r\n // return null\r\n // }\r\n // let elements = [];\r\n // let styles = isMobile ? {} : {\r\n // height: this.props.listItemHeight\r\n // };\r\n // for (let i = 0; i <= counts ;i++ ) { // for ex. 28/3 = 10 columns\r\n // elements.push(\r\n //
    \r\n // \r\n //
    \r\n // );\r\n // }\r\n // return elements\r\n // };\r\n\r\n renderVirtualizedGrid = () => {\r\n const {windowWidth, currentParent, listItemHeight, handleUserLoginClick, isWizard, currentGroups,\r\n showListForce} = this.props;\r\n // console.log(\"renderDesktopVirtualizedGrid currentFeatures\", currentFeatures);\r\n if ((!showListForce && (currentParent && !currentParent.allFeaturesReceived)) || !this.itemsList) {\r\n return \r\n }\r\n const currentFeatures = this.state.reorderedFeatures.filter(currentFeature => currentFeature);\r\n return (windowWidth || window.innerWidth) < 991 ? (\r\n \r\n ) : (\r\n \r\n )\r\n }\r\n\r\n handleOnDesktopGridScroll = ({clientHeight, scrollHeight, scrollTop}) => {\r\n if (this.props.showItemsList && !this.state.showLoader) {\r\n const ceilScrollHeight = Math.ceil(scrollHeight);\r\n const floorScrollHeight = Math.floor(scrollHeight);\r\n const ceilScrollTop = Math.ceil(scrollTop);\r\n const floorScrollTop = Math.floor(scrollTop);\r\n if ((ceilScrollHeight - ceilScrollTop === clientHeight)\r\n || (ceilScrollHeight - floorScrollTop === clientHeight)\r\n || (floorScrollHeight - ceilScrollTop === clientHeight)\r\n || (floorScrollHeight - floorScrollTop === clientHeight)) {\r\n this.getNewFeaturesOnScroll(scrollTop, {part: this.props.currentParent})\r\n }\r\n }\r\n };\r\n\r\n changeSet = (e) => {\r\n this.props.changeSet(e.target.dataset.set);\r\n };\r\n\r\n renderVirtualizedList = () => {\r\n const {currentParent, isWizard, currentGroups, showListForce} = this.props;\r\n if ((!showListForce && (currentParent && !currentParent.allFeaturesReceived)) || !this.itemsList) {\r\n return \r\n }\r\n return \r\n }\r\n\r\n renderList = (isRowView) => {\r\n\r\n const {wizardConfig, currentParent, showListForce} = this.props;\r\n\r\n if (wizardConfig.length) {\r\n const existingWizSetup = wizardConfig.find(wizObject => {\r\n return wizObject.featureGroupName === currentParent.dbName || wizObject.featureGroupName === currentParent.partName\r\n })\r\n if (existingWizSetup && existingWizSetup.filterGroups.length && !existingWizSetup.isFinished && existingWizSetup.enableForQuoting) {\r\n if ((!showListForce && (currentParent && !currentParent.allFeaturesReceived)) || !this.itemsList) {\r\n return \r\n }\r\n return \r\n }\r\n }\r\n\r\n return isRowView\r\n ? this.renderVirtualizedList()\r\n : this.renderVirtualizedGrid()\r\n }\r\n\r\n render() {\r\n const {selectionWindowView} = this.props;\r\n const isRowView = selectionWindowView === 4;\r\n return (\r\n \r\n
    {\r\n this.itemsList = node;\r\n this.props.setRef(node);\r\n }}\r\n className={\"bv-item-list bv-item-list--\" + this.props.selectionWindowView\r\n + (this.props.filtersVisible ? \" bv-item-list--filters-visible\" : \"\")\r\n + (isRowView ? \" bv-item-list--row\" : \" bv-item-list--column\")}>\r\n {this.props.showItemsList && !this.state.showLoader\r\n ? this.renderList(isRowView)\r\n : \r\n }\r\n
    \r\n {this.state.additionalFeaturesLoading ? this.getLoadingFeatures() : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n\r\n const {wizardConfig, wizardSelectedValues, wizardActiveStep} = store.wizardState;\r\n\r\n return {\r\n selectionWindowView: store.selectionState.selectionWindowView,\r\n navigationViewType: store.selectionState.selectionWindowView, // needed for NavigationItemsList\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n windowWidth: store.serverState.windowWidth,\r\n activeFeature: store.selectionState.activeFeature,\r\n filtersVisible: store.filterState.showFilters,\r\n fabricatorData: store.fabricatorState,\r\n userPopupOpened: store.userState.userPopupOpened,\r\n filterGroups: store.filterState.filterGroups,\r\n showRestorePopup: store.bathroomVisualizerState.showRestorePopup,\r\n selectedFilters: store.filterState.selectedFilters,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n navItemPositionModal: store.navigationState.navItemPositionModal,\r\n wizardConfig,\r\n wizardSelectedValues,\r\n wizardActiveStep,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n toggleSelectionFeatureInfo,\r\n setActiveFeature,\r\n toggleShowDescriptionCover,\r\n toggleShowRestorePopup,\r\n toggleUpdateDisableFeatureGroupRadio,\r\n toggleNavItemPositionModal,\r\n updateCanvasCount,\r\n})(SelectionMainList);\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {setCameFromPage, toggleSelectionFeatureInfo} from \"../../../actions/actionFunctions\";\r\nimport FeatureThumbnail from \"../../visComponents/featureThumbnail\";\r\nimport FeatureName from \"../../visComponents/featureName\";\r\nimport FeatureInfoDescription from \"../selectionFeatureInfo/featureInfoDescription\";\r\nimport FeatureInfoPrice from \"../selectionFeatureInfo/featureInfoPrice\";\r\nimport FeatureInfoPriceLocked from \"../selectionFeatureInfo/featureInfoPriceLocked\";\r\nimport {getFeatureIsLocked} from \"../../../misc/helpers\";\r\nimport SelectionMainListRowItemButtons from \"./rowItemButtons\";\r\nimport RowItemRelatedProductsButton from \"./rowItemRelatedProductsButton\";\r\nimport FeatureCartItemsCount from \"../featureCartItemsCount\";\r\nimport {wizardGroupInterface} from \"../../../interfaces/wizardItemInterface\";\r\nimport {shouldReplaceSelectionInfoFeature} from \"../../qkbPages/materialsCommon/materialsCommonFunctions\";\r\nimport SuperAdminFeatureToolSettingsButton from \"../../qkbPages/superAdmin/SuperAdminFeatureToolSettingsButton\";\r\nimport {getDifferentToolSettings} from \"../../qkbPages/superAdmin/adminFunctions\";\r\n\r\n\r\nconst RowItem = (props) => {\r\n\r\n const {selected, currentFeature, fabricatorData, handleFeatureClick, toggleSelectionFeatureInfo, setCameFromPage,\r\n isRelated, windowWidth, isWizard, wizardGroup} = props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n const goToFeatureInfo = () => {\r\n if (isRelated) {\r\n return false\r\n }\r\n const selectedFeature = shouldReplaceSelectionInfoFeature(currentFeature);\r\n toggleSelectionFeatureInfo(selectedFeature);\r\n setCameFromPage(\"materials\"); // no more visualizer or shoppingcart switch\r\n };\r\n\r\n const showPriceLocked = getFeatureIsLocked(currentFeature);\r\n const showPrice = fabricatorSettings.showPricing && !fabricatorData.hideCheckoutBreakdownCost\r\n && !showPriceLocked && !fabricatorData.hidePricesFromUser;\r\n\r\n const handleRowItemClick = (event) => {\r\n if (isRelated) {\r\n return false\r\n }\r\n const preventFeatureClickClasses = [\".m-button\", \".m-quantity\", \".m-triangle\"];\r\n if (!isWizard && event && preventFeatureClickClasses.some(className => event.target.closest(className))) {\r\n return false\r\n }\r\n handleFeatureClick({part: currentFeature}, event);\r\n };\r\n\r\n const isMobile = windowWidth < 991;\r\n\r\n const infoButtonVisible = !isWizard || !wizardGroup || !wizardGroup.skipProductInfo;\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n \r\n {!isRelated && isMobile ? (\r\n \r\n \r\n \r\n ) : null}\r\n \r\n
    \r\n
    \r\n

    \r\n \r\n
    \r\n
    \r\n {showPrice ? : null}\r\n {showPriceLocked ? : null}\r\n
    \r\n {!isRelated && !isMobile ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n \r\n
    \r\n
    \r\n
    \r\n )\r\n};\r\n\r\nRowItem.propTypes = {\r\n selected: PropTypes.bool,\r\n isRelated: PropTypes.bool,\r\n isWizard: PropTypes.bool,\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n currentFeature: PropTypes.object.isRequired,\r\n handleFeatureClick: PropTypes.func.isRequired,\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {productNoteEditorVisible} = store.selectionState;\r\n const {adminToolSettingsPopupVisible} = store.adminState;\r\n return {\r\n productNoteEditorVisible,\r\n windowWidth: store.serverState.windowWidth,\r\n fabricatorData: store.fabricatorState,\r\n adminToolSettingsPopupVisible,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n toggleSelectionFeatureInfo,\r\n setCameFromPage\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(RowItem);\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst FeatureCartItemsCount = (props) => {\r\n\r\n const {currentFeatureId, cartItems, advancedQuotingSearchItem, activeQuoteIndex} = props;\r\n\r\n const getAddedCartItemsCount = () => {\r\n if (advancedQuotingSearchItem && advancedQuotingSearchItem.cartFeature) {\r\n if (advancedQuotingSearchItem.cartFeature.dbFeature.id === currentFeatureId) {\r\n return advancedQuotingSearchItem.quantity\r\n }\r\n return 0\r\n }\r\n let currentFeatureCartItemsCount = 0;\r\n const matchingCartItems = cartItems.filter((cartItem) => {\r\n return (currentFeatureId === cartItem.cartFeature.dbFeature.id) && (cartItem.currentQuote === activeQuoteIndex)\r\n });\r\n if (matchingCartItems.length) {\r\n currentFeatureCartItemsCount = matchingCartItems.reduce((total, cartItem) => {\r\n if (cartItem.partId === 'slabs') { // do not count slabs QCDES-1730\r\n return total + 0\r\n }\r\n return total + cartItem.quantity\r\n }, 0)\r\n }\r\n return +(+(currentFeatureCartItemsCount).toFixed(3)).toFixed(2)\r\n }\r\n\r\n const currentFeatureCartItemsCount = getAddedCartItemsCount();\r\n if (!currentFeatureCartItemsCount) {\r\n return null\r\n }\r\n\r\n return (\r\n {currentFeatureCartItemsCount}\r\n )\r\n};\r\n\r\nFeatureCartItemsCount.propTypes = {\r\n currentFeatureId: PropTypes.number.isRequired,\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {cartItems} = store.cartState;\r\n const {activeQuoteIndex} = store.quotesState;\r\n const {advancedQuotingSearchItem} = store.advancedQuotingState;\r\n return {\r\n cartItems,\r\n activeQuoteIndex,\r\n advancedQuotingSearchItem,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(FeatureCartItemsCount);\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport {getSessionStorageItem} from \"../../../misc/storageFunctions\";\r\nimport {setAdminToolSettingsPopupVisible} from \"./adminActions\";\r\nimport {IS_SUPER_ADMIN} from \"../../../config\";\r\nimport PropTypes from \"prop-types\";\r\nimport {featureInterface} from \"../../../interfaces/featureInterface\";\r\n\r\n\r\nconst SuperAdminFeatureToolSettingsButton = (props) => {\r\n\r\n const {setAdminToolSettingsPopupVisible, feature} = props;\r\n\r\n const isLoggedAsAdmin = IS_SUPER_ADMIN && getSessionStorageItem(\"superAdminToken\", false);\r\n if (!isLoggedAsAdmin || !feature) {\r\n return null\r\n }\r\n\r\n const handleButtonClick = () => {\r\n setAdminToolSettingsPopupVisible(true, feature);\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n )\r\n}\r\n\r\nSelectionGridFiltersTitle.propTypes = {\r\n style: PropTypes.object,\r\n filterTitle: PropTypes.shape(shiftFilterTitleInterface).isRequired,\r\n allTitles: PropTypes.array.isRequired,\r\n filtersGrid: PropTypes.any,\r\n isTopTitle: PropTypes.bool,\r\n isHorizontal: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = () => {\r\n return {};\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SelectionGridFiltersTitle)\r\n","import {useEffect, useState} from \"react\";\r\n\r\nimport {COUNTERTOP_GROUP} from \"../../kvComponent/core/constants\";\r\nimport {getFilterGroupValues} from \"../../../misc/utils\";\r\nimport {getBvGroupFilterValues} from \"../../../api/server-api\";\r\nimport {setActivePartFilterValues} from \"../../../misc/filtersFunctions\";\r\n\r\n/**\r\n *\r\n * @param currentParent {object}\r\n * @param currentFeatures {array}\r\n * @param filterGroups {array}\r\n * @param fabricatorData {object}\r\n * @returns {object}\r\n */\r\nexport const getWithFilters = (currentParent, currentFeatures, filterGroups, fabricatorData) => {\r\n\r\n if (!currentParent) {\r\n return {withFilters: false, filtersLoading: false}\r\n }\r\n\r\n let withFilters = false;\r\n const materialFilterGroup = filterGroups.find(filterGroup => filterGroup.name.trim() === \"Countertop Material\");\r\n\r\n const caesProfiles = fabricatorData.isCaesarStone && (\r\n (fabricatorData.fabricatorName && fabricatorData.fabricatorName.includes(\"QC Master Account US\"))\r\n || (fabricatorData.fabricatorName && fabricatorData.fabricatorName.includes(\"QC Master Account CAN\"))\r\n || (fabricatorData.fabricatorName && fabricatorData.fabricatorName === \"Caesarstone new versions NEW\")\r\n || (fabricatorData.wasCreatedFromFabricator && fabricatorData.wasCreatedFromFabricator.includes(\"QC Master Account US\"))\r\n || (fabricatorData.wasCreatedFromFabricator && fabricatorData.wasCreatedFromFabricator.includes(\"QC Master Account CAN\"))\r\n || (fabricatorData.wasCreatedFromFabricator && fabricatorData.wasCreatedFromFabricator === \"Caesarstone new versions NEW\")\r\n );\r\n\r\n if ((fabricatorData.isLowes || caesProfiles)\r\n && COUNTERTOP_GROUP.includes(currentParent.partId) && materialFilterGroup && materialFilterGroup.values) {\r\n if (!currentParent.filtersReceived) {\r\n return {withFilters, filtersLoading: true}\r\n } else if (materialFilterGroup.values.some(filterValue => currentParent.filtersReceived.includes(filterValue.id))) {\r\n const filterValuesAvailable = materialFilterGroup.values.filter(filterValue => {\r\n return currentParent.filtersReceived.includes(filterValue.id)\r\n })\r\n // console.log(\"filterValuesAvailable\", filterValuesAvailable);\r\n withFilters = filterValuesAvailable.some((filterValue) => {\r\n const countertopsFiltered = currentFeatures.filter(feature => {\r\n if (!feature || !feature.part) { // just in case\r\n return false\r\n }\r\n const countertopFilters = getFilterGroupValues(feature.part, materialFilterGroup);\r\n return countertopFilters && countertopFilters.includes(filterValue.id)\r\n });\r\n return countertopsFiltered.length\r\n })\r\n }\r\n }\r\n return {withFilters, filtersLoading: false}\r\n}\r\n\r\nexport const useGetFiltersRequest = (useRequest, requestFilters, featureGroup, allFilterGroups) => {\r\n\r\n const [filtersLoaded, setFiltersLoaded] = useState(!requestFilters);\r\n\r\n const checkFilters = async () => {\r\n const featureGroupFiltersResponse = await getBvGroupFilterValues(featureGroup.dbName || featureGroup.partName, null, false);\r\n setActivePartFilterValues(featureGroupFiltersResponse.data, featureGroup, allFilterGroups);\r\n setFiltersLoaded(true)\r\n }\r\n\r\n useEffect(() => {\r\n if (useRequest && requestFilters) {\r\n checkFilters();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [requestFilters, featureGroup])\r\n\r\n return filtersLoaded\r\n}\r\n","import React, {PureComponent} from 'react'\r\nimport { connect } from 'react-redux';\r\nimport classnames from 'classnames';\r\n\r\nimport Analytics from './../../analytics';\r\nimport {setGalleryActiveImageIndex, toggleGalleryVisible} from \"../../actions/selectionFunctions\";\r\nimport {featureThumbnailUrl} from \"../../misc/helpers\";\r\nimport {THUMBNAIL_SIZES} from \"../../misc/utils\";\r\n\r\nclass GalleryViewClass extends PureComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n images: [],\r\n galleryOpened: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n const {activeFeature, galleryImages} = this.props;\r\n this.setState({\r\n images: [{\r\n id: 1,\r\n url: featureThumbnailUrl(activeFeature),\r\n preview: featureThumbnailUrl(activeFeature, THUMBNAIL_SIZES.medium)\r\n }, // main image thumbnail\r\n ...galleryImages\r\n ]\r\n });\r\n setTimeout(() => {\r\n this.setState({\r\n galleryOpened: true\r\n });\r\n }, 0)\r\n }\r\n\r\n componentWillUnmount() {\r\n this.props.setGalleryActiveImageIndex(0);\r\n }\r\n\r\n handleCloseClick = () => {\r\n Analytics.sendClickEvent('gallery-close');\r\n this.setState({\r\n galleryOpened: false\r\n }, () => {\r\n setTimeout(() => {\r\n this.props.toggleGalleryVisible(false);\r\n }, 300)\r\n })\r\n };\r\n\r\n thumbnailClick = (activeImage, activeImageIndex) => {\r\n Analytics.sendClickEvent('view-gallery-image-' + activeImage.id)\r\n this.props.setGalleryActiveImageIndex(activeImageIndex)\r\n };\r\n\r\n render() {\r\n const activeImage = this.state.images[this.props.galleryActiveImageIndex];\r\n return (\r\n
    \r\n
    e.stopPropagation()}>\r\n
    \r\n
    \r\n
    \r\n {activeImage\r\n ? {activeImage.name}\r\n window.open(activeImage.url, \"_blank\")}\r\n className=\"gallery-view__main-image\" />\r\n : null}\r\n
    \r\n
    \r\n
      \r\n {this.state.images.map((g, gIndex) => {\r\n return (\r\n
    • this.thumbnailClick(g, gIndex)}/>\r\n )\r\n })}\r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n let { galleryActiveImageIndex, selectionFeatureInfo, galleryShowActiveFeature, activeFeature} = store.selectionState;\r\n const showFeature = galleryShowActiveFeature ? galleryShowActiveFeature : selectionFeatureInfo || activeFeature;\r\n return {\r\n galleryImages: showFeature.dbFeature.galleryImages || [],\r\n galleryActiveImageIndex,\r\n activeFeature: showFeature,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n toggleGalleryVisible,\r\n setGalleryActiveImageIndex\r\n})(GalleryViewClass);\r\n","import React, {useEffect, useState} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {injectIntl} from 'react-intl';\r\n\r\nimport {toggleShowDescriptionCover} from \"../../actions/actionFunctions\";\r\nimport {wizardGroupInterface} from \"../../interfaces/wizardItemInterface\";\r\nimport {useIsMounted, usePrevious} from \"../../misc/helperHooks\";\r\nimport {getFeatureGroupDescription} from \"../look/grohe/groheNavigation/groheFunctions\";\r\n\r\nlet timeoutId = 0;\r\n\r\nconst SelectionDescriptionCover = (props) => {\r\n\r\n const {activePart, wizardGroup, intl, showDescriptionCover, toggleShowDescriptionCover, windowWidth,\r\n fabricatorData} = props;\r\n\r\n const isMounted = useIsMounted();\r\n const prevWizardGroup = usePrevious(wizardGroup);\r\n const prevActivePart = usePrevious(activePart);\r\n const [coverText, setCoverText] = useState(\"\");\r\n\r\n const getDescriptionText = () => {\r\n if (wizardGroup && wizardGroup.description) {\r\n return wizardGroup.description\r\n }\r\n if (!activePart) {\r\n return \"\"\r\n }\r\n return getFeatureGroupDescription(activePart.part, intl, fabricatorData)\r\n };\r\n\r\n const showCover = () => {\r\n clearTimeout(timeoutId);\r\n toggleShowDescriptionCover(false);\r\n timeoutId = setTimeout(() => {\r\n const descText = getDescriptionText();\r\n if (isMounted() && descText) {\r\n setCoverText(descText);\r\n toggleShowDescriptionCover(true);\r\n }\r\n }, 2000);\r\n }\r\n\r\n useEffect(() => {\r\n if (!prevWizardGroup && wizardGroup || (prevWizardGroup && wizardGroup && (prevWizardGroup.id !== wizardGroup.id))) {\r\n showCover();\r\n } else if (!prevActivePart && activePart || (prevActivePart && activePart && (prevActivePart.part.partName !== activePart.part.partName))) {\r\n showCover();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [activePart, wizardGroup]);\r\n\r\n let styles = {};\r\n if (coverText && (coverText.length > 250) && (windowWidth < 991)) {\r\n styles = windowWidth < 640\r\n ? {fontSize: \"10px\"}\r\n : windowWidth < 800 ? {fontSize: \"13px\"} : {}\r\n }\r\n\r\n return (\r\n
    \r\n {coverText}\r\n
    \r\n )\r\n}\r\n\r\nSelectionDescriptionCover.propTypes = {\r\n activePart: PropTypes.object,\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n showDescriptionCover: store.selectionState.showDescriptionCover,\r\n windowWidth: store.serverState.windowWidth,\r\n fabricatorData: store.fabricatorState,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n toggleShowDescriptionCover\r\n}\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(SelectionDescriptionCover)\r\n)\r\n","import React, {useEffect, useRef} from \"react\";\r\nimport { Player } from 'video-react';\r\nimport { connect } from \"react-redux\";\r\nimport $ from 'jquery';\r\n\r\nimport {toggleNotCompatibleView} from \"../../actions/selectionFunctions\";\r\nimport {toggleShowDescriptionCover} from \"../../actions/actionFunctions\";\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\n\r\nconst NotCompatibleView = (props) => {\r\n\r\n const {activePartRelatedItemIndex, windowWidth, activeFeature} = props;\r\n const player = useRef(null);\r\n\r\n useEffect(() => {\r\n const isMobile = windowWidth < 991;\r\n if (!isMobile) {\r\n player.current.play();\r\n }\r\n props.toggleShowDescriptionCover(false);\r\n return () => {\r\n props.toggleNotCompatibleView(false); // on unmount component\r\n }\r\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n useEffect(() => {\r\n // skip initial render\r\n return () => {\r\n props.toggleNotCompatibleView(false); // on unmount component\r\n }\r\n }, [activePartRelatedItemIndex]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n const updateDesignButtonClick = () => {\r\n const navFeature = activeFeature.getParent()\r\n .navigationSubItems()\r\n .find(navItem => navItem.part.dbFeature.id === activeFeature.dbFeature.id) // find the real feature\r\n if (navFeature) { // just in case\r\n navFeature.part.applyFeatureIfNotCompatible(); // first set new rules for this feature\r\n navFeature.part.handleClick(); // change item\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS); // update footer items\r\n }\r\n props.toggleNotCompatibleView(false); // then remove the view\r\n }\r\n\r\n const videoPath = \"https://intro-videos.s3.amazonaws.com/not-compatible-icon_v1.webm\";\r\n const isMobile = windowWidth < 991;\r\n\r\n return (\r\n
    \r\n {isMobile ? null : (\r\n
    \r\n \r\n
    \r\n )}\r\n Not Compatible\r\n

    Item is not compatible with current design. Would you like to update your design?

    \r\n

    \r\n \r\n

    \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {activeFeature, activePartRelatedItemIndex} = store.selectionState;\r\n return {\r\n activeFeature,\r\n activePartRelatedItemIndex,\r\n windowWidth: store.serverState.windowWidth,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n toggleNotCompatibleView,\r\n toggleShowDescriptionCover\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(NotCompatibleView);\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from \"react-redux\";\r\nimport $ from 'jquery';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {\r\n setSelectionWindowView,\r\n} from \"../../actions/actionFunctions\";\r\nimport SelectionViewSwitchers from './selectionViewSwitchers';\r\n\r\nimport Analytics from './../../analytics';\r\n\r\nimport BacksplashSelect from './backsplashSelect';\r\nimport FiltersButton from './filtersButton';\r\nimport CountertopSwitchers from \"../kvComponent/navigation/countertopSwitchers\";\r\nimport CabinetSwitchers from \"../kvComponent/navigation/cabinetSwitchers\";\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport ShareButton from \"../common/shareButton\";\r\nimport BodyPanelRadio from \"../visComponents/navigation/desktop/bodyPanelRadio\";\r\nimport {CABINET_GROUP, COUNTERTOP_GROUP} from \"../kvComponent/core/constants\";\r\nimport LanguageSwitcher from \"../common/languageSwitcher\";\r\nimport ShoppingCartButton from \"../ui/shoppingCartButton\";\r\nimport {COUNTERTOP_GROUP_BATHROOM} from \"../bvSceneComponent/core/constants\";\r\nimport LookAllWallsRadioButton from \"../look/lookNavigation/lookMain/lookAllWallsRadioButton\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport {getCommonVisualizerType} from \"../../config\";\r\n\r\n\r\nclass SelectionMainHeader extends Component {\r\n\r\n static propTypes = {\r\n activeSubPart: PropTypes.object,\r\n searchText: PropTypes.string.isRequired,\r\n handleSearchInputChange: PropTypes.func.isRequired,\r\n };\r\n\r\n handleChangeListView = (e) => {\r\n Analytics.sendClickEvent(\"change-list-view-\" + e.target.dataset.view);\r\n this.props.handleChangeListView(+e.target.dataset.view);\r\n };\r\n\r\n backsplashSelectClick = () => {\r\n $(window).trigger('resize');\r\n $(window).trigger(ActionTypes.UPDATE_QUOTING_TOOL);\r\n };\r\n\r\n render() {\r\n const {activeSubPart, fabricatorData, isMobile} = this.props;\r\n const layout = getCurrentLayout();\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n let subPartPartId = '';\r\n if (activeSubPart) {\r\n subPartPartId = activeSubPart.part.partId;\r\n }\r\n\r\n const isCabinet = CABINET_GROUP.includes(subPartPartId);\r\n\r\n const isCountertop = COUNTERTOP_GROUP.includes(subPartPartId) || COUNTERTOP_GROUP_BATHROOM.includes(subPartPartId);\r\n\r\n const showBacksplashSelect = subPartPartId === \"backsplash\" && (getCommonVisualizerType() === \"kitchen\");\r\n\r\n const showDisabledRadioButtons = activeSubPart && activeSubPart.part.canBeDisabled;\r\n\r\n return (\r\n
    \r\n {!fabricatorData.isCaesarStone && (showBacksplashSelect || isCabinet || isCountertop || showDisabledRadioButtons) ? (\r\n
    \r\n {showDisabledRadioButtons && activeSubPart ? : null}\r\n {showBacksplashSelect ? : null}\r\n {(isCabinet || isCountertop) && activeSubPart ? (\r\n
    \r\n {isCabinet\r\n ? layout.isNewLayout\r\n ? \r\n : \r\n : null}\r\n {isCountertop\r\n ? layout.isNewLayout\r\n ? \r\n : \r\n : null}\r\n
    \r\n ) : null}\r\n
    \r\n ) : null}\r\n
    \r\n {subPartPartId === \"backsplash\" && isMobile\r\n ? null\r\n : }\r\n
    \r\n \r\n {(placeholder) => (\r\n \r\n )}\r\n \r\n {this.props.searchText ? (\r\n
    \r\n
    \r\n {isMobile && fabricatorSettings.enableSharing ? : null}\r\n {isMobile ? : null}\r\n {fabricatorData.isCaesarStone ? null : }\r\n \r\n
    \r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {selectionWindowView, selectionFeatureInfo, activeFeature} = store.selectionState;\r\n const {isMobile} = store.serverState;\r\n return {\r\n selectionWindowView,\r\n selectionFeatureInfo,\r\n isMobile,\r\n fabricatorData: store.fabricatorState,\r\n activeFeature, // to update active feature\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n handleChangeListView: setSelectionWindowView,\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SelectionMainHeader);\r\n","import React, {Component} from 'react';\r\nimport $ from 'jquery';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {getCurrentLayout} from '../appLayout';\r\nimport SelectionFooterSubPart from \"./selectionFooterSubPart\";\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport BodySwipable from \"../visComponents/navigation/desktop/bodySwipable\";\r\n\r\nexport default class SelectionFooterSubParts extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n relatedItems: [],\r\n shadowLeft: -100,\r\n shadowRight: 0,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.setRelatedItems(this.props);\r\n // this.footerList.addEventListener(\"scroll\", this.handleFooterListScroll);\r\n $(window).on(ActionTypes.UPDATE_ALL_ITEMS, this.updateItems);\r\n setTimeout(() => {\r\n this.scrollToActiveSubPart(this.props.activePartRelatedItemIndex, 0);\r\n }, 0)\r\n }\r\n\r\n componentWillUnmount() {\r\n $(window).off(ActionTypes.UPDATE_ALL_ITEMS, this.updateItems);\r\n // this.footerList.removeEventListener(\"scroll\", this.handleFooterListScroll);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (this.props.visualizerIsChanging && !nextProps.visualizerIsChanging) {\r\n this.setRelatedItems(nextProps);\r\n }\r\n }\r\n\r\n scrollToActiveSubPart = (activePartRelatedItemIndex, animationTime = 500) => {\r\n if (this.footerList) {\r\n const maxScroll = this.footerList.scrollWidth - this.footerList.clientWidth;\r\n const scrollIndex = this.props.windowWidth < 991 ? 50 : 40;\r\n const neededScroll = scrollIndex*activePartRelatedItemIndex;\r\n const scrollLeft = (maxScroll > 0) && (neededScroll > maxScroll) ? maxScroll : neededScroll;\r\n $(this.footerList).animate({scrollLeft}, animationTime);\r\n }\r\n };\r\n\r\n handleFooterListScroll = (e) => {\r\n // console.log('e', e.target.scrollLeft);\r\n this.setState({\r\n shadowLeft: e.target.scrollLeft > 100 ? 0 : -100 + e.target.scrollLeft,\r\n shadowRight: e.target.scrollLeft > 100 ? -100 : 0 - e.target.scrollLeft\r\n });\r\n };\r\n\r\n updateItems = () => {\r\n this.setRelatedItems(this.props)\r\n };\r\n\r\n setRelatedItems = (nextProps = this.props) => {\r\n // console.log('nextProps.activePart', nextProps.activePart);\r\n // console.log('activePart.subParts(false)', activePart.subParts(false));\r\n const layout = getCurrentLayout();\r\n // console.log(\"setRelatedItems layout\", layout);\r\n if (layout.qtCategories && nextProps.qtActiveCategory) {\r\n const qtActiveCategory = layout.qtCategories.find(qtCategory => qtCategory.name === nextProps.qtActiveCategory)\r\n || layout.qtCategories[0]; // cases when visualizerType is changed\r\n this.setState({\r\n relatedItems: qtActiveCategory.subParts\r\n });\r\n } else {\r\n this.setState({\r\n relatedItems: nextProps.activePart.subParts(false)\r\n });\r\n }\r\n };\r\n\r\n getSubPartsList = (withShoppingCart = false) => {\r\n const {activePartRelatedItemIndex, showAdvancedQuoting, visualizersLoaded, networkConnection} = this.props;\r\n return (\r\n \r\n {/*
    */}\r\n
    this.footerList = el}>\r\n {this.state.relatedItems.map((item, index) => {\r\n if (!visualizersLoaded.includes(document.kvConfig.visualizerType)) {\r\n return null\r\n }\r\n if (showAdvancedQuoting && (index !== activePartRelatedItemIndex) && window.location.href.includes(\"materials\")) {\r\n return null\r\n }\r\n if (item.part && item.part.partId === \"slabs\") {\r\n return null\r\n }\r\n return \r\n })}\r\n {withShoppingCart ? (\r\n \r\n ) : null}\r\n
    \r\n {/*
    */}\r\n \r\n )\r\n }\r\n}\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {\r\n toggleSelectionFeatureInfo, toggleSelectionWindow, toggleBathroomVisualizerOpen\r\n} from \"../../../actions/actionFunctions\";\r\nimport {useChangeWizardStepRoute} from \"../materialsWizard/useChangeWizardStepRoute\";\r\n\r\nconst MaterialsFooterBackButton = (props) => {\r\n\r\n const {cameFromPage, selectionFeatureInfo, showAdvancedQuoting, toggleSelectionWindow, toggleBathroomVisualizerOpen,\r\n selectionGroup, toggleSelectionFeatureInfo, history, wizardActiveStep, checkForSubStepChange, subStepChange,\r\n isWizard} = props;\r\n\r\n const {changeWizardStepRoute} = useChangeWizardStepRoute();\r\n\r\n const handleBackButtonClick = () => {\r\n if (cameFromPage === \"visualizer\") {\r\n toggleSelectionWindow(false, selectionGroup);\r\n toggleBathroomVisualizerOpen(true);\r\n history.push('/visualizer');\r\n return;\r\n } else if (selectionFeatureInfo) {\r\n toggleSelectionFeatureInfo(null);\r\n if (cameFromPage === \"shoppingcart\") {\r\n history.push(\"/shoppingcart\");\r\n }\r\n return;\r\n } else if (showAdvancedQuoting) {\r\n history.push(\"/shoppingcart\");\r\n return;\r\n } else if (checkForSubStepChange && subStepChange && !checkForSubStepChange(\"back\")) {\r\n subStepChange();\r\n return;\r\n }\r\n if (isWizard) {\r\n changeWizardStepRoute(wizardActiveStep - 1);\r\n }\r\n }\r\n\r\n return (\r\n \r\n )\r\n\r\n};\r\n\r\nMaterialsFooterBackButton.propTypes = {\r\n isWizard: PropTypes.bool,\r\n checkForSubStepChange: PropTypes.func,\r\n subStepChange: PropTypes.func,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {selectionGroup, selectionFeatureInfo} = store.selectionState;\r\n const {cameFromPage} = store.cartState;\r\n const {wizardActiveStep} = store.wizardState;\r\n const {showAdvancedQuoting} = store.advancedQuotingState;\r\n\r\n return {\r\n selectionGroup,\r\n selectionFeatureInfo,\r\n cameFromPage,\r\n wizardActiveStep,\r\n showAdvancedQuoting,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n toggleSelectionWindow,\r\n toggleBathroomVisualizerOpen,\r\n toggleSelectionFeatureInfo,\r\n};\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(MaterialsFooterBackButton)\r\n)\r\n","import React from 'react';\r\nimport $ from \"jquery\";\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {setMaterialsAgentTutorialFinished, showMaterialsAgentTutorial} from \"../../actions/tutorialFunctions\";\r\nimport Tutorial from \"./tutorial\";\r\n\r\n\r\nclass MaterialsAgentTutorial extends Tutorial {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n ringStyles: {\r\n left: 0,\r\n top: 0,\r\n }\r\n };\r\n this.resizeId = 0;\r\n }\r\n\r\n componentDidMount = () => {\r\n if (this.props.materialsAgentTutorialFinished) {\r\n return null\r\n }\r\n const scriptAdded = document.getElementById(\"pingpilot\");\r\n if (!scriptAdded) {\r\n return null\r\n }\r\n const pingButton = document.querySelector(\".pingpilot-button\");\r\n if (!pingButton) {\r\n return null\r\n }\r\n window.materialsAgentTutorialTimeoutId = setTimeout(() => {\r\n this.props.showMaterialsAgentTutorial(true);\r\n this.setButtonsPositions();\r\n $(\".tutorial-overlay--materials\").fadeIn(300);\r\n $(\".tutorial-step__ring, .tutorial-step\").fadeIn(300, () => {\r\n this.setButtonsPositions();\r\n });\r\n window.addEventListener(\"resize\", this.handleResize);\r\n }, 30000);\r\n };\r\n\r\n handleResize = () => {\r\n clearTimeout(this.resizeId);\r\n this.resizeId = setTimeout(this.setButtonsPositions, 500);\r\n };\r\n\r\n setButtonsPositions = () => {\r\n this.changeHighlightRingPosition(\".omnibrowse-code-button\");\r\n };\r\n\r\n componentWillUnmount() {\r\n window.clearTimeout(window.materialsAgentTutorialTimeoutId);\r\n window.removeEventListener(\"resize\", this.handleResize);\r\n }\r\n\r\n handleNextStepClick = () => {\r\n this.exitTutorial(true);\r\n };\r\n\r\n exitTutorial = (forever) => {\r\n $(\".tutorial-overlay--materials\").fadeOut(300, () => {\r\n this.props.showMaterialsAgentTutorial(false);\r\n if (forever) {\r\n this.props.setMaterialsAgentTutorialFinished(true);\r\n try {\r\n window.localStorage.setItem(\"materials_tutorial_finished\", true);\r\n } catch (ex) { console.log(\"localStorage exception\", ex); }\r\n }\r\n });\r\n };\r\n\r\n pingButtonClick = () => {\r\n this.exitTutorial(true);\r\n const pingButton = document.querySelector(\".pingpilot-button\");\r\n if (!pingButton) {\r\n return null\r\n }\r\n pingButton.click();\r\n }\r\n\r\n render() {\r\n\r\n const {materialsAgentTutorialIsOpened, materialsAgentTutorialFinished, isMobile} = this.props;\r\n\r\n if (!materialsAgentTutorialIsOpened || materialsAgentTutorialFinished) {\r\n return null\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n

    \r\n
    \r\n \r\n

    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n )\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {materialsAgentTutorialIsOpened, materialsAgentTutorialFinished} = store.tutorialState;\r\n const {isMobile} = store.serverState;\r\n\r\n return {\r\n materialsAgentTutorialIsOpened,\r\n materialsAgentTutorialFinished,\r\n isMobile,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n showMaterialsAgentTutorial,\r\n setMaterialsAgentTutorialFinished,\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(MaterialsAgentTutorial);\r\n","import React, {useRef} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport BodySwipable from \"../../visComponents/navigation/desktop/bodySwipable\";\r\nimport MaterialsWizardFooterStep from \"./materialsWizardFooterStep\";\r\nimport {\r\n getWizardStepIsDisabled\r\n} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {wizardItemInterface} from \"../../../interfaces/wizardItemInterface\";\r\nimport {getNextWizardSteps} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\n\r\n// const stepWidth = 92;\r\nconst MaterialsWizardFooterSteps = (props) => {\r\n\r\n const {wizardItem, wizardSelectedValues, wizardActiveStep, isShoppingCart, showAdvancedQuoting} = props;\r\n\r\n const scrollElementRef = useRef();\r\n\r\n // const stepWidth = isMobile ? 92 : 92;\r\n\r\n const wizardSteps = getNextWizardSteps(wizardItem, wizardActiveStep, wizardSelectedValues);\r\n // console.log(\"wizardSteps\", wizardSteps);\r\n\r\n // const styles = {\r\n // width: (wizardSteps.length + (isShoppingCart ? 1 : 0)) * stepWidth\r\n // }\r\n\r\n // const currentGroups = getCurrentGroups(wizardItem, wizardActiveStep, wizardSelectedValues);\r\n // const isCompletedStep = wizardActiveStep > -1 && !currentGroups.length;\r\n // const menuWidth = windowWidth * 35 / 100; // 35% of screen\r\n // const useContainerOverFlow = styles.width >menuWidth;\r\n\r\n const content = (\r\n
    \r\n {wizardSteps.map((step) => {\r\n const stepDisabled = getWizardStepIsDisabled(step.stepIndex, wizardSelectedValues, wizardSteps);\r\n if (showAdvancedQuoting && (step.stepIndex !== wizardActiveStep) && window.location.href.includes(\"materials\")) {\r\n return null\r\n }\r\n return \r\n })}\r\n
    \r\n )\r\n\r\n // return useContainerOverFlow ? (\r\n // \r\n // {/*
    */}\r\n // {content}\r\n // \r\n // ) :
    {content}
    \r\n\r\n return (\r\n \r\n {content}\r\n \r\n )\r\n\r\n};\r\n\r\nMaterialsWizardFooterSteps.propTypes = {\r\n isShoppingCart: PropTypes.bool,\r\n wizardItem: PropTypes.shape(wizardItemInterface).isRequired,\r\n wizardValues: PropTypes.object,\r\n wizardStep: PropTypes.number,\r\n}\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n const {wizardSelectedValues, wizardActiveStep} = store.wizardState;\r\n const {windowWidth, isMobile} = store.serverState;\r\n const {wizardValues} = ownProps;\r\n const {showAdvancedQuoting} = store.advancedQuotingState;\r\n\r\n return {\r\n wizardSelectedValues: wizardValues || wizardSelectedValues,\r\n wizardActiveStep,\r\n // wizardActiveStep: Number.isInteger(wizardStep) ? wizardStep : wizardActiveStep,\r\n windowWidth,\r\n isMobile,\r\n showAdvancedQuoting,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(MaterialsWizardFooterSteps)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport $ from \"jquery\";\r\n\r\nimport {togglePulseFeatureInfoQuantity} from \"../../../actions/actionFunctions\";\r\nimport {toggleProductNoteEditorVisible} from \"../../../actions/selectionFunctions\";\r\nimport {getCartItemObject} from \"../../../misc/helpers\";\r\n\r\n\r\nexport default (WrappedComponent) => {\r\n\r\n const WithMaterialsWizardFooterCommon = (props) => {\r\n\r\n const {selectionInfoQuantity, selectionFeatureInfo, togglePulseFeatureInfoQuantity, toggleProductNoteEditorVisible,\r\n relatedGroups, qtActiveCategory, selectionGroup} = props;\r\n\r\n const quantityIsZero = () => {\r\n if (!selectionInfoQuantity && selectionFeatureInfo && !selectionFeatureInfo.dbFeature.hideQuantity) {\r\n togglePulseFeatureInfoQuantity(true);\r\n toggleProductNoteEditorVisible(false); // exit add note mode\r\n const $scrollableInfoArea = $(\".selection-main__info-scrollable\");\r\n if ($scrollableInfoArea) {\r\n $scrollableInfoArea.animate({scrollTop: 0}, 500);\r\n }\r\n return true;\r\n }\r\n return false\r\n }\r\n\r\n const getCartFeatureParentName = (activeFeature) => {\r\n let parentName = selectionGroup;\r\n if (activeFeature.getParent) {\r\n const subPart = activeFeature.getParent();\r\n parentName = subPart.getParent ? subPart.getParent().partName : subPart.partName\r\n }\r\n return parentName\r\n }\r\n\r\n const getCurrentRelatedCartItems = (activeFeature, arrayToAddtoTheCart = []) => {\r\n if (Array.isArray(relatedGroups) && relatedGroups.length) {\r\n relatedGroups.forEach(relatedGroup => {\r\n relatedGroup.relatedFeatures.forEach(relatedFeature => {\r\n if (relatedFeature.cartQuantity) {\r\n const relatedItemCartObject = getCartItemObject(relatedFeature, relatedFeature.cartQuantity, qtActiveCategory);\r\n relatedItemCartObject.relatedProductParent = activeFeature;\r\n arrayToAddtoTheCart.push(relatedItemCartObject)\r\n }\r\n });\r\n });\r\n }\r\n return arrayToAddtoTheCart\r\n }\r\n\r\n return \r\n\r\n };\r\n\r\n const mapStateToProps = (store) => {\r\n const {selectionFeatureInfo, selectionInfoQuantity, relatedGroups, selectionGroup} = store.selectionState;\r\n const {qtActiveCategory} = store.qtState;\r\n\r\n return {\r\n selectionFeatureInfo,\r\n selectionInfoQuantity,\r\n relatedGroups,\r\n qtActiveCategory,\r\n selectionGroup,\r\n };\r\n };\r\n\r\n const mapDispatchToProps = {\r\n togglePulseFeatureInfoQuantity,\r\n toggleProductNoteEditorVisible,\r\n };\r\n\r\n return connect(mapStateToProps, mapDispatchToProps)(WithMaterialsWizardFooterCommon)\r\n}\r\n","import React, {Fragment} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport {hashHistory} from \"react-router\";\r\nimport size from 'lodash/size';\r\nimport flatMap from 'lodash/flatMap';\r\nimport filter from 'lodash/filter';\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport {\r\n removeFromCart,\r\n toggleSelectionWindow,\r\n changeStateToQuote,\r\n setQtActiveCategory,\r\n changeActivePartRelatedItemIndex\r\n} from \"../../actions/actionFunctions\";\r\nimport {\r\n getCurrencySign,\r\n getFeatureGroupName, getPriceWithCurrency,\r\n getRoomName,\r\n getTotalPrice,\r\n toFixedPrice\r\n} from \"../../misc/helpers\";\r\nimport Analytics from './../../analytics';\r\nimport CommonFeatureItemsMethods from \"../visComponents/commonFeatureItemsMethods\";\r\nimport ChangeRoomButton from \"./changeRoomButton\";\r\nimport ShoppingCartItemsListItem from \"./shoppingCartItemsListItem\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport {changeQTRoutePath, changeRoutePath} from \"../../misc/changeRoutePath\";\r\nimport ShoppingCartDiscountsList from \"./shoppingCartDiscountsList\";\r\nimport ShoppingCartItemsListInstallationItem from \"./shoppingCartItemsListInstallationItem\";\r\nimport AdvancedQuotingList from \"./advancedQuoting/advancedQuotingList\";\r\nimport {setActiveQuoteIndex} from \"../../actions/roomsFunctions\";\r\nimport SimilarProducts from \"./similarProducts/similarProducts\";\r\nimport {SQFT_FEATURES} from \"../sqft/constants\";\r\nimport {showWizardInsteadOfQT} from \"../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {WIZARD_GROUP_TYPES} from \"../../interfaces/wizardItemInterface\";\r\nimport ShoppingCartItemsListWizardCustomItem from \"./shoppingCartItemsListWizardCustomItem\";\r\nimport {setNewActiveQuote} from \"../../misc/quotesFunctions\";\r\nimport LoadingSpinner from \"../ui/loadingSpinner\";\r\nimport {getDifferentCurrencyCartItems} from \"../../misc/misc2\";\r\nimport {switchToNewVisualizerType} from \"../../misc/visualizerSwitchingFunctions\";\r\nimport goToMaterialPage from \"../common/goToMaterialPage\";\r\nimport {getWizardGroupName} from \"../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\nimport TextInput from \"../ui/textInput\";\r\n\r\nclass ShoppingCartItemsList extends CommonFeatureItemsMethods {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {}\r\n }\r\n\r\n componentDidMount() {\r\n this.props.changeStateToQuote();\r\n }\r\n\r\n shouldComponentUpdate(nextProps) {\r\n return !nextProps.showAssignQuotePopup;\r\n }\r\n\r\n switchToMaterialsPageGroup = async (listItem, quoteIndex, cartItem = null) => {\r\n const {selectionGroup, featureGroupName, featureGroup} = listItem;\r\n Analytics.sendClickEvent(cartItem ? \"shopping-cart-edit-feature\" : \"shopping-cart-items-go-to-materials\");\r\n const {activeQuoteIndex, setActiveQuoteIndex} = this.props;\r\n if (cartItem && (cartItem.fromVisualizerType !== document.kvConfig.visualizerType)) {\r\n await switchToNewVisualizerType(cartItem.fromVisualizerType);\r\n // this.props.setActionAfterVisualizerTypeIsChanged();\r\n }\r\n if (quoteIndex !== activeQuoteIndex) {\r\n await setNewActiveQuote(quoteIndex);\r\n await setActiveQuoteIndex(quoteIndex);\r\n }\r\n if (featureGroup) {\r\n // const switchToProduct = cartItem.relatedProductParent || cartItem.cartFeature;\r\n let wizardAllObject = null;\r\n let stepIndex = 0;\r\n if (cartItem && cartItem.fromWizardId) {\r\n wizardAllObject = {wizardItemId: cartItem.fromWizardId, quoteIndex};\r\n stepIndex = cartItem.fromWizardStep;\r\n }\r\n goToMaterialPage(\"shoppingcart\", false, {part: featureGroup}, \"\", wizardAllObject, stepIndex);\r\n return\r\n }\r\n const layout = getCurrentLayout();\r\n if (layout.qtCategories) {\r\n let subPartIndex = 0;\r\n const neededQtCat = layout.qtCategories.find(qtCat => {\r\n const sIndex = qtCat.defaultSubParts.findIndex(sPart => {\r\n return (sPart.part.customGroupDisplayName || sPart.text) === featureGroupName\r\n })\r\n if (sIndex > -1) {\r\n subPartIndex = sIndex\r\n return true\r\n }\r\n return false\r\n }) || layout.qtCategories[0];\r\n this.props.setQtActiveCategory(neededQtCat.name);\r\n this.props.changeActivePartRelatedItemIndex(subPartIndex);\r\n changeQTRoutePath(neededQtCat.name, subPartIndex);\r\n } else {\r\n this.props.toggleSelectionWindow(true, selectionGroup);\r\n const parentGroup = layout.parts[selectionGroup];\r\n if (parentGroup) {\r\n const subPartIndex = parentGroup.subParts().findIndex(sPart => {\r\n return (sPart.part.customGroupDisplayName || sPart.text) === featureGroupName\r\n })\r\n changeRoutePath(parentGroup, subPartIndex > -1 ? subPartIndex : 0)\r\n } else {\r\n hashHistory.push('materials');\r\n }\r\n }\r\n };\r\n\r\n setFeatureGroupCustomName = (featureGroup, quoteIndex = 0, value) => {\r\n if (!featureGroup.customNames) {\r\n featureGroup.customNames = {}\r\n }\r\n featureGroup.customNames[quoteIndex] = value;\r\n this.forceUpdate();\r\n }\r\n\r\n createCommonParentsList = () => {\r\n const {quotes, cartItems, activeQuoteIndex, showAllQuotesCartItemsList, intl, fabricatorData, wizardList,\r\n wizardIsActive, allWizardsValues} = this.props;\r\n const isWizard = showWizardInsteadOfQT(wizardList, wizardIsActive);\r\n let quotesList = {}; // {quoteIndex: ArrayOf({parentName: \"\", cartItem})}\r\n quotes.forEach((quote, quoteIndex) => {\r\n\r\n const layout = getCurrentLayout(fabricatorData.settings.allowVisualizerSwitching && quote.room ? quote.room : document.kvConfig.visualizerType);\r\n\r\n const cartList = []; //ArrayOf({parentName: \"\", cartItem})\r\n const quoteCartItems = cartItems.filter((cartItem) => cartItem.cartFeature && (cartItem.currentQuote === quoteIndex));\r\n if (showAllQuotesCartItemsList || quoteIndex === activeQuoteIndex) {\r\n let uniqueCartItemIds = [];\r\n\r\n const addToCartList = (cartItem, wizardGroup, wizardItemId) => {\r\n //todo get slab parentGroup and remove displayFakeFeatureGroupName\r\n const parentGroup = cartItem.cartFeature.getParent\r\n ? cartItem.cartFeature.getParent()\r\n : layout.getFeatureGroupByPartId(cartItem.cartFeature.partId);\r\n let featureGroupName;\r\n let featureGroupDisplayName;\r\n\r\n if (cartItem.displayFakeFeatureGroupName) {\r\n featureGroupName = cartItem.displayFakeFeatureGroupName;\r\n featureGroupDisplayName = intl.formatMessage({id: \"sqftFeaturesPopup.title.\" + cartItem.displayFakeFeatureGroupName});\r\n } else {\r\n featureGroupName = parentGroup ? parentGroup.customGroupDisplayName || parentGroup.partName : cartItem.selectionGroup;\r\n if (wizardGroup) {\r\n featureGroupDisplayName = getWizardGroupName(wizardGroup);\r\n }\r\n if (!featureGroupDisplayName || !wizardGroup) {\r\n featureGroupDisplayName = parentGroup ? getFeatureGroupName(parentGroup, intl, fabricatorData) : cartItem.selectionGroup;\r\n }\r\n }\r\n\r\n const parent = cartList.find(listItem => {\r\n if (isWizard && cartItem.fromWizardGroupId) {\r\n return listItem.wizardGroupId === cartItem.fromWizardGroupId && (listItem.wizardItemId === cartItem.fromWizardId)\r\n }\r\n return listItem.featureGroupName === featureGroupName\r\n });\r\n if (parent) {\r\n parent.cartItems.push(cartItem);\r\n } else {\r\n cartList.push({\r\n featureGroupName,\r\n featureGroupDisplayName,\r\n selectionGroup: cartItem.selectionGroup,\r\n cartItems: [cartItem],\r\n featureGroup: parentGroup,\r\n wizardGroupId: wizardGroup ? wizardGroup.id : null,\r\n wizardItemId,\r\n });\r\n }\r\n };\r\n\r\n if (isWizard) {\r\n wizardList.forEach(wizardItem => {\r\n const existingAllObject = allWizardsValues.find(wizSelObject => {\r\n return wizSelObject.wizardItemId === wizardItem.id && wizSelObject.quoteIndex === quoteIndex\r\n });\r\n if (existingAllObject && existingAllObject.wizardSelectedValues) {\r\n Object.keys(existingAllObject.wizardSelectedValues).forEach(key => {\r\n const wizardGroup = existingAllObject.wizardSelectedValues[key].wizardGroup\r\n if (wizardGroup && wizardGroup.nodeType === WIZARD_GROUP_TYPES.custom && !wizardGroup.hideInCartAndReceipt) {\r\n cartList.push({\r\n type: WIZARD_GROUP_TYPES.custom,\r\n wizardSelectedValue: existingAllObject.wizardSelectedValues[key],\r\n wizardAllObject: existingAllObject,\r\n stepIndex: key,\r\n wizardGroup,\r\n });\r\n return\r\n }\r\n let currentCartItems = cartItems.filter(cartItem => {\r\n if (cartItem.bundleParentId) {\r\n return false\r\n }\r\n return cartItem.cartFeature && (cartItem.currentQuote === quoteIndex)\r\n && (wizardGroup && cartItem.fromWizardGroupId\r\n ? (wizardGroup.id === cartItem.fromWizardGroupId)\r\n : +key === cartItem.fromWizardStep)\r\n && !uniqueCartItemIds.includes(cartItem.id)\r\n });\r\n if (currentCartItems.length) {\r\n uniqueCartItemIds = [...uniqueCartItemIds, ...currentCartItems.map(cItem => cItem.id)];\r\n currentCartItems.forEach((cartItem) => addToCartList(cartItem, wizardGroup, wizardItem.id))\r\n // } else if (wizardGroup && !wizardGroup.hideInCartAndReceipt) {\r\n // cartList.push({\r\n // type: WIZARD_GROUP_TYPES.custom,\r\n // wizardSelectedValue: existingAllObject.wizardSelectedValues[key],\r\n // wizardAllObject: existingAllObject,\r\n // stepIndex: key,\r\n // wizardGroup,\r\n // });\r\n }\r\n })\r\n }\r\n });\r\n quoteCartItems.forEach((cartItem) => {\r\n if (!uniqueCartItemIds.includes(cartItem.id) && !cartItem.bundleParentId) {\r\n uniqueCartItemIds.push(cartItem.id);\r\n addToCartList(cartItem)\r\n }\r\n });\r\n } else if (layout.qtCategories) {\r\n layout.qtCategories.forEach(qtCategory => {\r\n qtCategory.subParts.forEach((subPart) => {\r\n let currentCartItems = cartItems.filter(cartItem => {\r\n if (cartItem.bundleParentId) {\r\n return false\r\n }\r\n return cartItem.cartFeature && (cartItem.currentQuote === quoteIndex)\r\n && (subPart.part.partId === cartItem.partId || (cartItem.relatedProductParent && subPart.part.partId === cartItem.relatedProductParent.partId))\r\n && !uniqueCartItemIds.includes(cartItem.id)\r\n });\r\n if (currentCartItems.length) {\r\n uniqueCartItemIds = [...uniqueCartItemIds, ...currentCartItems.map(cItem => cItem.id)];\r\n currentCartItems.forEach((cartItem) => addToCartList(cartItem))\r\n }\r\n })\r\n });\r\n quoteCartItems.forEach((cartItem) => {\r\n if (!uniqueCartItemIds.includes(cartItem.id) && !cartItem.bundleParentId) {\r\n uniqueCartItemIds.push(cartItem.id);\r\n addToCartList(cartItem)\r\n }\r\n })\r\n } else {\r\n quoteCartItems.forEach((cartItem) => addToCartList(cartItem))\r\n }\r\n cartList.push({\r\n type: \"similar\",\r\n quoteIndex\r\n });\r\n if (showAllQuotesCartItemsList) {\r\n cartList.push({\r\n type: \"subTotal\",\r\n quoteIndex\r\n });\r\n }\r\n }\r\n quotesList[quoteIndex] = cartList\r\n });\r\n // console.log(\"quotesList\", quotesList);\r\n return quotesList\r\n };\r\n\r\n getCartItemsList = (isMobile, fabricatorData, fabricatorSettings) => {\r\n const {cartItems, showAllQuotesCartItemsList, isPhoneNumberValidated, quotes, intl} = this.props;\r\n if (!cartItems.length) {\r\n // if (!cartItems.length || (Object.keys(quotesList).every(quoteIndex => !quotesList[quoteIndex].length))) {\r\n return (\r\n

    \r\n \r\n

    \r\n )\r\n }\r\n const quotesList = this.createCommonParentsList();\r\n const quotesListArray = Object.keys(quotesList);\r\n\r\n const {isBackend, jobId, canSaveQuote} = document.kvConfig;\r\n const pricingIsLocked = (fabricatorSettings.leadCaptureOnQuote || fabricatorSettings.leadCaptureShoppingCart)\r\n && !(isBackend && jobId && canSaveQuote) && !isPhoneNumberValidated;\r\n\r\n return quotesListArray.map(quoteIndex => {\r\n return (\r\n
    1) ? \" scart-room--bordered\" : \"\")} key={quoteIndex}>\r\n {showAllQuotesCartItemsList && (quotesListArray.length > 1) ? (\r\n

    \r\n : {getRoomName(quoteIndex, cartItems, quotes, intl.messages, intl.locale, fabricatorData)}\r\n

    \r\n ) : null}\r\n {quotesList[quoteIndex].map((listItem, index) => {\r\n if (this.props.showUnlockCalculations && listItem.cartItems && !listItem.cartItems.some(cartItem => {\r\n return this.props.showCartItems.includes(cartItem.id)\r\n })) {\r\n return false\r\n }\r\n if (listItem.type === \"subTotal\") {\r\n const quoteTotalPrice = getTotalPrice(listItem.quoteIndex, false);\r\n if (fabricatorData.isAmericanImport || (this.props.showUnlockCalculations && (this.props.unlockCalculationsStep < 2))) {\r\n return null\r\n }\r\n const quoteCartItems = fabricatorSettings.useDifferentCurrencies ? cartItems.filter(cartItem => cartItem.currentQuote === listItem.quoteIndex) : [];\r\n const differentCurrencyObjects = getDifferentCurrencyCartItems(fabricatorSettings, quoteCartItems);\r\n\r\n return (\r\n
    \r\n {differentCurrencyObjects.length ? differentCurrencyObjects.map(currObject => {\r\n const currentTotal = getTotalPrice(listItem.quoteIndex, false, currObject.cartItems);\r\n return (\r\n
    listItem.type === \"subTotal\") ? \" scart-block__subtotal--only\" : \"\"\r\n )}>\r\n : \r\n {pricingIsLocked ? (\r\n \r\n \r\n \r\n ) : getCurrencySign(currObject.currency, fabricatorSettings) + toFixedPrice(currentTotal.materialPrice, true)}\r\n
    \r\n )\r\n }) : null}\r\n
    listItem.type === \"subTotal\") ? \" scart-block__subtotal--only\" : \"\"\r\n )}>\r\n : \r\n {pricingIsLocked ? (\r\n \r\n \r\n \r\n ) : getPriceWithCurrency(fabricatorSettings, toFixedPrice(quoteTotalPrice.materialPrice))}\r\n
    \r\n
    \r\n )\r\n } else if (listItem.type === \"similar\") {\r\n return \r\n } else if (listItem.type === WIZARD_GROUP_TYPES.custom) {\r\n return \r\n }\r\n const isAddMoreDisabled = listItem.featureGroupName === SQFT_FEATURES.slabs;\r\n\r\n const editFeatureGroupClick = (event, editCartItem = null) => {\r\n if (!editCartItem && listItem.cartItems.length && listItem.cartItems[0].fromWizardId) {\r\n editCartItem = listItem.cartItems[0];\r\n }\r\n this.switchToMaterialsPageGroup(listItem, +quoteIndex, editCartItem)\r\n }\r\n // console.log(\"listItem\", listItem);\r\n return (\r\n
    \r\n
    \r\n {document.kvConfig.isBackend && listItem.featureGroup\r\n ? this.setFeatureGroupCustomName(listItem.featureGroup, quoteIndex, value)}\r\n value={listItem.featureGroup.customNames && listItem.featureGroup.customNames[quoteIndex]\r\n ? listItem.featureGroup.customNames[quoteIndex]\r\n : listItem.featureGroupDisplayName}/>\r\n : listItem.featureGroupDisplayName}\r\n
    \r\n {\r\n isAddMoreDisabled\r\n ? null\r\n : \r\n }\r\n
      \r\n {listItem.cartItems.map((cartItem, index2) => {\r\n return \r\n })}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n )\r\n })\r\n };\r\n\r\n getInstallations = (isMobile, fabricatorData, fabricatorSettings, installations) => {\r\n\r\n const showInstallations = size(installations) && fabricatorSettings.separateLaborInCart\r\n && (!this.props.showUnlockCalculations || (this.props.unlockCalculationsStep >= 2));\r\n\r\n if (showInstallations) {\r\n return (\r\n
    \r\n

    \r\n \r\n

    \r\n
      \r\n {installations.map((instItem, instItemIndex) => {\r\n return \r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n return null\r\n };\r\n\r\n getTaxes = (isMobile, totalPrice, fabricatorSettings, sureTaxLoading) => {\r\n if (isMobile && this.props.cartItems.length && this.props.isPhoneNumberValidated) {\r\n\r\n if (sureTaxLoading) {\r\n return (\r\n
    \r\n

    \r\n
      \r\n
    • \r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n
    • \r\n
    \r\n
    \r\n )\r\n }\r\n\r\n let allTaxes = totalPrice.priceTaxes.length\r\n ? totalPrice.priceTaxes\r\n : [{name: \"\", materialTax: totalPrice.materialTaxes}];\r\n\r\n const showTaxes = allTaxes.some(tax => tax.materialTax > 0);\r\n\r\n return (\r\n \r\n {showTaxes || ((allTaxes.length === 1) && fabricatorSettings.sureTax) ? allTaxes.map((taxObject, taxObjectIndex) => {\r\n const taxTotal = taxObject.materialTax.toFixed(2); // always round to 23.65, even if it is 23.00\r\n return (\r\n
    \r\n

    {taxObject.state || }

    \r\n
      \r\n
    • \r\n
      \r\n
      \r\n \r\n {getPriceWithCurrency(fabricatorSettings, taxTotal)}\r\n \r\n
      \r\n
      \r\n
    • \r\n
    \r\n
    \r\n )\r\n }) : null}\r\n {totalPrice.installationTaxes ? (\r\n
    \r\n

    \r\n
      \r\n
    • \r\n
      \r\n
      \r\n \r\n {getPriceWithCurrency(fabricatorSettings, totalPrice.installationTaxes.toFixed(2))}\r\n \r\n
      \r\n
      \r\n
    • \r\n
    \r\n
    \r\n ) : null}\r\n
    \r\n )\r\n }\r\n return null\r\n };\r\n\r\n render() {\r\n\r\n const isMobile = this.props.windowWidth < 991;\r\n const totalPrice = getTotalPrice();\r\n const {fabricatorData, installations, showAdvancedQuoting, sureTaxLoading, cartItems} = this.props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n // console.log(\"this.props.cartItems\", this.props.cartItems);\r\n\r\n return (\r\n
    \r\n {showAdvancedQuoting ? : this.getCartItemsList(isMobile, fabricatorData, fabricatorSettings)}\r\n {this.getInstallations(isMobile, fabricatorData, fabricatorSettings, installations)}\r\n {this.getTaxes(isMobile, totalPrice, fabricatorSettings, sureTaxLoading)}\r\n {cartItems.length ? : null}\r\n {document.kvConfig.initialFlowEnabled ? : null}\r\n
    \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const installations = flatMap(store.instState.instList, i => filter(i.services, {selected: true}));\r\n const {wizardList, wizardIsActive, allWizardsValues} = store.wizardState;\r\n const {sureTaxLoading} = store.cartState;\r\n return {\r\n cartItems: store.cartState.cartItems,\r\n installations,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n layoutParts: store.stepsState.layoutParts,\r\n questionNoClicked: store.cartState.questionNoClicked,\r\n windowWidth: store.serverState.windowWidth,\r\n fabricatorData: store.fabricatorState,\r\n showUnlockCalculations: store.unlockCalculationsState.showUnlockCalculations,\r\n unlockCalculationsStep: store.unlockCalculationsState.unlockCalculationsStep,\r\n showCartItems: store.unlockCalculationsState.showCartItems,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n quotes: store.quotesState.quotes,\r\n showAllQuotesCartItemsList: store.cartState.showAllQuotesCartItemsList,\r\n showAdvancedQuoting: store.advancedQuotingState.showAdvancedQuoting,\r\n wizardList,\r\n wizardIsActive,\r\n allWizardsValues,\r\n showAssignQuotePopup: store.assignQuoteState.showAssignQuotePopup,\r\n sureTaxLoading,\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n removeFromCart,\r\n toggleSelectionWindow,\r\n changeStateToQuote,\r\n setQtActiveCategory,\r\n changeActivePartRelatedItemIndex,\r\n setActiveQuoteIndex\r\n}\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(ShoppingCartItemsList)\r\n);\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport $ from \"jquery\";\r\n\r\nimport {\r\n removeFromCart,\r\n changeMessageBoxState,\r\n toggleUserPopup,\r\n setQtActiveCategory,\r\n changeActivePartRelatedItemIndex,\r\n toggleSelectionWindow,\r\n toggleSelectionFeatureInfo,\r\n toggleBathroomVisualizerOpen, setCameFromPage\r\n} from \"../../actions/actionFunctions\";\r\nimport {\r\n detectComplexLaborCartItem, getCartItemUnit,\r\n getFeatureIsLocked,\r\n getFeatureUnit, getTotalPrice,\r\n toFixedFeatureCost,\r\n toFixedPrice\r\n} from \"../../misc/helpers\";\r\nimport CommonFeatureItemsMethods from \"../visComponents/commonFeatureItemsMethods\";\r\nimport PriceInput from \"./priceInput\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport {checkIfInCatProperty} from \"../../misc/displayLogic\";\r\nimport NoteEditor from \"./noteEditor\";\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport {cartItemInterface} from \"./cartItemInterface\";\r\nimport FeatureName from \"../visComponents/featureName\";\r\nimport {setActiveQuoteIndex} from \"../../actions/roomsFunctions\";\r\nimport Config from \"../../config\";\r\nimport {setCartItemEditFeature} from \"../../actions/shoppingCartFunctions\";\r\nimport {getPriceWithIncluded} from \"../../misc/priceFunctions\";\r\nimport {getWizardGroupFromCurrentSteps} from \"../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\n// import {setActionAfterVisualizerTypeIsChanged} from \"../../actions/serverFunctions\";\r\nimport {deleteCartItemFromSQFTCalcData, updateCurrentQuote} from \"../../misc/quotesFunctions\";\r\nimport ShoppingCartItemsBundledProducts from \"./shoppingCartItemsBundledProducts\";\r\nimport {SQFT_FEATURES} from \"../sqft/constants\";\r\n// import {COUNTERTOP_GROUP} from \"../kvComponent/core/constants\";\r\n// import {MEASURE_UNITS} from \"../sqft/constants\";\r\n\r\nclass ShoppingCartItemsListItem extends CommonFeatureItemsMethods {\r\n\r\n static propTypes = {\r\n cartItem: PropTypes.shape(cartItemInterface).isRequired,\r\n editFeatureGroupClick: PropTypes.func.isRequired,\r\n isBundleChild: PropTypes.bool,\r\n }\r\n\r\n state = {\r\n editorVisible: false,\r\n editorCanRender: true\r\n }\r\n\r\n componentDidMount() {\r\n $(window).on(ActionTypes.UPDATE_ALL_ITEMS, this.handleRefresh);\r\n }\r\n\r\n componentWillUnmount() {\r\n $(window).off(ActionTypes.UPDATE_ALL_ITEMS, this.handleRefresh);\r\n window.removeEventListener('click', this.handleWrapperBlur);\r\n }\r\n\r\n shouldComponentUpdate(nextProps) {\r\n return !nextProps.showAssignQuotePopup;\r\n }\r\n\r\n handleRefresh = () => {\r\n this.setState({\r\n editorVisible: false,\r\n editorCanRender: false\r\n }, () => {\r\n this.setState({\r\n editorCanRender: true\r\n })\r\n });\r\n this.forceUpdate();\r\n }\r\n\r\n handleRemoveClick = () => {\r\n const {cartItem, fabricatorData} = this.props;\r\n this.props.changeMessageBoxState({\r\n visible: true,\r\n message: {\r\n id: \"shoppingCart.fetureInCartRemovePopupQuestion\",\r\n featureName: cartItem.cartFeature.getFeatureName()\r\n },\r\n buttons: [{\r\n text: \"shoppingCart.fetureInCartRemovePopupNo\",\r\n color: \"blue\",\r\n click: () => {\r\n this.props.changeMessageBoxState({visible: false});\r\n }\r\n }, {\r\n text: \"shoppingCart.fetureInCartRemovePopupYes\",\r\n color: \"green\",\r\n click: async () => {\r\n this.props.removeFromCart(cartItem);\r\n this.props.changeMessageBoxState({visible: false});\r\n if (fabricatorData.settings.useCategorySwitching) {\r\n await updateCurrentQuote(cartItem.currentQuote, undefined, false);\r\n }\r\n deleteCartItemFromSQFTCalcData(cartItem).then(r => void r);\r\n }\r\n }]\r\n });\r\n };\r\n\r\n handleEditClick = () => {\r\n const {cartItem} = this.props;\r\n this.props.editFeatureGroupClick(null, cartItem);\r\n this.props.setCartItemEditFeature(cartItem);\r\n };\r\n\r\n handleAddNoteClick = () => {\r\n this.setState({\r\n editorVisible: !this.state.editorVisible\r\n }, () => {\r\n setTimeout(() => {\r\n this.state.editorVisible\r\n ? window.addEventListener('click', this.handleWrapperBlur)\r\n : window.removeEventListener('click', this.handleWrapperBlur)\r\n }, 0)\r\n })\r\n };\r\n\r\n handleWrapperBlur = (e) => {\r\n const disallowClasses = [\".product-note\", \".link--note\"];\r\n if (this.state.editorVisible && !disallowClasses.some(cls => e.target.closest(cls))) {\r\n this.setState({\r\n editorVisible: false\r\n })\r\n }\r\n };\r\n\r\n onNoteSave = () => {\r\n this.handleAddNoteClick();\r\n };\r\n\r\n toggleUserPopup = () => {\r\n this.props.toggleUserPopup({\r\n userPopupOpened: true\r\n })\r\n };\r\n\r\n render() {\r\n\r\n const layout = getCurrentLayout();\r\n const editingPriceAvailable = Config.isDevMode();\r\n\r\n const isMobile = this.props.windowWidth < 991;\r\n const {fabricatorData, cartItem, activeQuoteIndex, intl, wizardList, allWizardsValues, cartItems, isBundleChild,\r\n isSlabPricingEnabled} = this.props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n if (this.props.showUnlockCalculations && !this.props.showCartItems.includes(cartItem.id)) {\r\n return false\r\n }\r\n const subPartName = cartItem.cartFeature.getParent ? cartItem.cartFeature.getParent().partName : \"\";\r\n let showPrice = false;\r\n let priceTotal = null;\r\n const priceIsLocked = getFeatureIsLocked(cartItem.cartFeature);\r\n if (fabricatorSettings.showPricing && !fabricatorData.hideCheckoutBreakdownCost && !fabricatorData.hidePricesFromUser) {\r\n const isComplexMultipliedUsed = detectComplexLaborCartItem(cartItem) && getTotalPrice().multipliedCostUsed;\r\n if (isComplexMultipliedUsed || cartItem.displayFakePrice === 0) {\r\n priceTotal = null\r\n } else {\r\n // not sure if we need displayFakePrice?\r\n // priceTotal = cartItem.displayFakePrice ? cartItem.displayFakePrice :\r\n // toFixedFeatureCost(cartItem.cartFeature, cartItem.quantity, cartItem.fromQtCategory, true, cartItem, cartItem.shouldUseSlabPricing);\r\n const shouldUseSlabPricing = cartItem.partId === SQFT_FEATURES.slabs && isSlabPricingEnabled;\r\n priceTotal = toFixedFeatureCost(\r\n cartItem.cartFeature,\r\n cartItem.quantity,\r\n cartItem.fromQtCategory,\r\n true,\r\n cartItem,\r\n shouldUseSlabPricing,\r\n cartItem.currentQuote\r\n );\r\n }\r\n showPrice = !priceIsLocked;\r\n }\r\n // const isEditable = !layout.qtCategories || cartItem.relatedProductParent ||(\r\n // layout.qtCategories.some(qtCategory => qtCategory.subParts && qtCategory.subParts.some(qtCatSubPart => {\r\n // return qtCatSubPart.part.partId === cartItem.cartFeature.partId\r\n // }))\r\n // );\r\n const featureUnit = getFeatureUnit(cartItem.cartFeature, intl, fabricatorData, cartItem.quantity);\r\n const cartItemUnit = getCartItemUnit(cartItem, intl);\r\n let isEditable = ![\"Slab\", \"Slabs\"].includes(cartItemUnit) && !isBundleChild; // always editable except slab, all logic is inside switchToFeatureInfo method\r\n if (cartItem.fromWizardGroupId && allWizardsValues) {\r\n const neededObject = allWizardsValues.find(wizValueObject => (wizValueObject.quoteIndex === cartItem.currentQuote)\r\n && (wizValueObject.wizardItemId === cartItem.fromWizardId));\r\n const selectedWizValues = neededObject && neededObject.wizardSelectedValues ? neededObject.wizardSelectedValues : null;\r\n const wizardItem = wizardList.find(wizItem => wizItem.id === cartItem.fromWizardId);\r\n const {neededStep} = getWizardGroupFromCurrentSteps(wizardItem, selectedWizValues, cartItem.fromWizardGroupId);\r\n if (!neededStep) {\r\n isEditable = false;\r\n }\r\n }\r\n const unit = cartItemUnit ? cartItemUnit : featureUnit;\r\n const getItemTitle = () => {\r\n let itemTitle;\r\n if (cartItem.cartFeature.inCatProperties) {\r\n itemTitle = checkIfInCatProperty(cartItem.cartFeature, \"inCatName\", cartItem.cartFeature.getFeatureName(), cartItem.fromQtCategory)\r\n }\r\n\r\n return itemTitle ? itemTitle : \r\n }\r\n\r\n const hasBundleProducts = cartItems.some(cItem => cItem.bundleParentId === cartItem.id);\r\n\r\n return (\r\n
  • \r\n
    \r\n
    \r\n

    \r\n {subPartName && !layout.qtCategories ? subPartName + \" - \" : null}\r\n { getItemTitle() }\r\n

    \r\n {cartItem.description ? (\r\n

    \r\n ) : null}\r\n {cartItem.isMinimumCharge && !cartItem.isMinimumChargeItems ? null : (\r\n

    \r\n {showPrice && isMobile ? (\r\n \r\n {getPriceWithIncluded(priceTotal, cartItem.cartFeature, fabricatorData, intl.messages)}\r\n \r\n ) : null}\r\n {priceIsLocked && isMobile ? (\r\n \r\n \r\n \r\n ) : null}\r\n {fabricatorSettings.useCategorySwitching && cartItem.partId === \"room\" ? null : (\r\n \r\n {unit}: {\r\n toFixedPrice(parseFloat(cartItem.displayFakeQuantity) === cartItem.displayFakeQuantity\r\n ? cartItem.displayFakeQuantity\r\n : cartItem.quantity, fabricatorSettings.useDifferentCurrencies)\r\n }\r\n \r\n )}\r\n
    \r\n )}\r\n
    \r\n {isMobile && !cartItem.isMinimumCharge && !cartItem.isAddedFromDisplayLogic ? (\r\n
    \r\n
    \r\n ) : cartItem.isMinimumCharge || cartItem.isAddedFromDisplayLogic ? null : (\r\n
    \r\n \r\n {cartItem.cartFeature.notesList[activeQuoteIndex]\r\n ? \r\n : }\r\n \r\n {isEditable ? (\r\n \r\n \r\n \r\n ) : null}\r\n \r\n \r\n \r\n
    \r\n )\r\n }\r\n {!isMobile ? (\r\n
    \r\n\r\n {showPrice\r\n ? editingPriceAvailable\r\n ? \r\n : (\r\n {getPriceWithIncluded(priceTotal, cartItem.cartFeature, fabricatorData, intl.messages)}\r\n )\r\n : null}\r\n {priceIsLocked ? (\r\n \r\n \r\n \r\n ) : null}\r\n
    \r\n ) : null}\r\n
    \r\n {this.state.editorCanRender && !cartItem.isMinimumCharge && !cartItem.isAddedFromDisplayLogic ? (\r\n \r\n ) : null}\r\n {hasBundleProducts ? : null}\r\n
  • \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {allWizardsValues, wizardList} = store.wizardState;\r\n return {\r\n cartItems: store.cartState.cartItems,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n windowWidth: store.serverState.windowWidth,\r\n fabricatorData: store.fabricatorState,\r\n showUnlockCalculations: store.unlockCalculationsState.showUnlockCalculations,\r\n showCartItems: store.unlockCalculationsState.showCartItems,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n wizardList,\r\n allWizardsValues,\r\n showAssignQuotePopup: store.assignQuoteState.showAssignQuotePopup,\r\n isSlabPricingEnabled: store.sqftSlabState.isSlabPricingEnabled,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n removeFromCart,\r\n changeMessageBoxState,\r\n toggleUserPopup,\r\n setQtActiveCategory,\r\n /*** CommonFeatureItemsMethods needs next methods: ***/\r\n changeActivePartRelatedItemIndex,\r\n toggleSelectionWindow,\r\n toggleSelectionFeatureInfo,\r\n toggleBathroomVisualizerOpen,\r\n setCameFromPage,\r\n /*** CommonFeatureItemsMethods needs methods end ***/\r\n setActiveQuoteIndex,\r\n setCartItemEditFeature\r\n}\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(ShoppingCartItemsListItem)\r\n)\r\n","import React, {useEffect, useState} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport {changeCartFeature} from \"../../actions/actionFunctions\";\r\n\r\nconst NoteEditor = (props) => {\r\n\r\n let {intl, cartItem, closeEditor, editorVisible, cartItemId, dbFeatureId, quoteIndex, changeCartFeature} = props;\r\n const [noteText, setNoteText] = useState(\"\");\r\n\r\n useEffect(() => {\r\n setNoteText(cartItem.noteText || \"\");\r\n }, [cartItemId, dbFeatureId, quoteIndex]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n const onNoteChange = (e) => {\r\n setNoteText(e.target.value);\r\n if (!editorVisible) {\r\n onNoteSaveClick(); // set parent's editor visible\r\n }\r\n };\r\n\r\n const onNoteFocus = () => {\r\n if (noteText && !editorVisible) {\r\n onNoteSaveClick(); // set parent's editor visible\r\n }\r\n };\r\n\r\n const onBlur = () => {\r\n changeCartFeature(Object.assign({}, cartItem, {\r\n noteText\r\n }), true);\r\n };\r\n\r\n const onNoteSaveClick = () => {\r\n changeCartFeature(Object.assign({}, cartItem, {\r\n noteText\r\n }), true);\r\n closeEditor();\r\n };\r\n\r\n return (\r\n
    \r\n {/*

    {noteText}

    */}\r\n